From 59f75710dc463cd709c17a0901cade1ceb5a84d1 Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 8 Feb 2014 04:47:45 +0000 Subject: [PATCH] Add Expand/Collapse all groups button to Image View --- .../toolbox/itemmanager/views/ImageView.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) 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 1e5c48dd14c..cf9e02eeb08 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 @@ -41,6 +41,7 @@ import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin.SkinColor; import forge.gui.toolbox.FSkin.SkinFont; import forge.gui.toolbox.FSkin.SkinImage; +import forge.gui.toolbox.FTextField; import forge.gui.toolbox.itemmanager.ItemManager; import forge.gui.toolbox.itemmanager.ItemManagerModel; import forge.gui.toolbox.special.CardZoomer; @@ -77,6 +78,80 @@ public class ImageView extends ItemView { private ItemInfo focalItem; private final ArrayList orderedItems = new ArrayList(); private final ArrayList groups = new ArrayList(); + + @SuppressWarnings("serial") + private class ExpandCollapseButton extends FLabel { + private boolean isAllCollapsed; + + private ExpandCollapseButton() { + super(new FLabel.ButtonBuilder()); + setFocusable(false); + updateToolTip(); + setCommand(new Runnable() { + @Override + public void run() { + if (groupBy == null || model.getItems().isEmpty()) { return; } + + boolean collapsed = !isAllCollapsed; + for (Group group : groups) { + group.isCollapsed = collapsed; + } + + updateIsAllCollapsed(); + clearSelection(); //must clear selection since indices and visible items will be changing + updateLayout(false); + } + }); + } + + private void updateIsAllCollapsed() { + boolean isAllCollapsed0 = true; + for (Group group : groups) { + if (!group.isCollapsed) { + isAllCollapsed0 = false; + break; + } + } + if (isAllCollapsed != isAllCollapsed0) { + isAllCollapsed = isAllCollapsed0; + updateToolTip(); + repaintSelf(); + } + } + + private void updateToolTip() { + setToolTipText(isAllCollapsed ? "Expand all groups" : "Collapse all groups"); + } + + @Override + protected void paintContent(final Graphics2D g, int w, int h, final boolean paintPressedState) { + int squareSize = w / 2 - 2; + int offset = 2; + int x = (w - squareSize) / 2 - offset; + int y = (h - squareSize) / 2 - offset; + if (!paintPressedState) { + x--; + y--; + } + + FSkin.setGraphicsColor(g, GROUP_HEADER_FORE_COLOR); + for (int i = 0; i < 2; i++) { + g.drawLine(x, y, x + squareSize, y); + g.drawLine(x + squareSize, y, x + squareSize, y + offset); + g.drawLine(x, y, x, y + squareSize); + g.drawLine(x, y + squareSize, x + offset, y + squareSize); + x += offset; + y += offset; + } + g.drawRect(x, y, squareSize, squareSize); + g.drawLine(x + offset + 1, y + squareSize / 2, x + squareSize - 2 * offset + 1, y + squareSize / 2); + if (isAllCollapsed) { + g.drawLine(x + squareSize / 2, y + offset + 1, x + squareSize / 2, y + squareSize - 2 * offset + 1); + } + } + } + private final ExpandCollapseButton btnExpandCollapseAll = new ExpandCollapseButton(); + private final FComboBoxWrapper cbGroupByOptions = new FComboBoxWrapper(); private final FComboBoxWrapper cbPileByOptions = new FComboBoxWrapper(); private final FComboBoxWrapper cbColumnCount = new FComboBoxWrapper(); @@ -137,6 +212,7 @@ public class ImageView extends ItemView { } }); + getPnlOptions().add(btnExpandCollapseAll, "w " + FTextField.HEIGHT + "px, h " + FTextField.HEIGHT + "px"); getPnlOptions().add(new FLabel.Builder().text("Group by:").fontSize(12).build()); cbGroupByOptions.addTo(getPnlOptions(), "pushx, growx"); getPnlOptions().add(new FLabel.Builder().text("Pile by:").fontSize(12).build()); @@ -157,6 +233,7 @@ public class ImageView extends ItemView { if (group.getBounds().contains(point)) { if (!group.items.isEmpty() && point.y < group.getTop() + GROUP_HEADER_HEIGHT) { group.isCollapsed = !group.isCollapsed; + btnExpandCollapseAll.updateIsAllCollapsed(); clearSelection(); //must clear selection since indices and visible items will be changing updateLayout(false); } @@ -287,6 +364,7 @@ public class ImageView extends ItemView { groups.add(new Group(groupName)); } } + btnExpandCollapseAll.updateIsAllCollapsed(); if (!forSetup) { refresh(null, -1, 0); @@ -667,6 +745,7 @@ public class ImageView extends ItemView { //if group containing item is collapsed, expand it so the item can be selected and has a valid index if (group.isCollapsed) { group.isCollapsed = false; + btnExpandCollapseAll.updateIsAllCollapsed(); clearSelection(); //must clear selection since indices and visible items will be changing updateLayout(false); }