From 53325dc99d2fd8c7f8b2d972dcc55f4f4d1d47f3 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 28 Apr 2014 14:03:48 +0200 Subject: [PATCH 1/3] Added dock icon support for mac users (working for windows this time) --- parabotv2/src/org/parabot/core/ui/BotUI.java | 16 +++++ .../src/org/parabot/core/ui/LoginUI.java | 43 ++++++------ .../org/parabot/core/ui/ServerSelector.java | 16 ++++- .../environment/scripts/Frameworks.java | 67 +++++++++++++++++++ .../servers/LocalServerExecuter.java | 50 ++++++++++++++ 5 files changed, 172 insertions(+), 20 deletions(-) create mode 100755 parabotv2/src/org/parabot/environment/scripts/Frameworks.java create mode 100755 parabotv2/src/org/parabot/environment/servers/LocalServerExecuter.java diff --git a/parabotv2/src/org/parabot/core/ui/BotUI.java b/parabotv2/src/org/parabot/core/ui/BotUI.java index 61ff190..fcf4055 100644 --- a/parabotv2/src/org/parabot/core/ui/BotUI.java +++ b/parabotv2/src/org/parabot/core/ui/BotUI.java @@ -14,6 +14,8 @@ import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; /** * @@ -42,6 +44,20 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setIconImage(Images.getResource("/org/parabot/core/ui/images/icon.png")); + + /** Adds the dock icon to mac users */ + try { + Class util = Class.forName("com.apple.eawt.Application"); + Method getApplication = util.getMethod("getApplication", new Class[0]); + Object application = getApplication.invoke(util); + Class params[] = new Class[1]; + params[0] = Image.class; + Method setDockIconImage = util.getMethod("setDockIconImage", params); + setDockIconImage.invoke(application, Images.getResource("/org/parabot/core/ui/images/icon.png")); + } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + // Ignore for windows + } + setLayout(new BorderLayout()); addComponentListener(this); addWindowListener(this); diff --git a/parabotv2/src/org/parabot/core/ui/LoginUI.java b/parabotv2/src/org/parabot/core/ui/LoginUI.java index 7596098..401761a 100644 --- a/parabotv2/src/org/parabot/core/ui/LoginUI.java +++ b/parabotv2/src/org/parabot/core/ui/LoginUI.java @@ -1,29 +1,21 @@ package org.parabot.core.ui; -import java.awt.BorderLayout; -import java.awt.Desktop; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.RenderingHints; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.io.IOException; -import java.net.URI; - -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JPasswordField; -import javax.swing.JTextField; - import org.parabot.core.Core; import org.parabot.core.forum.AccountManager; import org.parabot.core.forum.AccountManagerAccess; import org.parabot.core.ui.images.Images; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.URI; + /** * * Users must login with their parabot account through this LoginUI class @@ -91,6 +83,19 @@ public class LoginUI extends JFrame { this.setIconImage(Images .getResource("/org/parabot/core/ui/images/icon.png")); + /** Adds the dock icon to mac users */ + try { + Class util = Class.forName("com.apple.eawt.Application"); + Method getApplication = util.getMethod("getApplication", new Class[0]); + Object application = getApplication.invoke(util); + Class params[] = new Class[1]; + params[0] = Image.class; + Method setDockIconImage = util.getMethod("setDockIconImage", params); + setDockIconImage.invoke(application, Images.getResource("/org/parabot/core/ui/images/icon.png")); + } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + // Ignore for windows + } + int w = 250; int x = 8; int y = 64; diff --git a/parabotv2/src/org/parabot/core/ui/ServerSelector.java b/parabotv2/src/org/parabot/core/ui/ServerSelector.java index 0bdc6dc..54f8148 100644 --- a/parabotv2/src/org/parabot/core/ui/ServerSelector.java +++ b/parabotv2/src/org/parabot/core/ui/ServerSelector.java @@ -8,8 +8,9 @@ import org.parabot.core.ui.utils.SwingUtil; import org.parabot.environment.Environment; import javax.swing.*; - import java.awt.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.LinkedList; import java.util.Queue; @@ -50,6 +51,19 @@ public class ServerSelector extends JFrame { this.setResizable(false); this.setIconImage(Images.getResource("/org/parabot/core/ui/images/icon.png")); + /** Adds the dock icon to mac users */ + try { + Class util = Class.forName("com.apple.eawt.Application"); + Method getApplication = util.getMethod("getApplication", new Class[0]); + Object application = getApplication.invoke(util); + Class params[] = new Class[1]; + params[0] = Image.class; + Method setDockIconImage = util.getMethod("setDockIconImage", params); + setDockIconImage.invoke(application, Images.getResource("/org/parabot/core/ui/images/icon.png")); + } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + // Ignore for windows + } + this.panel = new JPanel(new BorderLayout()); this.panel.setPreferredSize(new Dimension(600, 400)); diff --git a/parabotv2/src/org/parabot/environment/scripts/Frameworks.java b/parabotv2/src/org/parabot/environment/scripts/Frameworks.java new file mode 100755 index 0000000..0f66eea --- /dev/null +++ b/parabotv2/src/org/parabot/environment/scripts/Frameworks.java @@ -0,0 +1,67 @@ +package org.parabot.environment.scripts; + +import java.util.Collection; + +import org.parabot.environment.scripts.framework.AbstractFramework; +import org.parabot.environment.scripts.framework.LoopTask; +import org.parabot.environment.scripts.framework.Strategy; + +/** + * + * Holds various script frameworks + * + * @author Everel + * + */ +public class Frameworks { + + public static Looper getLooper(LoopTask loopTask) { + return new Looper(loopTask); + } + + public static StrategyWorker getStrategyWorker(Collection strategies) { + return new StrategyWorker(strategies); + } + +} + +class Looper extends AbstractFramework { + private LoopTask loopTask = null; + + public Looper(LoopTask loopTask) { + this.loopTask = loopTask; + } + @Override + public boolean execute() { + int sleepTime = loopTask.loop(); + if(sleepTime < 0) { + return false; + } + try { + Thread.sleep(sleepTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return true; + } +} + +class StrategyWorker extends AbstractFramework { + private Collection strategies; + + public StrategyWorker(Collection strategies) { + this.strategies = strategies; + } + + @Override + public boolean execute() { + for(Strategy s : strategies) { + if(s.activate()) { + s.execute(); + return true; + } + } + return true; + } + +} diff --git a/parabotv2/src/org/parabot/environment/servers/LocalServerExecuter.java b/parabotv2/src/org/parabot/environment/servers/LocalServerExecuter.java new file mode 100755 index 0000000..61a9f4c --- /dev/null +++ b/parabotv2/src/org/parabot/environment/servers/LocalServerExecuter.java @@ -0,0 +1,50 @@ +package org.parabot.environment.servers; + +import org.parabot.core.Core; +import org.parabot.core.Directories; +import org.parabot.core.build.BuildPath; +import org.parabot.core.classpath.ClassPath; +import org.parabot.environment.servers.executers.ServerExecuter; + +import java.net.MalformedURLException; + +/** + * + * Loads locally stored server providers + * + * @author Everel + * + */ +public class LocalServerExecuter extends ServerExecuter { + private final ServerProvider serverProvider; + private ClassPath classPath; + private String serverName; + + public LocalServerExecuter(ServerProvider serverProvider, + ClassPath classPath, final String serverName) { + this.serverProvider = serverProvider; + this.classPath = classPath; + this.serverName = serverName; + } + + @Override + public void run() { + // add jar or directory to buildpath. + if (this.classPath.isJar()) { + Core.verbose("Adding server provider jar to buildpath: " + + this.classPath.lastParsed.toString()); + this.classPath.addToBuildPath(); + } else { + Core.verbose("Adding server providers directory to buildpath: " + + Directories.getServerPath().getPath()); + try { + BuildPath.add(Directories.getServerPath().toURI().toURL()); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + // finalize + super.finalize(this.serverProvider, this.serverName); + } + +} From 1f96eb6f29301fa986fc950ec6af6e6946271ef5 Mon Sep 17 00:00:00 2001 From: Jeroen Ketelaar Date: Mon, 28 Apr 2014 14:04:32 +0200 Subject: [PATCH 2/3] Changed version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 75b0cae..abb651c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Parabot -Parabot V2.08. +Parabot V2.09. #### Website From f83acee0217b8dd5548badda30552fb231690f9b Mon Sep 17 00:00:00 2001 From: Clisprail Date: Mon, 28 Apr 2014 14:27:50 +0200 Subject: [PATCH 3/3] UI icon updates --- parabotv2/src/org/parabot/core/ui/BotUI.java | 60 +++++++++---------- .../src/org/parabot/core/ui/LoginUI.java | 44 +++++++------- .../org/parabot/core/ui/ServerSelector.java | 34 ++++------- .../org/parabot/core/ui/utils/SwingUtil.java | 24 ++++++++ 4 files changed, 84 insertions(+), 78 deletions(-) diff --git a/parabotv2/src/org/parabot/core/ui/BotUI.java b/parabotv2/src/org/parabot/core/ui/BotUI.java index fcf4055..2986be6 100644 --- a/parabotv2/src/org/parabot/core/ui/BotUI.java +++ b/parabotv2/src/org/parabot/core/ui/BotUI.java @@ -1,21 +1,28 @@ package org.parabot.core.ui; -import org.parabot.core.Context; -import org.parabot.core.ui.components.GamePanel; -import org.parabot.core.ui.images.Images; -import org.parabot.environment.scripts.Script; - -import javax.swing.*; - -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; + +import javax.swing.ImageIcon; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; + +import org.parabot.core.Context; +import org.parabot.core.ui.components.GamePanel; +import org.parabot.core.ui.images.Images; +import org.parabot.core.ui.utils.SwingUtil; +import org.parabot.environment.scripts.Script; /** * @@ -43,25 +50,23 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, setTitle("Parabot"); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setIconImage(Images.getResource("/org/parabot/core/ui/images/icon.png")); - - /** Adds the dock icon to mac users */ - try { - Class util = Class.forName("com.apple.eawt.Application"); - Method getApplication = util.getMethod("getApplication", new Class[0]); - Object application = getApplication.invoke(util); - Class params[] = new Class[1]; - params[0] = Image.class; - Method setDockIconImage = util.getMethod("setDockIconImage", params); - setDockIconImage.invoke(application, Images.getResource("/org/parabot/core/ui/images/icon.png")); - } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { - // Ignore for windows - } + createMenu(); setLayout(new BorderLayout()); addComponentListener(this); addWindowListener(this); + add(GamePanel.getInstance()); + GamePanel.getInstance().addLoader(); + + SwingUtil.setParabotIcons(this); + + pack(); + setLocationRelativeTo(null); + BotDialog.getInstance(this); + } + + private void createMenu() { JMenuBar menuBar = new JMenuBar(); JMenu file = new JMenu("File"); @@ -103,13 +108,6 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, menuBar.add(scripts); setJMenuBar(menuBar); - - add(GamePanel.getInstance()); - GamePanel.getInstance().addLoader(); - - pack(); - setLocationRelativeTo(null); - BotDialog.getInstance(this); } @Override diff --git a/parabotv2/src/org/parabot/core/ui/LoginUI.java b/parabotv2/src/org/parabot/core/ui/LoginUI.java index 401761a..f2df30a 100644 --- a/parabotv2/src/org/parabot/core/ui/LoginUI.java +++ b/parabotv2/src/org/parabot/core/ui/LoginUI.java @@ -1,21 +1,30 @@ package org.parabot.core.ui; -import org.parabot.core.Core; -import org.parabot.core.forum.AccountManager; -import org.parabot.core.forum.AccountManagerAccess; -import org.parabot.core.ui.images.Images; - -import javax.swing.*; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Desktop; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.net.URI; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPasswordField; +import javax.swing.JTextField; + +import org.parabot.core.Core; +import org.parabot.core.forum.AccountManager; +import org.parabot.core.forum.AccountManagerAccess; +import org.parabot.core.ui.images.Images; +import org.parabot.core.ui.utils.SwingUtil; + /** * * Users must login with their parabot account through this LoginUI class @@ -80,21 +89,8 @@ public class LoginUI extends JFrame { this.setLocationByPlatform(true); this.setLayout(new BorderLayout()); this.setResizable(false); - this.setIconImage(Images - .getResource("/org/parabot/core/ui/images/icon.png")); - - /** Adds the dock icon to mac users */ - try { - Class util = Class.forName("com.apple.eawt.Application"); - Method getApplication = util.getMethod("getApplication", new Class[0]); - Object application = getApplication.invoke(util); - Class params[] = new Class[1]; - params[0] = Image.class; - Method setDockIconImage = util.getMethod("setDockIconImage", params); - setDockIconImage.invoke(application, Images.getResource("/org/parabot/core/ui/images/icon.png")); - } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { - // Ignore for windows - } + + SwingUtil.setParabotIcons(this); int w = 250; int x = 8; diff --git a/parabotv2/src/org/parabot/core/ui/ServerSelector.java b/parabotv2/src/org/parabot/core/ui/ServerSelector.java index 54f8148..deb05ed 100644 --- a/parabotv2/src/org/parabot/core/ui/ServerSelector.java +++ b/parabotv2/src/org/parabot/core/ui/ServerSelector.java @@ -1,19 +1,20 @@ package org.parabot.core.ui; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.util.LinkedList; +import java.util.Queue; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; + import org.parabot.core.desc.ServerDescription; import org.parabot.core.parsers.servers.ServerParser; import org.parabot.core.ui.components.ServerComponent; -import org.parabot.core.ui.images.Images; import org.parabot.core.ui.utils.SwingUtil; import org.parabot.environment.Environment; -import javax.swing.*; -import java.awt.*; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.LinkedList; -import java.util.Queue; - /** * * Shows a list of every supported server which can be started @@ -49,20 +50,8 @@ public class ServerSelector extends JFrame { this.setTitle("Servers"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); - this.setIconImage(Images.getResource("/org/parabot/core/ui/images/icon.png")); - - /** Adds the dock icon to mac users */ - try { - Class util = Class.forName("com.apple.eawt.Application"); - Method getApplication = util.getMethod("getApplication", new Class[0]); - Object application = getApplication.invoke(util); - Class params[] = new Class[1]; - params[0] = Image.class; - Method setDockIconImage = util.getMethod("setDockIconImage", params); - setDockIconImage.invoke(application, Images.getResource("/org/parabot/core/ui/images/icon.png")); - } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { - // Ignore for windows - } + + SwingUtil.setParabotIcons(this); this.panel = new JPanel(new BorderLayout()); this.panel.setPreferredSize(new Dimension(600, 400)); @@ -103,7 +92,6 @@ public class ServerSelector extends JFrame { * @param widgets */ private boolean runServer(Queue widgets) { - // TODO: test this method if (widgets == null || widgets.isEmpty()) { return false; } diff --git a/parabotv2/src/org/parabot/core/ui/utils/SwingUtil.java b/parabotv2/src/org/parabot/core/ui/utils/SwingUtil.java index 38cce57..efd6cd9 100644 --- a/parabotv2/src/org/parabot/core/ui/utils/SwingUtil.java +++ b/parabotv2/src/org/parabot/core/ui/utils/SwingUtil.java @@ -1,7 +1,14 @@ package org.parabot.core.ui.utils; +import java.awt.Image; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + import javax.swing.JFrame; +import org.parabot.core.ui.images.Images; +import org.parabot.environment.OperatingSystem; + /** * * Holds various swing util based methods @@ -21,5 +28,22 @@ public class SwingUtil { f.setLocationRelativeTo(null); f.setVisible(true); } + + public static void setParabotIcons(JFrame f) { + f.setIconImage(Images.getResource("/org/parabot/core/ui/images/icon.png")); + + if(OperatingSystem.getOS() == OperatingSystem.MAC) { + /** Adds the dock icon to mac users */ + try { + Class util = Class.forName("com.apple.eawt.Application"); + Object application = util.getMethod("getApplication", new Class[] { }).invoke(null); + Method setDockIconImage = util.getMethod("setDockIconImage", new Class[] { Image.class }); + setDockIconImage.invoke(application, Images.getResource("/org/parabot/core/ui/images/icon.png")); + } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException ignored) { + } catch (Throwable t) { + t.printStackTrace(); + } + } + } }