From 86647430de673bb1882affc0be8387baa5e4be5d Mon Sep 17 00:00:00 2001 From: ME1312 Date: Thu, 12 Jan 2017 15:58:31 -0500 Subject: [PATCH] SubServers Release v2.11.2f --- Artifacts/SubServers.Bungee.jar | Bin 334538 -> 334539 bytes Artifacts/SubServers.Console.jar | Bin 61732 -> 64882 bytes SubServers.Bungee/META-INF/MANIFEST.MF | 2 +- .../Host/Internal/InternalSubLogger.java | 4 +- .../net/ME1312/SubServers/Bungee/Launch.java | 1 - .../SubServers/Console/ConsoleWindow.form | 23 +- .../SubServers/Console/ConsoleWindow.java | 516 ++++++++++-------- 7 files changed, 299 insertions(+), 247 deletions(-) diff --git a/Artifacts/SubServers.Bungee.jar b/Artifacts/SubServers.Bungee.jar index ab66f3f2d1a38afe5395af1fbc0c4b6ddd6432f5..8960e9aa9a8c018e040cc42b85cb11433d2e96d2 100644 GIT binary patch delta 6038 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 delta 6151 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 EFL(e}3;+NC diff --git a/SubServers.Bungee/META-INF/MANIFEST.MF b/SubServers.Bungee/META-INF/MANIFEST.MF index 26d6eae2..1467430f 100644 --- a/SubServers.Bungee/META-INF/MANIFEST.MF +++ b/SubServers.Bungee/META-INF/MANIFEST.MF @@ -2,4 +2,4 @@ Manifest-Version: 1.0 Class-Path: BungeeCord.jar Main-Class: net.ME1312.SubServers.Bungee.Launch Implementation-Version: 2.11.2f -Specification-Version: 3 +Specification-Version: 0 diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java index 4a3c3949..05fa0a7b 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java @@ -80,12 +80,12 @@ public class InternalSubLogger extends SubLogger { // REGEX Formatting String type = ""; - Matcher matcher = Pattern.compile("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARN|WARNING|ERROR|ERR|SEVERE)\\]?:?\\s*)").matcher(msg); + Matcher matcher = Pattern.compile("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?\\s*)").matcher(msg); while (matcher.find()) { type = matcher.group(3).toUpperCase(); } - msg = msg.replaceAll("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARN|WARNING|ERROR|ERR|SEVERE)\\]?:?\\s*)", ""); + msg = msg.replaceAll("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?\\s*)", ""); // Determine LOG LEVEL switch (type) { diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Launch.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Launch.java index a6542928..674f606f 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Launch.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Launch.java @@ -3,7 +3,6 @@ package net.ME1312.SubServers.Bungee; import net.ME1312.SubServers.Bungee.Library.Container; import net.ME1312.SubServers.Bungee.Library.Util; -import javax.swing.*; import java.security.Security; import java.text.SimpleDateFormat; import java.util.Calendar; diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.form b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.form index baaa29ad..4f109403 100644 --- a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.form +++ b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.form @@ -31,7 +31,6 @@ - @@ -80,7 +79,7 @@ - + @@ -103,8 +102,9 @@ - + + @@ -117,7 +117,11 @@ - + + + + + @@ -126,7 +130,11 @@ - + + + + + @@ -135,7 +143,10 @@ - + + + + diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java index 3b23344b..9eeae3f0 100644 --- a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java +++ b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java @@ -5,10 +5,10 @@ import net.ME1312.SubServers.Bungee.Host.SubLogger; import net.ME1312.SubServers.Bungee.Host.SubServer; import javax.swing.*; +import javax.swing.border.Border; import javax.swing.text.*; import java.awt.*; import java.awt.event.*; -import java.lang.reflect.InvocationTargetException; import java.text.SimpleDateFormat; import java.util.*; import java.util.List; @@ -32,13 +32,11 @@ public class ConsoleWindow implements SubLogFilter { private JButton findD; private int findO = 0; private int findI = 0; - private List events; - private boolean running = false; private boolean open = false; private SubLogger logger; private KeyEventDispatcher keys = event -> { if (window.isVisible() && window.isFocused()) { - if (event.getID() == KeyEvent.KEY_RELEASED) switch (event.getKeyCode()) { + if (event.getID() == KeyEvent.KEY_PRESSED) switch (event.getKeyCode()) { case KeyEvent.VK_UP: if (ifocus) popup.prev(input); @@ -67,212 +65,248 @@ public class ConsoleWindow implements SubLogFilter { public ConsoleWindow(ConsolePlugin plugin, SubLogger logger) { this.plugin = plugin; this.logger = logger; - this.events = new LinkedList(); - events.add(() -> { - window = new JFrame(); + window = new JFrame(); - JMenuBar jMenu = new JMenuBar(); - JMenu menu = new JMenu("View"); - JMenuItem item = new JMenuItem("Scroll to Top"); - item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> vScroll.getVerticalScrollBar().setValue(0)); - menu.add(item); - item = new JMenuItem("Scroll to Bottom"); - item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> vScroll.getVerticalScrollBar().setValue(vScroll.getVerticalScrollBar().getMaximum() - vScroll.getVerticalScrollBar().getVisibleAmount())); - menu.add(item); - item = new JMenuItem("Find"); - item.setAccelerator(KeyStroke.getKeyStroke('F', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> { - if (find.isVisible()) { - find.setVisible(false); - findI = 0; - findO = 0; - } else { - find.setVisible(true); - findT.selectAll(); - findT.requestFocusInWindow(); - } - }); - menu.add(item); - menu.addSeparator(); - item = new JMenuItem("Reset Text Size"); - item.addActionListener(event -> { - log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), 12)); - SwingUtilities.invokeLater(this::hScroll); - }); - menu.add(item); - item = new JMenuItem("Bigger Text"); - item.setAccelerator(KeyStroke.getKeyStroke('=', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> { - log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), log.getFont().getSize() + 2)); - SwingUtilities.invokeLater(this::hScroll); - }); - menu.add(item); - item = new JMenuItem("Smaller Text"); - item.setAccelerator(KeyStroke.getKeyStroke('-', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> { - log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), log.getFont().getSize() - 2)); - SwingUtilities.invokeLater(this::hScroll); - }); - menu.add(item); - menu.addSeparator(); - item = new JMenuItem("Clear Screen"); - item.setAccelerator(KeyStroke.getKeyStroke('L', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> clear()); - menu.add(item); - item = new JMenuItem("Reload Log"); - item.setAccelerator(KeyStroke.getKeyStroke('R', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> { - log.setText("\n"); - for (SubLogger.LogMessage message : logger.getMessages()) log(message.getDate(), message.getLevel(), message.getMessage()); - SwingUtilities.invokeLater(this::hScroll); - }); - menu.add(item); - jMenu.add(menu); - window.setJMenuBar(jMenu); - window.setContentPane(panel); - window.pack(); - window.setTitle(logger.getName() + " \u2014 SubServers 2"); - window.setSize(1024, 576); - Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); - int x = (int) ((dimension.getWidth() - window.getWidth()) / 2); - int y = (int) ((dimension.getHeight() - window.getHeight()) / 2); - window.setLocation(x, y); - window.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - window.addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - close(); - } - }); - window.addComponentListener(new ComponentAdapter() { - public void componentResized(ComponentEvent e) { - SwingUtilities.invokeLater(ConsoleWindow.this::hScroll); - } - }); - vScroll.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45))); - new SmartScroller(vScroll, SmartScroller.VERTICAL, SmartScroller.END); - log.setText("\n"); - log.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45))); - new TextFieldPopup(log, false); - ((AbstractDocument) log.getDocument()).setDocumentFilter(new DocumentFilter() { - @Override - public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { - super.insertString(fb, offset, string, attr); - hScroll(); - } - - @Override - public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { - super.replace(fb, offset, length, text, attrs); - hScroll(); - } - - @Override - public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { - super.remove(fb, offset, length); - hScroll(); - } - }); - - - popup = new TextFieldPopup(input, true); - input.setBorder(BorderFactory.createLineBorder(new Color(69, 73, 74))); - input.addActionListener((ActionEvent event) -> { - if (logger.getHandler() instanceof SubServer && input.getText().length() > 0 && !input.getText().equals(">")) { - if (((SubServer) logger.getHandler()).command((input.getText().startsWith(">")) ? input.getText().substring(1) : input.getText())) { - popup.commands.add((input.getText().startsWith(">")) ? input.getText().substring(1) : input.getText()); - popup.current = 0; - popup.last = true; - input.setText(""); - } - } - }); - ((AbstractDocument) input.getDocument()).setDocumentFilter(new DocumentFilter() { - @Override - public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { - if (offset < 1) { - return; - } - super.insertString(fb, offset, string, attr); - } - - @Override - public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { - if (offset < 1) { - length = Math.max(0, length - 1); - offset = 1; - } - super.replace(fb, offset, length, text, attrs); - } - - @Override - public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { - if (offset < 1) { - length = Math.max(0, length + offset - 1); - offset = 1; - } - if (length > 0) { - super.remove(fb, offset, length); - } - } - }); - input.addFocusListener(new FocusListener() { - @Override - public void focusGained(FocusEvent e) { - ifocus = true; - } - @Override - public void focusLost(FocusEvent e) { - ifocus = false; - } - }); - - vScroll.getHorizontalScrollBar().addAdjustmentListener(event -> { - if (!eScroll.contains(event.getValue())) { - eScroll.add(event.getValue()); - hScroll.setValue(event.getValue()); - } else { - eScroll.remove((Object) event.getValue()); - } - }); - hScroll.addAdjustmentListener(event -> { - if (!eScroll.contains(event.getValue())) { - eScroll.add(event.getValue()); - vScroll.getHorizontalScrollBar().setValue(event.getValue()); - } else { - eScroll.remove((Object) event.getValue()); - } - }); - - new TextFieldPopup(findT, false); - findT.setBorder(BorderFactory.createLineBorder(new Color(69, 73, 74))); - findP.addActionListener(event -> find(false)); - findN.addActionListener(event -> find(true)); - findD.addActionListener(event -> { + JMenuBar jMenu = new JMenuBar(); + JMenu menu = new JMenu("View"); + JMenuItem item = new JMenuItem("Scroll to Top"); + item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> vScroll.getVerticalScrollBar().setValue(0)); + menu.add(item); + item = new JMenuItem("Scroll to Bottom"); + item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> vScroll.getVerticalScrollBar().setValue(vScroll.getVerticalScrollBar().getMaximum() - vScroll.getVerticalScrollBar().getVisibleAmount())); + menu.add(item); + item = new JMenuItem("Find"); + item.setAccelerator(KeyStroke.getKeyStroke('F', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> { + if (find.isVisible()) { find.setVisible(false); findI = 0; findO = 0; - }); - - - if (!(logger.getHandler() instanceof SubServer)) { - input.setVisible(false); - hScroll.setVisible(false); - vScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); + } else { + find.setVisible(true); + findT.selectAll(); + findT.requestFocusInWindow(); + } + }); + menu.add(item); + menu.addSeparator(); + item = new JMenuItem("Reset Text Size"); + item.addActionListener(event -> { + log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), 12)); + SwingUtilities.invokeLater(this::hScroll); + }); + menu.add(item); + item = new JMenuItem("Bigger Text"); + item.setAccelerator(KeyStroke.getKeyStroke('=', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> { + log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), log.getFont().getSize() + 2)); + SwingUtilities.invokeLater(this::hScroll); + }); + menu.add(item); + item = new JMenuItem("Smaller Text"); + item.setAccelerator(KeyStroke.getKeyStroke('-', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> { + log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), log.getFont().getSize() - 2)); + SwingUtilities.invokeLater(this::hScroll); + }); + menu.add(item); + menu.addSeparator(); + item = new JMenuItem("Clear Screen"); + item.setAccelerator(KeyStroke.getKeyStroke('L', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> clear()); + menu.add(item); + item = new JMenuItem("Reload Log"); + item.setAccelerator(KeyStroke.getKeyStroke('R', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> { + log.setText("\n"); + for (SubLogger.LogMessage message : logger.getMessages()) + log(message.getDate(), message.getLevel(), message.getMessage()); + SwingUtilities.invokeLater(this::hScroll); + }); + menu.add(item); + jMenu.add(menu); + window.setJMenuBar(jMenu); + window.setContentPane(panel); + window.pack(); + window.setTitle(logger.getName() + " \u2014 SubServers 2"); + window.setSize(1024, 576); + Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); + int x = (int) ((dimension.getWidth() - window.getWidth()) / 2); + int y = (int) ((dimension.getHeight() - window.getHeight()) / 2); + window.setLocation(x, y); + window.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + window.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + close(); + } + }); + window.addComponentListener(new ComponentAdapter() { + public void componentResized(ComponentEvent e) { + SwingUtilities.invokeLater(ConsoleWindow.this::hScroll); + } + }); + vScroll.setBorder(BorderFactory.createEmptyBorder()); + new SmartScroller(vScroll, SmartScroller.VERTICAL, SmartScroller.END); + log.setText("\n"); + log.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45))); + new TextFieldPopup(log, false); + ((AbstractDocument) log.getDocument()).setDocumentFilter(new DocumentFilter() { + @Override + public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { + super.insertString(fb, offset, string, attr); + hScroll(); } - logger.registerFilter(this); - for (SubLogger.LogMessage message : logger.getMessages()) log(message.getDate(), message.getLevel(), message.getMessage()); - KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keys); - events.add(() -> { - if (logger.isLogging() && !open) open(); - }); - hScroll(); + @Override + public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { + super.replace(fb, offset, length, text, attrs); + hScroll(); + } + + @Override + public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { + super.remove(fb, offset, length); + hScroll(); + } }); - runEvents(); + + + popup = new TextFieldPopup(input, true); + input.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45), 4)); + input.addActionListener((ActionEvent event) -> { + if (logger.getHandler() instanceof SubServer && input.getText().length() > 0 && !input.getText().equals(">")) { + if (((SubServer) logger.getHandler()).command((input.getText().startsWith(">")) ? input.getText().substring(1) : input.getText())) { + popup.commands.add((input.getText().startsWith(">")) ? input.getText().substring(1) : input.getText()); + popup.current = 0; + popup.last = true; + input.setText(""); + } + } + }); + ((AbstractDocument) input.getDocument()).setDocumentFilter(new DocumentFilter() { + @Override + public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { + if (offset < 1) { + return; + } + super.insertString(fb, offset, string, attr); + } + + @Override + public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { + if (offset < 1) { + length = Math.max(0, length - 1); + offset = 1; + } + super.replace(fb, offset, length, text, attrs); + } + + @Override + public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { + if (offset < 1) { + length = Math.max(0, length + offset - 1); + offset = 1; + } + if (length > 0) { + super.remove(fb, offset, length); + } + } + }); + input.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + ifocus = true; + } + + @Override + public void focusLost(FocusEvent e) { + ifocus = false; + } + }); + + vScroll.getVerticalScrollBar().setBackground(new Color(69, 73, 74)); + vScroll.getHorizontalScrollBar().setBackground(new Color(69, 73, 74)); + vScroll.getHorizontalScrollBar().addAdjustmentListener(event -> { + if (!eScroll.contains(event.getValue())) { + eScroll.add(event.getValue()); + hScroll.setValue(event.getValue()); + } else { + eScroll.remove((Object) event.getValue()); + } + }); + hScroll.setBackground(new Color(69, 73, 74)); + hScroll.addAdjustmentListener(event -> { + if (!eScroll.contains(event.getValue())) { + eScroll.add(event.getValue()); + vScroll.getHorizontalScrollBar().setValue(event.getValue()); + } else { + eScroll.remove((Object) event.getValue()); + } + }); + + new TextFieldPopup(findT, false); + findT.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45), 4)); + ((AbstractDocument) findT.getDocument()).setDocumentFilter(new DocumentFilter() { + @Override + public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { + super.insertString(fb, offset, string, attr); + findI = 0; + findO = 0; + } + + @Override + public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { + super.replace(fb, offset, length, text, attrs); + findI = 0; + findO = 0; + } + + @Override + public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { + super.remove(fb, offset, length); + findI = 0; + findO = 0; + } + }); + findP.addChangeListener(e -> { + if (findP.getModel().isPressed()) findP.setBackground(new Color(40, 44, 45)); + else findP.setBackground(new Color(69, 73, 74)); + }); + findP.setBorder(new ButtonBorder(40, 44, 45, 4)); + findP.addActionListener(event -> find(false)); + findN.addChangeListener(e -> { + if (findN.getModel().isPressed()) findN.setBackground(new Color(40, 44, 45)); + else findN.setBackground(new Color(69, 73, 74)); + }); + findN.setBorder(new ButtonBorder(40, 44, 45, 4)); + findN.addActionListener(event -> find(true)); + findD.addChangeListener(e -> { + if (findD.getModel().isPressed()) findD.setBackground(new Color(40, 44, 45)); + else findD.setBackground(new Color(69, 73, 74)); + }); + findD.setBorder(new ButtonBorder(40, 44, 45, 4)); + findD.addActionListener(event -> { + find.setVisible(false); + findI = 0; + findO = 0; + }); + + + if (!(logger.getHandler() instanceof SubServer)) { + input.setVisible(false); + hScroll.setVisible(false); + vScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); + } + + logger.registerFilter(this); + for (SubLogger.LogMessage message : logger.getMessages()) log(message.getDate(), message.getLevel(), message.getMessage()); + KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keys); + if (logger.isLogging() && !open) open(); + SwingUtilities.invokeLater(this::hScroll); } private void hScroll() { hScroll.setMaximum(vScroll.getHorizontalScrollBar().getMaximum()); @@ -304,49 +338,18 @@ public class ConsoleWindow implements SubLogFilter { SwingUtilities.invokeLater(this::hScroll); } - public boolean runEvents() { - return runEvents(false); - } - - private boolean runEvents(boolean force) { - if (events.size() > 0 && (force || !running)) { - try { - running = true; - final Runnable event = events.get(0); - if (event != null) { - SwingUtilities.invokeLater(() -> { - try { - event.run(); - } catch (Throwable e) { - new InvocationTargetException(e, "Exception while running SubServers Console Window Event").printStackTrace(); - } - events.remove(0); - if (!runEvents(true)) running = false; - }); - } else { - events.remove(0); - if (!runEvents(true)) running = false; - } - return true; - } catch (NullPointerException e) { - return false; - } - } else return false; - } - @Override public void start() { open(); } public void open() { - events.add(() -> { + SwingUtilities.invokeLater(() -> { if (!open) { window.setVisible(true); this.open = true; } window.toFront(); }); - runEvents(); } public boolean isOpen() { @@ -358,7 +361,7 @@ public class ConsoleWindow implements SubLogFilter { close(); } public void close() { - events.add(() -> { + SwingUtilities.invokeLater(() -> { if (open) { this.open = false; if (find.isVisible()) { @@ -370,7 +373,6 @@ public class ConsoleWindow implements SubLogFilter { plugin.onClose(this); } }); - runEvents(); } public void destroy() { @@ -416,7 +418,7 @@ public class ConsoleWindow implements SubLogFilter { } catch (BadLocationException e) { findI = log.getText().length() - 1; JOptionPane.showMessageDialog(window, - "There are no more results\nSearch again to start from the " + ((direction)?"top":"bottom"), + ((findO > 0)?"There are no more results\nSearch again to start from the " + ((direction)?"top":"bottom"):"Couldn't find \"" + findT.getText() + "\""), "Find", JOptionPane.WARNING_MESSAGE); } @@ -467,6 +469,21 @@ public class ConsoleWindow implements SubLogFilter { menu.add(paste); } + Action find = new TextAction("Find Selection") { + public void actionPerformed(ActionEvent e) { + JTextComponent field = getFocusedComponent(); + if (field.getSelectedText() != null && field.getSelectedText().length() > 0) { + findT.setText(field.getSelectedText()); + findI = 0; + findO = 0; + ConsoleWindow.this.find.setVisible(true); + find(true); + } + } + }; + find.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke('F', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() + KeyEvent.SHIFT_MASK, true)); + menu.add(find); + Action selectAll = new TextAction("Select All") { public void actionPerformed(ActionEvent e) { JTextComponent field = getFocusedComponent(); @@ -628,4 +645,29 @@ public class ConsoleWindow implements SubLogFilter { previousMaximum = maximum; } } + private class ButtonBorder implements Border { + private int radius; + private Color color; + + public ButtonBorder(int red, int green, int blue, int radius) { + this.color = new Color(red, green, blue); + this.radius = radius; + } + + + public Insets getBorderInsets(Component c) { + return new Insets(this.radius+1, this.radius+1, this.radius+2, this.radius); + } + + + public boolean isBorderOpaque() { + return true; + } + + + public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + g.setColor(color); + g.drawRoundRect(x, y, width-1, height-1, radius, radius); + } + } }