From: <jde...@us...> - 2008-07-15 13:28:00
|
Revision: 7167 http://pcgen.svn.sourceforge.net/pcgen/?rev=7167&view=rev Author: jdempsey Date: 2008-07-15 06:27:56 -0700 (Tue, 15 Jul 2008) Log Message: ----------- Add book type to sources display. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui/MainSource.java Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Modified: Trunk/pcgen/code/src/java/pcgen/gui/MainSource.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/MainSource.java 2008-07-15 11:56:41 UTC (rev 7166) +++ Trunk/pcgen/code/src/java/pcgen/gui/MainSource.java 2008-07-15 13:27:56 UTC (rev 7167) @@ -56,10 +56,12 @@ import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JSplitPane; +import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; +import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.border.Border; @@ -70,6 +72,7 @@ import javax.swing.event.HyperlinkListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.table.TableColumn; import javax.swing.tree.TreePath; import pcgen.cdom.base.Constants; @@ -133,7 +136,8 @@ //column positions for tables private static final int COL_NAME = 0; - private static final int COL_LOADED = 1; + private static final int COL_BOOKTYPE = 1; + private static final int COL_LOADED = 2; //view modes for tables private static final int VIEW_PRODUCT = 0; @@ -599,12 +603,6 @@ return sb.toString(); } - private void setLoadedColMaxWidth() - { - //make the "Loaded" checkbox column a reasonable size - selectedTable.getColumnModel().getColumn(COL_LOADED).setMaxWidth(50); - } - private int getSelectedIndex(ListSelectionEvent e) { final DefaultListSelectionModel model = (DefaultListSelectionModel) e.getSource(); @@ -730,6 +728,7 @@ btree.setRootVisible(false); btree.setShowsRootHandles(true); btree.setCellRenderer(new LabelTreeCellRenderer()); + selectedTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) @@ -796,6 +795,27 @@ } /** + * Adds the column manager button to the table. + * + * @param table the table + * @param model the model for the table + */ + private JScrollPane addColumnManagerButton(JTable table, TableColumnManagerModel model) + { + final JScrollPane scrollPane = + new JScrollPane(table, + ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, + ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); + final JButton columnButton = new JButton(); + scrollPane.setCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER, + columnButton); + // TODO - This should probably be an icon. + columnButton.setText("^"); //$NON-NLS-1$ + new TableColumnManager(table, columnButton, model); + return scrollPane; + } + + /** * Adds or removes a campaign from the selected list. * * @param select Should we be selecting the campaign? @@ -866,7 +886,7 @@ bsplit.setDividerLocation(.75); asplit.setDividerSize(10); asplit.setDividerLocation(.5); - setLoadedColMaxWidth(); + //setLoadedColMaxWidth(); } } @@ -1002,7 +1022,7 @@ avaLabel.setText(PropertyFactory.getString("in_available")); leftPane.add(InfoTabUtils.createFilterPane(avaLabel, viewComboBox, lblQFilter, textQFilter, clearQFilterButton), BorderLayout.NORTH); - JScrollPane scrollPane = new JScrollPane(availableTable); + JScrollPane scrollPane = addColumnManagerButton(availableTable, availableModel); leftPane.add(scrollPane, BorderLayout.CENTER); rightButton = new JButton(IconUtilitities.getImageIcon("Forward16.gif")); @@ -1017,13 +1037,13 @@ aPanel.add(viewSelectComboBox); rightPane.add(aPanel, BorderLayout.NORTH); - scrollPane = new JScrollPane(selectedTable); + scrollPane = addColumnManagerButton(selectedTable, selectedModel); rightPane.add(scrollPane, BorderLayout.CENTER); leftButton = new JButton(IconUtilitities.getImageIcon("Back16.gif")); rightPane.add(buildModSpellPanel(leftButton, "Click to remove the source"), BorderLayout.SOUTH); - selectedTable.setColAlign(COL_LOADED, SwingConstants.CENTER); +// selectedTable.setColAlign(COL_LOADED, SwingConstants.CENTER); bLeftPane = new JPanel(new BorderLayout()); JPanel bRightPane = new JPanel(); @@ -1480,7 +1500,7 @@ updateAvailableModel(); updateSelectedModel(); - setLoadedColMaxWidth(); + //setLoadedColMaxWidth(); /* Toggle the Load, et al, buttons */ if (selectedTable.getTree().getRowCount() == 0) @@ -1545,13 +1565,20 @@ * Leafs are like files and non-leafs are like directories. **/ final class CampaignModel extends AbstractTreeTableModel + implements TableColumnManagerModel { - final String[] availNameList = { "Source Material" }; - final String[] selNameList = { "Source Material", "Loaded" }; // Types of the columns. int modelType = MODEL_AVAIL; + + final String prefix; + private String[] names = + {"Source Material", "Book Type", "Loaded"}; + private int[] widths = {100, 60, 30}; + + private List<Boolean> displayList; + /** * Creates a CampaignModel * @param mode @@ -1565,6 +1592,25 @@ { modelType = MODEL_SELECT; } + prefix = "source." //$NON-NLS-1$ + + (available ? "avail" : "select"); //$NON-NLS-1$ $NON-NLS-2$ + int i = 1; + displayList = new ArrayList<Boolean>(); + displayList.add(Boolean.TRUE); // Source Material + if (available) + { + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + + "." + names[i++], true))); // Book Type + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + + "." + names[i++], false))); // Loaded + } + else + { + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + + "." + names[i++], false))); // Book Type + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + + "." + names[i++], true))); // Loaded + } resetModel(mode, available, true); } @@ -1583,21 +1629,10 @@ @Override public Class<?> getColumnClass(int column) { - switch (column) + if (column == COL_NAME) { - case COL_LOADED: //is source loaded? - return String.class; - - case COL_NAME: //source material name - return TreeTableModel.class; - - default: - Logging.errorPrint("In MainSource.CampaignModel.getColumnClass the column " + column - + " is not handled."); - - break; + return TreeTableModel.class; } - return String.class; } @@ -1609,11 +1644,7 @@ */ public int getColumnCount() { - if (modelType == MODEL_AVAIL) - { - return availNameList.length; - } - return selNameList.length; + return names.length; } /** @@ -1623,11 +1654,7 @@ */ public String getColumnName(int column) { - if (modelType == MODEL_AVAIL) - { - return availNameList[column]; - } - return selNameList[column]; + return names[column]; } /** @@ -1649,10 +1676,10 @@ /** * Returns Object value of the column. * @param node - * @param column + * @param aColumn * @return value */ - public Object getValueAt(Object node, int column) + public Object getValueAt(Object node, int aColumn) { try { final PObjectNode fn = (PObjectNode) node; @@ -1663,7 +1690,7 @@ aCamp = (Campaign) fn.getItem(); } - switch (column) + switch (aColumn) { case COL_NAME: // Name @@ -1675,6 +1702,14 @@ Logging.errorPrint("Somehow we have no active node when doing getValueAt in MainSource."); return ""; + case COL_BOOKTYPE: + + if (aCamp != null) + { + return aCamp.getBookType(); + } + break; + case COL_LOADED: //is source loaded? if (aCamp != null) @@ -1688,25 +1723,18 @@ break; - case -1: - - if (fn != null) - { - return fn.getItem(); - } - - Logging.errorPrint("Somehow we have no active node when doing getValueAt in MainSource."); - return null; - default: - Logging.errorPrint("In MainSource.CampaignModel.getValueAt the column " + column + Logging.errorPrint("In MainSource.CampaignModel.getValueAt the column " + aColumn + " is not handled."); break; } - } catch(Exception e) { - // TODO Handle this? } + catch (Exception e) + { + Logging.errorPrint("Failed to get value for column " + aColumn + + " of " + node, e); + } return null; } @@ -1720,169 +1748,190 @@ public void resetModel(int mode, boolean available, boolean newCall) { final List<String> allowedModes = Globals.getAllowedGameModes(); - PCGen_Frame1 mainFrame = PCGen_Frame1.getInst(); - PlayerCharacter aPC = null; - if (mainFrame != null) - { - aPC = mainFrame.getCurrentPC(); - } + PCGen_Frame1 mainFrame = PCGen_Frame1.getInst(); + PlayerCharacter aPC = null; + if (mainFrame != null) + { + aPC = mainFrame.getCurrentPC(); + } - List<Campaign> campList; + List<Campaign> campList; - if (available) - { - campList = Globals.getCampaignList(); - } - else - { - campList = selectedCampaigns; - } + if (available) + { + campList = Globals.getCampaignList(); + } + else + { + campList = selectedCampaigns; + } - switch (mode) - { - case VIEW_PUBFMTSET: // by Publisher/Format/Setting/Product Name - case VIEW_PUBSET: - case VIEW_PUBLISH: - /* - * The following algorithm by cpmeister aka The Dragon Monkey - */ - PObjectNode root = new PObjectNode(); - Map<String, PObjectNode> nodeMap = new TreeMap<String, PObjectNode>(); - for (Campaign camp : campList) - { - if (camp.isGameMode(allowedModes) && shouldDisplayThis(camp, aPC) && (available ^ selectedCampaigns.contains(camp))) - { - int typeCount = camp.getMyTypeCount(); - if (typeCount > 0) - { - String pub = camp.getMyType(0); - if (!nodeMap.containsKey(pub)) + switch (mode) + { + case VIEW_PUBFMTSET: // by Publisher/Format/Setting/Product Name + case VIEW_PUBSET: + case VIEW_PUBLISH: + /* + * The following algorithm by cpmeister aka The Dragon Monkey + */ + PObjectNode root = new PObjectNode(); + Map<String, PObjectNode> nodeMap = + new TreeMap<String, PObjectNode>(); + for (Campaign camp : campList) { - PObjectNode node = new PObjectNode(pub); - nodeMap.put(pub, node); + if (camp.isGameMode(allowedModes) + && shouldDisplayThis(camp, aPC) + && (available ^ selectedCampaigns.contains(camp))) + { + int typeCount = camp.getMyTypeCount(); + if (typeCount > 0) + { + String pub = camp.getMyType(0); + if (!nodeMap.containsKey(pub)) + { + PObjectNode node = new PObjectNode(pub); + nodeMap.put(pub, node); + } + if (mode == VIEW_PUBLISH) + { + PObjectNode node = new PObjectNode(camp); + nodeMap.get(pub).addChild(node); + } + else if (typeCount > 1) + { + String fmt = camp.getMyType(1); + String pubfmt = pub + "." + fmt; + if (mode == VIEW_PUBFMTSET + && !nodeMap.containsKey(pubfmt)) + { + PObjectNode node = new PObjectNode(fmt); + nodeMap.put(pubfmt, node); + nodeMap.get(pub).addChild(node); + } + if (typeCount > 2) + { + String set = camp.getMyType(2); + if (mode == VIEW_PUBFMTSET) + { + String pubfmtset = + pubfmt + "." + set; + if (!nodeMap.containsKey(pubfmtset)) + { + PObjectNode node = + new PObjectNode(set); + nodeMap.put(pubfmtset, node); + nodeMap.get(pubfmt).addChild( + node); + } + nodeMap.get(pubfmtset).addChild( + new PObjectNode(camp)); + } + else + { + String pubset = pub + "." + set; + if (!nodeMap.containsKey(pubset)) + { + PObjectNode node = + new PObjectNode(set); + nodeMap.put(pubset, node); + nodeMap.get(pub).addChild(node); + } + nodeMap.get(pubset).addChild( + new PObjectNode(camp)); + } + } + else if (mode == VIEW_PUBFMTSET) + { + nodeMap.get(pubfmt).addChild( + new PObjectNode(camp)); + } + else + { + nodeMap.get(pub).addChild( + new PObjectNode(camp)); + } + } + else + { + nodeMap.get(pub).addChild( + new PObjectNode(camp)); + } + } + else + { + String key = "Other"; + if (!nodeMap.containsKey(key)) + { + nodeMap.put(key, new PObjectNode(key)); + } + nodeMap.get(key) + .addChild(new PObjectNode(camp)); + } + } } - if (mode == VIEW_PUBLISH) + for (String key : nodeMap.keySet()) { - PObjectNode node = new PObjectNode(camp); - nodeMap.get(pub).addChild(node); - } - else if (typeCount > 1) - { - String fmt = camp.getMyType(1); - String pubfmt = pub + "." + fmt; - if (mode == VIEW_PUBFMTSET && !nodeMap.containsKey(pubfmt)) - { - PObjectNode node = new PObjectNode(fmt); - nodeMap.put(pubfmt, node); - nodeMap.get(pub).addChild(node); - } - if (typeCount > 2) - { - String set = camp.getMyType(2); - if (mode == VIEW_PUBFMTSET) + if (key.indexOf('.') == -1) { - String pubfmtset = pubfmt + "." + set; - if (!nodeMap.containsKey(pubfmtset)) - { - PObjectNode node = new PObjectNode(set); - nodeMap.put(pubfmtset, node); - nodeMap.get(pubfmt).addChild(node); - } - nodeMap.get(pubfmtset).addChild(new PObjectNode(camp)); + root.addChild(nodeMap.get(key)); } - else - { - String pubset = pub + "." + set; - if (!nodeMap.containsKey(pubset)) - { - PObjectNode node = new PObjectNode(set); - nodeMap.put(pubset, node); - nodeMap.get(pub).addChild(node); - } - nodeMap.get(pubset).addChild(new PObjectNode(camp)); - } - } - else if (mode == VIEW_PUBFMTSET) - { - nodeMap.get(pubfmt).addChild(new PObjectNode(camp)); - } - else - { - nodeMap.get(pub).addChild(new PObjectNode(camp)); - } } - else - { - nodeMap.get(pub).addChild(new PObjectNode(camp)); - } - } - else - { - String key = "Other"; - if(!nodeMap.containsKey(key)) - { - nodeMap.put(key, new PObjectNode(key)); - } - nodeMap.get(key).addChild(new PObjectNode(camp)); - } - } - } - for (String key : nodeMap.keySet()) - { - if (key.indexOf('.') == -1) - { - root.addChild(nodeMap.get(key)); - } - } - setRoot(root); - break; + setRoot(root); + break; - case VIEW_PRODUCT: // by Product Name - setRoot(new PObjectNode()); // just need a blank one - String qFilter = this.getQFilter(); + case VIEW_PRODUCT: // by Product Name + setRoot(new PObjectNode()); // just need a blank one + String qFilter = this.getQFilter(); - for (Campaign aCamp : campList) - { - PObjectNode rootAsPObjectNode = (PObjectNode) super.getRoot(); + for (Campaign aCamp : campList) + { + PObjectNode rootAsPObjectNode = + (PObjectNode) super.getRoot(); - // filter out campaigns here - if (!shouldDisplayThis(aCamp, aPC) || !aCamp.isGameMode(allowedModes)) - { - continue; - } + // filter out campaigns here + if (!shouldDisplayThis(aCamp, aPC) + || !aCamp.isGameMode(allowedModes)) + { + continue; + } - //don't display selected campaigns in the available table - if (available && selectedCampaigns.contains(aCamp)) - { - continue; - } + //don't display selected campaigns in the available table + if (available && selectedCampaigns.contains(aCamp)) + { + continue; + } - if (qFilter == null || - (aCamp.getKeyName().toLowerCase().indexOf(qFilter) >= 0 || - aCamp.getType().toLowerCase().indexOf(qFilter) >= 0)) - { - PObjectNode aFN = new PObjectNode(); - aFN.setParent(rootAsPObjectNode); - aFN.setItem(aCamp); - PrereqHandler.passesAll(aCamp.getPrerequisiteList(), aPC, aCamp); - rootAsPObjectNode.addChild(aFN); - } - } + if (qFilter == null + || (aCamp.getKeyName().toLowerCase().indexOf( + qFilter) >= 0 || aCamp.getType().toLowerCase() + .indexOf(qFilter) >= 0)) + { + PObjectNode aFN = new PObjectNode(); + aFN.setParent(rootAsPObjectNode); + aFN.setItem(aCamp); + PrereqHandler.passesAll( + aCamp.getPrerequisiteList(), aPC, aCamp); + rootAsPObjectNode.addChild(aFN); + } + } - break; + break; - default: - Logging.errorPrint("In MainSource.CampaignlModel.resetModel the mode " + mode + " is not handled."); + default: + Logging + .errorPrint("In MainSource.CampaignlModel.resetModel the mode " + + mode + " is not handled."); - break; - } + break; + } - PObjectNode rootAsPObjectNode = (PObjectNode) super.getRoot(); + PObjectNode rootAsPObjectNode = (PObjectNode) super.getRoot(); - if (rootAsPObjectNode.getChildCount() > 0) - { - fireTreeNodesChanged(super.getRoot(), new TreePath(super.getRoot())); - } + if (rootAsPObjectNode.getChildCount() > 0) + { + fireTreeNodesChanged(super.getRoot(), new TreePath(super + .getRoot())); + } } /** @@ -1901,6 +1950,93 @@ return ((modelType == MODEL_SELECT) || accept(aPC, aCamp)); } + + /** + * @see pcgen.gui.TableColumnManagerModel#getMColumnList() + */ + public List<String> getMColumnList() + { + final List<String> retList = new ArrayList<String>(); + + for (int i = 1; i < names.length; i++) + { + retList.add(names[i]); + } + return retList; + } + + /** + * @see pcgen.gui.TableColumnManagerModel#isMColumnDisplayed(int) + */ + public boolean isMColumnDisplayed(final int col) + { + return (displayList.get(col)).booleanValue(); + } + + private boolean getColumnViewOption(String colName, boolean defaultVal) + { + return SettingsHandler.getPCGenOption(prefix + + "." + colName, defaultVal); //$NON-NLS-1$ + } + + private void setColumnViewOption(String colName, boolean val) + { + SettingsHandler.setPCGenOption(prefix + "." + colName, val); //$NON-NLS-1$ + } + + /** + * @see pcgen.gui.TableColumnManagerModel#setMColumnDisplayed(int, boolean) + */ + public void setMColumnDisplayed(int col, boolean disp) + { + setColumnViewOption(modelType + "." + names[col], disp); + displayList.set(col, Boolean.valueOf(disp)); + } + + /** + * @see pcgen.gui.TableColumnManagerModel#getMColumnOffset() + */ + public int getMColumnOffset() + { + return 1; + } + + /** + * @see pcgen.gui.TableColumnManagerModel#getMColumnDefaultWidth(int) + */ + public int getMColumnDefaultWidth(int col) + { + return SettingsHandler.getPCGenOption(prefix + ".sizecol." + + names[col], widths[col]); + } + + /** + * @see pcgen.gui.TableColumnManagerModel#setMColumnDefaultWidth(int, int) + */ + public void setMColumnDefaultWidth(final int col, final int width) + { + SettingsHandler.setPCGenOption(prefix + ".sizecol." + names[col], + width); + } + + /** + * @see pcgen.gui.TableColumnManagerModel#resetMColumn(int, javax.swing.table.TableColumn) + */ + public void resetMColumn(final int col, final TableColumn tColumn) + { + int colNum = tColumn.getModelIndex(); + switch (colNum) + { + case COL_LOADED: + tColumn + .setCellRenderer(new pcgen.gui.utils.JTableEx.AlignCellRenderer( + SwingConstants.CENTER)); + break; + + default: + break; + } + } } private class CampaignPopupListener extends MouseAdapter Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2008-07-15 11:56:41 UTC (rev 7166) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2008-07-15 13:27:56 UTC (rev 7167) @@ -4039,6 +4039,10 @@ InfoTabs.AddButton.Description=Click to add the selected item. InfoTabs.RemoveButton.Description=Click to remove the selected item. +SourceModel.Columns.Name=Source Material +SourceModel.Columns.BookType=Book Type +SourceModel.Columns.Loaded=Loaded + AbilityModel.Columns.Name=Ability AbilityModel.Columns.Type=Type AbilityModel.Columns.Cost=Cost This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |