private ChartChangeListener getChartChangeListner() { return new ChartChangeListener() { @Override public void chartChanged(ChartChangeEvent event) { // Is weird. This works well for zoom-in. When we add new CCI or // RIS. This event function will be triggered too. However, the // returned draw area will always be the old draw area, unless // you move your move over. // Even I try to capture event.getType() == ChartChangeEventType.NEW_DATASET // also doesn't work. if (event.getType() == ChartChangeEventType.GENERAL) { ChartJDialog.this.chartLayerUI.updateTraceInfos(); // Re-calculating high low value. ChartJDialog.this.updateHighLowJLabels(); } } }; }
/** * Registers an object for notification of changes to the chart. * * @param listener the listener (<code>null</code> not permitted). */ public void addChangeListener(ChartChangeListener listener) { if (listener == null) { throw new IllegalArgumentException("Null 'listener' argument."); } this.changeListeners.add(ChartChangeListener.class, listener); }
/** * Deregisters an object for notification of changes to the chart. * * @param listener the listener (<code>null</code> not permitted) */ public void removeChangeListener(ChartChangeListener listener) { if (listener == null) { throw new IllegalArgumentException("Null 'listener' argument."); } this.changeListeners.remove(ChartChangeListener.class, listener); }
/** * Sends a {@link ChartChangeEvent} to all registered listeners. * * @param event information about the event that triggered the notification. */ protected void notifyListeners(ChartChangeEvent event) { if (this.notify) { Object[] listeners = this.changeListeners.getListenerList(); for (int i = listeners.length - 2; i >= 0; i -= 2) { if (listeners[i] == ChartChangeListener.class) { ((ChartChangeListener) listeners[i + 1]).chartChanged(event); } } } }
/** * Sends a {@link ChartChangeEvent} to all registered listeners. * * @param event information about the event that triggered the * notification. */ protected void notifyListeners(ChartChangeEvent event) { if (this.notify) { Object[] listeners = this.changeListeners.getListenerList(); for (int i = listeners.length - 2; i >= 0; i -= 2) { if (listeners[i] == ChartChangeListener.class) { ((ChartChangeListener) listeners[i + 1]).chartChanged( event); } } } }
/** * Deregisters an object for notification of changes to the chart. * * @param listener the listener (<code>null</code> not permitted) * * @see #addChangeListener(ChartChangeListener) */ public void removeChangeListener(ChartChangeListener listener) { if (listener == null) { throw new IllegalArgumentException("Null 'listener' argument."); } this.changeListeners.remove(ChartChangeListener.class, listener); }
Control createCompositeChart(final Composite parent, EventLogParser logParser, String title) { mChart = ChartFactory.createTimeSeriesChart( null, null /* timeAxisLabel */, null /* valueAxisLabel */, null, /* dataset. set below */ true /* legend */, false /* tooltips */, false /* urls */); // get the font to make a proper title. We need to convert the swt font, // into an awt font. Font f = parent.getFont(); FontData[] fData = f.getFontData(); // event though on Mac OS there could be more than one fontData, we'll only use // the first one. FontData firstFontData = fData[0]; java.awt.Font awtFont = SWTUtils.toAwtFont(parent.getDisplay(), firstFontData, true /* ensureSameSize */); mChart.setTitle(new TextTitle(title, awtFont)); final XYPlot xyPlot = mChart.getXYPlot(); xyPlot.setRangeCrosshairVisible(true); xyPlot.setRangeCrosshairLockedOnData(true); xyPlot.setDomainCrosshairVisible(true); xyPlot.setDomainCrosshairLockedOnData(true); mChart.addChangeListener(new ChartChangeListener() { @Override public void chartChanged(ChartChangeEvent event) { ChartChangeEventType type = event.getType(); if (type == ChartChangeEventType.GENERAL) { // because the value we need (rangeCrosshair and domainCrosshair) are // updated on the draw, but the notification happens before the draw, // we process the click in a future runnable! parent.getDisplay().asyncExec(new Runnable() { @Override public void run() { processClick(xyPlot); } }); } } }); mChartComposite = new ChartComposite(parent, SWT.BORDER, mChart, ChartComposite.DEFAULT_WIDTH, ChartComposite.DEFAULT_HEIGHT, ChartComposite.DEFAULT_MINIMUM_DRAW_WIDTH, ChartComposite.DEFAULT_MINIMUM_DRAW_HEIGHT, 3000, // max draw width. We don't want it to zoom, so we put a big number 3000, // max draw height. We don't want it to zoom, so we put a big number true, // off-screen buffer true, // properties true, // save true, // print true, // zoom true); // tooltips mChartComposite.addDisposeListener(new DisposeListener() { @Override public void widgetDisposed(DisposeEvent e) { mValueTypeDataSetMap.clear(); mDataSetCount = 0; mOccurrenceDataSet = null; mChart = null; mChartComposite = null; mValueDescriptorSeriesMap.clear(); mOcurrenceDescriptorSeriesMap.clear(); } }); return mChartComposite; }
/** * Registers an object for notification of changes to the chart. * * @param listener the listener (<code>null</code> not permitted). * * @see #removeChangeListener(ChartChangeListener) */ public void addChangeListener(ChartChangeListener listener) { if (listener == null) { throw new IllegalArgumentException("Null 'listener' argument."); } this.changeListeners.add(ChartChangeListener.class, listener); }
/** * Registers an object for notification of changes to the chart. * * @param listener the listener (<code>null</code> not permitted). * * @see #removeChangeListener(ChartChangeListener) */ public void addChangeListener(ChartChangeListener listener) { ParamChecks.nullNotPermitted(listener, "listener"); this.changeListeners.add(ChartChangeListener.class, listener); }
/** * Deregisters an object for notification of changes to the chart. * * @param listener the listener (<code>null</code> not permitted) * * @see #addChangeListener(ChartChangeListener) */ public void removeChangeListener(ChartChangeListener listener) { ParamChecks.nullNotPermitted(listener, "listener"); this.changeListeners.remove(ChartChangeListener.class, listener); }