From 03ec31f2186892202653cc5077e5dca7dc4952e5 Mon Sep 17 00:00:00 2001 From: Zakru Date: Tue, 16 Jun 2020 18:55:19 +0300 Subject: [PATCH] Add ability to collapse and expand notification groups Closes #1 --- build.gradle | 4 +- .../NotificationGroup.java | 3 + .../ui/NotificationGroupPanel.java | 72 ++++++++++++++---- .../advancednotifications/collapse_icon.png | Bin 0 -> 7608 bytes .../advancednotifications/expand_icon.png | Bin 0 -> 7980 bytes 5 files changed, 63 insertions(+), 16 deletions(-) create mode 100644 src/main/resources/com/github/zakru/advancednotifications/collapse_icon.png create mode 100644 src/main/resources/com/github/zakru/advancednotifications/expand_icon.png diff --git a/build.gradle b/build.gradle index cafd187..37eb35d 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ repositories { mavenCentral() } -def runeLiteVersion = '1.6.10.1' +def runeLiteVersion = '1.6.19' dependencies { compileOnly group: 'net.runelite', name:'client', version: runeLiteVersion @@ -26,7 +26,7 @@ dependencies { } group = 'com.github.zakru.advancednotifications' -version = '1.1' +version = '1.1.1' sourceCompatibility = '1.8' tasks.withType(JavaCompile) { diff --git a/src/main/java/com/github/zakru/advancednotifications/NotificationGroup.java b/src/main/java/com/github/zakru/advancednotifications/NotificationGroup.java index f70ffdd..f8bf723 100644 --- a/src/main/java/com/github/zakru/advancednotifications/NotificationGroup.java +++ b/src/main/java/com/github/zakru/advancednotifications/NotificationGroup.java @@ -12,6 +12,9 @@ public class NotificationGroup extends Notification implements DraggableContaine @Setter private String name = "Group"; @Getter + @Setter + private boolean collapsed = false; + @Getter private final List notifications = new ArrayList<>(); public NotificationGroup(AdvancedNotificationsPlugin plugin) diff --git a/src/main/java/com/github/zakru/advancednotifications/ui/NotificationGroupPanel.java b/src/main/java/com/github/zakru/advancednotifications/ui/NotificationGroupPanel.java index 62150bc..8adb840 100644 --- a/src/main/java/com/github/zakru/advancednotifications/ui/NotificationGroupPanel.java +++ b/src/main/java/com/github/zakru/advancednotifications/ui/NotificationGroupPanel.java @@ -22,6 +22,11 @@ public class NotificationGroupPanel extends NotificationPanel private static final ImageIcon RENAME_ICON; private static final ImageIcon RENAME_HOVER_ICON; + private static final ImageIcon COLLAPSE_ICON; + private static final ImageIcon COLLAPSE_HOVER_ICON; + private static final ImageIcon EXPAND_ICON; + private static final ImageIcon EXPAND_HOVER_ICON; + private final JTextField nameLabel; private final JLabel rename; @@ -36,6 +41,16 @@ public class NotificationGroupPanel extends NotificationPanel = ImageUtil.getResourceStreamFromClass(AdvancedNotificationsPlugin.class, "rename_icon.png"); RENAME_ICON = new ImageIcon(renameIcon); RENAME_HOVER_ICON = new ImageIcon(ImageUtil.alphaOffset(renameIcon, 0.53f)); + + final BufferedImage collapseIcon + = ImageUtil.getResourceStreamFromClass(AdvancedNotificationsPlugin.class, "collapse_icon.png"); + COLLAPSE_ICON = new ImageIcon(collapseIcon); + COLLAPSE_HOVER_ICON = new ImageIcon(ImageUtil.alphaOffset(collapseIcon, 0.53f)); + + final BufferedImage expandIcon + = ImageUtil.getResourceStreamFromClass(AdvancedNotificationsPlugin.class, "expand_icon.png"); + EXPAND_ICON = new ImageIcon(expandIcon); + EXPAND_HOVER_ICON = new ImageIcon(ImageUtil.alphaOffset(expandIcon, 0.53f)); } public NotificationGroupPanel(NotificationGroup notification, DraggableContainer container) @@ -152,28 +167,57 @@ public void mouseExited(MouseEvent e) actions.add(new EnabledButton(notification.getPlugin(), notification)); actions.add(deleteButton); + JLabel collapseOrExpand = new JLabel(notification.isCollapsed() ? EXPAND_ICON : COLLAPSE_ICON); + collapseOrExpand.addMouseListener(new MouseAdapter() + { + @Override + public void mousePressed(MouseEvent e) + { + notification.setCollapsed(!notification.isCollapsed()); + notification.getPlugin().updateConfig(); + notification.getPlugin().rebuildPluginPanel(); + } + + @Override + public void mouseEntered(MouseEvent e) + { + collapseOrExpand.setIcon(notification.isCollapsed() ? EXPAND_HOVER_ICON : COLLAPSE_HOVER_ICON); + } + + @Override + public void mouseExited(MouseEvent e) + { + collapseOrExpand.setIcon(notification.isCollapsed() ? EXPAND_ICON : COLLAPSE_ICON); + } + }); + + northPanel.add(collapseOrExpand, BorderLayout.WEST); northPanel.add(nameLabel, BorderLayout.CENTER); northPanel.add(actions, BorderLayout.EAST); - JPanel notificationView = new JPanel(); - notificationView.setLayout(new BoxLayout(notificationView, BoxLayout.Y_AXIS)); - notificationView.setOpaque(false); - notificationView.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + add(northPanel, BorderLayout.NORTH); - int index = 0; - notificationView.add(new DropSpace(plugin, notification, index++)); - for (final Notification notif : notification.getNotifications()) + if (!notification.isCollapsed()) { - NotificationPanel panel = NotificationPanel.buildPanel(notification, notif); - if (panel != null) + JPanel notificationView = new JPanel(); + notificationView.setLayout(new BoxLayout(notificationView, BoxLayout.Y_AXIS)); + notificationView.setOpaque(false); + notificationView.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + + int index = 0; + notificationView.add(new DropSpace(plugin, notification, index++)); + for (final Notification notif : notification.getNotifications()) { - notificationView.add(panel); - notificationView.add(new DropSpace(plugin, notification, index++)); + NotificationPanel panel = NotificationPanel.buildPanel(notification, notif); + if (panel != null) + { + notificationView.add(panel); + notificationView.add(new DropSpace(plugin, notification, index++)); + } } - } - add(northPanel, BorderLayout.NORTH); - add(notificationView, BorderLayout.CENTER); + add(notificationView, BorderLayout.CENTER); + } } public void resetScroll() diff --git a/src/main/resources/com/github/zakru/advancednotifications/collapse_icon.png b/src/main/resources/com/github/zakru/advancednotifications/collapse_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8a65734e86d02d3503a00e11700f844abc6cf74c GIT binary patch literal 7608 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 literal 0 HcmV?d00001