mirror of
https://github.com/2006-Scape/Parabot.git
synced 2026-07-06 08:39:33 +00:00
Bugfixes & slick UI
This commit is contained in:
@@ -1,40 +0,0 @@
|
|||||||
package org.parabot.core.logging;
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.util.logging.Handler;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.LogRecord;
|
|
||||||
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
|
|
||||||
public class LabelLogHandler extends Handler {
|
|
||||||
public final JLabel label;
|
|
||||||
private final Color defaultColor;
|
|
||||||
|
|
||||||
public LabelLogHandler() {
|
|
||||||
this.label = new JLabel();
|
|
||||||
this.defaultColor = label.getForeground();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() throws SecurityException {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void flush() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void publish(final LogRecord record) {
|
|
||||||
StringBuilder b = new StringBuilder(record.getMessage());
|
|
||||||
|
|
||||||
if (record.getLevel().intValue() > Level.WARNING.intValue()) {
|
|
||||||
label.setForeground(new Color(0xcc0000));
|
|
||||||
} else {
|
|
||||||
label.setForeground(defaultColor);
|
|
||||||
b.append(" ...");
|
|
||||||
}
|
|
||||||
|
|
||||||
label.setText(new String(b));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
package org.parabot.core.logging;
|
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.io.Writer;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.logging.Formatter;
|
|
||||||
import java.util.logging.LogRecord;
|
|
||||||
|
|
||||||
public class LogFormatter extends Formatter {
|
|
||||||
private static final String LINE_SEPARATOR = System
|
|
||||||
.getProperty("line.separator");
|
|
||||||
private final boolean appendNewLine;
|
|
||||||
|
|
||||||
public LogFormatter() {
|
|
||||||
this(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LogFormatter(final boolean appendNewLine) {
|
|
||||||
this.appendNewLine = appendNewLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String format(final LogRecord record) {
|
|
||||||
final StringBuilder result = new StringBuilder().append("[")
|
|
||||||
.append(record.getLevel().getName()).append("] ")
|
|
||||||
.append(new Date(record.getMillis())).append(": ")
|
|
||||||
.append(record.getLoggerName()).append(": ")
|
|
||||||
.append(record.getMessage())
|
|
||||||
.append(throwableToString(record.getThrown()));
|
|
||||||
if (appendNewLine) {
|
|
||||||
result.append(LogFormatter.LINE_SEPARATOR);
|
|
||||||
}
|
|
||||||
return result.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String formatMessage(final LogRecord record) {
|
|
||||||
return String.format(record.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
private String throwableToString(final Throwable t) {
|
|
||||||
if (t != null) {
|
|
||||||
final Writer exception = new StringWriter();
|
|
||||||
final PrintWriter printWriter = new PrintWriter(exception);
|
|
||||||
t.printStackTrace(printWriter);
|
|
||||||
return exception.toString();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
package org.parabot.core.logging;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Paris
|
|
||||||
*/
|
|
||||||
public class LogOutputStream extends OutputStream {
|
|
||||||
protected boolean hasBeenClosed;
|
|
||||||
protected Logger category;
|
|
||||||
protected Level priority;
|
|
||||||
protected StringBuilder buffer;
|
|
||||||
|
|
||||||
public LogOutputStream(final Logger category, final Level priority) {
|
|
||||||
this.priority = priority;
|
|
||||||
this.category = category;
|
|
||||||
buffer = new StringBuilder();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() {
|
|
||||||
flush();
|
|
||||||
hasBeenClosed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void flush() {
|
|
||||||
final String txt = buffer.toString().replace("\\s+$", "");
|
|
||||||
if (txt.trim().length() != 0) {
|
|
||||||
category.log(priority, txt);
|
|
||||||
}
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void reset() {
|
|
||||||
buffer.setLength(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(final int b) throws IOException {
|
|
||||||
if (hasBeenClosed) {
|
|
||||||
throw new IOException("The stream has been closed.");
|
|
||||||
} else if (b != 0) {
|
|
||||||
buffer.append((char) (b & 0xff));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,257 +0,0 @@
|
|||||||
package org.parabot.core.logging;
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Component;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.awt.GraphicsEnvironment;
|
|
||||||
import java.awt.Rectangle;
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.io.Writer;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.logging.Formatter;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.LogRecord;
|
|
||||||
|
|
||||||
import javax.swing.AbstractListModel;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import javax.swing.JList;
|
|
||||||
import javax.swing.JTextPane;
|
|
||||||
import javax.swing.ListCellRenderer;
|
|
||||||
import javax.swing.ListSelectionModel;
|
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
import javax.swing.UIManager;
|
|
||||||
import javax.swing.border.Border;
|
|
||||||
import javax.swing.border.EmptyBorder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Non swing methods are thread safe.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("rawtypes")
|
|
||||||
public class LogTextArea extends JList {
|
|
||||||
private static final int MAX_ENTRIES = 100;
|
|
||||||
private static final Rectangle BOTTOM_OF_WINDOW = new Rectangle(0,
|
|
||||||
Integer.MAX_VALUE, 0, 0);
|
|
||||||
private static final long serialVersionUID = 0;
|
|
||||||
private static final Formatter formatter = new Formatter() {
|
|
||||||
private final SimpleDateFormat dateFormat = new SimpleDateFormat(
|
|
||||||
"hh:mm:ss");
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String format(final LogRecord record) {
|
|
||||||
final String[] className = record.getLoggerName().split("\\.");
|
|
||||||
final String name = className[className.length - 1];
|
|
||||||
final int maxLen = 16;
|
|
||||||
final String append = "...";
|
|
||||||
|
|
||||||
return String.format(
|
|
||||||
"[%s] %-" + maxLen + "s %s %s",
|
|
||||||
dateFormat.format(record.getMillis()),
|
|
||||||
name.length() > maxLen ? name.substring(0,
|
|
||||||
maxLen - append.length())
|
|
||||||
+ append : name, record.getMessage(),
|
|
||||||
throwableToString(record.getThrown()));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
private static final Formatter copyPasteFormatter = new LogFormatter(false);
|
|
||||||
|
|
||||||
private final LogQueue logQueue;
|
|
||||||
private final LogAreaListModel model;
|
|
||||||
private final Runnable scrollToBottom;
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public LogTextArea() {
|
|
||||||
logQueue = new LogQueue();
|
|
||||||
model = new LogAreaListModel();
|
|
||||||
scrollToBottom = new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
scrollRectToVisible(LogTextArea.BOTTOM_OF_WINDOW);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
setModel(model);
|
|
||||||
setCellRenderer(new Renderer());
|
|
||||||
setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
|
||||||
String fontName = Font.MONOSPACED;
|
|
||||||
for (final Font font : GraphicsEnvironment
|
|
||||||
.getLocalGraphicsEnvironment().getAllFonts()) {
|
|
||||||
final String name = font.getName();
|
|
||||||
if (name.matches("Monaco|Consolas")) {
|
|
||||||
fontName = name;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setFont(new Font(fontName, Font.PLAIN, 12));
|
|
||||||
|
|
||||||
new Thread(logQueue, "LogGuiQueue").start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs a new entry to be shown in the list. Thread safe.
|
|
||||||
*
|
|
||||||
* @param logRecord
|
|
||||||
* The entry.
|
|
||||||
*/
|
|
||||||
public void log(final LogRecord logRecord) {
|
|
||||||
logQueue.queue(new WrappedLogRecord(logRecord));
|
|
||||||
}
|
|
||||||
|
|
||||||
private class LogAreaListModel extends AbstractListModel {
|
|
||||||
private static final long serialVersionUID = 0;
|
|
||||||
|
|
||||||
private List<WrappedLogRecord> records = new ArrayList<WrappedLogRecord>(
|
|
||||||
LogTextArea.MAX_ENTRIES);
|
|
||||||
|
|
||||||
public void addAllElements(final List<WrappedLogRecord> obj) {
|
|
||||||
records.addAll(obj);
|
|
||||||
if (getSize() > LogTextArea.MAX_ENTRIES) {
|
|
||||||
records.subList(0, (getSize() - LogTextArea.MAX_ENTRIES))
|
|
||||||
.clear();
|
|
||||||
|
|
||||||
fireContentsChanged(this, 0, (getSize() - 1));
|
|
||||||
} else {
|
|
||||||
fireIntervalAdded(this, (getSize() - 1), (getSize() - 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getElementAt(final int index) {
|
|
||||||
return records.get(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSize() {
|
|
||||||
return records.size();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Flushes every #FLUSH_RATE (milliseconds)
|
|
||||||
*/
|
|
||||||
private class LogQueue implements Runnable {
|
|
||||||
public static final int FLUSH_RATE = 1000;
|
|
||||||
private final Object lock = new Object();
|
|
||||||
private List<WrappedLogRecord> queue = new ArrayList<WrappedLogRecord>(
|
|
||||||
100);
|
|
||||||
|
|
||||||
public void queue(final WrappedLogRecord record) {
|
|
||||||
synchronized (lock) {
|
|
||||||
queue.add(record);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
while (true) {
|
|
||||||
List<WrappedLogRecord> toFlush = null;
|
|
||||||
|
|
||||||
synchronized (lock) {
|
|
||||||
if (queue.size() != 0) {
|
|
||||||
toFlush = new ArrayList<WrappedLogRecord>(queue);
|
|
||||||
queue = queue.subList(0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (toFlush != null) { // Hold the lock for as little time as
|
|
||||||
// possible
|
|
||||||
model.addAllElements(toFlush);
|
|
||||||
SwingUtilities.invokeLater(scrollToBottom);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
Thread.sleep(LogQueue.FLUSH_RATE);
|
|
||||||
} catch (final InterruptedException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class Renderer implements ListCellRenderer {
|
|
||||||
private final Border EMPTY_BORDER = new EmptyBorder(1, 1, 1, 1);
|
|
||||||
private final Border SELECTED_BORDER = UIManager
|
|
||||||
.getBorder("List.focusCellHighlightBorder");
|
|
||||||
private final Color DARK_GREEN = new Color(0, 0xcc, 0),
|
|
||||||
DARK_RED = new Color(0xcc, 0, 0), DARK_PINK = new Color(0xff,
|
|
||||||
0, 0x66);
|
|
||||||
|
|
||||||
public Component getListCellRendererComponent(final JList list,
|
|
||||||
final Object value, final int index, final boolean isSelected,
|
|
||||||
final boolean cellHasFocus) {
|
|
||||||
if (!(value instanceof WrappedLogRecord)) {
|
|
||||||
return new JLabel();
|
|
||||||
}
|
|
||||||
final WrappedLogRecord wlr = (WrappedLogRecord) value;
|
|
||||||
|
|
||||||
final JTextPane result = new JTextPane();
|
|
||||||
result.setDragEnabled(true);
|
|
||||||
result.setText(wlr.formatted);
|
|
||||||
result.setComponentOrientation(list.getComponentOrientation());
|
|
||||||
result.setFont(list.getFont());
|
|
||||||
result.setBorder(cellHasFocus || isSelected ? SELECTED_BORDER
|
|
||||||
: EMPTY_BORDER);
|
|
||||||
|
|
||||||
result.setForeground(Color.BLACK);
|
|
||||||
|
|
||||||
if (wlr.record.getLevel() == Level.SEVERE) {
|
|
||||||
result.setBackground(DARK_RED);
|
|
||||||
result.setForeground(Color.BLACK);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wlr.record.getLevel() == Level.WARNING) {
|
|
||||||
result.setForeground(DARK_PINK);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wlr.record.getLevel() == Level.FINE
|
|
||||||
|| wlr.record.getLevel() == Level.FINER
|
|
||||||
|| wlr.record.getLevel() == Level.FINEST) {
|
|
||||||
result.setForeground(DARK_GREEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
final Object[] parameters = wlr.record.getParameters();
|
|
||||||
if (parameters != null) {
|
|
||||||
for (final Object parameter : parameters) {
|
|
||||||
if (parameter == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parameter instanceof Color) {
|
|
||||||
result.setForeground((Color) parameter);
|
|
||||||
} else if (parameter instanceof Font) {
|
|
||||||
result.setFont((Font) parameter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrap the log records so we can control the copy paste text (via
|
|
||||||
* #toString)
|
|
||||||
*/
|
|
||||||
private class WrappedLogRecord {
|
|
||||||
public final LogRecord record;
|
|
||||||
public final String formatted;
|
|
||||||
|
|
||||||
public WrappedLogRecord(final LogRecord record) {
|
|
||||||
this.record = record;
|
|
||||||
formatted = LogTextArea.formatter.format(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return LogTextArea.copyPasteFormatter.format(record);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String throwableToString(final Throwable t) {
|
|
||||||
if (t != null) {
|
|
||||||
final Writer exception = new StringWriter();
|
|
||||||
final PrintWriter printWriter = new PrintWriter(exception);
|
|
||||||
t.printStackTrace(printWriter);
|
|
||||||
return exception.toString();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
package org.parabot.core.logging;
|
|
||||||
|
|
||||||
import java.util.logging.ConsoleHandler;
|
|
||||||
import java.util.logging.LogRecord;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs to System.out
|
|
||||||
*/
|
|
||||||
public class SystemConsoleHandler extends ConsoleHandler {
|
|
||||||
public SystemConsoleHandler() {
|
|
||||||
super();
|
|
||||||
setOutputStream(System.out);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void publish(final LogRecord logRecord) {
|
|
||||||
System.out.println("PUBLISH");
|
|
||||||
System.out.println(logRecord.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
package org.parabot.core.logging;
|
|
||||||
|
|
||||||
import java.util.logging.Handler;
|
|
||||||
import java.util.logging.LogRecord;
|
|
||||||
|
|
||||||
|
|
||||||
public class TextAreaLogHandler extends Handler {
|
|
||||||
public static final LogTextArea TEXT_AREA = new LogTextArea();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() throws SecurityException {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void flush() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void publish(final LogRecord record) {
|
|
||||||
TextAreaLogHandler.TEXT_AREA.log(record);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package org.parabot.core.ui;
|
package org.parabot.core.ui;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
|
|
||||||
import org.parabot.core.ui.components.PaintComponent;
|
import org.parabot.core.ui.components.PaintComponent;
|
||||||
@@ -18,9 +17,7 @@ public class BotDialog extends JDialog {
|
|||||||
private BotDialog(BotUI botUI) {
|
private BotDialog(BotUI botUI) {
|
||||||
super(botUI);
|
super(botUI);
|
||||||
|
|
||||||
|
|
||||||
botUI.setDialog(this);
|
botUI.setDialog(this);
|
||||||
|
|
||||||
setUndecorated(true);
|
setUndecorated(true);
|
||||||
getRootPane().setOpaque(false);
|
getRootPane().setOpaque(false);
|
||||||
setBackground(new Color(0, 0, 0, 0));
|
setBackground(new Color(0, 0, 0, 0));
|
||||||
@@ -30,7 +27,7 @@ public class BotDialog extends JDialog {
|
|||||||
setVisible(true);
|
setVisible(true);
|
||||||
setContentPane(PaintComponent.getInstance(botUI.getSize()));
|
setContentPane(PaintComponent.getInstance(botUI.getSize()));
|
||||||
botUI.setVisible(true);
|
botUI.setVisible(true);
|
||||||
//setAlwaysOnTop(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BotDialog getInstance(BotUI botUI) {
|
public static BotDialog getInstance(BotUI botUI) {
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
package org.parabot.core.ui;
|
package org.parabot.core.ui;
|
||||||
|
|
||||||
import org.parabot.core.Configuration;
|
import org.parabot.core.Context;
|
||||||
import org.parabot.core.ui.components.BotToolbar;
|
|
||||||
import org.parabot.core.ui.components.GamePanel;
|
import org.parabot.core.ui.components.GamePanel;
|
||||||
import org.parabot.core.ui.components.LogArea;
|
|
||||||
import org.parabot.core.ui.components.VerboseLoader;
|
|
||||||
import org.parabot.core.ui.images.Images;
|
import org.parabot.core.ui.images.Images;
|
||||||
|
import org.parabot.environment.scripts.Script;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
@@ -29,6 +27,9 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
|
|||||||
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;
|
||||||
|
private boolean runScript, pauseScript;
|
||||||
|
|
||||||
public static BotUI getInstance() {
|
public static BotUI getInstance() {
|
||||||
return instance == null ? instance = new BotUI() : instance;
|
return instance == null ? instance = new BotUI() : instance;
|
||||||
@@ -38,67 +39,58 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
|
|||||||
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
|
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
|
||||||
|
|
||||||
this.setTitle("Parabot");
|
this.setTitle("Parabot");
|
||||||
|
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||||
this.setResizable(false);
|
this.setResizable(false);
|
||||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
this.setIconImage(Images.getResource("/org/parabot/core/ui/images/icon.png"));
|
this.setIconImage(Images.getResource("/org/parabot/core/ui/images/icon.png"));
|
||||||
this.setLayout(new BorderLayout());
|
this.setLayout(new BorderLayout());
|
||||||
this.addComponentListener(this);
|
this.addComponentListener(this);
|
||||||
this.addWindowListener(this);
|
this.addWindowListener(this);
|
||||||
this.setIgnoreRepaint(true);
|
|
||||||
|
|
||||||
int iToolbarHeight = 24;
|
JMenuBar menuBar = new JMenuBar();
|
||||||
int iGameHeight = 503;
|
|
||||||
int iLogHeight = 128;
|
|
||||||
|
|
||||||
JPanel panel = new JPanel();
|
JMenu file = new JMenu("File");
|
||||||
panel.setLocation(0, 0);
|
JMenu scripts = new JMenu("Script");
|
||||||
panel.setPreferredSize(new Dimension(765, iToolbarHeight + iGameHeight + iLogHeight));
|
|
||||||
|
|
||||||
JMenuBar menubar = new JMenuBar();
|
|
||||||
|
|
||||||
JMenu mnuFile = new JMenu("File");
|
|
||||||
JMenuItem proxy = new JMenuItem("Network");
|
JMenuItem proxy = new JMenuItem("Network");
|
||||||
JMenuItem exit = new JMenuItem("Exit");
|
JMenuItem exit = new JMenuItem("Exit");
|
||||||
|
|
||||||
|
run = new JMenuItem("Run");
|
||||||
|
run.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/run.png")));
|
||||||
|
|
||||||
|
pause = new JMenuItem("Pause");
|
||||||
|
pause.setEnabled(false);
|
||||||
|
pause.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/pause.png")));
|
||||||
|
|
||||||
|
stop = new JMenuItem("Stop");
|
||||||
|
stop.setEnabled(false);
|
||||||
|
stop.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/stop.png")));
|
||||||
|
|
||||||
proxy.addActionListener(this);
|
proxy.addActionListener(this);
|
||||||
exit.addActionListener(this);
|
exit.addActionListener(this);
|
||||||
|
|
||||||
|
run.addActionListener(this);
|
||||||
|
pause.addActionListener(this);
|
||||||
|
stop.addActionListener(this);
|
||||||
|
|
||||||
|
file.add(proxy);
|
||||||
|
file.add(exit);
|
||||||
|
|
||||||
|
scripts.add(run);
|
||||||
|
scripts.add(pause);
|
||||||
|
scripts.add(stop);
|
||||||
|
|
||||||
|
menuBar.add(file);
|
||||||
|
menuBar.add(scripts);
|
||||||
|
|
||||||
mnuFile.add(proxy);
|
this.setJMenuBar(menuBar);
|
||||||
mnuFile.add(exit);
|
|
||||||
menubar.add(mnuFile);
|
|
||||||
|
|
||||||
this.setJMenuBar(menubar);
|
add(GamePanel.getInstance());
|
||||||
|
GamePanel.getInstance().addLoader();
|
||||||
int x = 0;
|
|
||||||
int y = 0;
|
|
||||||
|
|
||||||
JToolBar toolbar = BotToolbar.getInstance();
|
|
||||||
toolbar.setPreferredSize(new Dimension(765, iToolbarHeight));
|
|
||||||
toolbar.setLocation(x, y);
|
|
||||||
|
|
||||||
y += iToolbarHeight;
|
|
||||||
|
|
||||||
GamePanel gamePanel = GamePanel.getInstance();
|
|
||||||
gamePanel.setPreferredSize(new Dimension(765, iGameHeight));
|
|
||||||
toolbar.setLocation(x, y);
|
|
||||||
|
|
||||||
y += iGameHeight;
|
|
||||||
|
|
||||||
JScrollPane scrlConsole = LogArea.getInstance();
|
|
||||||
scrlConsole.setPreferredSize(new Dimension(765, iLogHeight - 15));
|
|
||||||
toolbar.setLocation(x, y);
|
|
||||||
|
|
||||||
panel.add(toolbar);
|
|
||||||
panel.add(gamePanel);
|
|
||||||
gamePanel.add(VerboseLoader.get());
|
|
||||||
panel.add(scrlConsole);
|
|
||||||
|
|
||||||
this.add(panel, BorderLayout.CENTER);
|
|
||||||
|
|
||||||
pack();
|
pack();
|
||||||
setLocationRelativeTo(null);
|
setLocationRelativeTo(null);
|
||||||
BotDialog.getInstance(this);
|
BotDialog.getInstance(this);
|
||||||
|
|
||||||
LogArea.log("parabot " + Configuration.BOT_VERSION + " started");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -113,6 +105,25 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
|
|||||||
NetworkUI UI = new NetworkUI();
|
NetworkUI UI = new NetworkUI();
|
||||||
UI.frame.setVisible(true);
|
UI.frame.setVisible(true);
|
||||||
break;
|
break;
|
||||||
|
case "Run":
|
||||||
|
if(pauseScript) {
|
||||||
|
pauseScript = false;
|
||||||
|
pause.setEnabled(true);
|
||||||
|
run.setEnabled(false);
|
||||||
|
setScriptState(Script.STATE_RUNNING);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
new ScriptSelector().setVisible(true);
|
||||||
|
break;
|
||||||
|
case "Pause":
|
||||||
|
setScriptState(Script.STATE_PAUSE);
|
||||||
|
pause.setEnabled(false);
|
||||||
|
run.setEnabled(true);
|
||||||
|
pauseScript = true;
|
||||||
|
break;
|
||||||
|
case "Stop":
|
||||||
|
setScriptState(Script.STATE_STOPPED);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
System.out.println("Invalid command: " + command);
|
System.out.println("Invalid command: " + command);
|
||||||
}
|
}
|
||||||
@@ -130,42 +141,58 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
|
|||||||
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() {
|
||||||
|
runScript = !runScript;
|
||||||
|
if(runScript) {
|
||||||
|
scriptRunning();
|
||||||
|
} else {
|
||||||
|
scriptStopped();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void scriptRunning() {
|
||||||
|
run.setEnabled(false);
|
||||||
|
pause.setEnabled(true);
|
||||||
|
stop.setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void scriptStopped() {
|
||||||
|
run.setEnabled(true);
|
||||||
|
pause.setEnabled(false);
|
||||||
|
stop.setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setScriptState(int state) {
|
||||||
|
Context.getInstance().getRunningScript().setState(state);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void componentResized(ComponentEvent e) {
|
public void componentResized(ComponentEvent e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@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) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void windowClosed(WindowEvent arg0) {
|
public void windowClosed(WindowEvent arg0) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void windowClosing(WindowEvent e) {
|
public void windowClosing(WindowEvent e) {
|
||||||
System.out.println("close");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void windowDeactivated(WindowEvent arg0) {
|
public void windowDeactivated(WindowEvent arg0) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,18 +200,14 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
|
|||||||
public void windowDeiconified(WindowEvent arg0) {
|
public void windowDeiconified(WindowEvent arg0) {
|
||||||
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) {
|
||||||
//BotDialog.getInstance().setVisible(false);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void windowOpened(WindowEvent arg0) {
|
public void windowOpened(WindowEvent arg0) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,210 +0,0 @@
|
|||||||
package org.parabot.core.ui.components;
|
|
||||||
|
|
||||||
import java.awt.Component;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.awt.event.MouseAdapter;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.MouseMotionAdapter;
|
|
||||||
import javax.swing.Box;
|
|
||||||
import javax.swing.ImageIcon;
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JToolBar;
|
|
||||||
import javax.swing.SwingConstants;
|
|
||||||
|
|
||||||
import org.parabot.core.Context;
|
|
||||||
import org.parabot.core.ui.ScriptSelector;
|
|
||||||
import org.parabot.core.ui.ServerSelector;
|
|
||||||
import org.parabot.core.ui.images.Images;
|
|
||||||
import org.parabot.environment.scripts.Script;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Bot toolbar
|
|
||||||
*
|
|
||||||
* @author Everel
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class BotToolbar extends JToolBar {
|
|
||||||
private static final long serialVersionUID = 5373484845104212180L;
|
|
||||||
private static BotToolbar instance;
|
|
||||||
|
|
||||||
private JButton tab;
|
|
||||||
private final JButton run;
|
|
||||||
private final JButton stop;
|
|
||||||
private boolean runScript;
|
|
||||||
private boolean pauseScript;
|
|
||||||
|
|
||||||
public BotToolbar() {
|
|
||||||
this.run = new JButton();
|
|
||||||
this.stop = new JButton();
|
|
||||||
setFloatable(false);
|
|
||||||
tab = new JButton();
|
|
||||||
tab.addActionListener(new ActionListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
ServerSelector.getInstance().setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
run.setFocusable(false);
|
|
||||||
stop.setFocusable(false);
|
|
||||||
tab.setFocusable(false);
|
|
||||||
try {
|
|
||||||
run.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/run.png")));
|
|
||||||
stop.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/stop.png")));
|
|
||||||
tab.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/add.png")));
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
run.addActionListener(new ActionListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
runButtonClicked();
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
stop.addActionListener(new ActionListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
stopButtonClicked();
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
//add(tab);
|
|
||||||
add(Box.createHorizontalGlue());
|
|
||||||
add(run);
|
|
||||||
add(stop);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void stopButtonClicked() {
|
|
||||||
if(!runScript){
|
|
||||||
// obviously do nothing ;d
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
setScriptState(Script.STATE_STOPPED);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void runButtonClicked() {
|
|
||||||
if(runScript && pauseScript) {
|
|
||||||
// unpause
|
|
||||||
this.pauseScript = false;
|
|
||||||
scriptRunning();
|
|
||||||
setScriptState(Script.STATE_RUNNING);
|
|
||||||
return;
|
|
||||||
} else if(runScript) {
|
|
||||||
// pause
|
|
||||||
this.pauseScript = true;
|
|
||||||
scriptStopped();
|
|
||||||
setScriptState(Script.STATE_PAUSE);
|
|
||||||
} else {
|
|
||||||
new ScriptSelector().setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setScriptState(int state) {
|
|
||||||
Context.getInstance().getRunningScript().setState(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void toggleRun() {
|
|
||||||
runScript = !runScript;
|
|
||||||
if(runScript) {
|
|
||||||
scriptRunning();
|
|
||||||
} else {
|
|
||||||
scriptStopped();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void scriptRunning() {
|
|
||||||
// sets pause icon
|
|
||||||
run.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/pause.png")));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void scriptStopped() {
|
|
||||||
// sets start icon
|
|
||||||
run.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/run.png")));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BotToolbar getInstance() {
|
|
||||||
return instance == null ? instance = new BotToolbar() : instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addTab(final Context context, final String name) {
|
|
||||||
TabButton b = new TabButton(name);
|
|
||||||
b.setActive(true);
|
|
||||||
add(b, 0);
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tab button
|
|
||||||
* @author Clisprail
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private final class TabButton extends JButton {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
public TabButton(final String name) {
|
|
||||||
super(name);
|
|
||||||
setFocusable(false);
|
|
||||||
setHorizontalTextPosition(SwingConstants.LEFT);
|
|
||||||
setIcon(getBlackClose());
|
|
||||||
final Component c = this;
|
|
||||||
addMouseMotionListener(new MouseMotionAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mouseMoved(final MouseEvent e) {
|
|
||||||
if (e.getX() > getWidth() - getIcon().getIconWidth()
|
|
||||||
&& e.getX() < getWidth() - getIconTextGap()) {
|
|
||||||
setIcon(getRedClose());
|
|
||||||
} else {
|
|
||||||
setIcon(getBlackClose());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
addMouseListener(new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mouseClicked(final MouseEvent e) {
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
final int n = getComponentIndex(c);
|
|
||||||
if (e.getX() > getWidth() - getIcon().getIconWidth()
|
|
||||||
&& e.getX() < getWidth() - getIconTextGap()) {
|
|
||||||
// close
|
|
||||||
} else {
|
|
||||||
// enable
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseExited(final MouseEvent e) {
|
|
||||||
setIcon(getBlackClose());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private final ImageIcon getBlackClose() {
|
|
||||||
try {
|
|
||||||
return new ImageIcon(Images.getResource("/org/parabot/core/ui/images/close.png"));
|
|
||||||
} catch (Throwable t) {
|
|
||||||
throw new RuntimeException("Unable to load icon image: " + t.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final ImageIcon getRedClose() {
|
|
||||||
try {
|
|
||||||
return new ImageIcon(Images.getResource("/org/parabot/core/ui/images/close_red.png"));
|
|
||||||
} catch (Throwable t) {
|
|
||||||
throw new RuntimeException("Unable to load icon image: " + t.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setActive(final boolean active) {
|
|
||||||
setFont(getFont().deriveFont(active ? Font.BOLD : Font.PLAIN));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
package org.parabot.core.ui.components;
|
package org.parabot.core.ui.components;
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics;
|
|
||||||
import javax.swing.GroupLayout;
|
import javax.swing.GroupLayout;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
@@ -34,22 +35,18 @@ public class GamePanel extends JPanel {
|
|||||||
GroupLayout.Alignment.LEADING).addGap(0, 418, Short.MAX_VALUE));
|
GroupLayout.Alignment.LEADING).addGap(0, 418, Short.MAX_VALUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void paintComponent(Graphics g) {
|
|
||||||
super.paintComponent(g);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates context of this panel and adds a different Applet to the panel
|
* Updates context of this panel and adds a different Applet to the panel
|
||||||
|
*
|
||||||
* @param context
|
* @param context
|
||||||
*/
|
*/
|
||||||
public void setContext(final Context c) {
|
public void setContext(final Context c) {
|
||||||
add(c.getApplet());
|
add(c.getApplet(), BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets instance of this panel
|
* Gets instance of this panel
|
||||||
|
*
|
||||||
* @return instance of this panel
|
* @return instance of this panel
|
||||||
*/
|
*/
|
||||||
public static GamePanel getInstance() {
|
public static GamePanel getInstance() {
|
||||||
@@ -60,7 +57,7 @@ public class GamePanel extends JPanel {
|
|||||||
* Adds the loader applet
|
* Adds the loader applet
|
||||||
*/
|
*/
|
||||||
public void addLoader() {
|
public void addLoader() {
|
||||||
add(loader);
|
add(loader, BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,21 +1,4 @@
|
|||||||
package org.parabot.core.ui.components;
|
package org.parabot.core.ui.components;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.logging.FileHandler;
|
|
||||||
import java.util.logging.LogManager;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.ScrollPaneConstants;
|
|
||||||
|
|
||||||
import org.parabot.core.Core;
|
|
||||||
import org.parabot.core.logging.LogFormatter;
|
|
||||||
import org.parabot.core.logging.LogTextArea;
|
|
||||||
import org.parabot.core.logging.SystemConsoleHandler;
|
|
||||||
import org.parabot.core.logging.TextAreaLogHandler;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* The LogArea of the BotUI
|
* The LogArea of the BotUI
|
||||||
@@ -23,66 +6,17 @@ import org.parabot.core.logging.TextAreaLogHandler;
|
|||||||
* @author Everel
|
* @author Everel
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class LogArea extends JScrollPane {
|
@Deprecated
|
||||||
private static final long serialVersionUID = 6571141103751675714L;
|
public class LogArea {
|
||||||
private static LogTextArea logArea = new LogTextArea();
|
|
||||||
private static LogArea instance;
|
|
||||||
|
|
||||||
private LogArea() {
|
|
||||||
super(TextAreaLogHandler.TEXT_AREA,
|
|
||||||
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
|
|
||||||
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
|
||||||
setVisible(true);
|
|
||||||
registerLogging();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LogArea getInstance() {
|
|
||||||
return instance == null ? instance = new LogArea() : instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Logger log = Logger.getLogger("Bot");
|
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static void log(String s) {
|
public static void log(String s) {
|
||||||
log.info(s);
|
System.out.println(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static void error(String s) {
|
public static void error(String s) {
|
||||||
log.severe(s);
|
System.err.println();
|
||||||
}
|
|
||||||
|
|
||||||
public static void clearLog() {
|
|
||||||
logArea.clearSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void hideLog() {
|
|
||||||
logArea.setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void showLog() {
|
|
||||||
logArea.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerLogging() {
|
|
||||||
Core.verbose("Registering logging...");
|
|
||||||
final Properties logging = new Properties();
|
|
||||||
final String logFormatter = LogFormatter.class.getCanonicalName();
|
|
||||||
final String fileHandler = FileHandler.class.getCanonicalName();
|
|
||||||
logging.setProperty("handlers",
|
|
||||||
TextAreaLogHandler.class.getCanonicalName() + "," + fileHandler);
|
|
||||||
logging.setProperty(".level", "INFO");
|
|
||||||
logging.setProperty(SystemConsoleHandler.class.getCanonicalName()
|
|
||||||
+ ".formatter", logFormatter);
|
|
||||||
logging.setProperty(fileHandler + ".formatter", logFormatter);
|
|
||||||
logging.setProperty(TextAreaLogHandler.class.getCanonicalName()
|
|
||||||
+ ".formatter", logFormatter);
|
|
||||||
final ByteArrayOutputStream logout = new ByteArrayOutputStream();
|
|
||||||
try {
|
|
||||||
logging.store(logout, "");
|
|
||||||
LogManager.getLogManager().readConfiguration(
|
|
||||||
new ByteArrayInputStream(logout.toByteArray()));
|
|
||||||
} catch (final Exception ignored) {
|
|
||||||
}
|
|
||||||
Core.verbose("Done.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,9 @@ import java.awt.Graphics2D;
|
|||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import org.parabot.core.paint.PaintDebugger;
|
|
||||||
|
import org.parabot.core.Context;
|
||||||
|
import org.parabot.environment.api.interfaces.Paintable;
|
||||||
import org.parabot.environment.api.utils.Time;
|
import org.parabot.environment.api.utils.Time;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -24,7 +26,7 @@ public class PaintComponent extends JComponent implements Runnable {
|
|||||||
private BufferedImage buffer;
|
private BufferedImage buffer;
|
||||||
private Graphics2D g2;
|
private Graphics2D g2;
|
||||||
private Dimension dimensions;
|
private Dimension dimensions;
|
||||||
private PaintDebugger paintDebugger;
|
private Context context;
|
||||||
|
|
||||||
private PaintComponent(Dimension dimensions) {
|
private PaintComponent(Dimension dimensions) {
|
||||||
this.dimensions = dimensions;
|
this.dimensions = dimensions;
|
||||||
@@ -45,8 +47,8 @@ public class PaintComponent extends JComponent implements Runnable {
|
|||||||
return getInstance(null);
|
return getInstance(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startPainting(PaintDebugger paintDebugger) {
|
public void startPainting(Context context) {
|
||||||
this.paintDebugger = paintDebugger;
|
this.context = context;
|
||||||
new Thread(this).start();
|
new Thread(this).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,8 +58,11 @@ public class PaintComponent extends JComponent implements Runnable {
|
|||||||
g2.fillRect(0, 0, dimensions.width, dimensions.height);
|
g2.fillRect(0, 0, dimensions.width, dimensions.height);
|
||||||
g2.setComposite(AlphaComposite.SrcOver);
|
g2.setComposite(AlphaComposite.SrcOver);
|
||||||
|
|
||||||
if(paintDebugger != null) {
|
if(context != null) {
|
||||||
paintDebugger.debug(g2);
|
for(Paintable p : context.getPaintables()) {
|
||||||
|
p.paint(g);
|
||||||
|
}
|
||||||
|
context.getPaintDebugger().debug(g2);
|
||||||
}
|
}
|
||||||
g.drawImage(buffer, 0, 0, null);
|
g.drawImage(buffer, 0, 0, null);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.parabot.core.ui.components;
|
package org.parabot.core.ui.components;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.Dimension;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.FontMetrics;
|
import java.awt.FontMetrics;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
@@ -30,6 +31,7 @@ public class VerboseLoader extends JPanel implements ProgressListener {
|
|||||||
this.bot_image = Images.getResource("/org/parabot/core/ui/images/para.png");
|
this.bot_image = Images.getResource("/org/parabot/core/ui/images/para.png");
|
||||||
this.p = new ProgressBar(400, 20);
|
this.p = new ProgressBar(400, 20);
|
||||||
setSize(775, 510);
|
setSize(775, 510);
|
||||||
|
setPreferredSize(new Dimension(775, 510));
|
||||||
setBackground(Color.black);
|
setBackground(Color.black);
|
||||||
setDoubleBuffered(true);
|
setDoubleBuffered(true);
|
||||||
setOpaque(false);
|
setOpaque(false);
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ package org.parabot.environment.scripts;
|
|||||||
|
|
||||||
import org.parabot.core.Context;
|
import org.parabot.core.Context;
|
||||||
import org.parabot.core.Core;
|
import org.parabot.core.Core;
|
||||||
import org.parabot.core.ui.components.BotToolbar;
|
import org.parabot.core.ui.BotUI;
|
||||||
import org.parabot.core.ui.components.LogArea;
|
|
||||||
import org.parabot.environment.api.utils.Time;
|
import org.parabot.environment.api.utils.Time;
|
||||||
import org.parabot.environment.scripts.framework.AbstractFramework;
|
import org.parabot.environment.scripts.framework.AbstractFramework;
|
||||||
import org.parabot.environment.scripts.framework.LoopTask;
|
import org.parabot.environment.scripts.framework.LoopTask;
|
||||||
@@ -78,7 +77,7 @@ public class Script implements Runnable {
|
|||||||
|
|
||||||
Core.verbose("Detecting script framework...");
|
Core.verbose("Detecting script framework...");
|
||||||
context.setRunningScript(this);
|
context.setRunningScript(this);
|
||||||
BotToolbar.getInstance().toggleRun();
|
BotUI.getInstance().toggleRun();
|
||||||
if(this instanceof LoopTask) {
|
if(this instanceof LoopTask) {
|
||||||
Core.verbose("Script framework detected: LoopTask");
|
Core.verbose("Script framework detected: LoopTask");
|
||||||
frameWorkType = TYPE_LOOP;
|
frameWorkType = TYPE_LOOP;
|
||||||
@@ -92,7 +91,7 @@ public class Script implements Runnable {
|
|||||||
frameWorkType = TYPE_OTHER;
|
frameWorkType = TYPE_OTHER;
|
||||||
}
|
}
|
||||||
Core.verbose("Running script...");
|
Core.verbose("Running script...");
|
||||||
LogArea.log("Script started.");
|
System.out.println("Script started.");
|
||||||
try {
|
try {
|
||||||
while(this.state != STATE_STOPPED) {
|
while(this.state != STATE_STOPPED) {
|
||||||
if(context.getRandomHandler().checkAndRun()) {
|
if(context.getRandomHandler().checkAndRun()) {
|
||||||
@@ -112,11 +111,11 @@ public class Script implements Runnable {
|
|||||||
}
|
}
|
||||||
Core.verbose("Script stopped/finished, unloading and stopping...");
|
Core.verbose("Script stopped/finished, unloading and stopping...");
|
||||||
onFinish();
|
onFinish();
|
||||||
LogArea.log("Script stopped.");
|
System.out.println("Script stopped.");
|
||||||
context.getServerProvider().unloadScript(this);
|
context.getServerProvider().unloadScript(this);
|
||||||
this.state = STATE_STOPPED;
|
this.state = STATE_STOPPED;
|
||||||
context.setRunningScript(null);
|
context.setRunningScript(null);
|
||||||
BotToolbar.getInstance().toggleRun();
|
BotUI.getInstance().toggleRun();
|
||||||
Core.verbose("Done.");
|
Core.verbose("Done.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package org.parabot.environment.servers;
|
package org.parabot.environment.servers;
|
||||||
|
|
||||||
import org.parabot.core.Context;
|
import org.parabot.core.Context;
|
||||||
import org.parabot.core.ui.components.BotToolbar;
|
|
||||||
import org.parabot.core.ui.components.PaintComponent;
|
import org.parabot.core.ui.components.PaintComponent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -21,9 +20,8 @@ public abstract class ServerExecuter {
|
|||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
Context context = Context.getInstance(provider);
|
Context context = Context.getInstance(provider);
|
||||||
BotToolbar.getInstance().addTab(context, serverName);
|
|
||||||
context.load();
|
context.load();
|
||||||
PaintComponent.getInstance().startPainting(context.getPaintDebugger());
|
PaintComponent.getInstance().startPainting(context);
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
t.printStackTrace();
|
t.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user