From 786277508aecd23cef507a63a598366f9cdcf61d Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 7 Sep 2017 12:19:59 +0200 Subject: [PATCH 1/3] Keep "Board Manager" entry always on top of its menu --- app/src/processing/app/Base.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 9a91d68ddc9..66290c75b46 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -1399,7 +1399,7 @@ public void rebuildBoardsMenu() throws Exception { // The first custom menu is the "Board" selection submenu JMenu boardMenu = new JMenu(tr("Board")); boardMenu.putClientProperty("removeOnWindowDeactivation", true); - MenuScroller.setScrollerFor(boardMenu); + MenuScroller.setScrollerFor(boardMenu).setTopFixedCount(1); boardMenu.add(new JMenuItem(new AbstractAction(tr("Boards Manager...")) { public void actionPerformed(ActionEvent actionevent) { From a9665d3dc56d797db08754b280e53d12b889a01d Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 7 Sep 2017 12:20:56 +0200 Subject: [PATCH 2/3] Add scroller for programmers menu --- app/src/processing/app/Editor.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 71ecc5343ac..edc0b44c64b 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -769,6 +769,7 @@ public void actionPerformed(ActionEvent e) { base.rebuildProgrammerMenu(); programmersMenu = new JMenu(tr("Programmer")); + MenuScroller.setScrollerFor(programmersMenu); base.getProgrammerMenus().stream().forEach(programmersMenu::add); toolsMenu.add(programmersMenu); From d7f03cb2dab26e63bc8e6ae1a5c80b7e5f698da1 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 7 Sep 2017 12:22:00 +0200 Subject: [PATCH 3/3] Add accelerator for scrollable menus Press A when on a scrollable menu for a 6x acceleration --- .../processing/app/tools/MenuScroller.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/app/src/processing/app/tools/MenuScroller.java b/app/src/processing/app/tools/MenuScroller.java index f82f0be6934..3523ec7ceca 100644 --- a/app/src/processing/app/tools/MenuScroller.java +++ b/app/src/processing/app/tools/MenuScroller.java @@ -13,6 +13,7 @@ import java.awt.event.ActionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; +import java.awt.event.KeyEvent; /** * A class that provides scrolling capabilities to a long menu dropdown or @@ -40,6 +41,7 @@ public class MenuScroller { private int bottomFixedCount; private int firstIndex = 0; private int keepVisibleIndex = -1; + private int accelerator = 1; /** * Registers a menu to be scrolled with the default number of items to @@ -293,6 +295,25 @@ public MenuScroller(JPopupMenu menu, int scrollCount, int interval, this.menu = menu; menu.addPopupMenuListener(menuListener); menu.addMouseWheelListener(mouseWheelListener); + + ActionListener accel = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + accelerator = 6; + } + }; + + ActionListener decel = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + accelerator = 1; + } + }; + + KeyStroke keystroke_accel = KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, false); + KeyStroke keystroke_decel = KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, true); + menu.registerKeyboardAction(accel, "accel", keystroke_accel, JComponent.WHEN_IN_FOCUSED_WINDOW); + menu.registerKeyboardAction(decel, "decel", keystroke_decel, JComponent.WHEN_IN_FOCUSED_WINDOW); } /** @@ -492,7 +513,7 @@ private int getMaximumDrawableMenuItems() { private class MouseScrollListener implements MouseWheelListener { public void mouseWheelMoved(MouseWheelEvent mwe) { - firstIndex += mwe.getWheelRotation(); + firstIndex += mwe.getWheelRotation() * accelerator; refreshMenu(); mwe.consume(); } @@ -544,7 +565,7 @@ public MenuScrollTimer(final int increment, int interval) { @Override public void actionPerformed(ActionEvent e) { - firstIndex += increment; + firstIndex += increment * accelerator; refreshMenu(); } });