From 15b3d394464edd014dc96d664a402607b606c61b Mon Sep 17 00:00:00 2001 From: Mitchell Kovacs <33374903+Mitchell-Kovacs@users.noreply.github.com> Date: Wed, 22 Apr 2020 17:48:39 -0400 Subject: [PATCH] timers plugin: add option to loop timers --- .../plugins/timetracking/clocks/ClockManager.java | 5 +++++ .../timetracking/clocks/ClockTabPanel.java | 10 ++++++++++ .../client/plugins/timetracking/clocks/Timer.java | 3 +++ .../plugins/timetracking/clocks/TimerPanel.java | 12 ++++++++++++ .../client/plugins/timetracking/loop_icon.png | Bin 0 -> 375 bytes .../plugins/timetracking/loop_selected_icon.png | Bin 0 -> 388 bytes 6 files changed, 30 insertions(+) create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_icon.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_selected_icon.png diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockManager.java index 1f01e1c3c1..720c5633e9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockManager.java @@ -122,6 +122,11 @@ public class ClockManager { notifier.notify("[" + timer.getName() + "] has finished counting down."); } + + if (timer.isLoop()) + { + timer.start(); + } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java index cd1b1a5a2e..e3ce75f631 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java @@ -57,6 +57,10 @@ public class ClockTabPanel extends TabContentPanel static final ImageIcon RESET_ICON_HOVER; static final ImageIcon START_ICON; static final ImageIcon START_ICON_HOVER; + static final ImageIcon LOOP_ICON; + static final ImageIcon LOOP_ICON_HOVER; + static final ImageIcon LOOP_SELECTED_ICON; + static final ImageIcon LOOP_SELECTED_ICON_HOVER; private static final ImageIcon ADD_ICON; private static final ImageIcon ADD_ICON_HOVER; @@ -73,6 +77,8 @@ public class ClockTabPanel extends TabContentPanel BufferedImage resetIcon = ImageUtil.getResourceStreamFromClass(TimeTrackingPlugin.class, "reset_icon.png"); BufferedImage startIcon = ImageUtil.getResourceStreamFromClass(TimeTrackingPlugin.class, "start_icon.png"); BufferedImage addIcon = ImageUtil.getResourceStreamFromClass(TimeTrackingPlugin.class, "add_icon.png"); + BufferedImage loopIcon = ImageUtil.getResourceStreamFromClass(TimeTrackingPlugin.class, "loop_icon.png"); + BufferedImage loopSelectedIcon = ImageUtil.getResourceStreamFromClass(TimeTrackingPlugin.class, "loop_selected_icon.png"); DELETE_ICON = new ImageIcon(deleteIcon); DELETE_ICON_HOVER = new ImageIcon(ImageUtil.luminanceOffset(deleteIcon, -80)); @@ -86,6 +92,10 @@ public class ClockTabPanel extends TabContentPanel START_ICON_HOVER = new ImageIcon(ImageUtil.luminanceOffset(startIcon, -80)); ADD_ICON = new ImageIcon(addIcon); ADD_ICON_HOVER = new ImageIcon(ImageUtil.alphaOffset(addIcon, 0.53f)); + LOOP_ICON = new ImageIcon(loopIcon); + LOOP_ICON_HOVER = new ImageIcon(ImageUtil.luminanceOffset(loopIcon, -80)); + LOOP_SELECTED_ICON = new ImageIcon(loopSelectedIcon); + LOOP_SELECTED_ICON_HOVER = new ImageIcon(ImageUtil.luminanceOffset(loopSelectedIcon, -80)); } ClockTabPanel(ClockManager clockManager) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Timer.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Timer.java index 48adf0e768..de21af9e5e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Timer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Timer.java @@ -45,6 +45,9 @@ class Timer extends Clock @Getter(AccessLevel.NONE) private transient boolean warning; + // whether this timer should loop or not + private boolean loop; + Timer(String name, long duration) { super(name); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/TimerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/TimerPanel.java index af65253480..abe3778428 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/TimerPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/TimerPanel.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.timetracking.clocks; import java.awt.Color; import java.awt.Dimension; import javax.swing.JButton; +import javax.swing.JToggleButton; import net.runelite.client.ui.ColorScheme; import net.runelite.client.util.SwingUtil; @@ -38,6 +39,17 @@ class TimerPanel extends ClockPanel { super(clockManager, timer, "timer", true); + JToggleButton loopButton = new JToggleButton(ClockTabPanel.LOOP_ICON); + loopButton.setRolloverIcon(ClockTabPanel.LOOP_ICON_HOVER); + loopButton.setSelectedIcon(ClockTabPanel.LOOP_SELECTED_ICON); + loopButton.setRolloverSelectedIcon(ClockTabPanel.LOOP_SELECTED_ICON_HOVER); + SwingUtil.removeButtonDecorations(loopButton); + loopButton.setPreferredSize(new Dimension(16, 14)); + loopButton.setToolTipText("Loop timer"); + loopButton.addActionListener(e -> timer.setLoop(!timer.isLoop())); + loopButton.setSelected(timer.isLoop()); + leftActions.add(loopButton); + JButton deleteButton = new JButton(ClockTabPanel.DELETE_ICON); SwingUtil.removeButtonDecorations(deleteButton); deleteButton.setRolloverIcon(ClockTabPanel.DELETE_ICON_HOVER); diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..112b3bf4892eb4030bee8964094b6df9abd64606 GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamSQK*5Dp-y;YjHK@;M7UB8!1) zj({-ZRBb+KprB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt*3XT^vI+ zCf*I)=yfDOU`}ml*B+Ma+`XGW$#1#jC&==bq5jDqF8c%TELuM6z&r~J^5*~SFO6osKC&$ zdp=V{yTCVO-u>SyU-^0-s2qmrMvGLw=hIa3O=sPuzRCSx&6d13NJ67>0=ZzJa&3s zG~QiTL9ZnoFG-o~L~iOs@HL@s;bjp9}}QW3Rt`-~Y@0GcV`MskL03 SUnc~}U&3=E8no-U3d z8WXQx+^^kQD02Mc_3wr3rT89L3{Vw_ZWeWmIBr19juFWt^{8@6%m9gkra^9kSx_386Y20GFc=qNT zQH|8HjjeSP(&XwGT@=rTT=oh5b1?Ir@4nB|gO;s67`;(!rEAv9eOIe$w=9y@=RNk& zcBw#)TNzVrMsAW#$DYMf5givV{hV{Ut#@Kq-=E7BLN>g2EVK5#3hh5RBilb}&YZI= f{yxq99~tlbA}ZNo=d=015M%Ik^>bP0l+XkKzOJE+ literal 0 HcmV?d00001