From 3f56e58b8b850061c8dac1baa0bce7c025d82f3f Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Sat, 7 Jan 2017 00:09:04 +0800 Subject: [PATCH] Refactor FormatDialog --- .../net/filebot/ui/rename/FormatDialog.java | 222 ++++++++---------- 1 file changed, 98 insertions(+), 124 deletions(-) diff --git a/source/net/filebot/ui/rename/FormatDialog.java b/source/net/filebot/ui/rename/FormatDialog.java index 70b9c302..3568cc6d 100644 --- a/source/net/filebot/ui/rename/FormatDialog.java +++ b/source/net/filebot/ui/rename/FormatDialog.java @@ -15,7 +15,6 @@ import java.awt.Dimension; import java.awt.Font; import java.awt.Rectangle; import java.awt.Window; -import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; @@ -37,7 +36,6 @@ import java.util.logging.Level; import java.util.prefs.Preferences; import javax.script.ScriptException; -import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JComponent; @@ -68,7 +66,6 @@ import net.filebot.format.SuppressedThrowables; import net.filebot.mac.MacAppUtilities; import net.filebot.media.MetaAttributes; import net.filebot.util.DefaultThreadFactory; -import net.filebot.util.ExceptionUtilities; import net.filebot.util.PreferencesList; import net.filebot.util.PreferencesMap.PreferencesEntry; import net.filebot.util.ui.GradientStyle; @@ -111,22 +108,23 @@ public class FormatDialog extends JDialog { private static final PreferencesEntry persistentSampleFile = Settings.forPackage(FormatDialog.class).entry("format.sample.file"); public enum Mode { + Episode, Movie, Music, File; public Mode next() { // cycle through Episode -> Movie -> Music (but ignore generic File mode) - return values()[(this.ordinal() + 1) % File.ordinal()]; + return values()[(ordinal() + 1) % File.ordinal()]; } public String key() { - return this.name().toLowerCase(); + return name().toLowerCase(); } public Format getFormat() { switch (this) { case Episode: return new EpisodeFormat(); - case Movie: // case Movie + case Movie: return new MovieFormat(true, true, false); case Music: return new AudioTrackFormat(); @@ -157,6 +155,7 @@ public class FormatDialog extends JDialog { if (key.startsWith(prefix)) examples.put(key, bundle.getString(key)); } + return examples.values(); } @@ -526,7 +525,7 @@ public class FormatDialog extends JDialog { executor.execute(currentPreviewFuture); } catch (ScriptException e) { // incorrect syntax - status.setText(ExceptionUtilities.getRootCauseMessage(e)); + status.setText(getRootCauseMessage(e)); status.setIcon(ResourceManager.getIcon("status.error")); status.setVisible(true); @@ -587,136 +586,111 @@ public class FormatDialog extends JDialog { return popup; } - protected final Action changeSampleAction = new AbstractAction("Change Sample", ResourceManager.getIcon("action.variables")) { + protected final Action changeSampleAction = newAction("Change Sample", ResourceManager.getIcon("action.variables"), evt -> { + BindingDialog dialog = new BindingDialog(getWindow(evt.getSource()), String.format("%s Bindings", mode), mode.getFormat(), !locked); + dialog.setSample(sample); - @Override - public void actionPerformed(ActionEvent evt) { - BindingDialog dialog = new BindingDialog(getWindow(evt.getSource()), String.format("%s Bindings", mode), mode.getFormat(), !locked); - dialog.setSample(sample); + // open dialog + dialog.setLocationRelativeTo((Component) evt.getSource()); + dialog.setVisible(true); - // open dialog - dialog.setLocationRelativeTo((Component) evt.getSource()); - dialog.setVisible(true); + if (dialog.submit()) { + Object info = dialog.getInfoObject(); + File file = dialog.getMediaFile(); - if (dialog.submit()) { - Object info = dialog.getInfoObject(); - File file = dialog.getMediaFile(); + // change sample + sample = new MediaBindingBean(info, file); - // change sample - sample = new MediaBindingBean(info, file); - - // remember sample - try { - mode.persistentSample().setValue(info == null ? "" : MetaAttributes.toJson(info)); - persistentSampleFile.setValue(file == null ? "" : sample.getFileObject().getAbsolutePath()); - } catch (Exception e) { - debug.log(Level.WARNING, e.getMessage(), e); - } - - // reevaluate everything - fireSampleChanged(); - } - } - }; - - protected final Action selectFolderAction = new AbstractAction("Change Folder", ResourceManager.getIcon("action.load")) { - - @Override - public void actionPerformed(ActionEvent evt) { - String relativeFormat = editor.getText().trim(); - File absoluteFolder = null; - - if (relativeFormat.length() > 0) { - File templatePath = new File(relativeFormat); - if (templatePath.isAbsolute()) { - File existingPath = null; - for (File next : listPath(templatePath)) { - if (existingPath != null && !next.exists()) { - absoluteFolder = existingPath; - relativeFormat = relativeFormat.substring(existingPath.getPath().length() + 1); // account for file separator - break; - } - existingPath = next; - } - } - } - - File selectedFolder = UserFiles.showOpenDialogSelectFolder(absoluteFolder, "Select Folder", evt); - if (selectedFolder != null) { - editor.setText(normalizePathSeparators(selectedFolder.getAbsolutePath()) + "/" + relativeFormat); - } - } - - }; - - protected final Action showRecentAction = new AbstractAction("Change Format", ResourceManager.getIcon("action.menu")) { - - @Override - public void actionPerformed(ActionEvent evt) { - // display popup below format editor - JComponent c = (JComponent) evt.getSource(); - editor.getComponentPopupMenu().show(c, 0, c.getHeight() + 3); - } - }; - - protected final Action cancelAction = new AbstractAction("Cancel", ResourceManager.getIcon("dialog.cancel")) { - - @Override - public void actionPerformed(ActionEvent e) { - finish(false); - } - }; - - protected final Action switchEditModeAction = new AbstractAction("Switch Mode", ResourceManager.getIcon("dialog.switch")) { - - @Override - public void actionPerformed(ActionEvent e) { - Mode next = mode.next(); - setState(next, restoreSample(next), false); - } - }; - - protected final Action approveFormatAction = new AbstractAction("Use Format", ResourceManager.getIcon("dialog.continue")) { - - @Override - public void actionPerformed(ActionEvent evt) { + // remember sample try { - // check syntax - format = new ExpressionFormat(editor.getText().trim()); + mode.persistentSample().setValue(info == null ? "" : MetaAttributes.toJson(info)); + persistentSampleFile.setValue(file == null ? "" : sample.getFileObject().getAbsolutePath()); + } catch (Exception e) { + debug.log(Level.WARNING, e.getMessage(), e); + } - if (format.getExpression().isEmpty()) { - throw new ScriptException("Expression is empty"); - } - if (format.getExpression().length() > Preferences.MAX_VALUE_LENGTH) { - throw new ScriptException("Expression is limited to " + Preferences.MAX_VALUE_LENGTH + " characters"); - } + // reevaluate everything + fireSampleChanged(); + } + }); - // create new recent history and ignore duplicates - Set recent = new LinkedHashSet(); + protected final Action selectFolderAction = newAction("Change Folder", ResourceManager.getIcon("action.load"), evt -> { + String relativeFormat = editor.getText().trim(); + File absoluteFolder = null; - // add new format first - recent.add(format.getExpression()); - - // save the 8 most recent formats - for (String expression : mode.persistentFormatHistory()) { - recent.add(expression); - - if (recent.size() >= 8) { + if (relativeFormat.length() > 0) { + File templatePath = new File(relativeFormat); + if (templatePath.isAbsolute()) { + File existingPath = null; + for (File next : listPath(templatePath)) { + if (existingPath != null && !next.exists()) { + absoluteFolder = existingPath; + relativeFormat = relativeFormat.substring(existingPath.getPath().length() + 1); // account for file separator break; } + existingPath = next; } - - // update persistent history - mode.persistentFormatHistory().set(recent); - - finish(true); - } catch (ScriptException e) { - log.log(Level.WARNING, ExceptionUtilities.getRootCauseMessage(e)); - } catch (Exception e) { - log.log(Level.WARNING, e.getMessage(), e); } } - }; + + File selectedFolder = UserFiles.showOpenDialogSelectFolder(absoluteFolder, "Select Folder", evt); + if (selectedFolder != null) { + editor.setText(normalizePathSeparators(selectedFolder.getAbsolutePath()) + "/" + relativeFormat); + } + }); + + protected final Action showRecentAction = newAction("Change Format", ResourceManager.getIcon("action.menu"), evt -> { + // display popup below format editor + JComponent c = (JComponent) evt.getSource(); + editor.getComponentPopupMenu().show(c, 0, c.getHeight() + 3); + }); + + protected final Action cancelAction = newAction("Cancel", ResourceManager.getIcon("dialog.cancel"), evt -> { + finish(false); + }); + + protected final Action switchEditModeAction = newAction("Switch Mode", ResourceManager.getIcon("dialog.switch"), evt -> { + Mode next = mode.next(); + setState(next, restoreSample(next), false); + }); + + protected final Action approveFormatAction = newAction("Use Format", ResourceManager.getIcon("dialog.continue"), evt -> { + try { + // check syntax + format = new ExpressionFormat(editor.getText().trim()); + + if (format.getExpression().isEmpty()) { + throw new ScriptException("Expression is empty"); + } + if (format.getExpression().length() > Preferences.MAX_VALUE_LENGTH) { + throw new ScriptException("Expression is limited to " + Preferences.MAX_VALUE_LENGTH + " characters"); + } + + // create new recent history and ignore duplicates + Set recent = new LinkedHashSet(); + + // add new format first + recent.add(format.getExpression()); + + // save the 8 most recent formats + for (String expression : mode.persistentFormatHistory()) { + recent.add(expression); + + if (recent.size() >= 8) { + break; + } + } + + // update persistent history + mode.persistentFormatHistory().set(recent); + + finish(true); + } catch (ScriptException e) { + log.log(Level.WARNING, getRootCauseMessage(e)); + } catch (Exception e) { + log.log(Level.WARNING, e.getMessage(), e); + } + }); protected void fireSampleChanged() { firePropertyChange("sample", null, sample);