2017-10-03 12:35:12 +02: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.
|
|
|
|
*/
|
|
|
|
package chart;
|
|
|
|
|
2017-11-19 17:06:30 +01:00
|
|
|
import sesim.ChartDef;
|
2017-10-04 10:05:32 +02:00
|
|
|
import chart.painter.CandleStickChartPainter;
|
|
|
|
import chart.painter.ChartPainter;
|
2017-10-05 20:57:37 +02:00
|
|
|
import chart.painter.XLegendPainter;
|
2017-10-04 10:05:32 +02:00
|
|
|
import chart.painter.ChartCrossPainter;
|
2017-10-23 07:29:42 +02:00
|
|
|
import chart.painter.LineChartPainter;
|
2017-12-26 09:37:26 +01:00
|
|
|
import chart.painter.OHLCChartPainter;
|
2017-10-06 07:21:03 +02:00
|
|
|
import chart.painter.YLegendPainter;
|
2017-10-03 12:35:12 +02:00
|
|
|
import gui.Globals;
|
2017-11-18 16:04:55 +01:00
|
|
|
import java.util.ArrayList;
|
2017-10-03 12:35:12 +02:00
|
|
|
import sesim.Exchange.QuoteReceiver;
|
2017-10-28 09:15:26 +02:00
|
|
|
import sesim.Indicator;
|
2017-11-18 08:06:54 +01:00
|
|
|
import sesim.MinMax;
|
2017-10-03 12:35:12 +02:00
|
|
|
import sesim.OHLCData;
|
2017-11-18 08:06:54 +01:00
|
|
|
import sesim.OHLCDataItem;
|
2017-10-03 12:35:12 +02:00
|
|
|
import sesim.Quote;
|
2017-11-18 18:22:58 +01:00
|
|
|
import indicators.SMAIndicator;
|
2017-11-26 09:29:14 +01:00
|
|
|
import java.util.Objects;
|
|
|
|
import javax.swing.ButtonGroup;
|
|
|
|
import javax.swing.JRadioButtonMenuItem;
|
2017-11-25 09:28:01 +01:00
|
|
|
import org.json.JSONObject;
|
2017-11-25 00:50:29 +01:00
|
|
|
|
2017-10-03 12:35:12 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @author 7u83 <7u83@mail.ru>
|
|
|
|
*/
|
2017-11-18 13:36:00 +01:00
|
|
|
public class MasterChart extends javax.swing.JPanel implements QuoteReceiver {
|
2017-10-03 15:50:18 +02:00
|
|
|
|
2017-10-07 09:36:41 +02:00
|
|
|
private ChartDef chartDef;
|
2017-11-17 21:36:11 +01:00
|
|
|
|
2017-11-26 09:29:14 +01:00
|
|
|
class CompressionVal {
|
|
|
|
|
|
|
|
public final String text;
|
|
|
|
public final Integer value;
|
|
|
|
|
|
|
|
CompressionVal(String text, Integer val) {
|
|
|
|
this.text = text;
|
|
|
|
this.value = val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private final CompressionVal cvalues[] = {
|
|
|
|
new CompressionVal("5 s", 5 * 1000),
|
|
|
|
new CompressionVal("10 s", 10 * 1000),
|
|
|
|
new CompressionVal("15 s", 15 * 1000),
|
|
|
|
new CompressionVal("30 s", 30 * 1000),
|
|
|
|
new CompressionVal("1 m", 1 * 60 * 1000),
|
|
|
|
new CompressionVal("2 m", 2 * 60 * 1000),
|
|
|
|
new CompressionVal("5 m", 5 * 60 * 1000),
|
|
|
|
new CompressionVal("10 m", 10 * 60 * 1000),
|
|
|
|
new CompressionVal("1 h", 1 * 3660 * 1000),
|
|
|
|
new CompressionVal("2 h", 2 * 3660 * 1000),
|
|
|
|
new CompressionVal("4 h", 4 * 3660 * 1000),
|
|
|
|
new CompressionVal("1 d", 1 * 24 * 3660 * 1000),
|
|
|
|
new CompressionVal("2 d", 2 * 24 * 3660 * 1000),
|
|
|
|
new CompressionVal("3 d", 3 * 3660 * 1000),};
|
|
|
|
|
2017-11-26 21:53:07 +01:00
|
|
|
private void initCtxMenu() {
|
2017-11-26 09:29:14 +01:00
|
|
|
ButtonGroup group = new ButtonGroup();
|
|
|
|
for (int i = 0; i < this.cvalues.length; i++) {
|
|
|
|
JRadioButtonMenuItem item = new JRadioButtonMenuItem(this.cvalues[i].text);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
2017-11-26 21:53:07 +01:00
|
|
|
|
2017-11-25 09:28:01 +01:00
|
|
|
SMAIndicator sma1, sma2;
|
2017-11-18 16:04:55 +01:00
|
|
|
|
|
|
|
class MyOHLCData extends OHLCData {
|
|
|
|
|
2017-11-25 09:28:01 +01:00
|
|
|
SMAIndicator sma;
|
|
|
|
|
|
|
|
MyOHLCData(SMAIndicator sma) {
|
|
|
|
this.sma = sma;
|
|
|
|
}
|
|
|
|
|
2017-11-18 18:01:57 +01:00
|
|
|
@Override
|
|
|
|
public int size() {
|
|
|
|
return sma.getData().size();
|
|
|
|
}
|
2017-11-25 09:28:01 +01:00
|
|
|
|
2017-11-18 16:04:55 +01:00
|
|
|
@Override
|
|
|
|
public OHLCDataItem get(int n) {
|
|
|
|
return sma.getData().get(n);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MinMax getMinMax(int first, int last) {
|
|
|
|
return mydata.getMinMax(first, last);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-10-03 12:35:12 +02:00
|
|
|
/**
|
|
|
|
* Creates new form MasterChart
|
|
|
|
*/
|
|
|
|
public MasterChart() {
|
|
|
|
initComponents();
|
2017-10-03 15:50:18 +02:00
|
|
|
|
2017-10-07 09:36:41 +02:00
|
|
|
chartDef = new ChartDef();
|
|
|
|
chartDef.x_unit_width = 3.0;
|
2017-10-03 15:50:18 +02:00
|
|
|
|
|
|
|
if (Globals.se == null) {
|
2017-10-03 12:35:12 +02:00
|
|
|
return;
|
2017-10-03 15:50:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
Globals.se.addQuoteReceiver(this);
|
2017-11-17 21:36:11 +01:00
|
|
|
|
2017-10-07 09:36:41 +02:00
|
|
|
this.chart.setChartDef(chartDef);
|
|
|
|
this.xLegend.setChartDef(chartDef);
|
|
|
|
this.yLegend.setChartDef(chartDef);
|
2017-10-03 15:50:18 +02:00
|
|
|
|
2017-11-18 13:36:00 +01:00
|
|
|
// this.yLegend.addChartPainter(p);
|
|
|
|
//this.yLegend.addChartPainter(pc);
|
|
|
|
}
|
2017-11-18 16:04:55 +01:00
|
|
|
OHLCData mydata;
|
2017-11-18 08:06:54 +01:00
|
|
|
|
2017-11-18 13:36:00 +01:00
|
|
|
public void reset() {
|
|
|
|
this.chart.deleteAllChartPinters();
|
|
|
|
this.xLegend.deleteAllChartPinters();
|
|
|
|
this.yLegend.deleteAllChartPinters();
|
2017-11-18 08:06:54 +01:00
|
|
|
|
2017-11-18 13:36:00 +01:00
|
|
|
this.chart.setChartDef(chartDef);
|
|
|
|
this.xLegend.setChartDef(chartDef);
|
|
|
|
this.yLegend.setChartDef(chartDef);
|
2017-11-17 21:36:11 +01:00
|
|
|
|
2017-12-26 09:37:26 +01:00
|
|
|
OHLCChartPainter p;
|
2018-01-02 00:55:54 +01:00
|
|
|
mydata = Globals.se.getOHLCdata(Globals.se.getDefaultStock(),60000*4);
|
2017-11-17 21:36:11 +01:00
|
|
|
|
2017-10-03 15:50:18 +02:00
|
|
|
this.xScrollBar.setMaximum(0);
|
2017-10-03 15:51:42 +02:00
|
|
|
|
2017-10-05 20:57:37 +02:00
|
|
|
p = new XLegendPainter();
|
2017-11-18 16:04:55 +01:00
|
|
|
p.setOHLCData(mydata);
|
2017-10-03 15:51:42 +02:00
|
|
|
|
2017-10-03 12:35:12 +02:00
|
|
|
xLegend.addChartPainter(p);
|
2017-10-03 15:50:18 +02:00
|
|
|
xLegend.setXSCrollBar(xScrollBar);
|
|
|
|
|
2017-12-26 09:37:26 +01:00
|
|
|
OHLCChartPainter pc = new CandleStickChartPainter();
|
2017-11-18 13:36:00 +01:00
|
|
|
//pc.setDataProvider(this);
|
2017-11-18 16:04:55 +01:00
|
|
|
pc.setOHLCData(mydata);
|
2017-10-03 15:51:42 +02:00
|
|
|
|
2017-10-06 07:21:03 +02:00
|
|
|
chart.addChartPainter(pc);
|
2017-10-03 15:50:18 +02:00
|
|
|
chart.setXSCrollBar(xScrollBar);
|
2017-10-07 02:40:22 +02:00
|
|
|
chart.addChartPainter(new ChartCrossPainter());
|
2017-10-03 15:51:42 +02:00
|
|
|
|
2017-11-25 09:28:01 +01:00
|
|
|
sma1 = new indicators.SMAIndicator();
|
|
|
|
sma1.setParent(mydata);
|
|
|
|
|
|
|
|
JSONObject co;
|
|
|
|
co = new JSONObject("{\"len\": 60}");
|
|
|
|
sma1.putConfig(co);
|
|
|
|
MyOHLCData mysma1;
|
|
|
|
mysma1 = new MyOHLCData(sma1);
|
2017-11-17 21:36:11 +01:00
|
|
|
p = new LineChartPainter();
|
2017-11-25 09:28:01 +01:00
|
|
|
p.setOHLCData(mysma1);
|
2017-11-26 09:29:14 +01:00
|
|
|
|
2017-11-17 21:36:11 +01:00
|
|
|
chart.addChartPainter(p);
|
|
|
|
|
2017-11-25 09:28:01 +01:00
|
|
|
sma2 = new indicators.SMAIndicator();
|
|
|
|
sma2.setParent(mydata);
|
|
|
|
co = new JSONObject("{\"len\": 20}");
|
|
|
|
sma2.putConfig(co);
|
|
|
|
MyOHLCData mysma2;
|
|
|
|
mysma2 = new MyOHLCData(sma2);
|
|
|
|
p = new LineChartPainter();
|
|
|
|
p.setOHLCData(mysma2);
|
2017-11-26 09:29:14 +01:00
|
|
|
chart.addChartPainter(p);
|
2017-11-25 09:28:01 +01:00
|
|
|
|
2017-12-26 09:37:26 +01:00
|
|
|
OHLCChartPainter yp = new YLegendPainter(chart);
|
2017-11-18 13:36:00 +01:00
|
|
|
// yp.setDataProvider(this);
|
2017-11-18 16:04:55 +01:00
|
|
|
yp.setOHLCData(mydata);
|
2017-11-17 21:36:11 +01:00
|
|
|
|
2017-10-07 02:40:22 +02:00
|
|
|
this.yLegend.addChartPainter(yp);
|
2017-10-03 12:35:12 +02: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-11-26 21:53:07 +01:00
|
|
|
ctxMenu = new javax.swing.JPopupMenu();
|
|
|
|
jMenu1 = new javax.swing.JMenu();
|
|
|
|
jMenuItem1 = new javax.swing.JMenuItem();
|
2017-11-19 17:06:30 +01:00
|
|
|
chart = new sesim.ChartPanel();
|
|
|
|
yLegend = new sesim.ChartPanel();
|
|
|
|
xLegend = new sesim.ChartPanel();
|
2017-10-03 12:35:12 +02:00
|
|
|
xScrollBar = new javax.swing.JScrollBar();
|
|
|
|
|
2017-11-26 21:53:07 +01:00
|
|
|
jMenu1.setText("jMenu1");
|
|
|
|
ctxMenu.add(jMenu1);
|
|
|
|
|
|
|
|
jMenuItem1.setText("jMenuItem1");
|
|
|
|
ctxMenu.add(jMenuItem1);
|
|
|
|
|
2017-10-07 09:36:41 +02:00
|
|
|
addMouseWheelListener(new java.awt.event.MouseWheelListener() {
|
|
|
|
public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
|
|
|
|
formMouseWheelMoved(evt);
|
|
|
|
}
|
|
|
|
});
|
2017-11-26 21:53:07 +01:00
|
|
|
addMouseListener(new java.awt.event.MouseAdapter() {
|
|
|
|
public void mousePressed(java.awt.event.MouseEvent evt) {
|
|
|
|
formMousePressed(evt);
|
|
|
|
}
|
|
|
|
public void mouseReleased(java.awt.event.MouseEvent evt) {
|
|
|
|
formMouseReleased(evt);
|
|
|
|
}
|
|
|
|
});
|
2017-10-07 09:36:41 +02:00
|
|
|
|
|
|
|
chart.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204)));
|
2017-10-03 12:35:12 +02:00
|
|
|
chart.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
|
|
|
|
public void mouseMoved(java.awt.event.MouseEvent evt) {
|
|
|
|
chartMouseMoved(evt);
|
|
|
|
}
|
|
|
|
});
|
2017-11-26 21:53:07 +01:00
|
|
|
chart.addMouseListener(new java.awt.event.MouseAdapter() {
|
|
|
|
public void mousePressed(java.awt.event.MouseEvent evt) {
|
|
|
|
chartMousePressed(evt);
|
|
|
|
}
|
|
|
|
});
|
2017-10-03 12:35:12 +02:00
|
|
|
|
|
|
|
javax.swing.GroupLayout chartLayout = new javax.swing.GroupLayout(chart);
|
|
|
|
chart.setLayout(chartLayout);
|
|
|
|
chartLayout.setHorizontalGroup(
|
|
|
|
chartLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
|
|
.addGap(0, 0, Short.MAX_VALUE)
|
|
|
|
);
|
|
|
|
chartLayout.setVerticalGroup(
|
|
|
|
chartLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
2017-12-05 07:53:26 +01:00
|
|
|
.addGap(0, 317, Short.MAX_VALUE)
|
2017-10-03 12:35:12 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
javax.swing.GroupLayout yLegendLayout = new javax.swing.GroupLayout(yLegend);
|
|
|
|
yLegend.setLayout(yLegendLayout);
|
|
|
|
yLegendLayout.setHorizontalGroup(
|
|
|
|
yLegendLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
2017-11-26 09:29:14 +01:00
|
|
|
.addGap(0, 95, Short.MAX_VALUE)
|
2017-10-03 12:35:12 +02:00
|
|
|
);
|
|
|
|
yLegendLayout.setVerticalGroup(
|
|
|
|
yLegendLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
2017-11-26 21:53:07 +01:00
|
|
|
.addGap(0, 0, Short.MAX_VALUE)
|
2017-10-03 12:35:12 +02:00
|
|
|
);
|
|
|
|
|
2017-11-26 09:29:14 +01:00
|
|
|
xLegend.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
|
2017-10-03 12:35:12 +02:00
|
|
|
|
|
|
|
javax.swing.GroupLayout xLegendLayout = new javax.swing.GroupLayout(xLegend);
|
|
|
|
xLegend.setLayout(xLegendLayout);
|
|
|
|
xLegendLayout.setHorizontalGroup(
|
|
|
|
xLegendLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
2017-11-26 09:29:14 +01:00
|
|
|
.addGap(0, 561, Short.MAX_VALUE)
|
2017-10-03 12:35:12 +02:00
|
|
|
);
|
|
|
|
xLegendLayout.setVerticalGroup(
|
|
|
|
xLegendLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
2017-11-26 09:29:14 +01:00
|
|
|
.addGap(0, 37, Short.MAX_VALUE)
|
2017-10-03 12:35:12 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
xScrollBar.setOrientation(javax.swing.JScrollBar.HORIZONTAL);
|
2017-10-07 09:36:41 +02:00
|
|
|
xScrollBar.addAdjustmentListener(new java.awt.event.AdjustmentListener() {
|
|
|
|
public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {
|
|
|
|
xScrollBarAdjustmentValueChanged(evt);
|
|
|
|
}
|
|
|
|
});
|
2017-10-03 12:35:12 +02:00
|
|
|
|
|
|
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
|
|
|
this.setLayout(layout);
|
|
|
|
layout.setHorizontalGroup(
|
|
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
|
|
.addGroup(layout.createSequentialGroup()
|
|
|
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
2017-11-26 09:29:14 +01:00
|
|
|
.addComponent(xLegend, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
|
|
.addComponent(chart, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
|
.addComponent(yLegend, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
|
|
.addComponent(xScrollBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
2017-10-03 12:35:12 +02:00
|
|
|
);
|
|
|
|
layout.setVerticalGroup(
|
|
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
|
|
.addGroup(layout.createSequentialGroup()
|
|
|
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
2017-11-26 21:53:07 +01:00
|
|
|
.addComponent(chart, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
|
|
.addComponent(yLegend, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
2017-10-03 12:35:12 +02:00
|
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
|
.addComponent(xLegend, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
2017-11-26 09:29:14 +01:00
|
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
|
|
.addComponent(xScrollBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
2017-10-03 12:35:12 +02:00
|
|
|
);
|
|
|
|
}// </editor-fold>//GEN-END:initComponents
|
|
|
|
|
2017-11-26 21:53:07 +01:00
|
|
|
private void xScrollBarAdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {//GEN-FIRST:event_xScrollBarAdjustmentValueChanged
|
|
|
|
repaint();
|
|
|
|
}//GEN-LAST:event_xScrollBarAdjustmentValueChanged
|
2017-11-17 21:36:11 +01:00
|
|
|
|
2017-11-26 21:53:07 +01:00
|
|
|
private void showCtxMenu(java.awt.event.MouseEvent evt) {
|
|
|
|
|
|
|
|
this.ctxMenu.setVisible(true);
|
|
|
|
this.ctxMenu.show(this, evt.getX(), evt.getY());
|
|
|
|
|
|
|
|
invalidate();
|
|
|
|
repaint();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void formMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMousePressed
|
|
|
|
if (!evt.isPopupTrigger()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
System.out.printf("ctx menu pressed\n");
|
|
|
|
showCtxMenu(evt);
|
|
|
|
}//GEN-LAST:event_formMousePressed
|
|
|
|
|
|
|
|
private void formMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseReleased
|
|
|
|
formMousePressed(evt);
|
|
|
|
}//GEN-LAST:event_formMouseReleased
|
2017-10-03 12:35:12 +02:00
|
|
|
|
2017-10-07 09:36:41 +02:00
|
|
|
private void formMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {//GEN-FIRST:event_formMouseWheelMoved
|
|
|
|
double n = evt.getPreciseWheelRotation() * (-1.0);
|
|
|
|
|
|
|
|
if (n < 0) {
|
|
|
|
if (chartDef.x_unit_width > 0.3) {
|
|
|
|
chartDef.x_unit_width += 0.1 * n;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
chartDef.x_unit_width += 0.1 * n;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.invalidate();
|
2017-11-17 21:36:11 +01:00
|
|
|
this.repaint();
|
2017-10-07 09:36:41 +02:00
|
|
|
}//GEN-LAST:event_formMouseWheelMoved
|
|
|
|
|
2017-11-26 21:53:07 +01:00
|
|
|
private void chartMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_chartMouseMoved
|
|
|
|
|
|
|
|
}//GEN-LAST:event_chartMouseMoved
|
|
|
|
|
|
|
|
private void chartMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_chartMousePressed
|
|
|
|
System.out.printf("Mauspress\n");
|
|
|
|
this.formMousePressed(evt);
|
|
|
|
}//GEN-LAST:event_chartMousePressed
|
2017-10-07 09:36:41 +02:00
|
|
|
|
2017-10-03 12:35:12 +02:00
|
|
|
|
|
|
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
2017-11-19 17:06:30 +01:00
|
|
|
private sesim.ChartPanel chart;
|
2017-11-26 21:53:07 +01:00
|
|
|
private javax.swing.JPopupMenu ctxMenu;
|
|
|
|
private javax.swing.JMenu jMenu1;
|
|
|
|
private javax.swing.JMenuItem jMenuItem1;
|
2017-11-19 17:06:30 +01:00
|
|
|
private sesim.ChartPanel xLegend;
|
2017-10-03 12:35:12 +02:00
|
|
|
private javax.swing.JScrollBar xScrollBar;
|
2017-11-19 17:06:30 +01:00
|
|
|
private sesim.ChartPanel yLegend;
|
2017-10-03 12:35:12 +02:00
|
|
|
// End of variables declaration//GEN-END:variables
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void UpdateQuote(Quote q) {
|
2017-11-25 09:28:01 +01:00
|
|
|
if (sma1 != null) {
|
|
|
|
sma1.update();
|
2017-11-18 16:04:55 +01:00
|
|
|
}
|
2017-11-25 09:28:01 +01:00
|
|
|
|
|
|
|
if (sma2 != null) {
|
|
|
|
sma2.update();
|
|
|
|
}
|
|
|
|
|
2017-11-18 16:04:55 +01:00
|
|
|
int s = mydata.size();
|
2017-10-03 15:50:18 +02:00
|
|
|
this.xScrollBar.setMaximum(s);
|
2017-10-03 12:35:12 +02:00
|
|
|
repaint();
|
|
|
|
}
|
2017-10-03 15:50:18 +02:00
|
|
|
|
2017-10-03 12:35:12 +02:00
|
|
|
}
|