/* Copyright 2003-2012 Dmitry Barashev, GanttProject Team This file is part of GanttProject, an opensource project management tool. GanttProject 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 3 of the License, or (at your option) any later version. GanttProject 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 GanttProject. If not, see <http://www.gnu.org/licenses/>. */ package net.sourceforge.ganttproject.gui.taskproperties; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import biz.ganttproject.core.table.ColumnList; import net.sourceforge.ganttproject.CustomProperty; import net.sourceforge.ganttproject.CustomPropertyDefinition; import net.sourceforge.ganttproject.CustomPropertyHolder; import net.sourceforge.ganttproject.CustomPropertyManager; import net.sourceforge.ganttproject.ShowHideColumnsDialog; import net.sourceforge.ganttproject.action.GPAction; import net.sourceforge.ganttproject.gui.UIFacade; import net.sourceforge.ganttproject.gui.UIUtil; import net.sourceforge.ganttproject.language.GanttLanguage; /** * This class implements a UI component for editing custom properties. * * @author dbarashev (Dmitry Barashev) */ public class CustomColumnsPanel { private static GanttLanguage language = GanttLanguage.getInstance(); private static final String[] COLUMN_NAMES = new String[] { CustomColumnsPanel.language.getText("name"), CustomColumnsPanel.language.getText("typeClass"), CustomColumnsPanel.language.getText("value") }; private final CustomPropertyManager myCustomPropertyManager; private final UIFacade myUiFacade; private CustomColumnTableModel myModel; private JTable myTable; private CustomPropertyHolder myHolder; private ColumnList myTableHeaderFacade; public CustomColumnsPanel(CustomPropertyManager manager, UIFacade uifacade, CustomPropertyHolder customPropertyHolder, ColumnList tableHeaderFacade) { assert manager != null; myCustomPropertyManager = manager; myUiFacade = uifacade; myHolder = customPropertyHolder; myTableHeaderFacade = tableHeaderFacade; } public JComponent getComponent() { myModel = new CustomColumnTableModel(); myTable = new JTable(myModel); UIUtil.setupTableUI(myTable); JPanel buttonPanel = new JPanel(new BorderLayout()); buttonPanel.add(new JButton(new GPAction("columns.manage.label") { @Override public void actionPerformed(ActionEvent e) { ShowHideColumnsDialog dialog = new ShowHideColumnsDialog(myUiFacade, myTableHeaderFacade, myCustomPropertyManager); dialog.show(); myModel.fireTableStructureChanged(); } }), BorderLayout.WEST); return CommonPanel.createTableAndActions(myTable, buttonPanel); } public void commit() { if (myTable.isEditing()) { myTable.getCellEditor().stopCellEditing(); } } class CustomColumnTableModel extends DefaultTableModel { public CustomColumnTableModel() { } public void reload() { fireTableDataChanged(); } @Override public String getColumnName(int column) { return COLUMN_NAMES[column]; } @Override public Class<?> getColumnClass(int column) { return String.class; } @Override public boolean isCellEditable(int row, int col) { return col == 2; } @Override public int getColumnCount() { return COLUMN_NAMES.length; } @Override public int getRowCount() { return myCustomPropertyManager.getDefinitions().size(); } @Override public Object getValueAt(int row, int col) { if (row < 0 || row >= myCustomPropertyManager.getDefinitions().size()) { return null; } CustomPropertyDefinition def = myCustomPropertyManager.getDefinitions().get(row); switch (col) { case 0: return def.getName(); case 1: return def.getPropertyClass().getDisplayName(); case 2: for (CustomProperty cp : myHolder.getCustomProperties()) { if (cp.getDefinition() == def) { return cp.getValueAsString(); } } return def.getDefaultValue() + " (default)"; default: throw new IllegalStateException(); } } @Override public void setValueAt(Object o, int row, int col) { if (row < 0 || row >= myCustomPropertyManager.getDefinitions().size()) { return; } if (col != 2) { throw new IllegalArgumentException(); } myHolder.addCustomProperty(myCustomPropertyManager.getDefinitions().get(row), String.valueOf(o)); // myHolder.addCustomProperty(def, // DateParser.getIsoDate(GanttLanguage.getInstance().parseDate(String.valueOf(o)))); } } }