Added screenshot feature

This commit is contained in:
Eric-Turner
2016-05-20 02:35:05 -04:00
parent 23a97695f2
commit 389f2bf50e
2 changed files with 243 additions and 220 deletions
@@ -40,6 +40,7 @@ public class Directories {
cached.put("Settings", new File(cached.get("Root"), "/Parabot/settings/")); cached.put("Settings", new File(cached.get("Root"), "/Parabot/settings/"));
cached.put("Servers", new File(cached.get("Root"), "/Parabot/servers/")); cached.put("Servers", new File(cached.get("Root"), "/Parabot/servers/"));
cached.put("Cache", new File(cached.get("Root"), "/Parabot/cache/")); cached.put("Cache", new File(cached.get("Root"), "/Parabot/cache/"));
cached.put("Screenshots", new File(cached.get("Root"), "/Parabot/screenshots/"));
Core.verbose("Directories cached."); Core.verbose("Directories cached.");
clearCache(259200); clearCache(259200);
@@ -192,6 +193,16 @@ public class Directories {
return cached.get("Home"); return cached.get("Home");
} }
/**
* Returns the screenshot folder.
*
* @return
*/
public static File getScreenshotDir() {
return cached.get("Screenshots");
}
/** /**
* Validates all directories and makes them if necessary * Validates all directories and makes them if necessary
*/ */
+232 -220
View File
@@ -7,13 +7,17 @@ import org.parabot.core.ui.components.VerboseLoader;
import org.parabot.core.ui.images.Images; import org.parabot.core.ui.images.Images;
import org.parabot.core.ui.utils.SwingUtil; import org.parabot.core.ui.utils.SwingUtil;
import org.parabot.environment.OperatingSystem; import org.parabot.environment.OperatingSystem;
import org.parabot.environment.api.utils.StringUtils;
import org.parabot.environment.scripts.Script; import org.parabot.environment.scripts.Script;
import org.parabot.environment.scripts.randoms.Random; import org.parabot.environment.scripts.randoms.Random;
import javax.imageio.ImageIO;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
@@ -23,272 +27,280 @@ import java.util.ArrayList;
*/ */
public class BotUI extends JFrame implements ActionListener, ComponentListener, WindowListener { public class BotUI extends JFrame implements ActionListener, ComponentListener, WindowListener {
private static final long serialVersionUID = -2126184292879805519L; private static final long serialVersionUID = -2126184292879805519L;
private static BotUI instance; private static BotUI instance;
private static JDialog dialog; private static JDialog dialog;
private JMenuItem run, pause, stop, cacheClear; private JMenuItem run, pause, stop, cacheClear;
private boolean runScript, pauseScript; private boolean runScript, pauseScript;
public BotUI(String username, String password) { public BotUI(String username, String password) {
if (instance != null) { if (instance != null) {
throw new IllegalStateException("BotUI already created"); throw new IllegalStateException("BotUI already created");
} }
instance = this; instance = this;
//WebLookAndFeel.install(); //WebLookAndFeel.install();
JPopupMenu.setDefaultLightWeightPopupEnabled(false); JPopupMenu.setDefaultLightWeightPopupEnabled(false);
setTitle("Parabot"); setTitle("Parabot");
setResizable(false); setResizable(false);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
createMenu(); createMenu();
setLayout(new BorderLayout()); setLayout(new BorderLayout());
addComponentListener(this); addComponentListener(this);
addWindowListener(this); addWindowListener(this);
add(GamePanel.getInstance()); add(GamePanel.getInstance());
GamePanel.getInstance().add(VerboseLoader.get(username, password), BorderLayout.CENTER); GamePanel.getInstance().add(VerboseLoader.get(username, password), BorderLayout.CENTER);
add(Logger.getInstance(), BorderLayout.SOUTH); add(Logger.getInstance(), BorderLayout.SOUTH);
SwingUtil.setParabotIcons(this); SwingUtil.setParabotIcons(this);
pack(); pack();
setLocationRelativeTo(null); setLocationRelativeTo(null);
BotDialog.getInstance(this); BotDialog.getInstance(this);
if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) { if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) {
BotDialog.getInstance().setVisible(false); BotDialog.getInstance().setVisible(false);
} }
} }
public static BotUI getInstance() { public static BotUI getInstance() {
return instance; return instance;
} }
private void createMenu() {
JMenuBar menuBar = new JMenuBar();
private void createMenu() { JMenu file = new JMenu("File");
JMenuBar menuBar = new JMenuBar(); JMenu scripts = new JMenu("Script");
JMenu features = new JMenu("Features");
JMenu file = new JMenu("File"); JMenuItem screenshot = new JMenuItem("Create screenshot");
JMenu scripts = new JMenu("Script"); JMenuItem proxy = new JMenuItem("Network");
JMenu features = new JMenu("Features"); JMenuItem randoms = new JMenuItem("Randoms");
JMenuItem dialog = new JCheckBoxMenuItem("Disable dialog");
JMenuItem logger = new JCheckBoxMenuItem("Logger");
JMenuItem screenshot = new JMenuItem("Create screenshot"); if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) {
JMenuItem proxy = new JMenuItem("Network"); dialog.setSelected(true);
JMenuItem randoms = new JMenuItem("Randoms"); }
JMenuItem dialog = new JCheckBoxMenuItem("Disable dialog");
JMenuItem logger = new JCheckBoxMenuItem("Logger");
if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) { JMenuItem explorer = new JMenuItem("Reflection explorer");
dialog.setSelected(true); JMenuItem exit = new JMenuItem("Exit");
}
JMenuItem explorer = new JMenuItem("Reflection explorer"); run = new JMenuItem("Run");
JMenuItem exit = new JMenuItem("Exit"); run.setIcon(new ImageIcon(Images.getResource("/storage/images/run.png")));
run = new JMenuItem("Run"); pause = new JMenuItem("Pause");
run.setIcon(new ImageIcon(Images.getResource("/storage/images/run.png"))); pause.setEnabled(false);
pause.setIcon(new ImageIcon(Images.getResource("/storage/images/pause.png")));
pause = new JMenuItem("Pause"); stop = new JMenuItem("Stop");
pause.setEnabled(false); stop.setEnabled(false);
pause.setIcon(new ImageIcon(Images.getResource("/storage/images/pause.png"))); stop.setIcon(new ImageIcon(Images.getResource("/storage/images/stop.png")));
stop = new JMenuItem("Stop"); cacheClear = new JMenuItem("Clear cache");
stop.setEnabled(false); cacheClear.setIcon(new ImageIcon(Images.getResource("/storage/images/trash.png")));
stop.setIcon(new ImageIcon(Images.getResource("/storage/images/stop.png")));
cacheClear = new JMenuItem("Clear cache"); screenshot.addActionListener(this);
cacheClear.setIcon(new ImageIcon(Images.getResource("/storage/images/trash.png"))); proxy.addActionListener(this);
randoms.addActionListener(this);
dialog.addActionListener(this);
logger.addActionListener(this);
explorer.addActionListener(this);
exit.addActionListener(this);
cacheClear.addActionListener(this);
screenshot.addActionListener(this); run.addActionListener(this);
proxy.addActionListener(this); pause.addActionListener(this);
randoms.addActionListener(this); stop.addActionListener(this);
dialog.addActionListener(this);
logger.addActionListener(this);
explorer.addActionListener(this);
exit.addActionListener(this);
cacheClear.addActionListener(this);
run.addActionListener(this); file.add(screenshot);
pause.addActionListener(this); file.add(proxy);
stop.addActionListener(this); file.add(randoms);
file.add(dialog);
file.add(logger);
file.add(explorer);
file.add(exit);
file.add(screenshot); scripts.add(run);
file.add(proxy); scripts.add(pause);
file.add(randoms); scripts.add(stop);
file.add(dialog);
file.add(logger);
file.add(explorer);
file.add(exit);
scripts.add(run); features.add(cacheClear);
scripts.add(pause);
scripts.add(stop);
features.add(cacheClear); menuBar.add(file);
menuBar.add(scripts);
menuBar.add(file); menuBar.add(features);
menuBar.add(scripts);
menuBar.add(features);
setJMenuBar(menuBar); setJMenuBar(menuBar);
} }
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand(); String command = e.getActionCommand();
switch (command) { switch (command) {
case "Create screenshot": case "Create screenshot":
JOptionPane.showMessageDialog(this, "We are still working on this..."); try {
break; Robot robot = new Robot();
case "Exit": Rectangle parabotScreen = new Rectangle((int) getLocation().getX(), (int) getLocation().getY(), getWidth(), getHeight());
System.exit(0); BufferedImage image = robot.createScreenCapture(parabotScreen);
break; ImageIO.write(image, "png", new File(Directories.getScreenshotDir().getPath() + "/" + StringUtils.randomString(10) + ".png"));
case "Network": } catch (IOException k) {
NetworkUI.getInstance().setVisible(true); k.printStackTrace();
break; } catch (AWTException e1) {
case "Randoms": e1.printStackTrace();
ArrayList<String> randoms = new ArrayList<>(); }
for (Random r : Context.getInstance().getRandomHandler().getRandoms()) { break;
randoms.add(r.getName()); case "Exit":
} System.exit(0);
RandomUI.getInstance().openFrame(randoms); break;
break; case "Network":
case "Reflection explorer": NetworkUI.getInstance().setVisible(true);
new ReflectUI().setVisible(true); break;
break; case "Randoms":
case "Run": ArrayList<String> randoms = new ArrayList<>();
if (pauseScript) { for (Random r : Context.getInstance().getRandomHandler().getRandoms()) {
pauseScript = false; randoms.add(r.getName());
pause.setEnabled(true); }
run.setEnabled(false); RandomUI.getInstance().openFrame(randoms);
setScriptState(Script.STATE_RUNNING); break;
break; case "Reflection explorer":
} new ReflectUI().setVisible(true);
new ScriptSelector().setVisible(true); break;
break; case "Run":
case "Pause": if (pauseScript) {
setScriptState(Script.STATE_PAUSE); pauseScript = false;
pause.setEnabled(false); pause.setEnabled(true);
run.setEnabled(true); run.setEnabled(false);
pauseScript = true; setScriptState(Script.STATE_RUNNING);
break; break;
case "Stop": }
setScriptState(Script.STATE_STOPPED); new ScriptSelector().setVisible(true);
break; break;
case "Logger": case "Pause":
Logger.getInstance().setVisible(!Logger.getInstance().isVisible()); setScriptState(Script.STATE_PAUSE);
BotUI.getInstance().pack(); pause.setEnabled(false);
BotUI.getInstance().revalidate(); run.setEnabled(true);
if (!Logger.getInstance().isClearable()) { pauseScript = true;
Logger.getInstance().setClearable(); break;
} else if (Logger.getInstance().isClearable() && !Logger.getInstance().isVisible()) { case "Stop":
Logger.clearLogger(); setScriptState(Script.STATE_STOPPED);
Logger.addMessage("Logger started", false); break;
} case "Logger":
break; Logger.getInstance().setVisible(!Logger.getInstance().isVisible());
case "Disable dialog": BotUI.getInstance().pack();
BotDialog.getInstance().setVisible(!dialog.isVisible()); BotUI.getInstance().revalidate();
break; if (!Logger.getInstance().isClearable()) {
case "Clear cache": Logger.getInstance().setClearable();
Directories.clearCache(); } else if (Logger.getInstance().isClearable() && !Logger.getInstance().isVisible()) {
break; Logger.clearLogger();
default: Logger.addMessage("Logger started", false);
System.out.println("Invalid command: " + command); }
} break;
} case "Disable dialog":
BotDialog.getInstance().setVisible(!dialog.isVisible());
break;
case "Clear cache":
Directories.clearCache();
break;
default:
System.out.println("Invalid command: " + command);
}
}
protected void setDialog(JDialog dialog) { protected void setDialog(JDialog dialog) {
BotUI.dialog = dialog; BotUI.dialog = dialog;
} }
@Override @Override
public void componentMoved(ComponentEvent e) { public void componentMoved(ComponentEvent e) {
if (dialog == null || !isVisible()) { if (dialog == null || !isVisible()) {
return; return;
} }
Point gameLocation = GamePanel.getInstance().getLocationOnScreen(); Point gameLocation = GamePanel.getInstance().getLocationOnScreen();
dialog.setLocation(gameLocation.x, gameLocation.y); dialog.setLocation(gameLocation.x, gameLocation.y);
} }
public void toggleRun() { public void toggleRun() {
runScript = !runScript; runScript = !runScript;
if (runScript) { if (runScript) {
scriptRunning(); scriptRunning();
} else { } else {
scriptStopped(); scriptStopped();
} }
} }
private void scriptRunning() { private void scriptRunning() {
run.setEnabled(false); run.setEnabled(false);
pause.setEnabled(true); pause.setEnabled(true);
stop.setEnabled(true); stop.setEnabled(true);
} }
private void scriptStopped() { private void scriptStopped() {
run.setEnabled(true); run.setEnabled(true);
pause.setEnabled(false); pause.setEnabled(false);
stop.setEnabled(false); stop.setEnabled(false);
} }
private void setScriptState(int state) { private void setScriptState(int state) {
if (Context.getInstance().getRunningScript() != null) { if (Context.getInstance().getRunningScript() != null) {
Context.getInstance().getRunningScript().setState(state); Context.getInstance().getRunningScript().setState(state);
} }
} }
@Override @Override
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
if (isVisible()) { if (isVisible()) {
BotDialog.getInstance().setSize(getSize()); BotDialog.getInstance().setSize(getSize());
} }
} }
@Override @Override
public void componentShown(ComponentEvent e) { public void componentShown(ComponentEvent e) {
} }
@Override @Override
public void componentHidden(ComponentEvent e) { public void componentHidden(ComponentEvent e) {
} }
@Override @Override
public void windowActivated(WindowEvent arg0) { public void windowActivated(WindowEvent arg0) {
} }
@Override @Override
public void windowClosed(WindowEvent arg0) { public void windowClosed(WindowEvent arg0) {
} }
@Override @Override
public void windowClosing(WindowEvent e) { public void windowClosing(WindowEvent e) {
} }
@Override @Override
public void windowDeactivated(WindowEvent arg0) { public void windowDeactivated(WindowEvent arg0) {
} }
@Override @Override
public void windowDeiconified(WindowEvent arg0) { public void windowDeiconified(WindowEvent arg0) {
if (isVisible()) { if (isVisible()) {
BotDialog.getInstance().setVisible(false); BotDialog.getInstance().setVisible(false);
BotDialog.getInstance().setVisible(true); BotDialog.getInstance().setVisible(true);
} }
} }
@Override @Override
public void windowIconified(WindowEvent arg0) { public void windowIconified(WindowEvent arg0) {
} }
@Override @Override
public void windowOpened(WindowEvent arg0) { public void windowOpened(WindowEvent arg0) {
} }
} }