Package org.freeplane.features.attribute.mindmapmode

Source Code of org.freeplane.features.attribute.mindmapmode.AttributeRegistryTable$ButtonEditor

/*
*  Freeplane - mind map editor
*  Copyright (C) 2008 Dimitry Polivaev
*
*  This file author is Dimitry Polivaev
*
*  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, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.features.attribute.mindmapmode;

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.SwingConstants;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;

import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.util.TextUtils;
import org.freeplane.core.util.collection.IListModel;

/**
* @author Dimitry Polivaev
*/
class AttributeRegistryTable extends JTable {
  static private class ButtonEditor extends AbstractCellEditor implements TableCellEditor {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    final private JButton editButton;
    private Object value;

    public ButtonEditor(final Action action) {
      editButton = new JButton(action);
      editButton.setFocusable(false);
    }

    /*
     * (non-Javadoc)
     * @see javax.swing.CellEditor#getCellEditorValue()
     */
    public Object getCellEditorValue() {
      return value;
    }

    /*
     * (non-Javadoc)
     * @see
     * javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax
     * .swing.JTable, java.lang.Object, boolean, int, int)
     */
    public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected,
                                                 final int row, final int column) {
      this.value = value;
      return editButton;
    }
  }

  static private class ButtonRenderer implements TableCellRenderer {
    final private JButton renderingEditButton;

    public ButtonRenderer(final Icon image, final String toolTip) {
      renderingEditButton = new JButton(image);
      renderingEditButton.setFocusable(false);
      renderingEditButton.setToolTipText(toolTip);
    }

    /*
     * (non-Javadoc)
     * @see
     * javax.swing.table.TableCellRenderer#getTableCellRendererComponent
     * (javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
     */
    public Component getTableCellRendererComponent(final JTable table, final Object value,
                                                   final boolean isSelected, final boolean hasFocus, final int row,
                                                   final int column) {
      return renderingEditButton;
    }
  }

  private class ToggleAllAction extends AbstractAction {
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    public ToggleAllAction() {
      super(null, AttributeRegistryTable.checkBoxImage);
    }

    public void actionPerformed(final ActionEvent e) {
      final int rowCount = getRowCount();
      if (rowCount <= 1) {
        return;
      }
      Boolean checked = (Boolean) getValueAt(1, 1);
      checked = Boolean.valueOf(!checked.booleanValue());
      for (int i = 1; i < rowCount; i++) {
        setValueAt(checked, i, 1);
      }
    }
  }

  static final private Icon checkBoxImage = new ImageIcon(ResourceController.getResourceController().getResource(
      "/images/checkbox12.png"));
  private static final ButtonRenderer editButtonRenderer = new ButtonRenderer(AttributeManagerDialog.editButtonImage,
      TextUtils.getText("attributes_edit_tooltip"));
  /**
   *
   */
  private static final long serialVersionUID = 1L;
  final private AttributeManagerDialog.EditListAction editListAction;
  final private ButtonEditor selectAllButtonEditor;
  final private ButtonRenderer selectAllButtonRenderer;

  public AttributeRegistryTable(final AttributeManagerDialog.EditListAction editListAction) {
    super();
    this.editListAction = editListAction;
    getTableHeader().setReorderingAllowed(false);
    selectAllButtonRenderer = new ButtonRenderer(AttributeRegistryTable.checkBoxImage, TextUtils
        .getText("attributes_select_all_tooltip"));
    selectAllButtonEditor = new ButtonEditor(new ToggleAllAction());
    setDefaultEditor(IListModel.class, new ButtonEditor(editListAction));
    setDefaultRenderer(IListModel.class, AttributeRegistryTable.editButtonRenderer);
    setRowHeight(20);
    setRowSelectionAllowed(false);
  }

  @Override
  public TableCellEditor getCellEditor(final int row, final int column) {
    if (row == 0 && column == 1) {
      return selectAllButtonEditor;
    }
    return super.getCellEditor(row, column);
  }

  @Override
  public TableCellRenderer getCellRenderer(final int row, final int column) {
    if (row == 0 && column == 1) {
      return selectAllButtonRenderer;
    }
    final TableCellRenderer tableCellRenderer = super.getCellRenderer(row, column);
    if (tableCellRenderer instanceof JLabel) {
      final JLabel label = (JLabel) tableCellRenderer;
      if (row == 0) {
        label.setHorizontalAlignment(SwingConstants.CENTER);
      }
      else {
        label.setHorizontalAlignment(SwingConstants.LEFT);
      }
    }
    else if (tableCellRenderer instanceof JComponent) {
      final JComponent label = (JComponent) tableCellRenderer;
      switch (column) {
        case 1:
          label.setToolTipText(TextUtils.getText("attributes_visible_tooltip"));
          break;
        case 2:
          if (row == 0) {
            label.setToolTipText(TextUtils.getText("attributes_restricted_attributes_tooltip"));
          }
          else {
            label.setToolTipText(TextUtils.getText("attributes_restricted_values_tooltip"));
          }
          break;
      }
    }
    return tableCellRenderer;
  }

  @Override
  public Component prepareEditor(final TableCellEditor editor, final int row, final int column) {
    if (column == 3) {
      final IListModel list = (IListModel) getModel().getValueAt(row, column);
      final String title = getModel().getValueAt(row, 0).toString();
      final String labelText = TextUtils.getText("attribute_list_box_label_text");
      editListAction.setListBoxModel(title, labelText, list);
    }
    return super.prepareEditor(editor, row, column);
  }

  @Override
  public void setModel(final TableModel dataModel) {
    super.setModel(dataModel);
    if (dataModel.getColumnCount() >= 1) {
      for (int i = 1; i < getColumnCount(); i++) {
        getColumnModel().getColumn(i).setMinWidth(20);
        final int prefWidth = getTableHeader().getDefaultRenderer().getTableCellRendererComponent(this,
            getColumnName(i), false, false, -1, i).getPreferredSize().width;
        getColumnModel().getColumn(i).setPreferredWidth(prefWidth);
      }
    }
  }
}
TOP

Related Classes of org.freeplane.features.attribute.mindmapmode.AttributeRegistryTable$ButtonEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.