diff --git a/.gitattributes b/.gitattributes index 5a1268029bd..d833db5f3ae 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15489,15 +15489,15 @@ forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/TextSearchFilter.j forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/ToggleButtonsFilter.java -text forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/ValueRangeFilter.java -text forge-gui/src/main/java/forge/gui/toolbox/itemmanager/package-info.java -text -forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/AlwaysShowToolTip.java -text -forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/IntegerRenderer.java -text -forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java -text -forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTableModel.java -text -forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ManaCostRenderer.java -text -forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/SColumnUtil.java -text -forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/SetCodeRenderer.java -text -forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/TableColumnInfo.java -text -forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/TableSorterCascade.java -text +forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/AlwaysShowToolTip.java -text +forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/IntegerRenderer.java -text +forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java -text +forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemView.java -text +forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ManaCostRenderer.java -text +forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/SColumnUtil.java -text +forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/SetCodeRenderer.java -text +forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/TableColumnInfo.java -text +forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/TableSorterCascade.java -text forge-gui/src/main/java/forge/gui/toolbox/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/gui/toolbox/special/CardViewer.java -text forge-gui/src/main/java/forge/gui/toolbox/special/CardZoomer.java -text diff --git a/forge-gui/src/main/java/forge/gui/ImportDialog.java b/forge-gui/src/main/java/forge/gui/ImportDialog.java index e3540371b2e..555083d8a11 100644 --- a/forge-gui/src/main/java/forge/gui/ImportDialog.java +++ b/forge-gui/src/main/java/forge/gui/ImportDialog.java @@ -351,7 +351,7 @@ public class ImportDialog { }); _unknownDeckLabel = new FLabel.Builder().text("Treat unknown decks as:").build(); unknownDeckPanel.add(_unknownDeckLabel); - _unknownDeckCombo.addTo(unknownDeckPanel); + unknownDeckPanel.add(_unknownDeckCombo.getComponent()); knownDeckPanel.add(unknownDeckPanel, "span"); cbPanel.add(knownDeckPanel, "aligny top"); diff --git a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java index 0868d85c315..e40d3132a29 100644 --- a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java +++ b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java @@ -277,7 +277,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { setupUI(); removeAll(); this.setLayout(new MigLayout("insets 0, gap 0, flowy")); - decksComboBox.addTo(this, "w 10:100%, h 30px!"); + this.add(decksComboBox.getComponent(), "w 10:100%, h 30px!"); this.add(scrDecks, "w 10:100%, growy, pushy"); this.add(btnRandom, "w 10:100%, h 26px!, gap 0 0 2px 0"); this.add(lblDecklist, "w 10:100%, h 20px!, , gap 0 0 5px 0"); diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java b/forge-gui/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java index 701ef23235e..e3d9e00544a 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java @@ -33,7 +33,6 @@ import java.util.List; import javax.swing.JMenu; import javax.swing.JPopupMenu; -import javax.swing.JTable; import javax.swing.KeyStroke; import javax.swing.Popup; import javax.swing.PopupFactory; @@ -69,8 +68,7 @@ import forge.gui.toolbox.FSkin; import forge.gui.toolbox.itemmanager.ItemManager; import forge.gui.toolbox.itemmanager.SItemManagerIO; import forge.gui.toolbox.itemmanager.SItemManagerIO.EditorPreference; -import forge.gui.toolbox.itemmanager.table.ItemTable; -import forge.gui.toolbox.itemmanager.table.ItemTableModel; +import forge.gui.toolbox.itemmanager.views.ItemListView; import forge.item.InventoryItem; /** @@ -194,30 +192,31 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { private class _ContextMenuBuilder implements ACEditorBase.ContextMenuBuilder { private final MouseEvent _e; - private final JTable _nextTable; + private final ItemListView _nextTable; private final _MoveCard _onMove; private final int _numSelected; private final JPopupMenu _menu = new JPopupMenu("TableContextMenu"); private boolean _showTextFilterItem = false; - public _ContextMenuBuilder(MouseEvent e, JTable table, JTable nextTable, _MoveCard onMove) { + public _ContextMenuBuilder(MouseEvent e, ItemListView table, ItemListView nextTable, _MoveCard onMove) { _e = e; _nextTable = nextTable; _onMove = onMove; // ensure the table has focus if (!table.hasFocus()) { - table.requestFocusInWindow(); + table.focus(); } // if item under the cursor is not selected, select it - int row = table.rowAtPoint(e.getPoint()); - if (!Ints.contains(table.getSelectedRows(), row)) { - table.setRowSelectionInterval(row, row); + int index = table.getIndexAtPoint(e.getPoint()); + int[] selectedIndices = table.getSelectedIndices(); + if (!Ints.contains(selectedIndices, index)) { + table.setSelectedIndex(index); } // record selection count - _numSelected = table.getSelectedRowCount(); + _numSelected = selectedIndices.length; } private void show() { @@ -225,11 +224,11 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { GuiUtils.addMenuItem(_menu, "Jump to previous table", KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), new Runnable() { - @Override public void run() { _nextTable.requestFocusInWindow(); } + @Override public void run() { _nextTable.focus(); } }); GuiUtils.addMenuItem(_menu, "Jump to next table", KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0), new Runnable() { - @Override public void run() { _nextTable.requestFocusInWindow(); } + @Override public void run() { _nextTable.focus(); } }); if (_showTextFilterItem) { @@ -313,20 +312,20 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { final ItemManager catView = childController.getCatalogManager(); final ItemManager deckView = childController.getDeckManager(); - final ItemTable catTable = catView.getTable(); - final ItemTable deckTable = deckView.getTable(); + final ItemListView catTable = catView.getTable(); + final ItemListView deckTable = deckView.getTable(); VCardCatalog.SINGLETON_INSTANCE.setItemManager(catView); VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckView); if (!childController.listenersHooked) { //hook listeners the first time the controller is updated - catTable.addKeyListener(new KeyAdapter() { + catTable.getComponent().addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (!isFindingAsYouType && KeyEvent.VK_SPACE == e.getKeyCode()) { addSelectedCards(e.isControlDown() || e.isMetaDown(), e.isShiftDown() ? 4: 1); } else if (KeyEvent.VK_LEFT == e.getKeyCode() || KeyEvent.VK_RIGHT == e.getKeyCode()) { - deckTable.requestFocusInWindow(); + deckTable.focus(); } else if (KeyEvent.VK_F == e.getKeyCode()) { // let ctrl/cmd-F set focus to the text filter box if (e.isControlDown() || e.isMetaDown()) { @@ -336,13 +335,13 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { } }); - deckTable.addKeyListener(new KeyAdapter() { + deckTable.getComponent().addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (!isFindingAsYouType && KeyEvent.VK_SPACE == e.getKeyCode()) { removeSelectedCards(e.isControlDown() || e.isMetaDown(), e.isShiftDown() ? 4: 1); } else if (KeyEvent.VK_LEFT == e.getKeyCode() || KeyEvent.VK_RIGHT == e.getKeyCode()) { - catTable.requestFocusInWindow(); + catTable.focus(); } } }); @@ -360,7 +359,7 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { } }; - catTable.addMouseListener(new FMouseAdapter() { + catTable.getComponent().addMouseListener(new FMouseAdapter() { @Override public void onLeftDoubleClick(MouseEvent e) { addSelectedCards(false, 1); @@ -374,7 +373,7 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { } }); - deckTable.addMouseListener(new FMouseAdapter() { + deckTable.getComponent().addMouseListener(new FMouseAdapter() { @Override public void onLeftDoubleClick(MouseEvent e) { removeSelectedCards(false, 1); @@ -391,13 +390,13 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { final _FindAsYouType catFind = new _FindAsYouType(catView); final _FindAsYouType deckFind = new _FindAsYouType(deckView); - catTable.addFocusListener(new FocusAdapter() { + catTable.getComponent().addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent arg0) { catFind.cancel(); } }); - deckTable.addFocusListener(new FocusAdapter() { + deckTable.getComponent().addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent arg0) { deckFind.cancel(); @@ -405,8 +404,8 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { }); // highlight items as the user types a portion of their names - catTable.addKeyListener(catFind); - deckTable.addKeyListener(deckFind); + catTable.getComponent().addKeyListener(catFind); + deckTable.getComponent().addKeyListener(deckFind); //set card when selection changes catView.addSelectionListener(new ListSelectionListener() { @@ -462,7 +461,7 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { } private void _findNextMatch(int startIdx, boolean reverse) { - int numItems = tableView.getTable().getRowCount(); + int numItems = tableView.getTable().getCount(); if (0 == numItems) { cancel(); return; @@ -475,9 +474,8 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { String searchStr = str.toString(); boolean found = false; for (int idx = startIdx;; idx = (idx + increment) % numItems) { - ItemTableModel tableModel = tableView.getTable().getTableModel(); - if (StringUtils.containsIgnoreCase(tableModel.rowToItem(idx).getKey().getName(), searchStr)) { - tableView.getTable().selectAndScrollTo(idx); + if (StringUtils.containsIgnoreCase(tableView.getTable().getItemAtIndex(idx).getName(), searchStr)) { + tableView.getTable().setSelectedIndex(idx); found = true; break; } @@ -506,7 +504,7 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { popupTimer.restart(); } else { PopupFactory factory = PopupFactory.getSharedInstance(); - Point tableLoc = tableView.getTable().getTableHeader().getLocationOnScreen(); + Point tableLoc = tableView.getTable().getTable().getTableHeader().getLocationOnScreen(); popup = factory.getPopup(null, popupLabel, tableLoc.x + 10, tableLoc.y + 10); FSkin.get(SwingUtilities.getRoot(popupLabel)).setBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); @@ -558,7 +556,7 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { if (!str.toString().isEmpty()) { // no need to add (or subtract) 1 -- the table selection will already // have been advanced by the (shift+) enter key - _findNextMatch(tableView.getTable().getSelectedRow(), e.isShiftDown()); + _findNextMatch(tableView.getTable().getSelectedIndex(), e.isShiftDown()); } return; @@ -584,7 +582,7 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { str.append(e.getKeyChar()); } - _findNextMatch(Math.max(0, tableView.getTable().getSelectedRow()), false); + _findNextMatch(Math.max(0, tableView.getTable().getSelectedIndex()), false); } } diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/DeckImport.java b/forge-gui/src/main/java/forge/gui/deckeditor/DeckImport.java index 78125e04962..f5796c5240d 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/DeckImport.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/DeckImport.java @@ -143,9 +143,9 @@ public class DeckImport ex fp.add(this.scrollInput, "cell 0 0, w 50%, growy, pushy"); fp.add(this.newEditionCheck, "cell 0 1, w 50%, ax c"); fp.add(this.dateTimeCheck, "cell 0 2, w 50%, ax c"); - - monthDropdown.addTo(fp, "cell 0 3, w 20%, ax r, split 2"); - yearDropdown.addTo(fp, "w 15%, pad 0 0 0 -10"); + + fp.add(monthDropdown.getComponent(), "cell 0 3, w 20%, ax r, split 2"); + fp.add(yearDropdown.getComponent(), "w 15%, pad 0 0 0 -10"); fillDateDropdowns(); fp.add(this.scrollOutput, "cell 1 0, w 50%, growy, pushy"); diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorCommander.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorCommander.java index 04b2a132332..83e28ed6fb0 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorCommander.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorCommander.java @@ -41,9 +41,9 @@ import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.SItemManagerIO; import forge.gui.toolbox.itemmanager.SItemManagerUtil; import forge.gui.toolbox.itemmanager.SItemManagerIO.EditorPreference; -import forge.gui.toolbox.itemmanager.table.TableColumnInfo; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.TableColumnInfo; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.ColumnName; import forge.item.PaperCard; import forge.item.InventoryItem; import forge.util.ItemPool; diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java index 703ac213dd7..d3108d9b224 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java @@ -37,9 +37,9 @@ import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.SItemManagerIO; import forge.gui.toolbox.itemmanager.SItemManagerUtil; import forge.gui.toolbox.itemmanager.SItemManagerIO.EditorPreference; -import forge.gui.toolbox.itemmanager.table.TableColumnInfo; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.TableColumnInfo; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.ColumnName; import forge.item.PaperCard; import forge.item.InventoryItem; import forge.util.ItemPool; diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java index 889664e2148..2b8e77c5955 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java @@ -18,7 +18,6 @@ package forge.gui.deckeditor.controllers; import javax.swing.JOptionPane; -import javax.swing.ListSelectionModel; import forge.Singletons; import forge.card.CardEdition; @@ -38,7 +37,7 @@ import forge.gui.framework.DragCell; import forge.gui.framework.FScreen; import forge.gui.home.sanctioned.CSubmenuDraft; import forge.gui.toolbox.itemmanager.CardManager; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; import forge.item.PaperCard; import forge.item.InventoryItem; import forge.util.ItemPoolView; @@ -274,9 +273,9 @@ public class CEditorDraftingProcess extends ACEditorBase { deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); - + // set catalog table to single-selection only mode - getCatalogManager().getTable().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + getCatalogManager().setAllowMultipleSelections(false); } /* (non-Javadoc) @@ -311,6 +310,6 @@ public class CEditorDraftingProcess extends ACEditorBase { } // set catalog table back to free-selection mode - getCatalogManager().getTable().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + getCatalogManager().setAllowMultipleSelections(true); } } diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java index 6caa1b5d77a..47328b758e5 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java @@ -33,7 +33,7 @@ import forge.gui.home.sanctioned.CSubmenuDraft; import forge.gui.home.sanctioned.CSubmenuSealed; import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.SItemManagerUtil; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; import forge.item.PaperCard; import forge.item.InventoryItem; import forge.util.storage.IStorage; diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorPreferences.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorPreferences.java index 26314665c7e..0f077dc89ae 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorPreferences.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorPreferences.java @@ -5,15 +5,15 @@ import java.awt.event.ItemListener; import java.util.HashMap; import javax.swing.JCheckBox; -import javax.swing.JTable; import forge.Command; import forge.gui.deckeditor.CDeckEditorUI; +import forge.gui.toolbox.itemmanager.ItemManager; import forge.gui.toolbox.itemmanager.SItemManagerIO; import forge.gui.toolbox.itemmanager.SItemManagerIO.EditorPreference; -import forge.gui.toolbox.itemmanager.table.TableColumnInfo; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.TableColumnInfo; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.ColumnName; import forge.gui.deckeditor.views.VEditorPreferences; import forge.gui.framework.ICDoc; import forge.item.InventoryItem; @@ -79,11 +79,11 @@ public enum CEditorPreferences implements ICDoc { @Override public void itemStateChanged(ItemEvent arg0) { TableColumnInfo col = SColumnUtil.getColumn(name); - final JTable table = (col.getEnumValue().substring(0, 4).equals("DECK")) - ? CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckManager().getTable() - : CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getCatalogManager().getTable(); - SColumnUtil.toggleColumn(table, col); - SItemManagerIO.savePreferences(table); + final ItemManager itemManager = (col.getEnumValue().substring(0, 4).equals("DECK")) + ? CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckManager() + : CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getCatalogManager(); + SColumnUtil.toggleColumn(itemManager.getTable().getTable(), col); + SItemManagerIO.savePreferences(itemManager); } }); } @@ -115,7 +115,7 @@ public enum CEditorPreferences implements ICDoc { curEditor.getDeckManager().getTable().setWantElasticColumns(wantElastic); } SItemManagerIO.setPref(EditorPreference.elastic_columns, wantElastic); - SItemManagerIO.savePreferences(curEditor.getCatalogManager().getTable()); } }); + SItemManagerIO.savePreferences(curEditor.getCatalogManager()); } }); VEditorPreferences.SINGLETON_INSTANCE.getChbCardDisplayUnique().addItemListener(new ItemListener() { @Override public void itemStateChanged(final ItemEvent e) { @@ -128,7 +128,7 @@ public enum CEditorPreferences implements ICDoc { curEditor.getDeckManager().updateView(true); } SItemManagerIO.setPref(EditorPreference.display_unique_only, wantUnique); - SItemManagerIO.savePreferences(curEditor.getCatalogManager().getTable()); } }); + SItemManagerIO.savePreferences(curEditor.getCatalogManager()); } }); } /* (non-Javadoc) diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java index 0db9f139098..acc3eab95f2 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java @@ -40,9 +40,9 @@ import forge.gui.framework.FScreen; import forge.gui.home.quest.CSubmenuQuestDecks; import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.SItemManagerUtil; -import forge.gui.toolbox.itemmanager.table.TableColumnInfo; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.TableColumnInfo; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.ColumnName; import forge.item.PaperCard; import forge.item.InventoryItem; import forge.quest.QuestController; diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java index 349ac1d1646..1a13626d9ad 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java @@ -50,9 +50,9 @@ import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSkin; import forge.gui.toolbox.itemmanager.SpellShopManager; import forge.gui.toolbox.itemmanager.SItemManagerUtil; -import forge.gui.toolbox.itemmanager.table.TableColumnInfo; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.TableColumnInfo; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.ColumnName; import forge.item.BoosterPack; import forge.item.PaperCard; import forge.item.FatPack; diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorVariant.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorVariant.java index e7ae87f16ee..5b161d45c89 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorVariant.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CEditorVariant.java @@ -33,9 +33,9 @@ import forge.gui.framework.DragCell; import forge.gui.framework.FScreen; import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.SItemManagerUtil; -import forge.gui.toolbox.itemmanager.table.TableColumnInfo; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.TableColumnInfo; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.ColumnName; import forge.item.PaperCard; import forge.item.InventoryItem; import forge.util.ItemPool; diff --git a/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuChallenges.java b/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuChallenges.java index 5430dc48f70..80af9cd4d98 100644 --- a/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuChallenges.java +++ b/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuChallenges.java @@ -111,7 +111,7 @@ public enum VSubmenuChallenges implements IVSubmenu, IVQuest pnlStats.add(lblWorld, constraints); pnlStats.add(cbPlant, constraints); pnlStats.add(cbCharm, constraints); - cbxPet.addTo(pnlStats, constraints); + pnlStats.add(cbxPet.getComponent(), constraints); pnlStats.add(lblZep, "w 130px!, h 60px!, gap 0 0 0 5px"); pnlStats.setOpaque(false); } diff --git a/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuDuels.java b/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuDuels.java index f5f7b3d98e1..bfc3f4a9c20 100644 --- a/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuDuels.java +++ b/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuDuels.java @@ -109,7 +109,7 @@ public enum VSubmenuDuels implements IVSubmenu, IVQuestStats { pnlStats.add(lblWorld, constraints); pnlStats.add(cbPlant, constraints); pnlStats.add(cbCharm, constraints); - cbxPet.addTo(pnlStats, constraints); + pnlStats.add(cbxPet.getComponent(), constraints); pnlStats.setOpaque(false); } diff --git a/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java b/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java index 1600b553bf9..5f6b878a866 100644 --- a/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java +++ b/forge-gui/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java @@ -324,28 +324,28 @@ public enum VSubmenuQuestData implements IVSubmenu { pnlRestrictions.add(lblStartingPool, constraints + lblWidthStart); - cbxStartingPool.addTo(pnlRestrictions, constraints + cboWidthStart); + pnlRestrictions.add(cbxStartingPool.getComponent(), constraints + cboWidthStart); /* out of these 3 groups only one will be visible */ pnlRestrictions.add(lblUnrestricted, constraints + hidemode + "spanx 2"); pnlRestrictions.add(lblPreconDeck, constraints + lblWidthStart); - cbxPreconDeck.addTo(pnlRestrictions, constraints + cboWidthStart); + pnlRestrictions.add(cbxPreconDeck.getComponent(), constraints + cboWidthStart); pnlRestrictions.add(lblCustomDeck, constraints + lblWidthStart); - cbxCustomDeck.addTo(pnlRestrictions, constraints + cboWidthStart); // , skip 1 + pnlRestrictions.add(cbxCustomDeck.getComponent(), constraints + cboWidthStart); // , skip 1 pnlRestrictions.add(lblFormat, constraints + lblWidthStart); - cbxFormat.addTo(pnlRestrictions, constraints + cboWidthStart); // , skip 1 + pnlRestrictions.add(cbxFormat.getComponent(), constraints + cboWidthStart); // , skip 1 pnlRestrictions.add(btnDefineCustomFormat, constraints + hidemode + "spanx 2, w 240px"); // Prized cards options pnlRestrictions.add(lblPrizedCards, constraints + lblWidth); - cbxPrizedCards.addTo(pnlRestrictions, constraints + cboWidth); + pnlRestrictions.add(cbxPrizedCards.getComponent(), constraints + cboWidth); pnlRestrictions.add(lblPrizeFormat, constraints + lblWidthStart); - cbxPrizeFormat.addTo(pnlRestrictions, constraints + cboWidthStart); // , skip 1 + pnlRestrictions.add(cbxPrizeFormat.getComponent(), constraints + cboWidthStart); // , skip 1 pnlRestrictions.add(btnPrizeDefineCustomFormat, constraints + hidemode + "spanx 2, w 240px"); pnlRestrictions.add(lblPrizeSameAsStarting, constraints + hidemode + "spanx 2"); pnlRestrictions.add(lblPrizeUnrestricted, constraints + hidemode + "spanx 2"); @@ -354,10 +354,10 @@ public enum VSubmenuQuestData implements IVSubmenu { pnlRestrictions.add(lblPreferredColor, constraints + lblWidthStart); - cbxPreferredColor.addTo(pnlRestrictions, constraints + cboWidthStart + ", wrap"); + pnlRestrictions.add(cbxPreferredColor.getComponent(), constraints + cboWidthStart + ", wrap"); pnlRestrictions.add(lblStartingWorld, constraints + lblWidthStart); - cbxStartingWorld.addTo(pnlRestrictions, constraints + cboWidthStart); + pnlRestrictions.add(cbxStartingWorld.getComponent(), constraints + cboWidthStart); // cboAllowUnlocks.setOpaque(false); pnlRestrictions.setOpaque(false); diff --git a/forge-gui/src/main/java/forge/gui/toolbox/FComboBox.java b/forge-gui/src/main/java/forge/gui/toolbox/FComboBox.java index a82c826513d..f84aacd062c 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/FComboBox.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/FComboBox.java @@ -1,6 +1,7 @@ package forge.gui.toolbox; import java.awt.Component; +import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.LayoutManager; @@ -80,6 +81,18 @@ public class FComboBox extends JComboBox { FSkin.get(this).setFont(skinFont0); } + public int getAutoSizeWidth() { + int maxWidth = 0; + FontMetrics metrics = this.getGraphics().getFontMetrics(this.getFont()); + for (int i = 0; i < this.getItemCount(); i++) { + int width = metrics.stringWidth(this.getItemAt(i).toString()); + if (width > maxWidth) { + maxWidth = width; + } + } + return maxWidth + 28; //leave room for arrow and padding + } + @Override protected void paintComponent(Graphics g) { super.paintComponent(g); diff --git a/forge-gui/src/main/java/forge/gui/toolbox/FComboBoxWrapper.java b/forge-gui/src/main/java/forge/gui/toolbox/FComboBoxWrapper.java index 85ea9492e2d..1fbc40c181c 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/FComboBoxWrapper.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/FComboBoxWrapper.java @@ -128,14 +128,9 @@ public class FComboBoxWrapper { public void setEnabled(boolean aFlag) { this.comboBox.setEnabled(aFlag); } - - public void addTo(Container container) { - addTo(container, null); - } - - public void addTo(Container container, Object constraints0) { - container.add(this.comboBox, constraints0); - this.constraints = constraints0; + + public int getAutoSizeWidth() { + return this.comboBox.getAutoSizeWidth(); } public JComponent getComponent() { //disguise as component for sake of rare places that need to access component in wrapper diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java index 2656bb7fcec..d6ab28c79e8 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java @@ -33,7 +33,6 @@ import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.KeyStroke; -import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionListener; @@ -46,6 +45,7 @@ import com.google.common.collect.Iterables; import forge.Command; import forge.gui.GuiUtils; +import forge.gui.toolbox.FComboBoxWrapper; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FTextField; @@ -53,8 +53,8 @@ import forge.gui.toolbox.LayoutHelper; import forge.gui.toolbox.ToolTipListener; import forge.gui.toolbox.FSkin.Colors; import forge.gui.toolbox.itemmanager.filters.ItemFilter; -import forge.gui.toolbox.itemmanager.table.ItemTable; -import forge.gui.toolbox.itemmanager.table.ItemTableModel; +import forge.gui.toolbox.itemmanager.views.ItemListView; +import forge.gui.toolbox.itemmanager.views.ItemView; import forge.item.InventoryItem; import forge.util.Aggregates; import forge.util.ItemPool; @@ -100,17 +100,18 @@ public abstract class ItemManager extends JPanel { private final FLabel lblCaption = new FLabel.Builder() .fontAlign(SwingConstants.LEFT) - .fontSize(11) + .fontSize(12) .build(); private final FLabel lblRatio = new FLabel.Builder() .tooltip("Number of cards shown / Total available cards") .fontAlign(SwingConstants.LEFT) - .fontSize(11) + .fontSize(12) .build(); - private final ItemTable table; - private final JScrollPane tableScroller; + private final FComboBoxWrapper> cbViews = new FComboBoxWrapper>(); + private final ItemListView table; + private final JScrollPane viewScroller; private boolean initialized; protected boolean lockFiltering; @@ -125,8 +126,10 @@ public abstract class ItemManager extends JPanel { this.genericType = genericType0; this.wantUnique = wantUnique0; this.model = new ItemManagerModel(this, genericType0); - this.table = new ItemTable(this, this.model); - this.tableScroller = new JScrollPane(this.table); + this.table = new ItemListView(this, this.model); + this.table.setAllowMultipleSelections(false); + this.viewScroller = new JScrollPane(this.table.getComponent()); + this.cbViews.addItem(this.table); } /** @@ -136,12 +139,11 @@ public abstract class ItemManager extends JPanel { if (this.initialized) { return; } //avoid initializing more than once //build table view - this.table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - this.tableScroller.setOpaque(false); - this.tableScroller.getViewport().setOpaque(false); - this.tableScroller.setBorder(null); - this.tableScroller.getViewport().setBorder(null); - this.tableScroller.getVerticalScrollBar().addAdjustmentListener(new ToolTipListener()); + this.viewScroller.setOpaque(false); + this.viewScroller.getViewport().setOpaque(false); + this.viewScroller.setBorder(null); + this.viewScroller.getViewport().setBorder(null); + this.viewScroller.getVerticalScrollBar().addAdjustmentListener(new ToolTipListener()); //build enable filters checkbox ItemFilter.layoutCheckbox(this.chkEnableFilters); @@ -177,7 +179,8 @@ public abstract class ItemManager extends JPanel { this.add(this.btnFilters); this.add(this.lblCaption); this.add(this.lblRatio); - this.add(this.tableScroller); + this.add(this.cbViews.getComponent()); + this.add(this.viewScroller); final Runnable cmdAddCurrentSearch = new Runnable() { @Override @@ -245,8 +248,9 @@ public abstract class ItemManager extends JPanel { helper.fillLine(this.pnlButtons, this.pnlButtons.getComponentCount() > 0 ? 32: 1); //just show border if no bottoms helper.include(this.btnFilters, 61, FTextField.HEIGHT); helper.include(this.lblCaption, this.lblCaption.getAutoSizeWidth(), FTextField.HEIGHT); - helper.fillLine(this.lblRatio, FTextField.HEIGHT); - helper.fill(this.tableScroller); + helper.fillLine(this.lblRatio, FTextField.HEIGHT, this.cbViews.getAutoSizeWidth()); //leave room for cbViews + helper.fillLine(this.cbViews.getComponent(), FTextField.HEIGHT); + helper.fill(this.viewScroller); } /** @@ -336,26 +340,10 @@ public abstract class ItemManager extends JPanel { this.updateView(true); } - /** - * - * getTable. - * - * @return ItemTable - */ - public ItemTable getTable() { + public ItemListView getTable() { return this.table; } - /** - * - * getTableModel. - * - * @return ItemTableModel - */ - public ItemTableModel getTableModel() { - return this.table.getTableModel(); - } - /** * * getSelectedItem. @@ -386,6 +374,26 @@ public abstract class ItemManager extends JPanel { this.table.setSelectedItem(item); } + /** + * + * getSelectedItem. + * + * @return T + */ + public int getSelectedIndex() { + return this.table.getSelectedIndex(); + } + + /** + * + * setSelectedItem. + * + * @param item - Item to select + */ + public void setSelectedIndex(int index) { + this.table.setSelectedIndex(index); + } + /** * * addItem. @@ -394,7 +402,7 @@ public abstract class ItemManager extends JPanel { * @param qty */ public void addItem(final T item, int qty) { - final int n = this.table.getSelectedRow(); + final int n = this.table.getSelectedIndex(); this.pool.add(item, qty); if (this.isUnfiltered()) { this.model.addItem(item, qty); @@ -410,7 +418,7 @@ public abstract class ItemManager extends JPanel { * @param itemsToAdd */ public void addItems(Iterable> itemsToAdd) { - final int n = this.table.getSelectedRow(); + final int n = this.table.getSelectedIndex(); this.pool.addAll(itemsToAdd); if (this.isUnfiltered()) { this.model.addItems(itemsToAdd); @@ -427,7 +435,7 @@ public abstract class ItemManager extends JPanel { * @param qty */ public void removeItem(final T item, int qty) { - final int n = this.table.getSelectedRow(); + final int n = this.table.getSelectedIndex(); this.pool.remove(item, qty); if (this.isUnfiltered()) { this.model.removeItem(item, qty); @@ -443,7 +451,7 @@ public abstract class ItemManager extends JPanel { * @param itemsToRemove */ public void removeItems(List> itemsToRemove) { - final int n = this.table.getSelectedRow(); + final int n = this.table.getSelectedIndex(); for (Map.Entry item : itemsToRemove) { this.pool.remove(item.getKey(), item.getValue()); if (this.isUnfiltered()) { @@ -627,8 +635,8 @@ public abstract class ItemManager extends JPanel { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - if (table.getRowCount() > 0 && table.getSelectedRowCount() == 0) { - table.selectAndScrollTo(0); + if (table.getCount() > 0 && table.getSelectedIndices().length == 0) { + table.setSelectedIndex(0); } } }); @@ -703,7 +711,7 @@ public abstract class ItemManager extends JPanel { public void setAllowMultipleSelections(boolean allowMultipleSelections0) { if (this.allowMultipleSelections == allowMultipleSelections0) { return; } this.allowMultipleSelections = allowMultipleSelections0; - this.table.setSelectionMode(allowMultipleSelections0 ? ListSelectionModel.MULTIPLE_INTERVAL_SELECTION : ListSelectionModel.SINGLE_SELECTION); + this.table.setAllowMultipleSelections(allowMultipleSelections0); } /** @@ -712,7 +720,7 @@ public abstract class ItemManager extends JPanel { * */ public void focus() { - this.table.requestFocusInWindow(); + this.table.getComponent().requestFocusInWindow(); } /** diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManagerModel.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManagerModel.java index 3472b8e7e96..43cc6a66815 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManagerModel.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManagerModel.java @@ -98,7 +98,7 @@ public final class ItemManagerModel { final boolean wasThere = this.data.count(item0) > 0; if (wasThere) { this.data.remove(item0, qty); - this.itemManager.getTableModel().fireTableDataChanged(); + this.itemManager.getTable().getTableModel().fireTableDataChanged(); } } @@ -109,7 +109,7 @@ public final class ItemManagerModel { */ public void addItem(final T item0, int qty) { this.data.add(item0, qty); - this.itemManager.getTableModel().fireTableDataChanged(); + this.itemManager.getTable().getTableModel().fireTableDataChanged(); } /** @@ -119,8 +119,9 @@ public final class ItemManagerModel { */ public void addItems(final Iterable> items0) { this.data.addAll(items0); - this.itemManager.getTableModel().fireTableDataChanged(); + this.itemManager.getTable().getTableModel().fireTableDataChanged(); } + /** * Sets whether this table's pool of items is in infinite supply. If false, items in the * table have a limited number of copies. diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/SItemManagerIO.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/SItemManagerIO.java index 25c17238a59..4367d1290b9 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/SItemManagerIO.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/SItemManagerIO.java @@ -7,7 +7,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; -import javax.swing.JTable; + import javax.xml.stream.XMLEventFactory; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLEventWriter; @@ -18,10 +18,10 @@ import javax.xml.stream.events.Attribute; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; -import forge.gui.toolbox.itemmanager.table.TableColumnInfo; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.SortState; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.TableColumnInfo; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.ColumnName; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.SortState; import forge.item.InventoryItem; import forge.properties.NewConstants; @@ -89,8 +89,8 @@ public class SItemManagerIO { } /** Publicly-accessible save method, to neatly handle exception handling. */ - public static void savePreferences(JTable table) { - try { save(table); } + public static void savePreferences(ItemManager itemManager) { + try { save(itemManager); } catch (final Exception e) { e.printStackTrace(); } } @@ -104,9 +104,9 @@ public class SItemManagerIO { * * Save list view * - * @param table + * @param itemManager */ - private static void save(JTable table) throws Exception { + private static void save(ItemManager itemManager) throws Exception { final XMLOutputFactory out = XMLOutputFactory.newInstance(); final XMLEventWriter writer = out.createXMLEventWriter(new FileOutputStream(NewConstants.EDITOR_PREFERENCES_FILE.userPrefLoc)); @@ -130,7 +130,7 @@ public class SItemManagerIO { for (final ColumnName c : COLS.keySet()) { // If column is not in view, retain previous model index for the next time // that the column will be in the view. - int index = SColumnUtil.getColumnViewIndex(table, c); + int index = SColumnUtil.getColumnViewIndex(itemManager.getTable().getTable(), c); if (index == -1) { index = COLS.get(c).getModelIndex(); } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardSearchFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardSearchFilter.java index a3c1b92ce09..9baa8f384c1 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardSearchFilter.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardSearchFilter.java @@ -68,7 +68,7 @@ public class CardSearchFilter extends TextSearchFilter { cbSearchMode = new FComboBoxWrapper(); cbSearchMode.addItem("in"); cbSearchMode.addItem("not in"); - cbSearchMode.addTo(widget); + widget.add(cbSearchMode.getComponent()); cbSearchMode.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent arg0) { diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java deleted file mode 100644 index 5412252cab1..00000000000 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Forge: Play Magic: the Gathering. - * Copyright (C) 2011 Forge Team - * - * 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 3 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 . - */ -package forge.gui.toolbox.itemmanager.table; - -import java.awt.Color; -import java.awt.Component; -import java.awt.KeyboardFocusManager; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import javax.swing.JComponent; -import javax.swing.JTable; -import javax.swing.JViewport; -import javax.swing.table.DefaultTableColumnModel; -import javax.swing.table.JTableHeader; -import javax.swing.table.TableCellRenderer; -import javax.swing.table.TableColumn; - -import forge.gui.toolbox.FSkin; -import forge.gui.toolbox.itemmanager.ItemManager; -import forge.gui.toolbox.itemmanager.ItemManagerModel; -import forge.item.InventoryItem; - - -/** - * ItemTable. - * - * @param - * the generic type - */ -@SuppressWarnings("serial") -public final class ItemTable extends JTable { - private final FSkin.JTableSkin> skin; - private final ItemManager itemManager; - private final ItemTableModel tableModel; - - public ItemManager getItemManager() { - return this.itemManager; - } - - public ItemTableModel getTableModel() { - return this.tableModel; - } - - /** - * ItemTable Constructor. - * - * @param itemManager0 - * @param model0 - */ - public ItemTable(ItemManager itemManager0, ItemManagerModel model0) { - this.itemManager = itemManager0; - this.tableModel = new ItemTableModel(this, model0); - - // use different selection highlight colors for focused vs. unfocused tables - skin = FSkin.get(this); - skin.setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); - skin.setSelectionForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); - addFocusListener(new FocusListener() { - @Override - public void focusLost(FocusEvent e) { - if (!e.isTemporary()) { - skin.setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); - } - } - - @Override - public void focusGained(FocusEvent e) { - skin.setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); - // if nothing selected when we gain focus, select the first row (if exists) - if (-1 == getSelectedRow() && 0 < getRowCount()) { - setRowSelectionInterval(0, 0); - } - } - }); - - skin.setFont(FSkin.getFont(12)); - setBorder(null); - getTableHeader().setBorder(null); - setRowHeight(18); - setWantElasticColumns(false); - - // prevent tables from intercepting tab focus traversals - setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, null); - setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, null); - } - - /** - * Applies a EditorTableModel and a model listener to this instance's JTable. - * - * @param cols   List> of additional columns for this - */ - public void setup(final List> cols) { - final DefaultTableColumnModel colmodel = new DefaultTableColumnModel(); - - //ensure columns ordered properly - Collections.sort(cols, new Comparator>() { - @Override - public int compare(TableColumnInfo arg0, TableColumnInfo arg1) { - return Integer.compare(arg0.getIndex(), arg1.getIndex()); - } - }); - - for (TableColumnInfo item : cols) { - item.setModelIndex(colmodel.getColumnCount()); - if (item.isShowing()) { colmodel.addColumn(item); } - } - - this.tableModel.addListeners(); - setModel(this.tableModel); - setColumnModel(colmodel); - - this.tableModel.setup(); - this.tableModel.refreshSort(); - - getTableHeader().setBackground(new Color(200, 200, 200)); - } - - private String _getCellTooltip(TableCellRenderer renderer, int row, int col, Object val) { - Component cell = renderer.getTableCellRendererComponent( - this, val, false, false, row, col); - - // if we're conditionally showing the tooltip, check to see - // if we shouldn't show it - if (!(cell instanceof AlwaysShowToolTip)) - { - // if there's enough room (or there's no value), no tooltip - // we use '>' here instead of '>=' since that seems to be the - // threshold for where the ellipses appear for the default - // JTable renderer - int requiredWidth = cell.getPreferredSize().width; - TableColumn tableColumn = columnModel.getColumn(col); - if (null == val || tableColumn.getWidth() > requiredWidth) { - return null; - } - } - - // use a pre-set tooltip if it exists - if (cell instanceof JComponent) - { - JComponent jcell = (JComponent)cell; - String tip = jcell.getToolTipText(); - if (null != tip) - { - return tip; - } - } - - // otherwise, show the full text in the tooltip - return String.valueOf(val); - } - - // column headers - @Override - protected JTableHeader createDefaultTableHeader() { - return new JTableHeader(columnModel) { - public String getToolTipText(MouseEvent e) { - int col = columnModel.getColumnIndexAtX(e.getPoint().x); - if (col < 0) { return null; } - TableColumn tableColumn = columnModel.getColumn(col); - TableCellRenderer headerRenderer = tableColumn.getHeaderRenderer(); - if (null == headerRenderer) { - headerRenderer = getDefaultRenderer(); - } - - return _getCellTooltip( - headerRenderer, -1, col, tableColumn.getHeaderValue()); - } - }; - } - - // cell data - @Override - public String getToolTipText(MouseEvent e) { - Point p = e.getPoint(); - int row = rowAtPoint(p); - int col = columnAtPoint(p); - - if (col >= getColumnCount() || row >= getRowCount()) { - return null; - } - - Object val = getValueAt(row, col); - if (null == val) { - return null; - } - - return _getCellTooltip(getCellRenderer(row, col), row, col, val); - } - - private int lastTooltipRow = -1; - private int lastTooltipCol = -1; - private Point lastTooltipPt; - - @Override - public Point getToolTipLocation(MouseEvent e) { - Point p = e.getPoint(); - final int row = rowAtPoint(p); - final int col = columnAtPoint(p); - if (row == lastTooltipRow && col == lastTooltipCol) { - p = lastTooltipPt; - } else { - lastTooltipRow = row; - lastTooltipCol = col; - lastTooltipPt = p; - } - return new Point(p.x + 10, p.y + 20); - } - - public void setAvailableColumns(final List> cols) { - final DefaultTableColumnModel colModel = new DefaultTableColumnModel(); - - for (TableColumnInfo item : cols) { - item.setModelIndex(colModel.getColumnCount()); - if (item.isShowing()) { colModel.addColumn(item); } - } - - setColumnModel(colModel); - } - - /** - * - * fixSelection. Call this after deleting an item from table. - * - * @param rowLastSelected - * an int - */ - public void fixSelection(final int rowLastSelected) { - if (0 > rowLastSelected) { - return; - } - - // 3 cases: 0 items left, select the same row, select prev row - int numRows = getRowCount(); - if (numRows == 0) { - return; - } - - int newRow = rowLastSelected; - if (numRows <= newRow) { - // move selection away from the last, already missing, option - newRow = numRows - 1; - } - - selectAndScrollTo(newRow); - } - - /** - * - * getSelectedItem. - * - * @return InventoryItem - */ - public T getSelectedItem() { - final int iRow = getSelectedRow(); - return iRow >= 0 ? this.tableModel.rowToItem(iRow).getKey() : null; - } - - /** - * - * getSelectedItems. - * - * @return List - */ - public List getSelectedItems() { - List items = new ArrayList(); - for (int row : getSelectedRows()) { - items.add(tableModel.rowToItem(row).getKey()); - } - return items; - } - - /** - * - * setSelectedItem. - * - * @param item - Item to select - */ - public void setSelectedItem(T item) { - int row = this.tableModel.itemToRow(item); - if (row != -1) { - selectAndScrollTo(row); - } - } - - public void setWantElasticColumns(boolean value) { - setAutoResizeMode(value ? JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS : JTable.AUTO_RESIZE_OFF); - } - - public void selectAndScrollTo(int rowIdx) { - if (!(getParent() instanceof JViewport)) { - return; - } - JViewport viewport = (JViewport)getParent(); - - // compute where we're going and where we are - Rectangle targetRect = getCellRect(rowIdx, 0, true); - Rectangle curViewRect = viewport.getViewRect(); - - // if the target cell is not visible, attempt to jump to a location where it is - // visible but not on the edge of the viewport - if (targetRect.y + targetRect.height > curViewRect.y + curViewRect.height) { - // target is below us, move to position 3 rows below target - targetRect.setLocation(targetRect.x, targetRect.y + (targetRect.height * 3)); - } else if (targetRect.y < curViewRect.y) { - // target is above is, move to position 3 rows above target - targetRect.setLocation(targetRect.x, targetRect.y - (targetRect.height * 3)); - } - - scrollRectToVisible(targetRect); - setRowSelectionInterval(rowIdx, rowIdx); - } -} diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTableModel.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTableModel.java deleted file mode 100644 index 9112a0a64d6..00000000000 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTableModel.java +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Forge: Play Magic: the Gathering. - * Copyright (C) 2011 - * - * 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 3 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 . - */ -package forge.gui.toolbox.itemmanager.table; - -import java.awt.Cursor; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Enumeration; -import java.util.List; -import java.util.Map.Entry; - -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.event.TableModelEvent; -import javax.swing.table.AbstractTableModel; -import javax.swing.table.TableColumn; -import javax.swing.table.TableColumnModel; - -import org.apache.commons.lang3.ArrayUtils; - -import forge.gui.toolbox.FMouseAdapter; -import forge.gui.toolbox.itemmanager.ItemManagerModel; -import forge.gui.toolbox.itemmanager.SItemManagerIO; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.SortState; -import forge.item.InventoryItem; -import forge.util.ItemPoolSorter; - -/** - *

- * ItemTableModel class. - *

- * - * @param - * the generic type - * @author Forge - * @version $Id: ItemTableModel.java 19857 2013-02-24 08:49:52Z Max mtg $ - */ -@SuppressWarnings("serial") -public final class ItemTableModel extends AbstractTableModel { - private final ItemTable table; - private final ItemManagerModel model; - private final CascadeManager cascadeManager = new CascadeManager(); - private final int maxSortDepth = 3; - - /** - * Instantiates a new table model. - * - * @param table0   {@link forge.gui.ItemManager.ItemTable} - * @param model0   {@link forge.gui.ItemManager.ItemManagerModel} - */ - public ItemTableModel(final ItemTable table0, final ItemManagerModel model0) { - this.table = table0; - this.model = model0; - } - - /** */ - @SuppressWarnings("unchecked") - public void setup() { - final Enumeration e = table.getColumnModel().getColumns(); - final TableColumn[] sortcols = new TableColumn[table.getColumnCount()]; - - // Assemble priority sort. - while (e.hasMoreElements()) { - final TableColumnInfo col = (TableColumnInfo) e.nextElement(); - if (col.getSortPriority() > 0) { - sortcols[col.getSortPriority()] = col; - } - } - - final boolean isDeckTable = ((TableColumnInfo) table.getColumnModel() - .getColumn(0)).getEnumValue().substring(0, 4).equals("DECK") - ? true : false; - - cascadeManager.reset(); - - if (sortcols[1] == null) { - if (isDeckTable) { - cascadeManager.add((TableColumnInfo) SColumnUtil.getColumn(ColumnName.DECK_NAME), true); - } - else { - cascadeManager.add((TableColumnInfo) SColumnUtil.getColumn(ColumnName.CAT_NAME), true); - } - } - else { - ArrayUtils.reverse(sortcols); - for (int i = 1; i < sortcols.length; i++) { - if (sortcols[i] != null) { - cascadeManager.add((TableColumnInfo) sortcols[i], true); - } - } - } - } - - /** - * Row to item. - * - * @param row - the row - * @return the item - */ - public Entry rowToItem(final int row) { - final List> orderedList = this.model.getOrderedList(); - return (row >= 0) && (row < orderedList.size()) ? orderedList.get(row) : null; - } - - /** - * Item to row. - * - * @param item - the item - * @return the row - */ - public int itemToRow(final T item) { //TODO: Consider optimizing this if used frequently - final List> orderedList = this.model.getOrderedList(); - for (int i = 0; i < orderedList.size(); i++) { - if (orderedList.get(i).getKey() == item) { - return i; - } - } - return -1; - } - - public void onSelectionChange(final ItemTable table) { - final int row = table.getSelectedRow(); - if (row != -1) { - ListSelectionEvent event = new ListSelectionEvent(table.getItemManager(), row, row, false); - for (ListSelectionListener listener : table.getItemManager().getSelectionListeners()) { - listener.valueChanged(event); - } - } - } - - private final ListSelectionListener listSelectionListener = new ListSelectionListener() { - @Override - public void valueChanged(final ListSelectionEvent arg0) { - ItemTableModel.this.onSelectionChange(table); - } - }; - - private final FocusAdapter focusAdapter = new FocusAdapter() { - @Override - public void focusGained(final FocusEvent e) { - ItemTableModel.this.onSelectionChange(table); - } - }; - - private final FMouseAdapter headerMouseAdapter = new FMouseAdapter(true) { - @SuppressWarnings("unchecked") - @Override - public void onLeftClick(MouseEvent e) { - if (Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR) == table.getTableHeader().getCursor()) { - return; - } - - //toggle column sort - final TableColumnModel colModel = ItemTableModel.this.table.getColumnModel(); - final int columnModelIndex = colModel.getColumnIndexAtX(e.getX()); - final int modelIndex = colModel.getColumn(columnModelIndex).getModelIndex(); - - if (modelIndex < 0) { - return; - } - - // This will invert if needed - // 2012/07/21 - Changed from modelIndex to ColumnModelIndex due to a crash - // Crash was: Hide 2 columns, then search by last column. - ItemTableModel.this.cascadeManager.add((TableColumnInfo) ItemTableModel.this.table.getColumnModel().getColumn(columnModelIndex), false); - ItemTableModel.this.refreshSort(); - ItemTableModel.this.table.tableChanged(new TableModelEvent(ItemTableModel.this)); - ItemTableModel.this.table.repaint(); - if (ItemTableModel.this.table.getRowCount() > 0) { - ItemTableModel.this.table.setRowSelectionInterval(0, 0); - } - SItemManagerIO.savePreferences(ItemTableModel.this.table); - } - - @Override - public void onLeftMouseDragDrop(MouseEvent e) { //save preferences after column moved/resized - SItemManagerIO.savePreferences(ItemTableModel.this.table); - } - }; - - /** - *

- * addListeners. - *

- */ - public void addListeners() { - // updates card detail, listens to any key strokes - table.getSelectionModel().removeListSelectionListener(listSelectionListener); //ensure listener not added multiple times - table.getSelectionModel().addListSelectionListener(listSelectionListener); - - table.removeFocusListener(focusAdapter); //ensure listener not added multiple times - table.addFocusListener(focusAdapter); - - table.getTableHeader().removeMouseListener(headerMouseAdapter); //ensure listener not added multiple times - table.getTableHeader().addMouseListener(headerMouseAdapter); - } - - /** - * Resort. - */ - public void refreshSort() { - if (this.model.getOrderedList().size() == 0) { return; } - - Collections.sort(this.model.getOrderedList(), new MyComparator()); - } - - //========== Overridden from AbstractTableModel - /** {@inheritDoc} */ - @Override - public int findColumn(final String name0) { - return table.getColumnModel().getColumnIndex(name0); - } - - /* (non-Javadoc) - * @see javax.swing.table.TableModel#getColumnCount() - */ - @Override - public int getColumnCount() { - return table.getColumnCount(); - } - - /* (non-Javadoc) - * @see javax.swing.table.TableModel#getRowCount() - */ - @Override - public int getRowCount() { - return this.model.countDistinct(); - } - - /* (non-Javadoc) - * @see javax.swing.table.TableModel#getValueAt(int, int) - */ - @Override - @SuppressWarnings("unchecked") - public Object getValueAt(int iRow, int iCol) { - Entry card = this.rowToItem(iRow); - if (null == card) { - return null; - } - return ((TableColumnInfo) table.getColumnModel().getColumn(table.convertColumnIndexToView(iCol))).getFnDisplay().apply(card); - } - - //========= Custom class handling - - /** - * Manages sorting orders for multiple depths of sorting. - */ - private final class CascadeManager { - private final List> colsToSort = new ArrayList>(3); - private TableSorterCascade sorter = null; - - // Adds a column to sort cascade list. - // If column is first in the cascade, inverts direction of sort. - // Otherwise, sorts in ascending direction. - @SuppressWarnings("unchecked") - public void add(final TableColumnInfo col0, boolean forSetup) { - this.sorter = null; - - if (forSetup) { //just add column unmodified if setting up sort columns - this.colsToSort.add(0, (TableColumnInfo) col0); - } - else { - // Found at top level, should invert - if (colsToSort.size() > 0 && colsToSort.get(0).equals(col0)) { - col0.setSortPriority(1); - col0.setSortState(col0.getSortState() == SortState.ASC - ? SortState.DESC : SortState.ASC); - } - // Found somewhere: move down others, this one to top. - else if (colsToSort.contains(col0)) { - col0.setSortState(SortState.ASC); - this.colsToSort.remove(col0); - this.colsToSort.add(0, (TableColumnInfo) col0); - } - // No column in list; add directly. - else { - col0.setSortPriority(1); - col0.setSortState(SortState.ASC); - this.colsToSort.add(0, (TableColumnInfo) col0); - } - - // Decrement sort priority on remaining columns - for (int i = 1; i < maxSortDepth; i++) { - if (colsToSort.size() == i) { break; } - - if (colsToSort.get(i).getSortPriority() != 0) { - colsToSort.get(i).setSortPriority(i + 1); - } - } - } - - // Unset and remove boundary columns. - if (this.colsToSort.size() > maxSortDepth) { - this.colsToSort.get(maxSortDepth).setSortState(SortState.NONE); - this.colsToSort.get(maxSortDepth).setSortPriority(0); - this.colsToSort.remove(maxSortDepth); - } - } - - public TableSorterCascade getSorter() { - if (this.sorter == null) { - this.sorter = createSorter(); - } - return this.sorter; - } - - public void reset() { - this.colsToSort.clear(); - this.sorter = null; - } - - private TableSorterCascade createSorter() { - final List> oneColSorters - = new ArrayList>(maxSortDepth); - - for (final TableColumnInfo col : this.colsToSort) { - oneColSorters.add(new ItemPoolSorter( - col.getFnSort(), - col.getSortState().equals(SortState.ASC) ? true : false)); - } - - return new TableSorterCascade(oneColSorters); - } - } - - private class MyComparator implements Comparator> { - /* (non-Javadoc) - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - @SuppressWarnings("unchecked") - @Override - public int compare(Entry o1, Entry o2) { - return ItemTableModel.this.cascadeManager.getSorter().compare( - (Entry) o1, (Entry) o2); - } - } -} // ItemTableModel diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/AlwaysShowToolTip.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/AlwaysShowToolTip.java similarity index 92% rename from forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/AlwaysShowToolTip.java rename to forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/AlwaysShowToolTip.java index e6bbcec2c3f..dc6e3018b15 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/AlwaysShowToolTip.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/AlwaysShowToolTip.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.gui.toolbox.itemmanager.table; +package forge.gui.toolbox.itemmanager.views; /** * A marker interface for indicating that tooltips should always be shown for diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/IntegerRenderer.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/IntegerRenderer.java similarity index 94% rename from forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/IntegerRenderer.java rename to forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/IntegerRenderer.java index 9cc35279a93..0a53e753de8 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/IntegerRenderer.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/IntegerRenderer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.gui.toolbox.itemmanager.table; +package forge.gui.toolbox.itemmanager.views; import java.awt.Component; diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java new file mode 100644 index 00000000000..7eacb578605 --- /dev/null +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java @@ -0,0 +1,679 @@ +/* + * Forge: Play Magic: the Gathering. + * Copyright (C) 2011 Forge Team + * + * 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 3 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 . + */ +package forge.gui.toolbox.itemmanager.views; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.KeyboardFocusManager; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Enumeration; +import java.util.List; +import java.util.Map.Entry; + +import javax.swing.JComponent; +import javax.swing.JTable; +import javax.swing.JViewport; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.event.TableModelEvent; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.DefaultTableColumnModel; +import javax.swing.table.JTableHeader; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumn; +import javax.swing.table.TableColumnModel; + +import org.apache.commons.lang3.ArrayUtils; + +import forge.gui.toolbox.FMouseAdapter; +import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.itemmanager.ItemManager; +import forge.gui.toolbox.itemmanager.ItemManagerModel; +import forge.gui.toolbox.itemmanager.SItemManagerIO; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.ColumnName; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.SortState; +import forge.item.InventoryItem; +import forge.util.ItemPoolSorter; + + +/** + * ItemTable. + * + * @param + * the generic type + */ +@SuppressWarnings("serial") +public final class ItemListView extends ItemView { + private final ItemTable table = new ItemTable(); + private final FSkin.JTableSkin skin; + private final ItemTableModel tableModel; + + public ItemTableModel getTableModel() { + return this.tableModel; + } + + /** + * ItemTable Constructor. + * + * @param itemManager0 + * @param model0 + */ + public ItemListView(ItemManager itemManager0, ItemManagerModel model0) { + super(itemManager0); + this.tableModel = new ItemTableModel(model0); + + // use different selection highlight colors for focused vs. unfocused tables + this.skin = FSkin.get(this.table); + this.skin.setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); + this.skin.setSelectionForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + this.table.addFocusListener(new FocusListener() { + @Override + public void focusLost(FocusEvent e) { + if (!e.isTemporary()) { + skin.setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); + } + } + + @Override + public void focusGained(FocusEvent e) { + skin.setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); + // if nothing selected when we gain focus, select the first row (if exists) + if (-1 == getSelectedIndex() && getCount() > 0) { + table.setRowSelectionInterval(0, 0); + } + } + }); + + this.skin.setFont(FSkin.getFont(12)); + this.table.setBorder(null); + this.table.getTableHeader().setBorder(null); + this.table.setRowHeight(18); + setWantElasticColumns(false); + + // prevent tables from intercepting tab focus traversals + this.table.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, null); + this.table.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, null); + } + + /** + * Applies a EditorTableModel and a model listener to this instance's JTable. + * + * @param cols   List> of additional columns for this + */ + public void setup(final List> cols) { + final DefaultTableColumnModel colmodel = new DefaultTableColumnModel(); + + //ensure columns ordered properly + Collections.sort(cols, new Comparator>() { + @Override + public int compare(TableColumnInfo arg0, TableColumnInfo arg1) { + return Integer.compare(arg0.getIndex(), arg1.getIndex()); + } + }); + + for (TableColumnInfo item : cols) { + item.setModelIndex(colmodel.getColumnCount()); + if (item.isShowing()) { colmodel.addColumn(item); } + } + + this.tableModel.addListeners(); + this.table.setModel(this.tableModel); + this.table.setColumnModel(colmodel); + + this.tableModel.setup(); + this.tableModel.refreshSort(); + + this.table.getTableHeader().setBackground(new Color(200, 200, 200)); + } + + private String getCellTooltip(TableCellRenderer renderer, int row, int col, Object val) { + Component cell = renderer.getTableCellRendererComponent( + this.table, val, false, false, row, col); + + // if we're conditionally showing the tooltip, check to see + // if we shouldn't show it + if (!(cell instanceof AlwaysShowToolTip)) + { + // if there's enough room (or there's no value), no tooltip + // we use '>' here instead of '>=' since that seems to be the + // threshold for where the ellipses appear for the default + // JTable renderer + int requiredWidth = cell.getPreferredSize().width; + TableColumn tableColumn = this.table.getColumnModel().getColumn(col); + if (null == val || tableColumn.getWidth() > requiredWidth) { + return null; + } + } + + // use a pre-set tooltip if it exists + if (cell instanceof JComponent) + { + JComponent jcell = (JComponent)cell; + String tip = jcell.getToolTipText(); + if (null != tip) + { + return tip; + } + } + + // otherwise, show the full text in the tooltip + return String.valueOf(val); + } + + public void setAvailableColumns(final List> cols) { + final DefaultTableColumnModel colModel = new DefaultTableColumnModel(); + + for (TableColumnInfo item : cols) { + item.setModelIndex(colModel.getColumnCount()); + if (item.isShowing()) { colModel.addColumn(item); } + } + + table.setColumnModel(colModel); + } + + /** + * + * fixSelection. Call this after deleting an item from table. + * + * @param rowLastSelected + * an int + */ + public void fixSelection(final int rowLastSelected) { + if (0 > rowLastSelected) { + return; + } + + // 3 cases: 0 items left, select the same row, select prev row + int numRows = getCount(); + if (numRows == 0) { + return; + } + + int newRow = rowLastSelected; + if (numRows <= newRow) { + // move selection away from the last, already missing, option + newRow = numRows - 1; + } + + setSelectedIndex(newRow); + } + + public JTable getTable() { + return this.table; + } + + @Override + public JComponent getComponent() { + return this.table; + } + + @Override + protected String getCaption() { + return "List View"; + } + + @Override + public void setAllowMultipleSelections(boolean allowMultipleSelections) { + this.table.setSelectionMode(allowMultipleSelections ? ListSelectionModel.MULTIPLE_INTERVAL_SELECTION : ListSelectionModel.SINGLE_SELECTION); + } + + @Override + public int getSelectedIndex() { + return this.table.getSelectedRow(); + } + + @Override + public T getSelectedItem() { + final int iRow = this.table.getSelectedRow(); + return iRow >= 0 ? this.tableModel.rowToItem(iRow).getKey() : null; + } + + @Override + public int[] getSelectedIndices() { + return this.table.getSelectedRows(); + } + + @Override + public List getSelectedItems() { + List items = new ArrayList(); + for (int row : this.table.getSelectedRows()) { + items.add(tableModel.rowToItem(row).getKey()); + } + return items; + } + + @Override + public void setSelectedIndex(int index) { + if (!(this.table.getParent() instanceof JViewport)) { + return; + } + JViewport viewport = (JViewport)this.table.getParent(); + + // compute where we're going and where we are + Rectangle targetRect = this.table.getCellRect(index, 0, true); + Rectangle curViewRect = viewport.getViewRect(); + + // if the target cell is not visible, attempt to jump to a location where it is + // visible but not on the edge of the viewport + if (targetRect.y + targetRect.height > curViewRect.y + curViewRect.height) { + // target is below us, move to position 3 rows below target + targetRect.setLocation(targetRect.x, targetRect.y + (targetRect.height * 3)); + } + else if (targetRect.y < curViewRect.y) { + // target is above is, move to position 3 rows above target + targetRect.setLocation(targetRect.x, targetRect.y - (targetRect.height * 3)); + } + + this.table.scrollRectToVisible(targetRect); + this.table.setRowSelectionInterval(index, index); + } + + @Override + public void selectAll() { + this.table.selectAll(); + } + + @Override + public int getIndexOfItem(T item) { + return this.tableModel.itemToRow(item); + } + + @Override + public T getItemAtIndex(int index) { + return this.tableModel.rowToItem(index).getKey(); + } + + @Override + public int getCount() { + return this.table.getRowCount(); + } + + @Override + public int getIndexAtPoint(Point p) { + return this.table.rowAtPoint(p); + } + + public void setWantElasticColumns(boolean value) { + this.table.setAutoResizeMode(value ? JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS : JTable.AUTO_RESIZE_OFF); + } + + public final class ItemTable extends JTable { + @Override + protected JTableHeader createDefaultTableHeader() { + return new JTableHeader(columnModel) { + public String getToolTipText(MouseEvent e) { + int col = columnModel.getColumnIndexAtX(e.getPoint().x); + if (col < 0) { return null; } + TableColumn tableColumn = columnModel.getColumn(col); + TableCellRenderer headerRenderer = tableColumn.getHeaderRenderer(); + if (null == headerRenderer) { + headerRenderer = getDefaultRenderer(); + } + + return getCellTooltip( + headerRenderer, -1, col, tableColumn.getHeaderValue()); + } + }; + } + + @Override + public String getToolTipText(MouseEvent e) { + Point p = e.getPoint(); + int row = rowAtPoint(p); + int col = columnAtPoint(p); + + if (col >= getColumnCount() || row >= getRowCount()) { + return null; + } + + Object val = getValueAt(row, col); + if (null == val) { + return null; + } + + return getCellTooltip(getCellRenderer(row, col), row, col, val); + } + + private int lastTooltipRow = -1; + private int lastTooltipCol = -1; + private Point lastTooltipPt; + + @Override + public Point getToolTipLocation(MouseEvent e) { + Point p = e.getPoint(); + final int row = rowAtPoint(p); + final int col = columnAtPoint(p); + if (row == lastTooltipRow && col == lastTooltipCol) { + p = lastTooltipPt; + } else { + lastTooltipRow = row; + lastTooltipCol = col; + lastTooltipPt = p; + } + return new Point(p.x + 10, p.y + 20); + } + } + + public final class ItemTableModel extends AbstractTableModel { + private final ItemManagerModel model; + private final CascadeManager cascadeManager = new CascadeManager(); + private final int maxSortDepth = 3; + + /** + * Instantiates a new table model. + * + * @param table0   {@link forge.gui.ItemManager.ItemTable} + * @param model0   {@link forge.gui.ItemManager.ItemManagerModel} + */ + public ItemTableModel(final ItemManagerModel model0) { + this.model = model0; + } + + /** */ + @SuppressWarnings("unchecked") + public void setup() { + final Enumeration e = table.getColumnModel().getColumns(); + final TableColumn[] sortcols = new TableColumn[table.getColumnCount()]; + + // Assemble priority sort. + while (e.hasMoreElements()) { + final TableColumnInfo col = (TableColumnInfo) e.nextElement(); + if (col.getSortPriority() > 0) { + sortcols[col.getSortPriority()] = col; + } + } + + final boolean isDeckTable = ((TableColumnInfo) table.getColumnModel() + .getColumn(0)).getEnumValue().substring(0, 4).equals("DECK") + ? true : false; + + cascadeManager.reset(); + + if (sortcols[1] == null) { + if (isDeckTable) { + cascadeManager.add((TableColumnInfo) SColumnUtil.getColumn(ColumnName.DECK_NAME), true); + } + else { + cascadeManager.add((TableColumnInfo) SColumnUtil.getColumn(ColumnName.CAT_NAME), true); + } + } + else { + ArrayUtils.reverse(sortcols); + for (int i = 1; i < sortcols.length; i++) { + if (sortcols[i] != null) { + cascadeManager.add((TableColumnInfo) sortcols[i], true); + } + } + } + } + + /** + * Row to item. + * + * @param row - the row + * @return the item + */ + public Entry rowToItem(final int row) { + final List> orderedList = this.model.getOrderedList(); + return (row >= 0) && (row < orderedList.size()) ? orderedList.get(row) : null; + } + + /** + * Item to row. + * + * @param item - the item + * @return the row + */ + public int itemToRow(final T item) { //TODO: Consider optimizing this if used frequently + final List> orderedList = this.model.getOrderedList(); + for (int i = 0; i < orderedList.size(); i++) { + if (orderedList.get(i).getKey() == item) { + return i; + } + } + return -1; + } + + public void onSelectionChange() { + final int row = getSelectedIndex(); + if (row != -1) { + ListSelectionEvent event = new ListSelectionEvent(getItemManager(), row, row, false); + for (ListSelectionListener listener : getItemManager().getSelectionListeners()) { + listener.valueChanged(event); + } + } + } + + private final ListSelectionListener listSelectionListener = new ListSelectionListener() { + @Override + public void valueChanged(final ListSelectionEvent arg0) { + ItemTableModel.this.onSelectionChange(); + } + }; + + private final FocusAdapter focusAdapter = new FocusAdapter() { + @Override + public void focusGained(final FocusEvent e) { + ItemTableModel.this.onSelectionChange(); + } + }; + + private final FMouseAdapter headerMouseAdapter = new FMouseAdapter(true) { + @SuppressWarnings("unchecked") + @Override + public void onLeftClick(MouseEvent e) { + if (Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR) == table.getTableHeader().getCursor()) { + return; + } + + //toggle column sort + final TableColumnModel colModel = table.getColumnModel(); + final int columnModelIndex = colModel.getColumnIndexAtX(e.getX()); + final int modelIndex = colModel.getColumn(columnModelIndex).getModelIndex(); + + if (modelIndex < 0) { + return; + } + + // This will invert if needed + // 2012/07/21 - Changed from modelIndex to ColumnModelIndex due to a crash + // Crash was: Hide 2 columns, then search by last column. + ItemTableModel.this.cascadeManager.add((TableColumnInfo) table.getColumnModel().getColumn(columnModelIndex), false); + ItemTableModel.this.refreshSort(); + table.tableChanged(new TableModelEvent(ItemTableModel.this)); + table.repaint(); + if (getCount() > 0) { + table.setRowSelectionInterval(0, 0); + } + SItemManagerIO.savePreferences(getItemManager()); + } + + @Override + public void onLeftMouseDragDrop(MouseEvent e) { //save preferences after column moved/resized + SItemManagerIO.savePreferences(getItemManager()); + } + }; + + /** + *

+ * addListeners. + *

+ */ + public void addListeners() { + // updates card detail, listens to any key strokes + table.getSelectionModel().removeListSelectionListener(listSelectionListener); //ensure listener not added multiple times + table.getSelectionModel().addListSelectionListener(listSelectionListener); + + table.removeFocusListener(focusAdapter); //ensure listener not added multiple times + table.addFocusListener(focusAdapter); + + table.getTableHeader().removeMouseListener(headerMouseAdapter); //ensure listener not added multiple times + table.getTableHeader().addMouseListener(headerMouseAdapter); + } + + /** + * Resort. + */ + public void refreshSort() { + if (this.model.getOrderedList().size() == 0) { return; } + + Collections.sort(this.model.getOrderedList(), new MyComparator()); + } + + //========== Overridden from AbstractTableModel + /** {@inheritDoc} */ + @Override + public int findColumn(final String name0) { + return table.getColumnModel().getColumnIndex(name0); + } + + /* (non-Javadoc) + * @see javax.swing.table.TableModel#getColumnCount() + */ + @Override + public int getColumnCount() { + return table.getColumnCount(); + } + + /* (non-Javadoc) + * @see javax.swing.table.TableModel#getRowCount() + */ + @Override + public int getRowCount() { + return this.model.countDistinct(); + } + + /* (non-Javadoc) + * @see javax.swing.table.TableModel#getValueAt(int, int) + */ + @Override + @SuppressWarnings("unchecked") + public Object getValueAt(int iRow, int iCol) { + Entry card = this.rowToItem(iRow); + if (null == card) { + return null; + } + return ((TableColumnInfo) table.getColumnModel().getColumn(table.convertColumnIndexToView(iCol))).getFnDisplay().apply(card); + } + + //========= Custom class handling + + /** + * Manages sorting orders for multiple depths of sorting. + */ + private final class CascadeManager { + private final List> colsToSort = new ArrayList>(3); + private TableSorterCascade sorter = null; + + // Adds a column to sort cascade list. + // If column is first in the cascade, inverts direction of sort. + // Otherwise, sorts in ascending direction. + @SuppressWarnings("unchecked") + public void add(final TableColumnInfo col0, boolean forSetup) { + this.sorter = null; + + if (forSetup) { //just add column unmodified if setting up sort columns + this.colsToSort.add(0, (TableColumnInfo) col0); + } + else { + // Found at top level, should invert + if (colsToSort.size() > 0 && colsToSort.get(0).equals(col0)) { + col0.setSortPriority(1); + col0.setSortState(col0.getSortState() == SortState.ASC + ? SortState.DESC : SortState.ASC); + } + // Found somewhere: move down others, this one to top. + else if (colsToSort.contains(col0)) { + col0.setSortState(SortState.ASC); + this.colsToSort.remove(col0); + this.colsToSort.add(0, (TableColumnInfo) col0); + } + // No column in list; add directly. + else { + col0.setSortPriority(1); + col0.setSortState(SortState.ASC); + this.colsToSort.add(0, (TableColumnInfo) col0); + } + + // Decrement sort priority on remaining columns + for (int i = 1; i < maxSortDepth; i++) { + if (colsToSort.size() == i) { break; } + + if (colsToSort.get(i).getSortPriority() != 0) { + colsToSort.get(i).setSortPriority(i + 1); + } + } + } + + // Unset and remove boundary columns. + if (this.colsToSort.size() > maxSortDepth) { + this.colsToSort.get(maxSortDepth).setSortState(SortState.NONE); + this.colsToSort.get(maxSortDepth).setSortPriority(0); + this.colsToSort.remove(maxSortDepth); + } + } + + public TableSorterCascade getSorter() { + if (this.sorter == null) { + this.sorter = createSorter(); + } + return this.sorter; + } + + public void reset() { + this.colsToSort.clear(); + this.sorter = null; + } + + private TableSorterCascade createSorter() { + final List> oneColSorters + = new ArrayList>(maxSortDepth); + + for (final TableColumnInfo col : this.colsToSort) { + oneColSorters.add(new ItemPoolSorter( + col.getFnSort(), + col.getSortState().equals(SortState.ASC) ? true : false)); + } + + return new TableSorterCascade(oneColSorters); + } + } + + private class MyComparator implements Comparator> { + /* (non-Javadoc) + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @SuppressWarnings("unchecked") + @Override + public int compare(Entry o1, Entry o2) { + return ItemTableModel.this.cascadeManager.getSorter().compare( + (Entry) o1, (Entry) o2); + } + } + } +} diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemView.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemView.java new file mode 100644 index 00000000000..04af7dcad6a --- /dev/null +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemView.java @@ -0,0 +1,55 @@ +package forge.gui.toolbox.itemmanager.views; + +import java.awt.Point; +import java.util.List; + +import javax.swing.JComponent; + +import forge.gui.toolbox.itemmanager.ItemManager; +import forge.item.InventoryItem; + +public abstract class ItemView { + private final ItemManager itemManager; + + protected ItemView(ItemManager itemManager0) { + this.itemManager = itemManager0; + } + + public ItemManager getItemManager() { + return this.itemManager; + } + + public void setSelectedItem(T item) { + int index = this.getIndexOfItem(item); + if (index != -1) { + setSelectedIndex(index); + } + } + + public void focus() { + this.getComponent().requestFocusInWindow(); + } + + public boolean hasFocus() { + return this.getComponent().hasFocus(); + } + + @Override + public String toString() { + return this.getCaption(); //return caption as string for display in combo box + } + + public abstract JComponent getComponent(); + public abstract void setAllowMultipleSelections(boolean allowMultipleSelections); + public abstract T getItemAtIndex(int index); + public abstract int getIndexOfItem(T item); + public abstract int getSelectedIndex(); + public abstract int[] getSelectedIndices(); + public abstract T getSelectedItem(); + public abstract List getSelectedItems(); + public abstract void setSelectedIndex(int index); + public abstract void selectAll(); + public abstract int getCount(); + public abstract int getIndexAtPoint(Point p); + protected abstract String getCaption(); +} diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ManaCostRenderer.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ManaCostRenderer.java similarity index 96% rename from forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ManaCostRenderer.java rename to forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ManaCostRenderer.java index fb1951735e8..715abe208d2 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/ManaCostRenderer.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ManaCostRenderer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.gui.toolbox.itemmanager.table; +package forge.gui.toolbox.itemmanager.views; import java.awt.Component; import java.awt.Graphics; diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/SColumnUtil.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/SColumnUtil.java similarity index 97% rename from forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/SColumnUtil.java rename to forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/SColumnUtil.java index bff798ff79a..fd0b8947ade 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/SColumnUtil.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/SColumnUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.gui.toolbox.itemmanager.table; +package forge.gui.toolbox.itemmanager.views; import java.util.ArrayList; import java.util.Enumeration; diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/SetCodeRenderer.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/SetCodeRenderer.java similarity index 94% rename from forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/SetCodeRenderer.java rename to forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/SetCodeRenderer.java index d49fd38033e..71c60ab04d1 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/SetCodeRenderer.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/SetCodeRenderer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.gui.toolbox.itemmanager.table; +package forge.gui.toolbox.itemmanager.views; import javax.swing.table.DefaultTableCellRenderer; diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/TableColumnInfo.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/TableColumnInfo.java similarity index 94% rename from forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/TableColumnInfo.java rename to forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/TableColumnInfo.java index 711c74393f1..67a975a286c 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/TableColumnInfo.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/TableColumnInfo.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.gui.toolbox.itemmanager.table; +package forge.gui.toolbox.itemmanager.views; import java.util.Map.Entry; @@ -23,7 +23,7 @@ import javax.swing.table.TableColumn; import com.google.common.base.Function; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.SortState; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.SortState; /** * A column object in a EditorTableModel in the card editor. diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/TableSorterCascade.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/TableSorterCascade.java similarity index 95% rename from forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/TableSorterCascade.java rename to forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/TableSorterCascade.java index 36e97c4f3a4..0859b3b1006 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/table/TableSorterCascade.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/TableSorterCascade.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.gui.toolbox.itemmanager.table; +package forge.gui.toolbox.itemmanager.views; import java.util.Comparator; import java.util.List; diff --git a/forge-gui/src/main/java/forge/gui/workshop/CWorkshopUI.java b/forge-gui/src/main/java/forge/gui/workshop/CWorkshopUI.java index f4664b1f93c..512a175cb62 100644 --- a/forge-gui/src/main/java/forge/gui/workshop/CWorkshopUI.java +++ b/forge-gui/src/main/java/forge/gui/workshop/CWorkshopUI.java @@ -28,7 +28,7 @@ import forge.gui.menus.IMenuProvider; import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.SItemManagerIO; import forge.gui.toolbox.itemmanager.SItemManagerIO.EditorPreference; -import forge.gui.toolbox.itemmanager.table.ItemTable; +import forge.gui.toolbox.itemmanager.views.ItemListView; import forge.gui.workshop.menus.CWorkshopUIMenus; import forge.gui.workshop.views.VWorkshopCatalog; import forge.item.PaperCard; @@ -71,7 +71,7 @@ public enum CWorkshopUI implements ICDoc, IMenuProvider { public void initialize() { Singletons.getControl().getForgeMenu().setProvider(this); final CardManager cardManager = VWorkshopCatalog.SINGLETON_INSTANCE.getCardManager(); - final ItemTable cardTable = cardManager.getTable(); + final ItemListView cardTable = cardManager.getTable(); boolean wantElastic = SItemManagerIO.getPref(EditorPreference.elastic_columns); boolean wantUnique = SItemManagerIO.getPref(EditorPreference.display_unique_only); diff --git a/forge-gui/src/main/java/forge/gui/workshop/controllers/CWorkshopCatalog.java b/forge-gui/src/main/java/forge/gui/workshop/controllers/CWorkshopCatalog.java index 496f627bb82..209bd352c43 100644 --- a/forge-gui/src/main/java/forge/gui/workshop/controllers/CWorkshopCatalog.java +++ b/forge-gui/src/main/java/forge/gui/workshop/controllers/CWorkshopCatalog.java @@ -1,12 +1,13 @@ package forge.gui.workshop.controllers; import java.util.List; + import forge.Command; import forge.gui.workshop.views.VWorkshopCatalog; import forge.gui.framework.ICDoc; -import forge.gui.toolbox.itemmanager.table.SColumnUtil; -import forge.gui.toolbox.itemmanager.table.TableColumnInfo; -import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName; +import forge.gui.toolbox.itemmanager.views.SColumnUtil; +import forge.gui.toolbox.itemmanager.views.TableColumnInfo; +import forge.gui.toolbox.itemmanager.views.SColumnUtil.ColumnName; import forge.item.InventoryItem; /**