/*FreeMind - A Program for creating and viewing Mindmaps *Copyright (C) 2000-2006 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitri Polivaev and others. * *See COPYING for Details * *This program is free software; you can redistribute it and/or *modify it under the terms of the GNU General Public License *as published by the Free Software Foundation; either version 2 *of the License, or (at your option) any later version. * *This program is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *GNU General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program; if not, write to the Free Software *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Created on 08.10.2005 * Copyright (C) 2005 Dimitri Polivaev */ package freemind.modes.mindmapmode.attributeactors; import java.awt.Component; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.AbstractCellEditor; import javax.swing.Action; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableModel; import freemind.controller.filter.util.SortedListModel; import freemind.main.Resources; /** * @author Dimitri Polivaev 08.10.2005 */ class AttributeRegistryTable extends JTable { static private class ButtonEditor extends AbstractCellEditor implements TableCellEditor { final private JButton editButton; public ButtonEditor(Icon image) { editButton = new JButton(image); editButton.setFocusable(false); } public ButtonEditor(Action action) { editButton = new JButton(action); editButton.setFocusable(false); } private Object value; /* * (non-Javadoc) * * @see * javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax * .swing.JTable, java.lang.Object, boolean, int, int) */ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { this.value = value; return editButton; } /* * (non-Javadoc) * * @see javax.swing.CellEditor#getCellEditorValue() */ public Object getCellEditorValue() { return value; } public void setAction(Action a) { editButton.setAction(a); } } static private class ButtonRenderer implements TableCellRenderer { public ButtonRenderer(Icon image, String toolTip) { renderingEditButton = new JButton(image); renderingEditButton.setFocusable(false); renderingEditButton.setToolTipText(toolTip); } final private JButton renderingEditButton; /* * (non-Javadoc) * * @see * javax.swing.table.TableCellRenderer#getTableCellRendererComponent * (javax.swing.JTable, java.lang.Object, boolean, boolean, int, int) */ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return renderingEditButton; } public void setEnabled(boolean b) { renderingEditButton.setEnabled(b); } } private class ToggleAllAction extends AbstractAction { public ToggleAllAction() { super("", checkBoxImage); } public void actionPerformed(ActionEvent e) { Boolean checked = (Boolean) getValueAt(1, 1); checked = Boolean.valueOf(!checked.booleanValue()); for (int i = 1; i < getRowCount(); i++) { setValueAt(checked, i, 1); } } } private static final ButtonRenderer editButtonRenderer = new ButtonRenderer( AttributeManagerDialog.editButtonImage, Resources.getInstance() .getResourceString("attributes_edit_tooltip")); static final private Icon checkBoxImage = new ImageIcon(Resources .getInstance().getResource("images/checkbox12.png")); final private ButtonRenderer selectAllButtonRenderer; final private ButtonEditor selectAllButtonEditor; final private AttributeManagerDialog.EditListAction editListAction; public AttributeRegistryTable( AttributeManagerDialog.EditListAction editListAction) { super(); this.editListAction = editListAction; getTableHeader().setReorderingAllowed(false); selectAllButtonRenderer = new ButtonRenderer(checkBoxImage, Resources .getInstance().getResourceString( "attributes_select_all_tooltip")); selectAllButtonEditor = new ButtonEditor(new ToggleAllAction()); setDefaultEditor(SortedListModel.class, new ButtonEditor(editListAction)); setDefaultRenderer(SortedListModel.class, editButtonRenderer); setRowHeight(20); setRowSelectionAllowed(false); } public void setModel(TableModel dataModel) { super.setModel(dataModel); if (dataModel.getColumnCount() >= 1) { for (int i = 1; i < getColumnCount(); i++) { getColumnModel().getColumn(i).setMinWidth(20); int prefWidth = getTableHeader() .getDefaultRenderer() .getTableCellRendererComponent(this, getColumnName(i), false, false, -1, i).getPreferredSize().width; getColumnModel().getColumn(i).setPreferredWidth(prefWidth); } } } public TableCellEditor getCellEditor(int row, int column) { if (row == 0 && column == 1) { return selectAllButtonEditor; } return super.getCellEditor(row, column); } public TableCellRenderer getCellRenderer(int row, int column) { if (row == 0 && column == 1) { return selectAllButtonRenderer; } TableCellRenderer tableCellRenderer = super .getCellRenderer(row, column); if (tableCellRenderer instanceof JLabel) { JLabel label = (JLabel) tableCellRenderer; if (row == 0) { label.setHorizontalAlignment(JLabel.CENTER); } else { label.setHorizontalAlignment(JLabel.LEFT); } } else if (tableCellRenderer instanceof JComponent) { JComponent label = (JComponent) tableCellRenderer; switch (column) { case 1: label.setToolTipText(Resources.getInstance().getResourceString( "attributes_visible_tooltip")); break; case 2: if (row == 0) { label.setToolTipText(Resources.getInstance() .getResourceString( "attributes_restricted_attributes_tooltip")); } else { label.setToolTipText(Resources.getInstance() .getResourceString( "attributes_restricted_values_tooltip")); } break; } } return tableCellRenderer; } public Component prepareEditor(TableCellEditor editor, int row, int column) { if (column == 3) { SortedListModel list = (SortedListModel) getModel().getValueAt(row, column); String title = getModel().getValueAt(row, 0).toString(); String labelText = Resources.getInstance().getResourceString( "attribute_list_box_label_text"); editListAction.setListBoxModel(title, labelText, list); } return super.prepareEditor(editor, row, column); } }