// CheckBoxList.java
// Список с флажками
package net.sourceforge.ganttproject.gui.options;

import javax.swing.*;


import net.sourceforge.ganttproject.gui.options.model.BooleanOption;

import java.awt.*;
import java.awt.event.*;

public class JCheckBoxList extends JList {
	// сохраняем все конструкторы
	public JCheckBoxList(ListModel model) {
		super(model);
		initList();
	}
	public JCheckBoxList(Object[] data) {
		super(data);
		initList();
	}
	public JCheckBoxList(java.util.Vector data) {
		super(data);
		initList();
	}
	// специальная настройка списка
	private void initList() {
		setCellRenderer(new CheckBoxCellRenderer());
		setSelectionMode(
			ListSelectionModel.SINGLE_SELECTION);
		addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
			// следим за щелчками
			if ( e.getClickCount() == 1 &&
			SwingUtilities.isLeftMouseButton(e) ) {
					// нужный нам щелчок
					int pos = 
					  locationToIndex(e.getPoint());
					BooleanOption cbel =
						(BooleanOption)getModel().
							getElementAt(pos);
					cbel.toggle();
					repaint();
				}
			}
		});
	}
	// отображающий флажки объект
	public static class CheckBoxCellRenderer 
		 extends JCheckBox implements ListCellRenderer {
		public Component getListCellRendererComponent(
			JList list, Object data, int idx,
				boolean isSelected, boolean hasFocus) {
			// полагаем, что данные всегда нужного типа
			BooleanOption
				cbel = (BooleanOption)data;
			// настраиваем флажок
			if ( isSelected ) {
				setBackground(list.getSelectionBackground());
				setForeground(list.getSelectionForeground());
			} else {
				setBackground(list.getBackground());
				setForeground(list.getForeground());
			}
			setSelected(cbel.isChecked());
			setText(cbel.getID());
			setMaximumSize(new Dimension(300, getPreferredSize().height));
			return this;
		}
	}
}

