package org.freeplane.features.styles.mindmapmode; import java.awt.Color; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.util.Collection; import java.util.EventObject; import javax.swing.AbstractCellEditor; import javax.swing.DefaultCellEditor; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JTable; import javax.swing.plaf.basic.BasicButtonUI; import javax.swing.table.TableCellEditor; import javax.swing.table.TableColumnModel; import javax.swing.table.TableModel; import org.freeplane.core.util.TextUtils; import org.freeplane.features.filter.condition.ASelectableCondition; import org.freeplane.features.filter.condition.DefaultConditionRenderer; import org.freeplane.features.styles.IStyle; import org.freeplane.features.styles.MapStyleModel; class ConditionalStyleTable extends JTable { /** * */ private static final long serialVersionUID = 1L; private MapStyleModel styleModel; private DefaultConditionRenderer conditionRenderer; @SuppressWarnings("serial") private class ConditionEditor extends AbstractCellEditor implements TableCellEditor{ private JButton btn; public ConditionEditor() { super(); btn = new JButton(){ { setUI(BasicButtonUI.createUI(this)); } @Override public Color getBackground() { return getSelectionBackground(); } }; } private Object cellEditorValue; public Component getTableCellEditorComponent(final JTable table, final Object value, boolean isSelected, int row, int column) { btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { final MLogicalStyleController styleController = MLogicalStyleController.getController(); cellEditorValue = styleController.editCondition((ASelectableCondition) value); btn.removeActionListener(this); fireEditingStopped(); } }); return btn; } public Object getCellEditorValue() { return cellEditorValue; } @Override public boolean isCellEditable(EventObject anEvent) { if (anEvent instanceof MouseEvent) { return ((MouseEvent) anEvent).getClickCount() >= 2; } return true; } } public ConditionalStyleTable(MapStyleModel styleModel, TableModel tableModel) { super(tableModel); this.styleModel = styleModel; setCellSelectionEnabled(false); setRowSelectionAllowed(true); final TableColumnModel columnModel = getColumnModel(); setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // setSelectionBackground(DefaultConditionRenderer.SELECTED_BACKGROUND); setRowHeight(20); conditionRenderer = new DefaultConditionRenderer(TextUtils.getText("always")); columnModel.getColumn(1).setCellRenderer(conditionRenderer); columnModel.getColumn(1).setCellEditor(new ConditionEditor()); final JComboBox styleBox = new JComboBox(); styleBox.setEditable(false); columnModel.getColumn(2).setCellEditor(new DefaultCellEditor(styleBox){ /** * */ private static final long serialVersionUID = 1L; { setClickCountToStart(2); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { final Collection<IStyle> styles = ConditionalStyleTable.this.styleModel.getStyles(); final DefaultComboBoxModel boxContent = new DefaultComboBoxModel(styles.toArray()); styleBox.setModel(boxContent); return super.getTableCellEditorComponent(table, value, isSelected, row, column); } }); columnModel.getColumn(1).setPreferredWidth(300); columnModel.getColumn(2).setPreferredWidth(180); columnModel.getColumn(2).setCellRenderer(new DefaultStyleRenderer()); } public MapStyleModel getStyles() { return styleModel; } }