Remove unneeded checkNotNull() calls
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / viewers / xycharts / TmfMouseSelectionProvider.java
CommitLineData
0b09e0cf 1/**********************************************************************
60ae41e1 2 * Copyright (c) 2013, 2014 Ericsson
0b09e0cf
BH
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Bernd Hufmann - Initial API and implementation
11 **********************************************************************/
2bdf0193 12package org.eclipse.tracecompass.tmf.ui.viewers.xycharts;
0b09e0cf
BH
13
14import org.eclipse.swt.SWT;
15import org.eclipse.swt.events.MouseEvent;
16import org.eclipse.swt.events.MouseListener;
17import org.eclipse.swt.events.MouseMoveListener;
18import org.eclipse.swt.events.PaintEvent;
19import org.swtchart.IAxis;
20import org.swtchart.ICustomPaintListener;
21import org.swtchart.IPlotArea;
22
23/**
24 * Class for providing selection of ranges with the left mouse button.
25 * It also notifies the viewer about a change of selection.
26 *
27 * @author Bernd Hufmann
0b09e0cf
BH
28 */
29public class TmfMouseSelectionProvider extends TmfBaseProvider implements MouseListener, MouseMoveListener, ICustomPaintListener {
30
31 // ------------------------------------------------------------------------
32 // Attributes
33 // ------------------------------------------------------------------------
34 /** Cached start time */
35 private long fBeginTime;
36 /** Cached end time */
37 private long fEndTime;
38 /** Flag indicating that an update is ongoing */
39 private boolean fIsInternalUpdate;
3022330f
BH
40 /** Flag indicating that the begin marker is dragged */
41 private boolean fDragBeginMarker;
0b09e0cf
BH
42
43 // ------------------------------------------------------------------------
44 // Constructors
45 // ------------------------------------------------------------------------
46 /**
47 * Default constructor
48 *
49 * @param tmfChartViewer
50 * The chart viewer reference.
51 */
52 public TmfMouseSelectionProvider(ITmfChartTimeProvider tmfChartViewer) {
53 super(tmfChartViewer);
54 register();
55 }
56
57 // ------------------------------------------------------------------------
58 // TmfBaseProvider
59 // ------------------------------------------------------------------------
60 @Override
61 public void register() {
62 getChart().getPlotArea().addMouseListener(this);
63 getChart().getPlotArea().addMouseMoveListener(this);
64 ((IPlotArea) getChart().getPlotArea()).addCustomPaintListener(this);
65 }
66
67 @Override
68 public void deregister() {
69 if ((getChartViewer().getControl() != null) && !getChartViewer().getControl().isDisposed()) {
70 getChart().getPlotArea().removeMouseListener(this);
71 getChart().getPlotArea().removeMouseMoveListener(this);
72 ((IPlotArea) getChart().getPlotArea()).removeCustomPaintListener(this);
73 }
74 }
75
76 // ------------------------------------------------------------------------
77 // MouseListener
78 // ------------------------------------------------------------------------
79 @Override
80 public void mouseDoubleClick(MouseEvent e) {
81 }
82
83 @Override
84 public void mouseDown(MouseEvent e) {
85 if ((getChartViewer().getWindowDuration() != 0) && (e.button == 1)) {
3022330f
BH
86 fDragBeginMarker = false;
87 if (((e.stateMask & SWT.SHIFT) != SWT.SHIFT) || (fEndTime == fBeginTime)) {
88 IAxis xAxis = getChart().getAxisSet().getXAxis(0);
89 fBeginTime = limitXDataCoordinate(xAxis.getDataCoordinate(e.x));
90 fEndTime = fBeginTime;
91 } else {
92 long selectionBegin = fBeginTime;
93 long selectionEnd = fEndTime;
94 IAxis xAxis = getChart().getAxisSet().getXAxis(0);
95 long time = limitXDataCoordinate(xAxis.getDataCoordinate(e.x));
96 if (Math.abs(time - selectionBegin) < Math.abs(time - selectionEnd)) {
97 fDragBeginMarker = true;
98 fBeginTime = time;
99 fEndTime = selectionEnd;
100 } else {
101 fBeginTime = selectionBegin;
102 fEndTime = time;
103 }
104 }
0b09e0cf
BH
105 fIsInternalUpdate = true;
106 }
107 }
108
109 @Override
110 public void mouseUp(MouseEvent e) {
111 if (fIsInternalUpdate) {
112 if (fBeginTime > fEndTime) {
113 // Swap time
114 long tmp = fBeginTime;
115 fBeginTime = fEndTime;
116 fEndTime = tmp;
117 }
118 ITmfChartTimeProvider viewer = getChartViewer();
119 viewer.updateSelectionRange(fBeginTime + viewer.getTimeOffset(), fEndTime + viewer.getTimeOffset());
120 fIsInternalUpdate = false;
121 getChart().redraw();
122 }
123 }
124
125 // ------------------------------------------------------------------------
126 // MouseMoveListener
127 // ------------------------------------------------------------------------
128 @Override
129 public void mouseMove(MouseEvent e) {
130 if (fIsInternalUpdate) {
131 IAxis xAxis = getChart().getAxisSet().getXAxis(0);
3022330f
BH
132 if (fDragBeginMarker) {
133 fBeginTime = limitXDataCoordinate(xAxis.getDataCoordinate(e.x));
134 } else {
135 fEndTime = limitXDataCoordinate(xAxis.getDataCoordinate(e.x));
136 }
0b09e0cf
BH
137 getChart().redraw();
138 }
139 }
140
141 // ------------------------------------------------------------------------
142 // ICustomPaintListener
143 // ------------------------------------------------------------------------
144 @Override
145 public void paintControl(PaintEvent e) {
146 ITmfChartTimeProvider viewer = getChartViewer();
147
148 if (!fIsInternalUpdate) {
149 fBeginTime = viewer.getSelectionBeginTime() - viewer.getTimeOffset();
150 fEndTime = viewer.getSelectionEndTime() - viewer.getTimeOffset();
151 }
152 long windowStartTime = viewer.getWindowStartTime() - viewer.getTimeOffset();
153 long windowEndTime = viewer.getWindowEndTime() - viewer.getTimeOffset();
154
155 IAxis xAxis = getChart().getAxisSet().getXAxis(0);
156 e.gc.setBackground(TmfXYChartViewer.getDisplay().getSystemColor(SWT.COLOR_BLUE));
c85a741e
GB
157 e.gc.setForeground(TmfXYChartViewer.getDisplay().getSystemColor(SWT.COLOR_BLUE));
158 e.gc.setLineStyle(SWT.LINE_SOLID);
0b09e0cf
BH
159 if ((fBeginTime >= windowStartTime) && (fBeginTime <= windowEndTime)) {
160 int beginX = xAxis.getPixelCoordinate(fBeginTime);
161 e.gc.drawLine(beginX, 0, beginX, e.height);
162 }
163
164 if ((fEndTime >= windowStartTime) && (fEndTime <= windowEndTime) && (fBeginTime != fEndTime)) {
165 int endX = xAxis.getPixelCoordinate(fEndTime);
166 e.gc.drawLine(endX, 0, endX, e.height);
167 }
168 e.gc.setAlpha(150);
169 if (Math.abs(fEndTime - fBeginTime) > 1) {
170 e.gc.setBackground(TmfXYChartViewer.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
171 int beginX = xAxis.getPixelCoordinate(fBeginTime);
172 int endX = xAxis.getPixelCoordinate(fEndTime);
173 if (fEndTime > fBeginTime) {
174 e.gc.fillRectangle(beginX + 1, 0, endX - beginX - 1, e.height);
175 } else {
176 e.gc.fillRectangle(endX + 1, 0, beginX - endX - 1, e.height);
177 }
178 }
179 }
180
181 @Override
182 public boolean drawBehindSeries() {
183 return false;
184 }
185}
This page took 0.087023 seconds and 5 git commands to generate.