From: <cpm...@us...> - 2008-07-02 06:37:55
|
Revision: 6989 http://pcgen.svn.sourceforge.net/pcgen/?rev=6989&view=rev Author: cpmeister Date: 2008-07-01 23:38:03 -0700 (Tue, 01 Jul 2008) Log Message: ----------- improved integration of the DynamicTableColumnModel in JTreeViewPane Modified Paths: -------------- branches/cdomui/code/src/java/pcgen/gui/util/JTreeViewPane.java branches/cdomui/code/src/java/pcgen/gui/util/treeview/DataViewColumn.java branches/cdomui/code/src/java/pcgen/gui/util/treeview/DefaultDataViewColumn.java branches/cdomui/code/src/java/pcgen/gui/util/treeview/TreeViewTableModel.java Modified: branches/cdomui/code/src/java/pcgen/gui/util/JTreeViewPane.java =================================================================== --- branches/cdomui/code/src/java/pcgen/gui/util/JTreeViewPane.java 2008-07-02 03:50:25 UTC (rev 6988) +++ branches/cdomui/code/src/java/pcgen/gui/util/JTreeViewPane.java 2008-07-02 06:38:03 UTC (rev 6989) @@ -25,24 +25,26 @@ import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import javax.swing.AbstractAction; import javax.swing.ButtonGroup; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JRadioButtonMenuItem; -import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import pcgen.gui.util.event.TreeViewModelEvent; import pcgen.gui.util.event.TreeViewModelListener; +import pcgen.gui.util.table.DefaultDynamicTableColumnModel; +import pcgen.gui.util.table.DynamicTableColumnModel; import pcgen.gui.util.table.SortableTableModel; -import pcgen.gui.util.treeview.TreeView; -import pcgen.gui.util.treeview.TreeViewModel; -import pcgen.gui.util.treeview.TreeViewPath; -import pcgen.gui.util.treeview.TreeViewTableModel; +import pcgen.gui.util.treeview.*; +import pcgen.gui.util.treeview.DataViewColumn.Visibility; +import pcgen.util.CollectionMaps; +import pcgen.util.ListMap; /** * @@ -66,7 +68,7 @@ } }; - private TreeViewModelListener listener; + private TreeViewModelListener modelListener; private TreeViewTableModel<?> treetableModel; private TreeViewModel<?> viewModel; private JPopupMenu treeviewMenu; @@ -76,7 +78,9 @@ public JTreeViewPane() { super(new JTreeTable()); - getTable().setTableHeader(new JTreeViewHeader()); + JTreeTable table = getTable(); + table.setTableHeader(new JTreeViewHeader()); + table.setAutoCreateColumnsFromModel(false); } public JTreeViewPane(TreeViewModel<?> viewModel) @@ -102,18 +106,17 @@ return viewModel; } - @SuppressWarnings("unchecked") public <T> void setTreeViewModel(TreeViewModel<T> viewModel) { - final TreeViewTableModel<T> model = new TreeViewTableModel<T>(viewModel.getDataView()); + DataView<T> dataView = viewModel.getDataView(); + final TreeViewTableModel<T> model = new TreeViewTableModel<T>(dataView); this.treetableModel = model; if (this.viewModel != null) { - this.viewModel.removeTreeViewModelListener(listener); + this.viewModel.removeTreeViewModelListener(modelListener); } - this.viewModel = viewModel; - this.viewModel.addTreeViewModelListener( - listener = new TreeViewModelListener<T>() + + TreeViewModelListener<T> listener = new TreeViewModelListener<T>() { public void dataChanged(TreeViewModelEvent<T> event) @@ -121,7 +124,11 @@ model.setData(event.getNewData()); } - }); + }; + this.viewModel = viewModel; + this.modelListener = listener; + viewModel.addTreeViewModelListener(listener); + treeviewMenu = new JPopupMenu(); ButtonGroup group = new ButtonGroup(); List<? extends TreeView<T>> views = viewModel.getTreeViews(); @@ -136,8 +143,63 @@ model.setData(viewModel.getData()); model.setSelectedTreeView(startingView); getTable().setTreeTableModel(model); + setColumnModel(createTableColumnModel(startingView, dataView)); } + private DynamicTableColumnModel createTableColumnModel(TreeView<?> startingView, + DataView<?> dataView) + { + @SuppressWarnings("unchecked") + ListMap<Visibility, DataViewColumn, List<DataViewColumn>> listMap = + CollectionMaps.createListMap(HashMap.class, ArrayList.class); + for ( DataViewColumn column : dataView.getDataColumns()) + { + listMap.add(column.getVisibility(), column); + } + + List<DataViewColumn> columns = listMap.get(Visibility.ALWAYS_VISIBLE); + if (columns == null) + { + columns = Collections.emptyList(); + } + DynamicTableColumnModel model = new DefaultDynamicTableColumnModel(columns.size() + + 1); + TableColumn tableColumn = new TableColumn(); + tableColumn.setHeaderValue(startingView.getViewName()); + model.addColumn(tableColumn); + + int index = 1; + for ( DataViewColumn column : columns) + { + tableColumn = new TableColumn(index++); + tableColumn.setHeaderValue(column.getName()); + model.addColumn(tableColumn); + } + + columns = listMap.get(Visibility.INITIALLY_VISIBLE); + if (columns != null) + { + for ( DataViewColumn column : columns) + { + tableColumn = new TableColumn(index++); + tableColumn.setHeaderValue(column.getName()); + model.addColumn(tableColumn); + model.setVisible(tableColumn, true); + } + } + columns = listMap.get(Visibility.INITIALLY_INVISIBLE); + if (columns != null) + { + for ( DataViewColumn column : columns) + { + tableColumn = new TableColumn(index++); + tableColumn.setHeaderValue(column.getName()); + model.addColumn(tableColumn); + } + } + return model; + } + public boolean getQuickSearchMode() { return searchMode; @@ -178,12 +240,9 @@ { //make sure that the original dynamictableModel is not changed JTreeTable table = getTable(); - TableColumnModel old = table.getColumnModel(); - table.setColumnModel(new DefaultTableColumnModel()); - TableColumn viewColumn = old.getColumn(old.getColumnIndex(treetableModel.getSelectedTreeView().getViewName())); + TableColumn viewColumn = table.getColumn(treetableModel.getSelectedTreeView().getViewName()); treetableModel.setSelectedTreeView(view); viewColumn.setHeaderValue(view.getViewName()); - table.setColumnModel(old); table.sortModel(); } Modified: branches/cdomui/code/src/java/pcgen/gui/util/treeview/DataViewColumn.java =================================================================== --- branches/cdomui/code/src/java/pcgen/gui/util/treeview/DataViewColumn.java 2008-07-02 03:50:25 UTC (rev 6988) +++ branches/cdomui/code/src/java/pcgen/gui/util/treeview/DataViewColumn.java 2008-07-02 06:38:03 UTC (rev 6989) @@ -27,8 +27,18 @@ public interface DataViewColumn { + public static enum Visibility + { + + ALWAYS_VISIBLE, + INITIALLY_VISIBLE, + INITIALLY_INVISIBLE + } + public String getName(); public Class<?> getDataClass(); + public Visibility getVisibility(); + } Modified: branches/cdomui/code/src/java/pcgen/gui/util/treeview/DefaultDataViewColumn.java =================================================================== --- branches/cdomui/code/src/java/pcgen/gui/util/treeview/DefaultDataViewColumn.java 2008-07-02 03:50:25 UTC (rev 6988) +++ branches/cdomui/code/src/java/pcgen/gui/util/treeview/DefaultDataViewColumn.java 2008-07-02 06:38:03 UTC (rev 6989) @@ -29,11 +29,26 @@ private String name; private Class<?> dataclass; + private Visibility visibility; - public <T> DefaultDataViewColumn(String name, Class<T> dataclass) + public DefaultDataViewColumn(String name, Class<?> dataclass) { + this(name, dataclass, false); + } + + public DefaultDataViewColumn(String name, Class<?> dataclass, + boolean visible) + { this.name = name; this.dataclass = dataclass; + if (visible) + { + this.visibility = Visibility.INITIALLY_VISIBLE; + } + else + { + this.visibility = Visibility.INITIALLY_INVISIBLE; + } } public String getName() @@ -46,4 +61,9 @@ return dataclass; } + public Visibility getVisibility() + { + return visibility; + } + } Modified: branches/cdomui/code/src/java/pcgen/gui/util/treeview/TreeViewTableModel.java =================================================================== --- branches/cdomui/code/src/java/pcgen/gui/util/treeview/TreeViewTableModel.java 2008-07-02 03:50:25 UTC (rev 6988) +++ branches/cdomui/code/src/java/pcgen/gui/util/treeview/TreeViewTableModel.java 2008-07-02 06:38:03 UTC (rev 6989) @@ -150,6 +150,11 @@ return TreeTableNode.class; } + public Visibility getVisibility() + { + return Visibility.ALWAYS_VISIBLE; + } + } private final class TreeViewNode extends JTree.DynamicUtilTreeNode This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |