From b5e91715587ff901f0440162b5f89a27b80a5ae8 Mon Sep 17 00:00:00 2001 From: damienwojtowicz Date: Mon, 2 Aug 2021 12:11:47 +0200 Subject: [PATCH] Implemented zoom control keyboard shortcuts - Added a `CTRL + +` to zoom in - Added a `CTRL + -` to zoom out - Added a `CTRL + 0` to reset zoom - Minor refactor in classes names (removed "2" appended to GUI's classes name) --- src/net/sourceforge/plantuml/Run.java | 5 +- .../{ImageWindow2.java => ImageWindow.java} | 92 ++++++++---------- .../{MainWindow2.java => MainWindow.java} | 95 +++++++------------ .../{SimpleLine2.java => SimpleLine.java} | 14 +-- 4 files changed, 81 insertions(+), 125 deletions(-) rename src/net/sourceforge/plantuml/swing/{ImageWindow2.java => ImageWindow.java} (86%) rename src/net/sourceforge/plantuml/swing/{MainWindow2.java => MainWindow.java} (83%) rename src/net/sourceforge/plantuml/swing/{SimpleLine2.java => SimpleLine.java} (82%) diff --git a/src/net/sourceforge/plantuml/Run.java b/src/net/sourceforge/plantuml/Run.java index 6b2f5238b..5999119c3 100644 --- a/src/net/sourceforge/plantuml/Run.java +++ b/src/net/sourceforge/plantuml/Run.java @@ -46,7 +46,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.URL; -import java.time.Month; import java.time.format.TextStyle; import java.util.ArrayList; import java.util.List; @@ -70,7 +69,7 @@ import net.sourceforge.plantuml.security.SecurityUtils; import net.sourceforge.plantuml.sprite.SpriteGrayLevel; import net.sourceforge.plantuml.sprite.SpriteUtils; import net.sourceforge.plantuml.stats.StatsUtils; -import net.sourceforge.plantuml.swing.MainWindow2; +import net.sourceforge.plantuml.swing.MainWindow; import net.sourceforge.plantuml.syntax.LanguageDescriptor; import net.sourceforge.plantuml.utils.Cypher; import net.sourceforge.plantuml.version.Version; @@ -171,7 +170,7 @@ public class Run { } } try { - new MainWindow2(option, dir); + new MainWindow(option, dir); } catch (java.awt.HeadlessException e) { System.err.println("There is an issue with your server. You will find some tips here:"); System.err.println("https://forum.plantuml.net/3399/problem-with-x11-and-headless-exception"); diff --git a/src/net/sourceforge/plantuml/swing/ImageWindow2.java b/src/net/sourceforge/plantuml/swing/ImageWindow.java similarity index 86% rename from src/net/sourceforge/plantuml/swing/ImageWindow2.java rename to src/net/sourceforge/plantuml/swing/ImageWindow.java index 8cd5eda5d..daa0468cf 100644 --- a/src/net/sourceforge/plantuml/swing/ImageWindow2.java +++ b/src/net/sourceforge/plantuml/swing/ImageWindow.java @@ -35,38 +35,6 @@ */ package net.sourceforge.plantuml.swing; -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.Image; -import java.awt.RenderingHints; -import java.awt.Toolkit; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionAdapter; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.prefs.Preferences; - -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollBar; -import javax.swing.JScrollPane; -import javax.swing.ListModel; -import javax.swing.SwingUtilities; -import javax.swing.WindowConstants; - import net.sourceforge.plantuml.GeneratedImage; import net.sourceforge.plantuml.ImageSelection; import net.sourceforge.plantuml.graphic.GraphicStrings; @@ -75,15 +43,25 @@ import net.sourceforge.plantuml.security.SFile; import net.sourceforge.plantuml.svek.TextBlockBackcolored; import net.sourceforge.plantuml.version.PSystemVersion; +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.prefs.Preferences; + import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainPngBuilder; -class ImageWindow2 extends JFrame { +class ImageWindow extends JFrame { - private final static Preferences prefs = Preferences.userNodeForPackage(ImageWindow2.class); + private final static Preferences prefs = Preferences.userNodeForPackage(ImageWindow.class); private final static String KEY_ZOOM_FIT = "zoomfit"; private final static String KEY_WIDTH_FIT = "widthfit"; - private SimpleLine2 simpleLine2; + private SimpleLine simpleLine; private final JScrollPane scrollPane; private final JButton next = new JButton("Next"); private final JButton copy = new JButton("Copy"); @@ -92,7 +70,7 @@ class ImageWindow2 extends JFrame { private final JCheckBox widthFitButt = new JCheckBox("Width fit"); private final JButton zoomMore = new JButton("+"); private final JButton zoomLess = new JButton("-"); - private final MainWindow2 main; + private final MainWindow main; private final ListModel listModel; private int index; @@ -106,10 +84,10 @@ class ImageWindow2 extends JFrame { private int startX, startY; - public ImageWindow2(SimpleLine2 simpleLine, final MainWindow2 main, ListModel listModel, int index) { + public ImageWindow(SimpleLine simpleLine, final MainWindow main, ListModel listModel, int index) { super(simpleLine.toString()); setIconImage(PSystemVersion.getPlantumlSmallIcon2()); - this.simpleLine2 = simpleLine; + this.simpleLine = simpleLine; this.listModel = listModel; this.index = index; this.main = main; @@ -180,7 +158,7 @@ class ImageWindow2 extends JFrame { @Override public void windowClosing(WindowEvent e) { super.windowClosing(e); - main.closing(ImageWindow2.this); + main.closing(ImageWindow.this); } }); @@ -205,7 +183,16 @@ class ImageWindow2 extends JFrame { this.setFocusable(true); this.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) { - if (evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_RIGHT) { + if (evt.isControlDown() && (evt.getKeyCode() == KeyEvent.VK_PLUS || evt.getKeyCode() == KeyEvent.VK_ADD)) { + zoomFactor++; + refreshImage(false); + } else if (evt.isControlDown() && (evt.getKeyCode() == KeyEvent.VK_MINUS || evt.getKeyCode() == KeyEvent.VK_SUBTRACT)) { + zoomFactor--; + refreshImage(false); + } else if (evt.isControlDown() && (evt.getKeyCode() == KeyEvent.VK_0 || evt.getKeyCode() == KeyEvent.VK_NUMPAD0)) { + zoomFactor = 0; + refreshImage(false); + } else if (evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_RIGHT) { next(); } else if (evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_LEFT) { previous(); @@ -229,7 +216,6 @@ class ImageWindow2 extends JFrame { } } }); - } private void next() { @@ -285,22 +271,22 @@ class ImageWindow2 extends JFrame { if (index > listModel.getSize() - 1) { index = listModel.getSize() - 1; } - simpleLine2 = (SimpleLine2) listModel.getElementAt(index); - setTitle(simpleLine2.toString()); + simpleLine = (SimpleLine) listModel.getElementAt(index); + setTitle(simpleLine.toString()); refreshImage(false); } private void refreshSimpleLine() { - for (SimpleLine2 line : main.getCurrentDirectoryListing2()) { - if (line.getFile().equals(simpleLine2.getFile())) { - simpleLine2 = line; - setTitle(simpleLine2.toString()); + for (SimpleLine line : main.getCurrentDirectoryListing2()) { + if (line.getFile().equals(simpleLine.getFile())) { + simpleLine = line; + setTitle(simpleLine.toString()); } } } private ScrollablePicture buildScrollablePicture() { - final GeneratedImage generatedImage = simpleLine2.getGeneratedImage(); + final GeneratedImage generatedImage = simpleLine.getGeneratedImage(); if (generatedImage == null) { return null; } @@ -333,7 +319,7 @@ class ImageWindow2 extends JFrame { e.printStackTrace(); } } - final ImageIcon imageIcon = new ImageIcon(image, simpleLine2.toString()); + final ImageIcon imageIcon = new ImageIcon(image, simpleLine.toString()); final ScrollablePicture scrollablePicture = new ScrollablePicture(imageIcon, 1); scrollablePicture.addMouseListener(new MouseAdapter() { @@ -376,7 +362,7 @@ class ImageWindow2 extends JFrame { } private void copy() { - final GeneratedImage generatedImage = simpleLine2.getGeneratedImage(); + final GeneratedImage generatedImage = simpleLine.getGeneratedImage(); if (generatedImage == null) { return; } @@ -386,8 +372,8 @@ class ImageWindow2 extends JFrame { Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, null); } - public SimpleLine2 getSimpleLine() { - return simpleLine2; + public SimpleLine getSimpleLine() { + return simpleLine; } private int v1; @@ -416,7 +402,7 @@ class ImageWindow2 extends JFrame { } private boolean isError() { - return simpleLine2.getGeneratedImage() != null && simpleLine2.getGeneratedImage().lineErrorRaw() != -1; + return simpleLine.getGeneratedImage() != null && simpleLine.getGeneratedImage().lineErrorRaw() != -1; } diff --git a/src/net/sourceforge/plantuml/swing/MainWindow2.java b/src/net/sourceforge/plantuml/swing/MainWindow.java similarity index 83% rename from src/net/sourceforge/plantuml/swing/MainWindow2.java rename to src/net/sourceforge/plantuml/swing/MainWindow.java index 948f40b7e..2a9ce4eee 100644 --- a/src/net/sourceforge/plantuml/swing/MainWindow2.java +++ b/src/net/sourceforge/plantuml/swing/MainWindow.java @@ -35,59 +35,30 @@ */ package net.sourceforge.plantuml.swing; -import java.awt.BorderLayout; -import java.awt.Frame; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Vector; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.prefs.Preferences; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JFileChooser; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextField; -import javax.swing.ListModel; -import javax.swing.SwingUtilities; -import javax.swing.Timer; -import javax.swing.border.CompoundBorder; - import net.sourceforge.plantuml.DirWatcher2; import net.sourceforge.plantuml.GeneratedImage; import net.sourceforge.plantuml.Log; import net.sourceforge.plantuml.Option; import net.sourceforge.plantuml.version.PSystemVersion; -public class MainWindow2 extends JFrame { +import javax.swing.Timer; +import javax.swing.*; +import javax.swing.border.CompoundBorder; +import java.awt.*; +import java.awt.event.*; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.prefs.Preferences; +import java.util.regex.Matcher; +import java.util.regex.Pattern; - final private static Preferences prefs = Preferences.userNodeForPackage(MainWindow2.class); +public class MainWindow extends JFrame { + + final private static Preferences prefs = Preferences.userNodeForPackage(MainWindow.class); final private static String KEY_DIR = "cur"; final private static String KEY_PATTERN = "pat"; @@ -97,8 +68,8 @@ public class MainWindow2 extends JFrame { private final JTextField extensions = new JTextField(); private final int period = 300; - final private List currentDirectoryListing2 = new ArrayList<>(); - final private Set openWindows2 = new HashSet<>(); + final private List currentDirectoryListing2 = new ArrayList<>(); + final private Set openWindows2 = new HashSet<>(); final private Option option; private DirWatcher2 dirWatcher; @@ -155,7 +126,7 @@ public class MainWindow2 extends JFrame { return Option.getPattern(); } - public MainWindow2(Option option, File arg) { + public MainWindow(Option option, File arg) { super(getDirectory(arg).getAbsolutePath()); System.setProperty("PLANTUML_SECURITY_PROFILE", "UNSECURE"); final File dir = getDirectory(arg); @@ -190,7 +161,7 @@ public class MainWindow2 extends JFrame { try { if (e.getClickCount() == 2) { final int index = jList1.locationToIndex(e.getPoint()); - doubleClick((SimpleLine2) jList1.getModel().getElementAt(index), jList1.getModel(), index); + doubleClick((SimpleLine) jList1.getModel().getElementAt(index), jList1.getModel(), index); } } catch (Exception ex) { @@ -209,7 +180,7 @@ public class MainWindow2 extends JFrame { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { final int index = jList1.getSelectedIndex(); - doubleClick((SimpleLine2) jList1.getModel().getElementAt(index), jList1.getModel(), index); + doubleClick((SimpleLine) jList1.getModel().getElementAt(index), jList1.getModel(), index); } } @@ -315,8 +286,8 @@ public class MainWindow2 extends JFrame { jList1.setVisible(true); } - private void doubleClick(SimpleLine2 simpleLine, ListModel listModel, int index) { - for (ImageWindow2 win : openWindows2) { + private void doubleClick(SimpleLine simpleLine, ListModel listModel, int index) { + for (ImageWindow win : openWindows2) { if (win.getSimpleLine().equals(simpleLine)) { win.setVisible(true); win.setExtendedState(Frame.NORMAL); @@ -324,7 +295,7 @@ public class MainWindow2 extends JFrame { } } if (simpleLine.getGeneratedImage() != null) { - openWindows2.add(new ImageWindow2(simpleLine, this, listModel, index)); + openWindows2.add(new ImageWindow(simpleLine, this, listModel, index)); } } @@ -356,19 +327,19 @@ public class MainWindow2 extends JFrame { final File file = ent.getKey(); removeAllThatUseThisFile(file); final Future> future = ent.getValue(); - final SimpleLine2 simpleLine = SimpleLine2.fromFuture(file, future); + final SimpleLine simpleLine = SimpleLine.fromFuture(file, future); currentDirectoryListing2.add(simpleLine); changed = true; } - for (SimpleLine2 line : new ArrayList<>(currentDirectoryListing2)) { + for (SimpleLine line : new ArrayList<>(currentDirectoryListing2)) { if (line.pendingAndFinished()) { currentDirectoryListing2.remove(line); changed = true; final Future> future = line.getFuture(); for (GeneratedImage im : future.get()) { mayRefreshImageWindow(im.getPngFile()); - final SimpleLine2 simpleLine = SimpleLine2.fromGeneratedImage(line.getFile(), im); + final SimpleLine simpleLine = SimpleLine.fromGeneratedImage(line.getFile(), im); currentDirectoryListing2.add(simpleLine); } } @@ -378,8 +349,8 @@ public class MainWindow2 extends JFrame { } private void removeAllThatUseThisFile(File file) { - for (final Iterator it = currentDirectoryListing2.iterator(); it.hasNext();) { - final SimpleLine2 line = it.next(); + for (final Iterator it = currentDirectoryListing2.iterator(); it.hasNext();) { + final SimpleLine line = it.next(); if (line.getFile().equals(file)) { it.remove(); } @@ -387,7 +358,7 @@ public class MainWindow2 extends JFrame { } private void mayRefreshImageWindow(File pngFile) { - for (ImageWindow2 win : openWindows2) { + for (ImageWindow win : openWindows2) { if (win.getSimpleLine().getGeneratedImage() == null) { continue; } @@ -398,14 +369,14 @@ public class MainWindow2 extends JFrame { } - public void closing(ImageWindow2 imageWindow) { + public void closing(ImageWindow imageWindow) { final boolean ok = openWindows2.remove(imageWindow); if (ok == false) { throw new IllegalStateException(); } } - public List getCurrentDirectoryListing2() { + public List getCurrentDirectoryListing2() { return Collections.unmodifiableList(currentDirectoryListing2); } diff --git a/src/net/sourceforge/plantuml/swing/SimpleLine2.java b/src/net/sourceforge/plantuml/swing/SimpleLine.java similarity index 82% rename from src/net/sourceforge/plantuml/swing/SimpleLine2.java rename to src/net/sourceforge/plantuml/swing/SimpleLine.java index daca9cd03..6fa897cc1 100644 --- a/src/net/sourceforge/plantuml/swing/SimpleLine2.java +++ b/src/net/sourceforge/plantuml/swing/SimpleLine.java @@ -41,21 +41,21 @@ import java.util.concurrent.Future; import net.sourceforge.plantuml.GeneratedImage; -class SimpleLine2 implements Comparable { +class SimpleLine implements Comparable { private final File file; private final GeneratedImage generatedImage; private final Future> future; - public static SimpleLine2 fromFuture(File file, Future> future) { - return new SimpleLine2(file, null, future); + public static SimpleLine fromFuture(File file, Future> future) { + return new SimpleLine(file, null, future); } - public static SimpleLine2 fromGeneratedImage(File file, GeneratedImage generatedImage) { - return new SimpleLine2(file, generatedImage, null); + public static SimpleLine fromGeneratedImage(File file, GeneratedImage generatedImage) { + return new SimpleLine(file, generatedImage, null); } - private SimpleLine2(File file, GeneratedImage generatedImage, Future> future) { + private SimpleLine(File file, GeneratedImage generatedImage, Future> future) { this.generatedImage = generatedImage; this.file = file; this.future = future; @@ -84,7 +84,7 @@ class SimpleLine2 implements Comparable { return future; } - public int compareTo(SimpleLine2 other) { + public int compareTo(SimpleLine other) { return toString().compareTo(other.toString()); }