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 extends ICDoc> 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;
}