From 08c638283909a1cf1a551d2d8409f3ca5046554d Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Wed, 17 Aug 2016 02:19:57 +0800 Subject: [PATCH] Refactor Presets and enable keyboard shortcuts for Presets 1..9 via number keys --- source/net/filebot/ui/rename/RenamePanel.java | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/source/net/filebot/ui/rename/RenamePanel.java b/source/net/filebot/ui/rename/RenamePanel.java index df6cef42..476ac436 100644 --- a/source/net/filebot/ui/rename/RenamePanel.java +++ b/source/net/filebot/ui/rename/RenamePanel.java @@ -24,9 +24,11 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.concurrent.CancellationException; import java.util.function.Supplier; import java.util.logging.Level; +import java.util.stream.IntStream; import javax.swing.AbstractAction; import javax.swing.Action; @@ -242,7 +244,7 @@ public class RenamePanel extends JComponent { filesList.getButtonPanel().add(createImageButton(openHistoryAction), "gap indent"); // create macros popup - JButton presetsButton = createImageButton(new ShowPresetsPopupAction("Presets", ResourceManager.getIcon("action.script"))); + JButton presetsButton = createImageButton(new ShowPresetsPopupAction()); filesList.getButtonPanel().add(presetsButton, "gap 0"); // show popup on actionPerformed only when names list is empty @@ -346,18 +348,21 @@ public class RenamePanel extends JComponent { })); // map 1..9 number keys to presets - try { - Preset[] presets = persistentPresets.values().toArray(new Preset[0]); + IntStream.rangeClosed(1, 9).forEach(i -> { + installAction(this, WHEN_IN_FOCUSED_WINDOW, getKeyStroke(Character.forDigit(i, 10), 0), newAction("Preset " + i, evt -> { + try { + Optional preset = persistentPresets.values().stream().skip(i - 1).findFirst(); - for (int i = 0; i < presets.length && i < 9; i++) { - Preset preset = presets[i]; - int key = Character.forDigit(i + 1, 10); - - installAction(this, WHEN_IN_FOCUSED_WINDOW, getKeyStroke(key, 0), newAction(preset.getName(), new ApplyPresetAction(preset)::actionPerformed)); - } - } catch (Exception e) { - debug.log(Level.WARNING, e::toString); - } + if (preset.isPresent()) { + new ApplyPresetAction(preset.get()).actionPerformed(evt); + } else { + new ShowPresetsPopupAction().actionPerformed(evt); + } + } catch (Exception e) { + debug.log(Level.WARNING, e, e::getMessage); + } + })); + }); } private boolean isMatchModeStrict() { @@ -643,7 +648,6 @@ public class RenamePanel extends JComponent { @Override public void actionPerformed(ActionEvent e) { - // display popup below component JComponent source = (JComponent) e.getSource(); source.getComponentPopupMenu().show(source, -3, source.getHeight() + 4); } @@ -651,14 +655,13 @@ public class RenamePanel extends JComponent { private class ShowPresetsPopupAction extends AbstractAction { - public ShowPresetsPopupAction(String name, Icon icon) { - super(name, icon); + public ShowPresetsPopupAction() { + super("Presets", ResourceManager.getIcon("action.script")); } @Override - public void actionPerformed(ActionEvent e) { - // display popup below component - JComponent source = (JComponent) e.getSource(); + public void actionPerformed(ActionEvent evt) { + JComponent source = (JComponent) evt.getSource(); createPresetsPopup().show(source, -3, source.getHeight() + 4); } };