diff --git a/.gitattributes b/.gitattributes index d40ec7bfe1e..23889577293 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14794,6 +14794,7 @@ src/main/java/forge/gui/MultiLineLabelUI.java svneol=native#text/plain src/main/java/forge/gui/SOverlayUtils.java -text src/main/java/forge/gui/UnsortedListModel.java -text src/main/java/forge/gui/WrapLayout.java -text +src/main/java/forge/gui/cardlistview/ACEditorBase.java -text src/main/java/forge/gui/cardlistview/AlwaysShowToolTip.java -text src/main/java/forge/gui/cardlistview/EditorTableModel.java -text src/main/java/forge/gui/cardlistview/EditorTableView.java -text diff --git a/src/main/java/forge/gui/cardlistview/ACEditorBase.java b/src/main/java/forge/gui/cardlistview/ACEditorBase.java new file mode 100644 index 00000000000..2814035dd7e --- /dev/null +++ b/src/main/java/forge/gui/cardlistview/ACEditorBase.java @@ -0,0 +1,168 @@ +/* + * 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.cardlistview; + +import javax.swing.SwingUtilities; + +import forge.deck.DeckBase; +import forge.gui.deckeditor.tables.DeckController; +import forge.gui.cardlistview.EditorTableView; +import forge.gui.framework.DragCell; +import forge.gui.framework.ICDoc; +import forge.gui.framework.IVDoc; +import forge.gui.framework.SRearrangingUtil; +import forge.item.InventoryItem; +import forge.view.FView; + +/** + * Maintains a generically typed architecture for various editing + * environments. A basic editor instance requires a card catalog, the + * current deck being edited, and optional filters on the catalog. + *

+ * These requirements are collected in this class and manipulated + * in subclasses for different environments. There are two generic + * types for all card display and filter predicates. + * + *

(A at beginning of class name denotes an abstract class.) + *

(C at beginning of class name denotes a control class.) + * + * @param extends {@link forge.item.InventoryItem} + * @param extends {@link forge.deck.DeckBase} + */ +public abstract class ACEditorBase { + public interface ContextMenuBuilder { + /** + * Adds move-related items to the context menu + * + * @param verb Examples: "Sell", "Add" + * @param nounSingular Examples: "item", "card" + * @param nounPlural Examples: "items", "cards" + * @param destination Examples: null, "to deck", "to sideboard" + */ + public void addMoveItems (String verb, String nounSingular, String nounPlural, String destination); + public void addMoveAlternateItems (String verb, String nounSingular, String nounPlural, String destination); + public void addTextFilterItem (); + } + + private EditorTableView tblCatalog; + private EditorTableView tblDeck; + + /** + * Operation to add one of selected card to current deck. + */ + public abstract void addCard(InventoryItem item, boolean toAlternate, int qty); + + /** + * Operation to remove one of selected card from current deck. + */ + public abstract void removeCard(InventoryItem item, boolean toAlternate, int qty); + + public abstract void buildAddContextMenu(ContextMenuBuilder cmb); + public abstract void buildRemoveContextMenu(ContextMenuBuilder cmb); + + /** + * Resets the cards in the catalog table and current deck table. + */ + public abstract void resetTables(); + + /** + * Gets controller responsible for the current deck being edited. + * + * @return {@link forge.gui.deckeditor.tables.DeckController} + */ + public abstract DeckController getDeckController(); + + /** + * Called when an editor wants to exit. Should confirm save options, + * update next UI screen, etc. + * + * @return boolean   true if safe to exit + */ + public abstract boolean exit(); + + /** + * Resets and initializes the current editor. + */ + public abstract void init(); + + /** + * Gets the EditorTableView holding the cards in the current deck. + * + * @return {@link forge.gui.cardlistview.EditorTableView} + */ + public EditorTableView getTableDeck() { + return this.tblDeck; + } + + /** + * Sets the EditorTableView holding the cards in the current deck. + * + * @param table0   {@link forge.gui.cardlistview.EditorTableView} + */ + public void setTableDeck(final EditorTableView table0) { + this.tblDeck = table0; + } + + /** + * Gets the EditorTableView holding the cards in the current catalog. + * + * @return {@link forge.gui.cardlistview.EditorTableView} + */ + public EditorTableView getTableCatalog() { + return this.tblCatalog; + } + + /** + * Sets the EditorTableView holding the cards in the current catalog. + * + * @param table0   {@link forge.gui.cardlistview.EditorTableView} + */ + public void setTableCatalog(final EditorTableView table0) { + this.tblCatalog = table0; + } + + /** + * Removes the specified tab and returns its parent for later re-adding + */ + protected DragCell removeTab (IVDoc tab) { + final DragCell parent; + if (tab.getParentCell() == null) { + parent = null; + } else { + parent = tab.getParentCell(); + parent.removeDoc(tab); + tab.setParentCell(null); + + if (parent.getDocs().size() > 0) { + // if specified tab was first child of its parent, the new first tab needs re-selecting. + parent.setSelected(parent.getDocs().get(0)); + } else { + // if the parent is now childless, fill in the resultant gap + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + SRearrangingUtil.fillGap(parent); + FView.SINGLETON_INSTANCE.removeDragCell(parent); + } + }); + } + } + + return parent; + } +} diff --git a/src/main/java/forge/gui/cardlistview/EditorTableModel.java b/src/main/java/forge/gui/cardlistview/EditorTableModel.java index b0e6d5b77ac..bb516421a52 100644 --- a/src/main/java/forge/gui/cardlistview/EditorTableModel.java +++ b/src/main/java/forge/gui/cardlistview/EditorTableModel.java @@ -1,8 +1,6 @@ /* * Forge: Play Magic: the Gathering. * Copyright (C) 2011 -import forge.gui.deckeditor.views.VDeckEditorUI; -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 diff --git a/src/main/java/forge/gui/cardlistview/EditorTableView.java b/src/main/java/forge/gui/cardlistview/EditorTableView.java index c19584a5306..48cca07e8d6 100644 --- a/src/main/java/forge/gui/cardlistview/EditorTableView.java +++ b/src/main/java/forge/gui/cardlistview/EditorTableView.java @@ -45,8 +45,8 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; -import forge.gui.deckeditor.SEditorUtil; -import forge.gui.deckeditor.views.ITableContainer; +import forge.gui.cardlistview.SCardListViewUtil; +import forge.gui.cardlistview.ITableContainer; import forge.gui.toolbox.FSkin; import forge.item.InventoryItem; import forge.item.ItemPool; @@ -230,7 +230,7 @@ public final class EditorTableView { /** * Applies a EditorTableModel and a model listener to this instance's JTable. * - * @param view0   the {@link javax.gui.deckeditor.views.ITableCOntainer} + * @param view0   the {@link forge.gui.cardlistview.ITableCOntainer} * @param cols0   List> of additional columns for this */ public void setup(final ITableContainer view0, final List> cols0) { @@ -255,7 +255,7 @@ public final class EditorTableView { this.model.addTableModelListener(new TableModelListener() { @Override public void tableChanged(final TableModelEvent ev) { - SEditorUtil.setStats(EditorTableView.this.model.getCards(), view0); + SCardListViewUtil.setStats(EditorTableView.this.model.getCards(), view0); } }); } diff --git a/src/main/java/forge/gui/cardlistview/ITableContainer.java b/src/main/java/forge/gui/cardlistview/ITableContainer.java index 9cbc42c6327..220a1ba681d 100644 --- a/src/main/java/forge/gui/cardlistview/ITableContainer.java +++ b/src/main/java/forge/gui/cardlistview/ITableContainer.java @@ -2,7 +2,7 @@ package forge.gui.cardlistview; import javax.swing.JTable; -import forge.gui.deckeditor.SEditorUtil; +import forge.gui.cardlistview.SCardListViewUtil; import forge.gui.toolbox.FLabel; /** @@ -17,7 +17,7 @@ public interface ITableContainer { * Sets the table used for displaying cards in this * deck editor container. * - * @param tbl0   {@link forge.gui.deckeditor.tables.EditorTableView} + * @param tbl0   {@link forge.gui.cardlistview.EditorTableView} */ void setTableView(JTable tbl0); diff --git a/src/main/java/forge/gui/cardlistview/SCardListViewIO.java b/src/main/java/forge/gui/cardlistview/SCardListViewIO.java index 2c873288876..7e8b6f4f1e9 100644 --- a/src/main/java/forge/gui/cardlistview/SCardListViewIO.java +++ b/src/main/java/forge/gui/cardlistview/SCardListViewIO.java @@ -19,6 +19,7 @@ import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import forge.gui.cardlistview.SColumnUtil.ColumnName; +import forge.gui.cardlistview.SColumnUtil.SortState; import forge.item.InventoryItem; import forge.properties.NewConstants; @@ -58,7 +59,7 @@ public class SCardListViewIO { /** * Retrieve a preference from the editor preference map. * - * @param name0   {@link forge.gui.deckeditor.SCardListViewUtil.EditorPreference} + * @param name0   {@link forge.gui.cardlistview.SCardListViewUtil.EditorPreference} * @return TableColumnInfo */ public static boolean getPref(final EditorPreference name0) { @@ -68,7 +69,7 @@ public class SCardListViewIO { /** * Set a preference in the editor preference map. * - * @param name0   {@link forge.gui.deckeditor.SCardListViewUtil.EditorPreference} + * @param name0   {@link forge.gui.cardlistview.SCardListViewUtil.EditorPreference} * @param val0   boolean */ public static void setPref(final EditorPreference name0, final boolean val0) { @@ -78,7 +79,7 @@ public class SCardListViewIO { /** * Retrieve a custom column. * - * @param name0   {@link forge.gui.deckeditor.SCardListViewUtil.CatalogColumnName} + * @param name0   {@link forge.gui.cardlistview.SCardListViewUtil.CatalogColumnName} * @return TableColumnInfo */ public static TableColumnInfo getColumn(final ColumnName name0) { diff --git a/src/main/java/forge/gui/cardlistview/SCardListViewUtil.java b/src/main/java/forge/gui/cardlistview/SCardListViewUtil.java index 08d2a26cbbf..ec50e45f251 100644 --- a/src/main/java/forge/gui/cardlistview/SCardListViewUtil.java +++ b/src/main/java/forge/gui/cardlistview/SCardListViewUtil.java @@ -85,7 +85,7 @@ public final class SCardListViewUtil { * * @param   the generic type * @param items   ItemPoolView - * @param view   {@link forge.gui.deckeditor.views.ITableContainer} + * @param view   {@link forge.gui.cardlistview.ITableContainer} */ public static void setStats(final ItemPoolView items, final ITableContainer view) { for (StatTypes s : StatTypes.values()) { diff --git a/src/main/java/forge/gui/cardlistview/SColumnUtil.java b/src/main/java/forge/gui/cardlistview/SColumnUtil.java index 1c694602188..51d6cb33b31 100644 --- a/src/main/java/forge/gui/cardlistview/SColumnUtil.java +++ b/src/main/java/forge/gui/cardlistview/SColumnUtil.java @@ -39,7 +39,7 @@ import forge.card.mana.ManaCost; import forge.deck.DeckBase; import forge.game.limited.DraftRankCache; import forge.gui.deckeditor.CDeckEditorUI; -import forge.gui.deckeditor.controllers.ACEditorBase; +import forge.gui.cardlistview.ACEditorBase; import forge.item.PaperCard; import forge.item.IPaperCard; import forge.item.InventoryItem; @@ -217,7 +217,7 @@ public final class SColumnUtil { public static void toggleColumn(final TableColumnInfo col0) { - final ACEditorBase ed = (ACEditorBase) + /*final ACEditorBase ed = (ACEditorBase) CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController(); final JTable tbl = (col0.getEnumValue().substring(0, 4).equals("DECK")) @@ -247,13 +247,13 @@ public final class SColumnUtil { else { col0.setModelIndex(colmodel.getColumnCount()); } - } + }*/ } /** * Retrieve a custom column (uses identical method in SEditorIO). * - * @param id0   {@link forge.gui.deckeditor.SCardListViewUtil.CatalogColumnName} + * @param id0   {@link forge.gui.cardlistview.SCardListViewUtil.CatalogColumnName} * @return TableColumnInfo */ public static TableColumnInfo getColumn(final ColumnName id0) { @@ -264,7 +264,7 @@ public final class SColumnUtil { * Convenience method to get a column's index in the view (that is, * in the TableColumnModel). * - * @param id0   {@link forge.gui.deckeditor.SCardListViewUtil.CatalogColumnName} + * @param id0   {@link forge.gui.cardlistview.SCardListViewUtil.CatalogColumnName} * @return int * @param extends InventoryItem * @param extends InventoryItem @@ -273,7 +273,7 @@ public final class SColumnUtil { public static int getColumnViewIndex(final ColumnName id0) { - final ACEditorBase ed = (ACEditorBase) + /*final ACEditorBase ed = (ACEditorBase) CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController(); final JTable tbl = (id0.toString().substring(0, 4).equals("DECK")) @@ -287,14 +287,14 @@ public final class SColumnUtil { } catch (final Exception e) { } - return index; + return index;*/return -1; } /** * Convenience method to get a column's index in the model (that is, * in the EditorTableModel, NOT the TableColumnModel). * - * @param id0   {@link forge.gui.deckeditor.SCardListViewUtil.CatalogColumnName} + * @param id0   {@link forge.gui.cardlistview.SCardListViewUtil.CatalogColumnName} * @return int * @param extends InventoryItem * @param extends InventoryItem @@ -303,14 +303,14 @@ public final class SColumnUtil { public static int getColumnModelIndex(final ColumnName id0) { - final ACEditorBase ed = (ACEditorBase) - CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController(); + /*final ACEditorBase ed = (ACEditorBase) + CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController();*/ - final JTable tbl = (id0.toString().substring(0, 4).equals("DECK")) + /*final JTable tbl = (id0.toString().substring(0, 4).equals("DECK")) ? ed.getTableDeck().getTable() : ed.getTableCatalog().getTable(); - return tbl.getColumn(SColumnUtil.getColumn(id0).getIdentifier()).getModelIndex(); + return tbl.getColumn(SColumnUtil.getColumn(id0).getIdentifier()).getModelIndex();*/return -1; } //========== Display functions diff --git a/src/main/java/forge/gui/cardlistview/TableColumnInfo.java b/src/main/java/forge/gui/cardlistview/TableColumnInfo.java index 210ba40d444..102b6dd741a 100644 --- a/src/main/java/forge/gui/cardlistview/TableColumnInfo.java +++ b/src/main/java/forge/gui/cardlistview/TableColumnInfo.java @@ -23,7 +23,7 @@ import javax.swing.table.TableColumn; import com.google.common.base.Function; -import forge.gui.deckeditor.tables.SColumnUtil.SortState; +import forge.gui.cardlistview.SColumnUtil.SortState; /** * A column object in a EditorTableModel in the card editor. @@ -84,12 +84,12 @@ public class TableColumnInfo extends TableColumn { this.sortPriority = position0; } - /** @return {@link forge.gui.deckeditor.tables.EditorTableModel.SortState} */ + /** @return {@link forge.gui.cardlistview.EditorTableModel.SortState} */ public SortState getSortState() { return this.sortstate; } - /** @param state0   {@link forge.gui.deckeditor.tables.TableColumnInfo.SortState} */ + /** @param state0   {@link forge.gui.cardlistview.TableColumnInfo.SortState} */ public void setSortState(final SortState state0) { this.sortstate = state0; }