package kandata.launcher;

import java.io.*;
import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import jp.ne.nifty.iga.midori.shell.io.*;
import jp.ne.nifty.iga.midori.shell.eng.MdShellEnv;


/**
 * サイト情報のリストボックス.
 * ToolTipsを場所によって変えたいため、JListを継承して独自のクラスを作る。
 */
class SiteListBox extends JList {

	private SiteCategory category;
	static SiteRenderer siteRenderer = new SiteRenderer();
	KandataLauncher launcher;
	private SiteListModel model;

	SiteListBox(KandataLauncher launcher, SiteCategory category) {
		this.launcher = launcher;
		this.category = category;

		model = new SiteListModel(category);
		this.setModel(model);
		this.setCellRenderer(siteRenderer);
		this.addMouseListener(new SiteListMouseListener(launcher));
		this.setToolTipText("ちっぷす");	// これを設定しないと、getToolTipText()が呼ばれない。
		this.setFixedCellHeight(40);	// 40dot
	}

	/** マウスのいる位置からツールチップに表示する文字列を返す. */
	public String getToolTipText(MouseEvent event) {
		// マウスのいる場所を調べる。
		int index = locationToIndex(event.getPoint());
		//System.out.println(index);
		if (index == -1) return null;
		Rectangle rect = getCellBounds(index, index);
		if ( ! rect.contains(event.getPoint()) ) return null;
		// サイトの情報を取ってくる
		Site site = category.getSiteInfo(index);
		return "<html>"+site.getName()+"<br>"+
			"<b>description</b>="+site.getDesc()+"<br>"+
			"<b>url</b>="+site.getUrl()+"<br>"+
			"<b>client type</b>="+site.getClientType()+"<br>"+
			"<b>version</b>="+site.getVersion()+"<br>";
	}

	/** モデルアダプタにデータの内容が変わったことを通知する。*/
	void fireChanged() {
		model.fireChanged();
	}
}
