diff --git a/src/opensesim/gui/history/HistoryDialog.form b/src/opensesim/gui/history/HistoryDialog.form
new file mode 100644
index 0000000..efdd227
--- /dev/null
+++ b/src/opensesim/gui/history/HistoryDialog.form
@@ -0,0 +1,45 @@
+
+
+
diff --git a/src/opensesim/gui/history/HistoryDialog.java b/src/opensesim/gui/history/HistoryDialog.java
new file mode 100644
index 0000000..0143a9a
--- /dev/null
+++ b/src/opensesim/gui/history/HistoryDialog.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+package opensesim.gui.history;
+
+import opensesim.world.TradingAPI;
+
+/**
+ *
+ * @author 7u83 <7u83@mail.ru>
+ */
+public class HistoryDialog extends javax.swing.JDialog {
+
+ /**
+ * Creates new form HistoryDialog
+ */
+ public HistoryDialog(java.awt.Frame parent, boolean modal) {
+ super(parent, modal);
+ initComponents();
+ }
+
+ public static void runDialog(java.awt.Frame parent, TradingAPI api){
+ HistoryDialog d = new HistoryDialog(parent,false);
+ d.historyPanel1.api=api;
+ d.historyPanel1.update();
+ api.addOrderBookListener(d.historyPanel1);
+ d.setTitle(api.getAssetPair().getSymbol());
+ d.setVisible(true);
+
+ }
+
+ /**
+ * 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")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ historyPanel1 = new opensesim.gui.history.HistoryPanel();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addGap(0, 0, Short.MAX_VALUE)
+ .addComponent(historyPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addGap(0, 0, Short.MAX_VALUE)
+ .addComponent(historyPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ );
+
+ pack();
+ }// //GEN-END:initComponents
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String args[]) {
+ /* Set the Nimbus look and feel */
+ //
+ /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
+ * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
+ */
+ try {
+ for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
+ if ("Nimbus".equals(info.getName())) {
+ javax.swing.UIManager.setLookAndFeel(info.getClassName());
+ break;
+ }
+ }
+ } catch (ClassNotFoundException ex) {
+ java.util.logging.Logger.getLogger(HistoryDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (InstantiationException ex) {
+ java.util.logging.Logger.getLogger(HistoryDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (IllegalAccessException ex) {
+ java.util.logging.Logger.getLogger(HistoryDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (javax.swing.UnsupportedLookAndFeelException ex) {
+ java.util.logging.Logger.getLogger(HistoryDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ }
+ //
+
+ /* Create and display the dialog */
+ java.awt.EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ HistoryDialog dialog = new HistoryDialog(new javax.swing.JFrame(), true);
+ dialog.addWindowListener(new java.awt.event.WindowAdapter() {
+ @Override
+ public void windowClosing(java.awt.event.WindowEvent e) {
+ System.exit(0);
+ }
+ });
+ dialog.setVisible(true);
+ }
+ });
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private opensesim.gui.history.HistoryPanel historyPanel1;
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/src/opensesim/gui/history/HistoryPanel.java b/src/opensesim/gui/history/HistoryPanel.java
index 697bb40..f3fa52b 100644
--- a/src/opensesim/gui/history/HistoryPanel.java
+++ b/src/opensesim/gui/history/HistoryPanel.java
@@ -25,11 +25,18 @@
*/
package opensesim.gui.history;
+import java.util.Set;
+import javax.swing.table.DefaultTableModel;
+import opensesim.util.scheduler.Event;
+import opensesim.util.scheduler.EventListener;
+import opensesim.world.Quote;
+import opensesim.world.TradingAPI;
+
/**
*
* @author 7u83 <7u83@mail.ru>
*/
-public class HistoryPanel extends javax.swing.JPanel {
+public class HistoryPanel extends javax.swing.JPanel implements EventListener {
/**
* Creates new form HistoryPanel
@@ -38,6 +45,32 @@ public class HistoryPanel extends javax.swing.JPanel {
initComponents();
}
+ TradingAPI api;
+
+ void update() {
+ DefaultTableModel model;
+ model = (DefaultTableModel) this.historytable.getModel();
+
+ Set h = api.getQuoteHistory();
+
+ int row = 0;
+ model.setRowCount(h.size());
+ for (Quote q : h) {
+ //Double val = account.get(a);
+ //Double avail = account.getAvail(a);
+ //String astr = val.toString() + "/" + avail.toString();
+
+// model.setValueAt(ob1.getAccount().getOwner().getName(), row, 0);
+ model.setValueAt(q.price, row, 0);
+ model.setValueAt(q.volume, row, 1);
+ model.setValueAt(((Long) q.time).toString(), row, 2);
+ model.setValueAt(q.type.toString(), row, 3);
+
+ row++;
+ }
+
+ }
+
/**
* 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
@@ -95,4 +128,10 @@ public class HistoryPanel extends javax.swing.JPanel {
private javax.swing.JTable historytable;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration//GEN-END:variables
+
+ @Override
+ public long receive(Event task) {
+ update();
+ return 0;
+ }
}