Remove all existing @since annotations
[deliverable/tracecompass.git] / 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;
40
41 // ------------------------------------------------------------------------
42 // Constructors
43 // ------------------------------------------------------------------------
44 /**
45 * Default constructor
46 *
47 * @param tmfChartViewer
48 * The chart viewer reference.
49 */
50 public TmfMouseSelectionProvider(ITmfChartTimeProvider tmfChartViewer) {
51 super(tmfChartViewer);
52 register();
53 }
54
55 // ------------------------------------------------------------------------
56 // TmfBaseProvider
57 // ------------------------------------------------------------------------
58 @Override
59 public void register() {
60 getChart().getPlotArea().addMouseListener(this);
61 getChart().getPlotArea().addMouseMoveListener(this);
62 ((IPlotArea) getChart().getPlotArea()).addCustomPaintListener(this);
63 }
64
65 @Override
66 public void deregister() {
67 if ((getChartViewer().getControl() != null) && !getChartViewer().getControl().isDisposed()) {
68 getChart().getPlotArea().removeMouseListener(this);
69 getChart().getPlotArea().removeMouseMoveListener(this);
70 ((IPlotArea) getChart().getPlotArea()).removeCustomPaintListener(this);
71 }
72 }
73
74 // ------------------------------------------------------------------------
75 // MouseListener
76 // ------------------------------------------------------------------------
77 @Override
78 public void mouseDoubleClick(MouseEvent e) {
79 }
80
81 @Override
82 public void mouseDown(MouseEvent e) {
83 if ((getChartViewer().getWindowDuration() != 0) && (e.button == 1)) {
84 IAxis xAxis = getChart().getAxisSet().getXAxis(0);
85 fBeginTime = limitXDataCoordinate(xAxis.getDataCoordinate(e.x));
86 fEndTime = fBeginTime;
87 fIsInternalUpdate = true;
88 }
89 }
90
91 @Override
92 public void mouseUp(MouseEvent e) {
93 if (fIsInternalUpdate) {
94 if (fBeginTime > fEndTime) {
95 // Swap time
96 long tmp = fBeginTime;
97 fBeginTime = fEndTime;
98 fEndTime = tmp;
99 }
100 ITmfChartTimeProvider viewer = getChartViewer();
101 viewer.updateSelectionRange(fBeginTime + viewer.getTimeOffset(), fEndTime + viewer.getTimeOffset());
102 fIsInternalUpdate = false;
103 getChart().redraw();
104 }
105 }
106
107 // ------------------------------------------------------------------------
108 // MouseMoveListener
109 // ------------------------------------------------------------------------
110 @Override
111 public void mouseMove(MouseEvent e) {
112 if (fIsInternalUpdate) {
113 IAxis xAxis = getChart().getAxisSet().getXAxis(0);
114 fEndTime = limitXDataCoordinate(xAxis.getDataCoordinate(e.x));
115 getChart().redraw();
116 }
117 }
118
119 // ------------------------------------------------------------------------
120 // ICustomPaintListener
121 // ------------------------------------------------------------------------
122 @Override
123 public void paintControl(PaintEvent e) {
124 ITmfChartTimeProvider viewer = getChartViewer();
125
126 if (!fIsInternalUpdate) {
127 fBeginTime = viewer.getSelectionBeginTime() - viewer.getTimeOffset();
128 fEndTime = viewer.getSelectionEndTime() - viewer.getTimeOffset();
129 }
130 long windowStartTime = viewer.getWindowStartTime() - viewer.getTimeOffset();
131 long windowEndTime = viewer.getWindowEndTime() - viewer.getTimeOffset();
132
133 IAxis xAxis = getChart().getAxisSet().getXAxis(0);
134 e.gc.setBackground(TmfXYChartViewer.getDisplay().getSystemColor(SWT.COLOR_BLUE));
c85a741e
GB
135 e.gc.setForeground(TmfXYChartViewer.getDisplay().getSystemColor(SWT.COLOR_BLUE));
136 e.gc.setLineStyle(SWT.LINE_SOLID);
0b09e0cf
BH
137 if ((fBeginTime >= windowStartTime) && (fBeginTime <= windowEndTime)) {
138 int beginX = xAxis.getPixelCoordinate(fBeginTime);
139 e.gc.drawLine(beginX, 0, beginX, e.height);
140 }
141
142 if ((fEndTime >= windowStartTime) && (fEndTime <= windowEndTime) && (fBeginTime != fEndTime)) {
143 int endX = xAxis.getPixelCoordinate(fEndTime);
144 e.gc.drawLine(endX, 0, endX, e.height);
145 }
146 e.gc.setAlpha(150);
147 if (Math.abs(fEndTime - fBeginTime) > 1) {
148 e.gc.setBackground(TmfXYChartViewer.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
149 int beginX = xAxis.getPixelCoordinate(fBeginTime);
150 int endX = xAxis.getPixelCoordinate(fEndTime);
151 if (fEndTime > fBeginTime) {
152 e.gc.fillRectangle(beginX + 1, 0, endX - beginX - 1, e.height);
153 } else {
154 e.gc.fillRectangle(endX + 1, 0, beginX - endX - 1, e.height);
155 }
156 }
157 }
158
159 @Override
160 public boolean drawBehindSeries() {
161 return false;
162 }
163}
This page took 0.069993 seconds and 5 git commands to generate.