tmf.ui/timing: Update XY viewers even if there is no data
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / viewers / xycharts / TmfBaseProvider.java
1 /**********************************************************************
2 * Copyright (c) 2013, 2014 Ericsson
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 **********************************************************************/
12 package org.eclipse.tracecompass.tmf.ui.viewers.xycharts;
13
14 import org.swtchart.Chart;
15 import org.swtchart.IAxis;
16
17 /**
18 * Base class for any provider such as tool tip, zoom and selection providers.
19 *
20 * @author Bernd Hufmann
21 */
22 public abstract class TmfBaseProvider {
23
24 // ------------------------------------------------------------------------
25 // Attributes
26 // ------------------------------------------------------------------------
27 /** Reference to the chart viewer */
28 private final ITmfChartTimeProvider fChartViewer;
29
30 // ------------------------------------------------------------------------
31 // Constructors
32 // ------------------------------------------------------------------------
33
34 /**
35 * Standard constructor.
36 *
37 * @param tmfChartViewer
38 * The parent histogram object
39 */
40 public TmfBaseProvider(ITmfChartTimeProvider tmfChartViewer) {
41 fChartViewer = tmfChartViewer;
42 }
43
44 // ------------------------------------------------------------------------
45 // Accessors
46 // ------------------------------------------------------------------------
47 /**
48 * Returns the chart viewer reference.
49 * @return the chart viewer reference
50 */
51 public ITmfChartTimeProvider getChartViewer() {
52 return fChartViewer;
53 }
54
55 /**
56 * Returns the SWT chart reference
57 *
58 * @return SWT chart reference.
59 */
60 protected Chart getChart() {
61 return (Chart) fChartViewer.getControl();
62 }
63
64 /**
65 * Limits x data coordinate to window start and window end range
66 *
67 * @param x
68 * x to limit
69 * @return x if x >= begin && x <= end
70 * begin if x < begin
71 * end if x > end
72 */
73 protected long limitXDataCoordinate(double x) {
74 ITmfChartTimeProvider viewer = getChartViewer();
75 long windowStartTime = viewer.getWindowStartTime() - viewer.getTimeOffset();
76 long windowEndTime = viewer.getWindowEndTime() - viewer.getTimeOffset();
77
78 if (x < windowStartTime) {
79 return windowStartTime;
80 }
81
82 if (x > windowEndTime) {
83 return windowEndTime;
84 }
85
86 return (long) x;
87 }
88
89 /**
90 * Limits x pixel coordinate to window start and window end range
91 *
92 * @param axisIndex
93 * index of x-axis
94 * @param x
95 * x to limit
96 * @return x if x >= begin && x <= end
97 * begin if x < begin
98 * end if x > end
99 */
100 protected int limitXPixelCoordinate(int axisIndex, int x) {
101 ITmfChartTimeProvider viewer = getChartViewer();
102 long windowStartTime = viewer.getWindowStartTime() - viewer.getTimeOffset();
103 long windowEndTime = viewer.getWindowEndTime() - viewer.getTimeOffset();
104
105 IAxis xAxis = getChart().getAxisSet().getXAxis(0);
106 int startX = xAxis.getPixelCoordinate(windowStartTime);
107 if (x < startX) {
108 return startX;
109 }
110
111 int endX = xAxis.getPixelCoordinate(windowEndTime);
112 if (x > endX) {
113 return endX;
114 }
115
116 return x;
117 }
118
119 // ------------------------------------------------------------------------
120 // Operations
121 // ------------------------------------------------------------------------
122 /**
123 * Method deregisters provider from chart viewer. Subclasses may override this method
124 * to dispose any resources.
125 */
126 public void dispose() {
127 deregister();
128 }
129
130 /**
131 * Method to refresh the viewer. It will redraw the viewer.
132 */
133 public void refresh() {
134 if (!TmfXYChartViewer.getDisplay().isDisposed()) {
135 TmfXYChartViewer.getDisplay().asyncExec(new Runnable() {
136 @Override
137 public void run() {
138 if (!getChart().isDisposed()) {
139 getChart().redraw();
140 }
141 }
142 });
143 }
144 }
145
146 /**
147 * Method to register the provider to chart viewer.
148 */
149 protected abstract void register();
150
151 /**
152 * Method to deregister the provider from chart viewer.
153 */
154 protected abstract void deregister();
155
156 }
This page took 0.036907 seconds and 5 git commands to generate.