From 5e0a8a6331ca1b9d217e767dcac1a9ae1642e10e Mon Sep 17 00:00:00 2001 From: drdev Date: Fri, 7 Feb 2014 06:26:28 +0000 Subject: [PATCH] Add view options panel to ItemManager --- .../gui/toolbox/itemmanager/ItemManager.java | 39 ++++++++++++++++--- .../toolbox/itemmanager/views/ImageView.java | 6 +-- .../itemmanager/views/ItemListView.java | 1 + .../toolbox/itemmanager/views/ItemView.java | 10 +++++ 4 files changed, 48 insertions(+), 8 deletions(-) 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 621e37bc1bd..75f3e1ea860 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 @@ -53,6 +53,7 @@ import forge.gui.GuiUtils; import forge.gui.toolbox.ContextMenuBuilder; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.SkinIcon; import forge.gui.toolbox.FSkin.SkinnedCheckBox; import forge.gui.toolbox.FSkin.SkinnedPanel; import forge.gui.toolbox.FTextField; @@ -121,6 +122,13 @@ public abstract class ItemManager extends JPanel { .fontSize(12) .build(); + private static final SkinIcon VIEW_OPTIONS_ICON = FSkin.getIcon(FSkin.DockIcons.ICO_SETTINGS).resize(20, 20); + private final FLabel btnViewOptions = new FLabel.Builder() + .hoverable().selectable(true) + .icon(VIEW_OPTIONS_ICON).iconScaleAuto(false) + .tooltip("Toggle to show/hide options for current view") + .build(); + private final List> views = new ArrayList>(); private final ItemListView listView; private final ImageView imageView; @@ -200,6 +208,9 @@ public abstract class ItemManager extends JPanel { this.add(view.getButton()); view.getButton().setSelected(view == this.currentView); } + this.add(this.btnViewOptions); + this.btnViewOptions.setSelected(this.currentView.getPnlOptions().isVisible()); + this.add(this.currentView.getPnlOptions()); this.add(this.currentView.getScroller()); final Runnable cmdAddCurrentSearch = new Runnable() { @@ -280,6 +291,14 @@ public abstract class ItemManager extends JPanel { this.btnFilters.setCommand(cmdBuildFilterMenu); this.btnFilters.setRightClickCommand(cmdBuildFilterMenu); //show menu on right-click too + this.btnViewOptions.setCommand(new Runnable() { + @Override + public void run() { + currentView.getPnlOptions().setVisible(!currentView.getPnlOptions().isVisible()); + revalidate(); + } + }); + //setup initial filters addDefaultFilters(); @@ -316,13 +335,17 @@ public abstract class ItemManager extends JPanel { } this.currentView.getButton().setSelected(false); + this.remove(this.currentView.getPnlOptions()); this.remove(this.currentView.getScroller()); this.currentView = view; - this.currentView.getButton().setSelected(true); - this.currentView.refresh(itemsToSelect, backupIndexToSelect, 0); - this.add(currentView.getScroller()); + this.btnViewOptions.setSelected(view.getPnlOptions().isVisible()); + view.getButton().setSelected(true); + view.refresh(itemsToSelect, backupIndexToSelect, 0); + + this.add(view.getPnlOptions()); + this.add(view.getScroller()); this.revalidate(); this.repaint(); this.focus(); @@ -370,7 +393,8 @@ public abstract class ItemManager extends JPanel { int captionWidth = this.lblCaption.getAutoSizeWidth(); int ratioWidth = this.lblRatio.getAutoSizeWidth(); int viewButtonWidth = FTextField.HEIGHT; - int availableCaptionWidth = helper.getParentWidth() - viewButtonWidth * this.views.size() - ratioWidth - helper.getX() - (this.views.size() + 2) * helper.getGapX(); + int viewButtonCount = this.views.size() + 1; + int availableCaptionWidth = helper.getParentWidth() - viewButtonWidth * viewButtonCount - ratioWidth - helper.getX() - (viewButtonCount + 2) * helper.getGapX(); if (captionWidth > availableCaptionWidth) { //truncate caption if not enough room for it this.lblCaption.setToolTipText(this.lblCaption.getText()); captionWidth = availableCaptionWidth; @@ -379,11 +403,16 @@ public abstract class ItemManager extends JPanel { this.lblCaption.setToolTipText(null); } helper.include(this.lblCaption, captionWidth, FTextField.HEIGHT); - helper.fillLine(this.lblRatio, FTextField.HEIGHT, (viewButtonWidth + helper.getGapX()) * this.views.size() - 1); //leave room for view buttons + helper.fillLine(this.lblRatio, FTextField.HEIGHT, (viewButtonWidth + helper.getGapX()) * viewButtonCount - viewButtonCount + 1); //leave room for view buttons for (ItemView view : this.views) { helper.include(view.getButton(), viewButtonWidth, FTextField.HEIGHT); helper.offset(-1, 0); } + helper.include(this.btnViewOptions, viewButtonWidth, FTextField.HEIGHT); + helper.newLine(-1); + if (this.currentView.getPnlOptions().isVisible()) { + helper.fillLine(this.currentView.getPnlOptions(), FTextField.HEIGHT + helper.getGapY()); + } helper.fill(this.currentView.getScroller()); } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ImageView.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ImageView.java index 52da79923cf..58ef12d97d6 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ImageView.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ImageView.java @@ -59,7 +59,7 @@ public class ImageView extends ItemView { private static final int IMAGE_SIZE_STEP = (MAX_IMAGE_SIZE - MIN_IMAGE_SIZE) / IMAGE_SIZE_OPTION_COUNT; private final CardViewDisplay display; - private List selectedIndices = new ArrayList(); + private final List selectedIndices = new ArrayList(); private int imageSizeOption = 4; private boolean allowMultipleSelections; private ColumnDef pileBy = null; @@ -69,8 +69,8 @@ public class ImageView extends ItemView { private Point hoverScrollPos; private ItemInfo hoveredItem; private ItemInfo focalItem; - private ArrayList orderedItems = new ArrayList(); - private ArrayList groups = new ArrayList(); + private final ArrayList orderedItems = new ArrayList(); + private final ArrayList groups = new ArrayList(); public ImageView(ItemManager itemManager0, ItemManagerModel model0) { super(itemManager0, model0); 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 index 7822f5b6129..4f9bd10cdb6 100644 --- 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 @@ -105,6 +105,7 @@ public final class ItemListView extends ItemView { super(itemManager0, model0); this.tableModel = new ItemTableModel(model0); this.setAllowMultipleSelections(false); + this.getPnlOptions().setVisible(false); //hide options panel by default // use different selection highlight colors for focused vs. unfocused tables this.table.addMouseListener(new FMouseAdapter() { 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 index 711eb5d9f8d..f56d3c1a669 100644 --- 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 @@ -28,6 +28,8 @@ import javax.swing.Timer; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import net.miginfocom.swing.MigLayout; + import org.apache.commons.lang3.CharUtils; import org.apache.commons.lang3.StringUtils; @@ -36,6 +38,7 @@ import forge.gui.toolbox.FScrollPane; import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin.SkinColor; import forge.gui.toolbox.FSkin.SkinImage; +import forge.gui.toolbox.FSkin.SkinnedPanel; import forge.gui.toolbox.ToolTipListener; import forge.gui.toolbox.itemmanager.ItemManager; import forge.gui.toolbox.itemmanager.ItemManagerModel; @@ -48,6 +51,7 @@ public abstract class ItemView { protected final ItemManagerModel model; private final FScrollPane scroller; private final FLabel button; + private final SkinnedPanel pnlOptions = new SkinnedPanel(new MigLayout("insets 0, gap 0, hidemode 3")); private int heightBackup; private boolean isIncrementalSearchActive = false; @@ -65,6 +69,8 @@ public abstract class ItemView { super.processMouseWheelEvent(e); } }; + this.pnlOptions.setOpaque(false); + this.pnlOptions.setBorder(new FSkin.MatteSkinBorder(1, 0, 0, 0, BORDER_COLOR)); this.scroller.setBorder(new FSkin.LineSkinBorder(BORDER_COLOR)); this.button = new FLabel.Builder().hoverable().selectable(true) .icon(getIcon()).iconScaleAuto(false) @@ -115,6 +121,10 @@ public abstract class ItemView { return this.scroller; } + public SkinnedPanel getPnlOptions() { + return pnlOptions; + } + public int getScrollValue() { return scroller.getVerticalScrollBar().getValue(); }