OpenSeSim/src/opensesim/gui/SeSimApplication.java

1139 lines
44 KiB
Java
Raw Normal View History

2017-01-15 18:15:22 +01:00
/*
* Copyright (c) 2017, 7u83 <7u83@mail.ru>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
2018-11-30 12:27:41 +01:00
package opensesim.gui;
2017-01-15 18:15:22 +01:00
2020-07-25 00:05:21 +02:00
2017-01-22 21:41:45 +01:00
import java.awt.Dialog;
2017-01-31 08:04:11 +01:00
import java.awt.Frame;
2017-04-07 00:49:56 +02:00
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
2017-09-16 18:44:06 +02:00
import java.awt.Window;
2017-02-26 09:27:32 +01:00
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
2017-04-16 08:06:32 +02:00
2017-04-08 22:56:32 +02:00
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Scanner;
2018-12-23 03:04:37 +01:00
import java.util.Set;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
2017-04-08 10:13:09 +02:00
import javax.swing.JOptionPane;
2017-04-16 08:06:32 +02:00
2017-04-08 12:16:40 +02:00
import javax.swing.filechooser.FileFilter;
2017-01-31 08:04:11 +01:00
import javax.swing.filechooser.FileNameExtensionFilter;
2018-11-30 12:27:41 +01:00
import opensesim.gui.AssetPairEditor.NewJDialog;
2018-12-23 03:04:37 +01:00
import static opensesim.gui.Globals.getWorld;
2018-12-28 13:06:15 +01:00
import opensesim.gui.account.AccountDialog;
2018-11-30 12:27:41 +01:00
import opensesim.gui.exchangeeditor.ExchangeListDialog;
2018-12-29 13:31:08 +01:00
import opensesim.gui.history.HistoryDialog;
2017-01-30 22:18:10 +01:00
import org.json.JSONArray;
import org.json.JSONObject;
2017-02-13 00:07:50 +01:00
2018-11-30 12:27:41 +01:00
import opensesim.old_sesim.AutoTraderInterface;
import opensesim.old_sesim.Exchange;
import opensesim.old_sesim.Scheduler;
import opensesim.old_sesim.Scheduler.TimerTaskDef;
2018-12-23 03:04:37 +01:00
import opensesim.world.AbstractAsset;
import opensesim.world.AssetPair;
2018-12-03 12:03:26 +01:00
import opensesim.world.GodWorld;
2018-12-23 03:04:37 +01:00
import opensesim.world.Order;
2018-12-19 09:05:25 +01:00
import opensesim.world.Trader;
2018-12-23 03:04:37 +01:00
import opensesim.world.TradingAPI;
2018-12-17 19:27:45 +01:00
import opensesim.world.World;
2018-12-28 13:06:15 +01:00
import opensesim.util.scheduler.Event;
import opensesim.util.scheduler.FiringEvent;
import opensesim.util.scheduler.EventListener;
import opensesim.world.SimpleTrader;
2017-01-22 21:41:45 +01:00
2017-01-15 18:15:22 +01:00
/**
*
* @author 7u83 <7u83@mail.ru>
*/
2017-04-08 09:28:11 +02:00
public class SeSimApplication extends javax.swing.JFrame {
2017-01-15 18:15:22 +01:00
GodWorld godworld;
2017-01-15 18:15:22 +01:00
/**
* Creates new form NewMDIApplication
*/
2017-04-08 09:28:11 +02:00
public SeSimApplication() {
2018-11-30 12:27:41 +01:00
Globals.setXClassLoader();
Globals.setLookAndFeel(Globals.prefs.get(Globals.PrefKeys.LAF, "Nimbus"));
// Globals.setLookAndFeel("Metal");
2017-01-15 18:15:22 +01:00
initComponents();
JSONObject cfg;
cfg = new JSONObject(Globals.prefs.get("world", "{}"));
godworld = new GodWorld(cfg);
2018-12-26 03:07:33 +01:00
godworld.addAssetPair("AAPL", "EUR");
godworld.addAssetPair("MSFT", "EUR");
2017-09-17 14:54:22 +02:00
2017-09-16 18:44:06 +02:00
// Get default screen and place our window
// to the center of this screen
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
2017-09-16 18:44:06 +02:00
GraphicsDevice d = ge.getDefaultScreenDevice();
Window w = d.getFullScreenWindow();
setLocationRelativeTo(w);
2017-09-17 14:54:22 +02:00
2017-09-16 18:44:06 +02:00
// Set Application title (no file is currently opened)
setTitleWithFileName("");
2017-09-17 14:54:22 +02:00
2017-09-16 18:47:46 +02:00
// check if we are runing the very first time,
2017-09-17 14:54:22 +02:00
// and if so: Load a default configuration from our resources
boolean init = Globals.prefs.getBoolean("initilized", false);
if (!init) {
resetToDefaults();
Globals.prefs.putBoolean("initilized", true);
}
2017-09-17 14:54:22 +02:00
2017-10-07 07:38:05 +02:00
// this.chartSrollPane.setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_NEVER);
2017-01-22 21:41:45 +01:00
}
AutoTraderInterface createTrader(Exchange se, long id, String name, double money, double shares, JSONObject cfg) {
2017-03-21 07:53:06 +01:00
2017-02-07 01:53:43 +01:00
String base = cfg.getString("base");
AutoTraderInterface ac = Globals.tloader.getAutoTraderInterface(base);
2017-02-26 09:27:32 +01:00
if (ac == null) {
2017-02-13 18:26:32 +01:00
return null;
2017-02-26 09:27:32 +01:00
}
2017-02-11 08:36:45 +01:00
ac.putConfig(cfg);
2017-02-07 01:53:43 +01:00
ac.init(se, id, name, money, shares, cfg);
2017-02-26 09:27:32 +01:00
2017-02-07 01:53:43 +01:00
return ac;
}
2017-01-22 21:41:45 +01:00
public void startTraders() {
2017-02-25 20:06:26 +01:00
2017-02-26 09:27:32 +01:00
WaitBox wb = new WaitBox();
2017-01-22 21:41:45 +01:00
2017-02-26 09:27:32 +01:00
// Globals.se.setMoneyDecimals(8);
// Globals.se.setSharesDecimals(0);
2017-01-30 22:18:10 +01:00
JSONArray tlist = Globals.getTraders();
2017-02-07 01:53:43 +01:00
Double moneyTotal = 0.0;
Double sharesTotal = 0.0;
long id = 0;
for (int i = 0; i < tlist.length(); i++) {
JSONObject t = tlist.getJSONObject(i);
2017-01-30 22:18:10 +01:00
String strategy_name = t.getString("Strategy");
2018-11-30 12:27:41 +01:00
JSONObject strategy = null;
try {
strategy = Globals.getStrategy(strategy_name);
} catch (Exception ex) {
javax.swing.JOptionPane.showMessageDialog(chart, "Strategy not defined:\n\"" + strategy_name + " \"", "Error",
javax.swing.JOptionPane.ERROR_MESSAGE);
return;
}
2017-01-30 22:18:10 +01:00
String base = strategy.getString("base");
AutoTraderInterface ac = Globals.tloader.getAutoTraderInterface(base);
2017-02-07 01:53:43 +01:00
System.out.printf("Load Strat: %s\n", strategy_name);
2017-01-30 22:18:10 +01:00
System.out.printf("Base %s\n", base);
2017-02-07 01:53:43 +01:00
Integer count = t.getInt("Count");
2017-01-30 22:18:10 +01:00
Double shares = t.getDouble("Shares");
Double money = t.getDouble("Money");
2017-02-07 01:53:43 +01:00
2017-02-06 08:14:05 +01:00
Boolean enabled = t.getBoolean("Enabled");
2017-02-07 01:53:43 +01:00
if (!enabled) {
2017-02-06 08:14:05 +01:00
continue;
2017-02-07 01:53:43 +01:00
}
System.out.printf("Count: %d Shares: %f Money %f\n", count, shares, money);
for (int i1 = 0; i1 < count; i1++) {
2017-02-26 09:27:32 +01:00
AutoTraderInterface trader;
2017-02-25 20:06:26 +01:00
trader = this.createTrader(Globals.se, id, t.getString("Name") + i1, money, shares, strategy);
2017-02-07 01:53:43 +01:00
2017-01-30 22:18:10 +01:00
Globals.se.traders.add(trader);
2017-02-25 20:06:26 +01:00
2017-02-07 01:53:43 +01:00
moneyTotal += money;
sharesTotal += shares;
2017-01-30 22:18:10 +01:00
}
2017-02-07 01:53:43 +01:00
2017-02-02 18:39:55 +01:00
}
2017-02-07 01:53:43 +01:00
Globals.se.fairValue = moneyTotal / sharesTotal;
2017-03-21 07:53:06 +01:00
// Globals.se.fairValue = 1.0;
System.out.printf("Failr Value is %f\n", Globals.se.fairValue);
2017-02-07 01:53:43 +01:00
for (int i = 0; i < Globals.se.traders.size(); i++) {
2017-02-02 18:39:55 +01:00
Globals.se.traders.get(i).start();
2017-01-30 22:18:10 +01:00
}
2017-02-07 01:53:43 +01:00
2017-01-15 18:15:22 +01:00
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
2017-01-28 15:34:24 +01:00
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
2017-02-18 08:17:07 +01:00
jSplitPane1 = new javax.swing.JSplitPane();
jSplitPane2 = new javax.swing.JSplitPane();
2017-02-03 01:56:41 +01:00
jPanel2 = new javax.swing.JPanel();
2017-02-06 08:14:05 +01:00
stopButton = new javax.swing.JButton();
runButton = new javax.swing.JButton();
2017-02-03 01:56:41 +01:00
jButton2 = new javax.swing.JButton();
2017-02-05 10:01:13 +01:00
accelSpinner = new javax.swing.JSpinner();
2018-11-30 12:27:41 +01:00
clock = new opensesim.gui.Clock();
2017-03-13 07:21:13 +01:00
jLabel1 = new javax.swing.JLabel();
2017-02-18 08:17:07 +01:00
jSplitPane3 = new javax.swing.JSplitPane();
jSplitPane4 = new javax.swing.JSplitPane();
2018-11-30 12:27:41 +01:00
chart = new opensesim.chart.MasterChart();
2017-03-03 19:06:36 +01:00
jSplitPane5 = new javax.swing.JSplitPane();
2017-01-15 18:15:22 +01:00
menuBar = new javax.swing.JMenuBar();
fileMenu = new javax.swing.JMenu();
openMenuItem = new javax.swing.JMenuItem();
saveMenuItem = new javax.swing.JMenuItem();
saveAsMenuItem = new javax.swing.JMenuItem();
closeMenuItem = new javax.swing.JMenuItem();
jSeparator5 = new javax.swing.JPopupMenu.Separator();
resetToDefaultsMenuItem = new javax.swing.JMenuItem();
clearMenuItem = new javax.swing.JMenuItem();
jSeparator4 = new javax.swing.JPopupMenu.Separator();
2017-01-15 18:15:22 +01:00
exitMenuItem = new javax.swing.JMenuItem();
editMenu = new javax.swing.JMenu();
2017-01-31 08:04:11 +01:00
editExchangeMenuItem = new javax.swing.JMenuItem();
2017-01-28 15:34:24 +01:00
jSeparator1 = new javax.swing.JPopupMenu.Separator();
2018-11-30 12:27:41 +01:00
assetsMenuItem = new javax.swing.JMenuItem();
exchangesMenuItem = new javax.swing.JMenuItem();
jMenuItem2 = new javax.swing.JMenuItem();
2017-01-15 18:15:22 +01:00
pasteMenuItem = new javax.swing.JMenuItem();
deleteMenuItem = new javax.swing.JMenuItem();
2017-01-28 15:34:24 +01:00
jSeparator2 = new javax.swing.JPopupMenu.Separator();
2017-01-22 21:41:45 +01:00
editPreferences = new javax.swing.JMenuItem();
2017-02-04 18:57:18 +01:00
simMenu = new javax.swing.JMenu();
simMenuStart = new javax.swing.JMenuItem();
simMenuPause = new javax.swing.JMenuItem();
2017-02-05 10:31:52 +01:00
simMenuStop = new javax.swing.JMenuItem();
2017-02-02 18:39:55 +01:00
viewMenu = new javax.swing.JMenu();
2017-02-26 09:27:32 +01:00
viewTraderListCheckBox = new javax.swing.JCheckBoxMenuItem();
2017-02-13 18:26:32 +01:00
jCheckBoxMenuItem1 = new javax.swing.JCheckBoxMenuItem();
2017-01-15 18:15:22 +01:00
helpMenu = new javax.swing.JMenu();
aboutMenuItem = new javax.swing.JMenuItem();
2017-09-16 13:54:42 +02:00
jMenuItem1 = new javax.swing.JMenuItem();
2017-01-15 18:15:22 +01:00
2017-01-28 15:34:24 +01:00
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jTextArea1.setText("Hakke");
jScrollPane2.setViewportView(jTextArea1);
2017-02-18 08:17:07 +01:00
jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jSplitPane1.setTopComponent(jSplitPane2);
2017-01-15 18:15:22 +01:00
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
2017-01-22 21:41:45 +01:00
setMinimumSize(new java.awt.Dimension(640, 480));
2018-12-21 23:20:48 +01:00
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
2017-02-03 01:56:41 +01:00
2018-11-30 12:27:41 +01:00
stopButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/opensesim/resources/icons/stop.gif"))); // NOI18N
2017-02-06 08:14:05 +01:00
stopButton.setText("Stop");
stopButton.setFocusable(false);
stopButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
stopButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
stopButton.addActionListener(new java.awt.event.ActionListener() {
2017-02-04 16:29:45 +01:00
public void actionPerformed(java.awt.event.ActionEvent evt) {
2017-02-06 08:14:05 +01:00
stopButtonActionPerformed(evt);
2017-02-04 16:29:45 +01:00
}
});
2017-01-22 21:41:45 +01:00
2017-02-06 08:14:05 +01:00
runButton.setFont(runButton.getFont());
2018-11-30 12:27:41 +01:00
runButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/opensesim/resources/icons/run.gif"))); // NOI18N
2017-02-06 08:14:05 +01:00
runButton.setText("Run sim!");
runButton.setToolTipText("Run the simmulation");
runButton.setFocusable(false);
runButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
runButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
runButton.addActionListener(new java.awt.event.ActionListener() {
2017-01-22 21:41:45 +01:00
public void actionPerformed(java.awt.event.ActionEvent evt) {
2017-02-06 08:14:05 +01:00
runButtonActionPerformed(evt);
2017-01-22 21:41:45 +01:00
}
});
2018-11-30 12:27:41 +01:00
jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/opensesim/resources/icons/pause.gif"))); // NOI18N
2017-01-22 21:41:45 +01:00
jButton2.setText("Pause");
jButton2.setFocusable(false);
jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
2017-03-13 07:21:13 +01:00
accelSpinner.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, null, 1.0d));
2017-02-05 10:01:13 +01:00
accelSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
2017-02-03 01:56:41 +01:00
public void stateChanged(javax.swing.event.ChangeEvent evt) {
2017-02-05 10:01:13 +01:00
accelSpinnerStateChanged(evt);
2017-02-03 01:56:41 +01:00
}
});
2017-03-13 07:21:13 +01:00
accelSpinner.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
accelSpinnerPropertyChange(evt);
}
});
2017-02-06 08:14:05 +01:00
2017-03-13 07:21:13 +01:00
jLabel1.setText("Acceleration:");
2017-02-03 01:56:41 +01:00
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
2017-02-06 08:14:05 +01:00
.addComponent(runButton, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)
2017-02-03 01:56:41 +01:00
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
2017-02-06 08:14:05 +01:00
.addComponent(stopButton, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
2017-03-13 07:21:13 +01:00
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 375, Short.MAX_VALUE)
2017-02-06 08:14:05 +01:00
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(clock, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
2017-03-13 07:21:13 +01:00
.addComponent(jLabel1)
2017-02-06 08:14:05 +01:00
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(accelSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)))
2017-02-03 01:56:41 +01:00
.addContainerGap())
2017-01-22 21:41:45 +01:00
);
2017-02-03 01:56:41 +01:00
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
2017-02-06 08:14:05 +01:00
.addComponent(runButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
2017-02-03 01:56:41 +01:00
.addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
2017-02-06 08:14:05 +01:00
.addComponent(stopButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
2017-02-03 01:56:41 +01:00
.addGroup(jPanel2Layout.createSequentialGroup()
2017-02-06 08:14:05 +01:00
.addGap(3, 3, 3)
.addComponent(clock, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
2017-03-13 07:21:13 +01:00
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(accelSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addGap(0, 5, Short.MAX_VALUE))
2017-01-22 21:41:45 +01:00
);
2017-02-13 18:26:32 +01:00
getContentPane().add(jPanel2, java.awt.BorderLayout.PAGE_START);
2017-04-02 15:02:22 +02:00
jSplitPane4.setDividerLocation(300);
2017-02-18 08:17:07 +01:00
jSplitPane4.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
2017-10-07 07:38:05 +02:00
jSplitPane4.setLeftComponent(chart);
2017-02-13 18:26:32 +01:00
2017-02-18 08:17:07 +01:00
jSplitPane3.setRightComponent(jSplitPane4);
2017-02-13 18:26:32 +01:00
2017-03-03 19:06:36 +01:00
jSplitPane5.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jSplitPane3.setLeftComponent(jSplitPane5);
2017-02-18 08:17:07 +01:00
getContentPane().add(jSplitPane3, java.awt.BorderLayout.CENTER);
2017-02-13 18:26:32 +01:00
2017-01-15 18:15:22 +01:00
fileMenu.setMnemonic('f');
fileMenu.setText("File");
openMenuItem.setMnemonic('o');
openMenuItem.setText("Open");
2017-01-31 08:04:11 +01:00
openMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openMenuItemActionPerformed(evt);
}
});
2017-01-15 18:15:22 +01:00
fileMenu.add(openMenuItem);
saveMenuItem.setMnemonic('s');
saveMenuItem.setText("Save");
2017-04-08 10:13:09 +02:00
saveMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveMenuItemActionPerformed(evt);
}
});
2017-01-15 18:15:22 +01:00
fileMenu.add(saveMenuItem);
saveAsMenuItem.setMnemonic('a');
saveAsMenuItem.setText("Save As ...");
saveAsMenuItem.setDisplayedMnemonicIndex(5);
2017-01-31 08:04:11 +01:00
saveAsMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveAsMenuItemActionPerformed(evt);
}
});
2017-01-15 18:15:22 +01:00
fileMenu.add(saveAsMenuItem);
closeMenuItem.setMnemonic('c');
closeMenuItem.setText("Close");
closeMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
closeMenuItemActionPerformed(evt);
}
});
fileMenu.add(closeMenuItem);
fileMenu.add(jSeparator5);
resetToDefaultsMenuItem.setMnemonic('r');
resetToDefaultsMenuItem.setText("Reset to defaults");
resetToDefaultsMenuItem.setToolTipText("");
resetToDefaultsMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
resetToDefaultsMenuItemActionPerformed(evt);
}
});
fileMenu.add(resetToDefaultsMenuItem);
clearMenuItem.setMnemonic('c');
clearMenuItem.setText("Clear All");
clearMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clearMenuItemActionPerformed(evt);
}
});
fileMenu.add(clearMenuItem);
fileMenu.add(jSeparator4);
2017-01-15 18:15:22 +01:00
exitMenuItem.setMnemonic('x');
exitMenuItem.setText("Exit");
exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitMenuItemActionPerformed(evt);
}
});
fileMenu.add(exitMenuItem);
menuBar.add(fileMenu);
editMenu.setMnemonic('e');
editMenu.setText("Edit");
2017-01-31 08:04:11 +01:00
editExchangeMenuItem.setMnemonic('y');
editExchangeMenuItem.setText("Exchange ...");
editExchangeMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editExchangeMenuItemActionPerformed(evt);
}
});
editMenu.add(editExchangeMenuItem);
2017-01-28 15:34:24 +01:00
editMenu.add(jSeparator1);
2017-01-15 18:15:22 +01:00
2018-11-30 12:27:41 +01:00
assetsMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F2, 0));
assetsMenuItem.setMnemonic('a');
assetsMenuItem.setText("Assets ...");
assetsMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
assetsMenuItemActionPerformed(evt);
}
});
editMenu.add(assetsMenuItem);
exchangesMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0));
exchangesMenuItem.setText("Exchanges ...");
exchangesMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exchangesMenuItemActionPerformed(evt);
}
});
editMenu.add(exchangesMenuItem);
jMenuItem2.setText("Asset Pairs");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
}
});
editMenu.add(jMenuItem2);
pasteMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, 0));
2017-01-26 01:52:03 +01:00
pasteMenuItem.setMnemonic('s');
pasteMenuItem.setText("Strategies ...");
pasteMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pasteMenuItemActionPerformed(evt);
}
});
2017-01-15 18:15:22 +01:00
editMenu.add(pasteMenuItem);
deleteMenuItem.setMnemonic('d');
deleteMenuItem.setText("Traders ...");
deleteMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteMenuItemActionPerformed(evt);
}
});
2017-01-15 18:15:22 +01:00
editMenu.add(deleteMenuItem);
2017-01-28 15:34:24 +01:00
editMenu.add(jSeparator2);
2017-01-15 18:15:22 +01:00
2017-01-22 21:41:45 +01:00
editPreferences.setMnemonic('p');
editPreferences.setText("Preferences ...");
editPreferences.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editPreferencesActionPerformed(evt);
}
});
editMenu.add(editPreferences);
2017-01-15 18:15:22 +01:00
menuBar.add(editMenu);
simMenu.setMnemonic('s');
2017-02-04 18:57:18 +01:00
simMenu.setText("Sim");
2017-02-04 16:29:45 +01:00
2017-02-05 10:31:52 +01:00
simMenuStart.setMnemonic('s');
2017-02-04 18:57:18 +01:00
simMenuStart.setText("Start");
simMenuStart.addActionListener(new java.awt.event.ActionListener() {
2017-02-04 16:29:45 +01:00
public void actionPerformed(java.awt.event.ActionEvent evt) {
2017-02-04 18:57:18 +01:00
simMenuStartActionPerformed(evt);
2017-02-04 16:29:45 +01:00
}
});
2017-02-04 18:57:18 +01:00
simMenu.add(simMenuStart);
2017-02-05 10:31:52 +01:00
simMenuPause.setMnemonic('p');
2017-02-04 18:57:18 +01:00
simMenuPause.setText("Pause");
simMenuPause.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
simMenuPauseActionPerformed(evt);
}
});
simMenu.add(simMenuPause);
2017-02-04 16:29:45 +01:00
2017-02-05 10:31:52 +01:00
simMenuStop.setMnemonic('t');
simMenuStop.setText("Stop");
simMenuStop.addActionListener(new java.awt.event.ActionListener() {
2017-02-04 16:29:45 +01:00
public void actionPerformed(java.awt.event.ActionEvent evt) {
2017-02-05 10:31:52 +01:00
simMenuStopActionPerformed(evt);
2017-02-04 16:29:45 +01:00
}
});
2017-02-05 10:31:52 +01:00
simMenu.add(simMenuStop);
2017-02-04 16:29:45 +01:00
2017-02-04 18:57:18 +01:00
menuBar.add(simMenu);
2017-02-04 16:29:45 +01:00
viewMenu.setMnemonic('v');
2017-02-02 18:39:55 +01:00
viewMenu.setText("View");
2017-01-22 21:41:45 +01:00
2017-02-26 09:27:32 +01:00
viewTraderListCheckBox.setMnemonic('t');
viewTraderListCheckBox.setText("Traders");
viewTraderListCheckBox.addActionListener(new java.awt.event.ActionListener() {
2017-01-22 21:41:45 +01:00
public void actionPerformed(java.awt.event.ActionEvent evt) {
2017-02-26 09:27:32 +01:00
viewTraderListCheckBoxActionPerformed(evt);
2017-01-22 21:41:45 +01:00
}
});
2017-02-26 09:27:32 +01:00
viewMenu.add(viewTraderListCheckBox);
2017-01-22 21:41:45 +01:00
2017-02-26 09:27:32 +01:00
jCheckBoxMenuItem1.setText("Orderbook");
jCheckBoxMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBoxMenuItem1ActionPerformed(evt);
}
});
2017-02-13 18:26:32 +01:00
viewMenu.add(jCheckBoxMenuItem1);
2017-02-02 18:39:55 +01:00
menuBar.add(viewMenu);
2017-01-22 21:41:45 +01:00
2017-01-15 18:15:22 +01:00
helpMenu.setMnemonic('h');
helpMenu.setText("Help");
aboutMenuItem.setMnemonic('a');
aboutMenuItem.setText("About");
2017-01-22 21:41:45 +01:00
aboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
aboutMenuItemActionPerformed(evt);
}
});
2017-01-15 18:15:22 +01:00
helpMenu.add(aboutMenuItem);
2017-12-05 07:53:26 +01:00
jMenuItem1.setText("Help ...");
2017-09-16 13:54:42 +02:00
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
helpMenu.add(jMenuItem1);
2017-01-15 18:15:22 +01:00
menuBar.add(helpMenu);
setJMenuBar(menuBar);
pack();
}// </editor-fold>//GEN-END:initComponents
private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed
2018-12-21 23:20:48 +01:00
dispose();
2017-01-15 18:15:22 +01:00
System.exit(0);
}//GEN-LAST:event_exitMenuItemActionPerformed
2017-01-22 21:41:45 +01:00
private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutMenuItemActionPerformed
2018-11-30 12:27:41 +01:00
Dialog d = new opensesim.gui.misc.AboutDialog(this, rootPaneCheckingEnabled);
2017-01-22 21:41:45 +01:00
d.setVisible(rootPaneCheckingEnabled);
}//GEN-LAST:event_aboutMenuItemActionPerformed
2017-02-07 01:53:43 +01:00
void pauseSim() {
2017-02-05 10:24:18 +01:00
Globals.se.timer.pause();
2017-02-04 18:57:18 +01:00
}
2017-02-07 01:53:43 +01:00
void startSim() {
2018-12-26 03:07:33 +01:00
2018-12-12 19:58:10 +01:00
JSONObject cfg = new JSONObject("{"
+ "strategy: opensesim.world.SimpleTrader"
2018-12-12 19:58:10 +01:00
+ "}");
2018-12-19 09:05:25 +01:00
Trader t = godworld.createTrader(cfg);
2018-12-28 13:06:15 +01:00
2019-01-04 08:29:45 +01:00
t.start();
AccountDialog.runDialog(this, ((SimpleTrader)t).account_1);
2019-01-03 18:59:17 +01:00
AccountDialog.runDialog(this, ((SimpleTrader)t).account_b);
2019-01-04 08:29:45 +01:00
2018-12-26 03:07:33 +01:00
updateGodWorld(godworld);
2018-12-23 13:12:36 +01:00
AssetPair p = godworld.getDefaultAssetPair();
2018-12-26 03:07:33 +01:00
2018-12-23 03:04:37 +01:00
opensesim.world.Exchange ex = godworld.getDefaultExchange();
2018-12-26 03:07:33 +01:00
TradingAPI api = ex.getAPI(p);
2018-12-29 13:31:08 +01:00
HistoryDialog.runDialog(this, api);
2018-12-26 13:11:35 +01:00
2018-12-28 13:06:15 +01:00
opensesim.util.scheduler.Scheduler s = godworld.getScheduler();
class MyListener implements EventListener {
2018-12-17 19:27:45 +01:00
World world;
MyListener(World world) {
2018-12-17 19:27:45 +01:00
this.world = world;
}
@Override
2018-12-28 13:06:15 +01:00
public long receive(opensesim.util.scheduler.Event task) {
2018-12-26 03:07:33 +01:00
2018-12-19 09:05:25 +01:00
System.out.printf("Received an Event %d\n", Thread.currentThread().getId());
// e.count++;
world.schedule(this, 1000);
return -1;
}
2018-12-17 19:27:45 +01:00
}
2018-12-26 03:07:33 +01:00
// MyListener listener = new MyListener(godworld.getWorld());
// MyEvent arg = new MyEvent();
2018-12-26 03:07:33 +01:00
// s.startTimerTask(listener, 1000);
/*
2017-02-26 09:27:32 +01:00
2017-02-04 16:29:45 +01:00
resetSim();
2017-02-13 00:07:50 +01:00
JSONObject jo = new JSONObject(Globals.prefs.get("Exchange", "{}"));
Globals.se.putConfig(jo);
2017-02-26 09:27:32 +01:00
2017-02-07 01:53:43 +01:00
this.stopButton.setEnabled(true);
2017-02-26 09:27:32 +01:00
// this.orderBookPanel.invalidate();
// this.orderBookPanel.repaint();
2017-02-11 13:12:02 +01:00
this.clock.invalidate();
this.clock.repaint();
2017-02-26 09:27:32 +01:00
2017-01-22 21:41:45 +01:00
this.startTraders();
2017-02-07 01:53:43 +01:00
2017-02-05 10:24:18 +01:00
Globals.se.timer.setPause(false);
2017-01-22 21:41:45 +01:00
Globals.se.timer.start();
2017-02-07 01:53:43 +01:00
Globals.se.timer.setAcceleration((Double) this.accelSpinner.getValue());
2017-03-06 16:08:20 +01:00
Scheduler.TimerTaskRunner tt = new Scheduler.TimerTaskRunner() {
2017-02-20 08:21:40 +01:00
@Override
public long timerTask() {
System.out.printf("Hello i will inject money\n");
2017-02-26 09:27:32 +01:00
// Globals.se.injectMoney();
return 1000 * 60 * 10;
2017-02-20 08:21:40 +01:00
}
@Override
public long getID() {
2017-02-26 09:27:32 +01:00
return 7L;
2017-02-20 08:21:40 +01:00
}
2017-02-26 09:27:32 +01:00
2017-02-20 08:21:40 +01:00
};
2017-02-25 20:06:26 +01:00
// Globals.se.timer.startTimerTask(tt, 0);
*/
2017-02-04 16:29:45 +01:00
}
2017-02-07 01:53:43 +01:00
void stopSim() {
2017-02-04 16:29:45 +01:00
Globals.se.timer.terminate();
2017-02-06 08:14:05 +01:00
this.stopButton.setEnabled(false);
2017-02-04 16:29:45 +01:00
}
2017-02-07 01:53:43 +01:00
void resetSim() {
2017-02-04 16:29:45 +01:00
Globals.se.terminate();
Globals.se.reset();
2017-10-07 07:38:05 +02:00
// chart.initChart();
chart.reset();
2017-02-07 01:53:43 +01:00
chart.invalidate();
chart.repaint();
// this.orderBookPanel.invalidate();
// this.orderBookPanel.repaint();
2017-02-07 01:53:43 +01:00
2017-02-04 16:29:45 +01:00
}
2017-02-07 01:53:43 +01:00
2017-01-22 21:41:45 +01:00
private void editPreferencesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editPreferencesActionPerformed
2017-01-28 15:34:24 +01:00
Globals.LOGGER.info("Edit prefs...");
2018-11-30 12:27:41 +01:00
Dialog d = new opensesim.gui.PreferencesEditor.EditPreferencesDialog(this, rootPaneCheckingEnabled);
2017-01-22 21:41:45 +01:00
d.setVisible(rootPaneCheckingEnabled);
}//GEN-LAST:event_editPreferencesActionPerformed
private void deleteMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteMenuItemActionPerformed
2017-01-28 15:34:24 +01:00
EditAutoTraderListDialog ed = new EditAutoTraderListDialog(this, true);
2017-01-25 00:24:53 +01:00
ed.setVisible(rootPaneCheckingEnabled);
}//GEN-LAST:event_deleteMenuItemActionPerformed
2017-01-26 01:52:03 +01:00
private void pasteMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pasteMenuItemActionPerformed
2017-01-28 15:34:24 +01:00
EditStrategies s = new EditStrategies(this, true);
2017-01-26 01:52:03 +01:00
s.setVisible(rootPaneCheckingEnabled);
2017-02-07 01:53:43 +01:00
2017-01-26 01:52:03 +01:00
}//GEN-LAST:event_pasteMenuItemActionPerformed
2017-02-07 01:53:43 +01:00
private final LoggerDialog log_d = new LoggerDialog(this, false);
2017-04-08 12:16:40 +02:00
private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openMenuItemActionPerformed
JFileChooser fc = getFileChooser();
2017-01-28 15:34:24 +01:00
2017-04-08 22:56:32 +02:00
while (true) {
if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) {
return;
}
2017-01-28 15:34:24 +01:00
2017-04-08 22:56:32 +02:00
try {
File f = fc.getSelectedFile();
Globals.loadFile(f);
String workdir = fc.getCurrentDirectory().getAbsolutePath();
Globals.prefs.put(Globals.PrefKeys.WORKDIR, workdir);
Globals.prefs.put(Globals.PrefKeys.CURRENTFILE, f.getAbsolutePath());
2017-09-16 18:44:06 +02:00
setTitleWithFileName(f.getName());
2017-04-08 22:56:32 +02:00
return;
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, "Can't load file: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
2017-02-07 01:53:43 +01:00
2017-04-08 22:56:32 +02:00
}
2017-01-31 08:04:11 +01:00
}//GEN-LAST:event_openMenuItemActionPerformed
2017-04-08 12:16:40 +02:00
// initialize a JFileChose with worging directory and extension
private JFileChooser getFileChooser() {
2017-01-31 08:04:11 +01:00
JFileChooser fc = new JFileChooser();
2017-02-07 01:53:43 +01:00
2017-04-08 12:16:40 +02:00
String workdir = Globals.prefs.get(Globals.PrefKeys.WORKDIR, "");
fc.setCurrentDirectory(new File(workdir));
2017-02-07 01:53:43 +01:00
FileNameExtensionFilter sesim_filter = new FileNameExtensionFilter("SeSim Files", Globals.SESIM_FILEEXTENSION);
2017-04-08 12:16:40 +02:00
fc.setFileFilter(sesim_filter);
return fc;
}
2017-01-31 08:04:11 +01:00
2017-09-16 18:44:06 +02:00
public final void setTitleWithFileName(String filename) {
String name;
name = Globals.SESIM_APPTITLE;
if (!"".equals(filename)) {
name += " (" + filename + ")";
2017-01-31 08:04:11 +01:00
}
2017-09-16 18:44:06 +02:00
setTitle(name);
}
2017-02-07 01:53:43 +01:00
private void saveFile(boolean saveAs) {
2017-04-08 12:16:40 +02:00
JFileChooser fc = getFileChooser();
FileFilter sesim_filter = fc.getFileFilter();
while (true) {
String current_file = Globals.prefs.get(Globals.PrefKeys.CURRENTFILE, "");
File fobj;
if (saveAs || "".equals(current_file)) {
if (!"".equals(current_file)) {
fobj = new File(current_file);
fc.setSelectedFile(fobj);
fc.setCurrentDirectory(fobj);
}
saveAs = true;
if (fc.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) {
return;
}
} else {
fobj = new File(current_file);
fc.setSelectedFile(fobj);
fc.setCurrentDirectory(fobj);
2017-04-08 12:16:40 +02:00
}
2017-02-07 01:53:43 +01:00
2017-04-08 12:16:40 +02:00
File f = fc.getSelectedFile();
String workdir = fc.getCurrentDirectory().getAbsolutePath();
Globals.prefs.put(Globals.PrefKeys.WORKDIR, workdir);
String fn = f.getAbsolutePath();
2017-02-07 01:53:43 +01:00
if (f.exists() && saveAs) {
String s = String.format("File %s already exists. Do you want to overwrite?", fn);
2017-04-08 22:56:32 +02:00
int dialogResult = JOptionPane.showConfirmDialog(this, s, "Warning", JOptionPane.YES_NO_OPTION);
2017-04-08 12:16:40 +02:00
if (dialogResult != JOptionPane.YES_OPTION) {
continue;
}
2017-02-07 01:53:43 +01:00
2017-04-08 12:16:40 +02:00
}
FileFilter selected_filter = fc.getFileFilter();
if (selected_filter == sesim_filter) {
System.out.printf("Filter", selected_filter.toString());
if (!fn.toLowerCase().endsWith("." + Globals.SESIM_FILEEXTENSION)) {
f = new File(fn + "." + Globals.SESIM_FILEEXTENSION);
2017-04-08 12:16:40 +02:00
}
}
try {
Globals.saveFile(f);
Globals.prefs.put(Globals.PrefKeys.CURRENTFILE, fn);
2017-09-16 18:44:06 +02:00
setTitleWithFileName(f.getName());
2017-04-08 12:16:40 +02:00
return;
} catch (Exception ex) {
2017-04-08 22:56:32 +02:00
JOptionPane.showMessageDialog(this, "Can't save file: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
2017-04-08 12:16:40 +02:00
}
2017-02-07 01:53:43 +01:00
2017-01-31 08:04:11 +01:00
}
}
2017-02-07 01:53:43 +01:00
private void saveAsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveAsMenuItemActionPerformed
2017-02-07 01:53:43 +01:00
this.saveFile(true);
2017-01-31 08:04:11 +01:00
}//GEN-LAST:event_saveAsMenuItemActionPerformed
private void editExchangeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editExchangeMenuItemActionPerformed
2017-02-07 01:53:43 +01:00
EditExchangeDialog ed = new EditExchangeDialog((Frame) this.getParent(), true);
2017-01-31 08:04:11 +01:00
int rc = ed.showdialog();
2017-02-07 01:53:43 +01:00
// System.out.printf("EDRET: %d\n",rc);
2017-01-31 08:04:11 +01:00
}//GEN-LAST:event_editExchangeMenuItemActionPerformed
2017-09-17 14:54:22 +02:00
private void resetToDefaults() {
2018-11-30 12:27:41 +01:00
InputStream is = getClass().getResourceAsStream("/opensesim/resources/files/defaultcfg.json");
String df = new Scanner(is, "UTF-8").useDelimiter("\\A").next();
try {
Globals.loadString(df);
} catch (IOException ex) {
2017-09-17 14:54:22 +02:00
JOptionPane.showMessageDialog(this,
2017-09-16 18:44:06 +02:00
"Can't load file: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
2017-09-17 14:54:22 +02:00
}
2017-09-17 14:54:22 +02:00
private void resetToDefaultsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetToDefaultsMenuItemActionPerformed
int dialogResult = JOptionPane.showConfirmDialog(this, "Are you sure?", "Warning", JOptionPane.YES_NO_OPTION);
if (dialogResult != JOptionPane.YES_OPTION) {
return;
}
2017-02-07 01:53:43 +01:00
this.resetToDefaults();
2017-02-02 18:39:55 +01:00
}//GEN-LAST:event_resetToDefaultsMenuItemActionPerformed
2017-02-04 16:29:45 +01:00
2017-02-04 18:57:18 +01:00
private void simMenuStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_simMenuStartActionPerformed
2017-02-04 16:29:45 +01:00
startSim();
2017-02-04 18:57:18 +01:00
}//GEN-LAST:event_simMenuStartActionPerformed
2017-02-04 16:29:45 +01:00
2017-02-04 18:57:18 +01:00
private void simMenuPauseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_simMenuPauseActionPerformed
2017-02-05 10:31:52 +01:00
pauseSim();
2017-02-04 18:57:18 +01:00
}//GEN-LAST:event_simMenuPauseActionPerformed
2017-02-05 10:31:52 +01:00
private void simMenuStopActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_simMenuStopActionPerformed
stopSim();
}//GEN-LAST:event_simMenuStopActionPerformed
2017-02-06 08:14:05 +01:00
private void accelSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_accelSpinnerStateChanged
2017-02-07 01:53:43 +01:00
Double val = (Double) this.accelSpinner.getValue();
2017-02-06 08:14:05 +01:00
Globals.se.timer.setAcceleration(val);
}//GEN-LAST:event_accelSpinnerStateChanged
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
Globals.se.timer.pause();
}//GEN-LAST:event_jButton2ActionPerformed
private void runButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_runButtonActionPerformed
startSim();
}//GEN-LAST:event_runButtonActionPerformed
private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_stopButtonActionPerformed
stopSim();
}//GEN-LAST:event_stopButtonActionPerformed
2018-12-26 03:07:33 +01:00
public class GodWorldEvent extends Event {
public GodWorld goworld;
2018-12-26 03:07:33 +01:00
public GodWorldEvent(GodWorld world) {
this.goworld = world;
}
2018-12-26 03:07:33 +01:00
}
2018-12-26 03:07:33 +01:00
HashSet<EventListener> gwlisteners = new HashSet<>();
void updateGodWorld(GodWorld godworld) {
GodWorldEvent e = new GodWorldEvent(null);
for (EventListener el : gwlisteners) {
el.receive(e);
}
}
2018-12-26 03:07:33 +01:00
private void jCheckBoxMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuItem1ActionPerformed
2018-12-24 15:12:32 +01:00
// JDialog jd = new opensesim.gui.orderbook.OrderBookDialog(this, false);
// jd.setVisible(rootPaneCheckingEnabled);
2018-12-26 03:07:33 +01:00
//EventListener e = opensesim.gui.orderbook.OrderBookDialog.runDialog(this, godworld);
//gwlisteners.add(e);
AssetPair ap = godworld.getDefaultAssetPair();
opensesim.world.Exchange ex = godworld.getDefaultExchange();
opensesim.gui.orderbook.OrderBookDialog.runDialog(this, godworld, ex, ap);
AbstractAsset eu = godworld.getAssetBySymbol("EUR");
AssetPair ap2 = godworld.getAssetPair(godworld.getAssetBySymbol("MSFT"), eu);
opensesim.gui.orderbook.OrderBookDialog.runDialog(this, godworld, ex, ap2);
2018-12-24 15:12:32 +01:00
}//GEN-LAST:event_jCheckBoxMenuItem1ActionPerformed
2017-02-26 09:27:32 +01:00
TraderListDialog tld = null;
2017-02-25 20:06:26 +01:00
private void viewTraderListCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewTraderListCheckBoxActionPerformed
2017-04-07 22:22:05 +02:00
2017-04-08 12:16:40 +02:00
javax.swing.SwingUtilities.invokeLater(() -> {
System.out.printf("Trwindow: %s\n", Boolean.toString(this.viewTraderListCheckBox.getState()));
if (this.viewTraderListCheckBox.getState()) {
if (tld == null) {
tld = new TraderListDialog(this, false);
tld.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
viewTraderListCheckBox.setState(false);
System.out.printf("Set menu false\n");
}
});
}
tld.setVisible(true);
} else if (tld != null) {
System.out.printf("Set visible = false\n");
tld.setVisible(false);
2017-02-26 09:27:32 +01:00
}
2017-04-08 12:16:40 +02:00
});
2017-04-07 22:22:05 +02:00
2017-02-25 20:06:26 +01:00
}//GEN-LAST:event_viewTraderListCheckBoxActionPerformed
2017-03-13 07:21:13 +01:00
private void accelSpinnerPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_accelSpinnerPropertyChange
// System.out.printf("Accel Spinner PRop Change\n");
2017-03-13 07:21:13 +01:00
}//GEN-LAST:event_accelSpinnerPropertyChange
2017-04-08 10:13:09 +02:00
private void saveMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveMenuItemActionPerformed
saveFile(false);
2017-04-08 10:13:09 +02:00
}//GEN-LAST:event_saveMenuItemActionPerformed
private void closeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeMenuItemActionPerformed
Globals.prefs.put(Globals.PrefKeys.CURRENTFILE, "");
2017-09-16 18:44:06 +02:00
setTitleWithFileName("");
}//GEN-LAST:event_closeMenuItemActionPerformed
private void clearMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearMenuItemActionPerformed
2018-12-28 13:06:15 +01:00
int dialogResult = JOptionPane.showConfirmDialog(this, "Are you sure you want to clear all data?", "Warning", JOptionPane.YES_NO_OPTION);
if (dialogResult != JOptionPane.YES_OPTION) {
return;
}
2017-04-14 07:06:37 +02:00
Globals.clearAll();
}//GEN-LAST:event_clearMenuItemActionPerformed
2017-09-16 13:54:42 +02:00
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
2017-12-05 07:53:26 +01:00
//SuperDlg d = new SuperDlg(this, false);
//d.setVisible(true);
2018-11-30 12:27:41 +01:00
2017-12-05 07:53:26 +01:00
//Help hs = new Help(this,true);
//hs.setVisible(true);
SeSimHelp h = new SeSimHelp();
2018-11-30 12:27:41 +01:00
2017-12-05 07:53:26 +01:00
h.setVisible(true);
2017-09-17 14:54:22 +02:00
2017-09-16 13:54:42 +02:00
}//GEN-LAST:event_jMenuItem1ActionPerformed
2018-11-30 12:27:41 +01:00
private void assetsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_assetsMenuItemActionPerformed
2018-11-30 12:27:41 +01:00
opensesim.gui.AssetEditor.AssetListDialog dialog;
dialog = new opensesim.gui.AssetEditor.AssetListDialog(godworld, this, true);
2018-11-30 12:27:41 +01:00
dialog.setLocationRelativeTo(this);
dialog.setVisible(rootPaneCheckingEnabled);
dialog.dispose();
2018-11-30 12:27:41 +01:00
}//GEN-LAST:event_assetsMenuItemActionPerformed
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
JDialog dialog = new NewJDialog(this, true);
2018-11-30 12:27:41 +01:00
dialog.setVisible(true);
dialog.dispose();
2018-11-30 12:27:41 +01:00
}//GEN-LAST:event_jMenuItem2ActionPerformed
private void exchangesMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exchangesMenuItemActionPerformed
//ExchangeListDialog.runDialog(this,this.godworld);
ExchangeListDialog.runDialog(this, godworld);
2018-11-30 12:27:41 +01:00
}//GEN-LAST:event_exchangesMenuItemActionPerformed
2018-12-21 23:20:48 +01:00
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
// TODO add your handling code here:
System.out.printf("Closing Windows\n");
}//GEN-LAST:event_formWindowClosing
public static class Pojo {
2018-11-30 12:27:41 +01:00
public String getSymbol() {
return symbol;
}
2018-12-01 03:28:05 +01:00
public String getName() {
return name;
}
public String symbol = "EUR";
public String name = "Euro";
};
2018-12-01 03:28:05 +01:00
2017-01-15 18:15:22 +01:00
/**
* @param args the command line arguments
2017-01-25 00:24:53 +01:00
* @throws java.lang.IllegalAccessException
* @throws java.lang.InstantiationException
2017-01-15 18:15:22 +01:00
*/
2017-01-25 00:24:53 +01:00
public static void main(String args[]) throws IllegalAccessException, InstantiationException {
2018-12-01 03:28:05 +01:00
//opensesim.world.World.MasterApi mapi = new opensesim.world.World.MasterApi();
2018-12-01 03:28:05 +01:00
// testing
Pojo p = new Pojo();
2020-07-25 00:05:21 +02:00
// Gson g = new Gson();
// String r = g.toJson(p);
2020-07-25 00:05:21 +02:00
// System.out.printf("GSON: %s\n", r);
JSONObject o = new JSONObject(p, new String[]{"name", "symbol"});
System.out.printf("OJSON: %s\n", o.toString(8));
// System.exit(0);
2018-12-01 03:28:05 +01:00
// end testing
2018-11-30 12:27:41 +01:00
// Initialize globals
Class<?> c = opensesim.gui.SeSimApplication.class;
Globals.initGlobals(c);
/* String world_source = Globals.prefs.get("world", "{}");
2018-11-30 12:27:41 +01:00
JSONObject world = new org.json.JSONObject(world_source);
Globals.world.putConfig(world);
*/
2018-11-30 12:27:41 +01:00
//Globals.installLookAndFeels();
// Globals.setLookAndFeel("Metal");
//JDialog.setDefaultLookAndFeelDecorated(true);
2017-01-22 21:41:45 +01:00
Globals.se = new Exchange();
2017-01-28 15:34:24 +01:00
Globals.prefs.put(Globals.PrefKeys.CURRENTFILE, "");
2017-01-28 15:34:24 +01:00
2017-01-15 18:15:22 +01:00
java.awt.EventQueue.invokeLater(new Runnable() {
2017-02-11 08:36:45 +01:00
@Override
2017-01-15 18:15:22 +01:00
public void run() {
2017-04-08 09:28:11 +02:00
new SeSimApplication().setVisible(true);
2017-01-15 18:15:22 +01:00
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JMenuItem aboutMenuItem;
2017-02-05 10:01:13 +01:00
private javax.swing.JSpinner accelSpinner;
2018-11-30 12:27:41 +01:00
private javax.swing.JMenuItem assetsMenuItem;
private opensesim.chart.MasterChart chart;
private javax.swing.JMenuItem clearMenuItem;
2018-11-30 12:27:41 +01:00
private opensesim.gui.Clock clock;
private javax.swing.JMenuItem closeMenuItem;
2017-01-15 18:15:22 +01:00
private javax.swing.JMenuItem deleteMenuItem;
2017-01-31 08:04:11 +01:00
private javax.swing.JMenuItem editExchangeMenuItem;
2017-01-15 18:15:22 +01:00
private javax.swing.JMenu editMenu;
2017-01-22 21:41:45 +01:00
private javax.swing.JMenuItem editPreferences;
2018-11-30 12:27:41 +01:00
private javax.swing.JMenuItem exchangesMenuItem;
2017-01-15 18:15:22 +01:00
private javax.swing.JMenuItem exitMenuItem;
private javax.swing.JMenu fileMenu;
private javax.swing.JMenu helpMenu;
2017-01-22 21:41:45 +01:00
private javax.swing.JButton jButton2;
2017-02-13 18:26:32 +01:00
private javax.swing.JCheckBoxMenuItem jCheckBoxMenuItem1;
2017-03-13 07:21:13 +01:00
private javax.swing.JLabel jLabel1;
2017-09-16 13:54:42 +02:00
private javax.swing.JMenuItem jMenuItem1;
2018-11-30 12:27:41 +01:00
private javax.swing.JMenuItem jMenuItem2;
2017-02-03 01:56:41 +01:00
private javax.swing.JPanel jPanel2;
2017-01-28 15:34:24 +01:00
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JPopupMenu.Separator jSeparator1;
private javax.swing.JPopupMenu.Separator jSeparator2;
private javax.swing.JPopupMenu.Separator jSeparator4;
private javax.swing.JPopupMenu.Separator jSeparator5;
2017-02-13 18:26:32 +01:00
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JSplitPane jSplitPane2;
2017-02-18 08:17:07 +01:00
private javax.swing.JSplitPane jSplitPane3;
private javax.swing.JSplitPane jSplitPane4;
2017-03-03 19:06:36 +01:00
private javax.swing.JSplitPane jSplitPane5;
2017-01-28 15:34:24 +01:00
private javax.swing.JTextArea jTextArea1;
2017-01-15 18:15:22 +01:00
private javax.swing.JMenuBar menuBar;
private javax.swing.JMenuItem openMenuItem;
private javax.swing.JMenuItem pasteMenuItem;
private javax.swing.JMenuItem resetToDefaultsMenuItem;
2017-02-06 08:14:05 +01:00
private javax.swing.JButton runButton;
2017-01-15 18:15:22 +01:00
private javax.swing.JMenuItem saveAsMenuItem;
private javax.swing.JMenuItem saveMenuItem;
2017-02-04 18:57:18 +01:00
private javax.swing.JMenu simMenu;
private javax.swing.JMenuItem simMenuPause;
private javax.swing.JMenuItem simMenuStart;
2017-02-05 10:31:52 +01:00
private javax.swing.JMenuItem simMenuStop;
2017-02-06 08:14:05 +01:00
private javax.swing.JButton stopButton;
2017-02-02 18:39:55 +01:00
private javax.swing.JMenu viewMenu;
2017-02-25 20:06:26 +01:00
private javax.swing.JCheckBoxMenuItem viewTraderListCheckBox;
2017-01-15 18:15:22 +01:00
// End of variables declaration//GEN-END:variables
}