Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 3877947fe0beb77a3f3d00d457db989493328fbe (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
/*******************************************************************************
 * Copyright (c) 2012 Tilera Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     William R. Swanson (Tilera Corporation)
 *******************************************************************************/

package org.eclipse.cdt.visualizer.ui;

import org.eclipse.cdt.visualizer.ui.util.SelectionManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

// ---------------------------------------------------------------------------
// Visualizer
// ---------------------------------------------------------------------------

/**
 * Base class for IVisualizer implementations.
 */
abstract public class Visualizer implements IVisualizer, ISelectionProvider, ISelectionChangedListener {
	// --- members ---

	/** Visualizer's non-localized name. */
	protected String m_name;

	/** Visualizer's localized, displayable name. */
	protected String m_displayName;

	/** Visualizer's localized, displayable description. */
	protected String m_description;

	/** The parent view control. */
	protected IVisualizerViewer m_viewer;

	/** The visualizer control. */
	protected Control m_control;

	/** Externally visible selection manager. */
	protected SelectionManager m_selectionManager;

	// --- constructors/destructors ---

	/** Constructor. */
	public Visualizer() {
		// TODO: internationalize these strings.
		this("visualizer", "Visualizer", "Displays graphic representation of selection.");
	}

	/** Constructor. */
	public Visualizer(String name, String displayName, String description) {
		setName(name);
		setDisplayName(displayName);
		setDescription(description);
		m_selectionManager = new SelectionManager(this, "Visualizer selection manager");
	}

	/** Dispose method. */
	public void dispose() {
		m_name = null;
		m_displayName = null;
		m_description = null;
		disposeControl();
		m_viewer = null;
		if (m_selectionManager != null) {
			m_selectionManager.dispose();
			m_selectionManager = null;
		}
	}

	// --- init methods ---

	/** Invoked when visualizer is created, to permit any initialization.
	 *  Intended to be overridden. Default implementation does nothing.
	 */
	@Override
	public void initializeVisualizer() {
	}

	/** Invoked when visualizer is disposed, to permit any cleanup.
	 *  Intended to be overridden. Default implementation calls dispose().
	 */
	@Override
	public void disposeVisualizer() {
		dispose();
	}

	// --- accessors ---

	/** Sets non-localized name. */
	@Override
	public void setName(String name) {
		m_name = name;
	}

	/** Gets non-localized name. */
	@Override
	public String getName() {
		return m_name;
	}

	/** Sets localized display name. */
	@Override
	public void setDisplayName(String displayName) {
		m_displayName = displayName;
	}

	/** Gets localized display name. */
	@Override
	public String getDisplayName() {
		return m_displayName;
	}

	/** Sets localized description string. */
	@Override
	public void setDescription(String description) {
		m_description = description;
	}

	/** Gets localized description string. */
	@Override
	public String getDescription() {
		return m_description;
	}

	// --- viewer management ---

	/** Sets viewer we're associated with. */
	@Override
	public void setViewer(IVisualizerViewer viewer) {
		m_viewer = viewer;
	}

	/** Gets viewer we're associated with. */
	@Override
	public IVisualizerViewer getViewer() {
		return m_viewer;
	}

	// --- visualizer selection management ---

	/** Invoked when visualizer has been selected. */
	@Override
	public void visualizerSelected() {
	}

	/** Invoked when another visualizer has been selected, hiding this one. */
	@Override
	public void visualizerDeselected() {
	}

	// --- control management ---

	/** Creates and returns visualizer's UI control on specified parent control. */
	@Override
	abstract public Control createControl(Composite parent);

	/** Invoked when visualizer control should be disposed. */
	abstract public void disposeControl();

	/**
	 * Sets visualizer control.
	 * Intended to be called from createControl();
	 */
	protected void setControl(Control control) {
		m_control = control;
	}

	/** Gets visualizer control.
	 *  Returns null if createControl() has not yet been called.
	 */
	@Override
	public Control getControl() {
		return m_control;
	}

	// --- menu/toolbar management ---

	/** Invoked by VisualizerViewer when toolbar needs to be populated. */
	@Override
	public void populateToolBar(IToolBarManager toolBarManager) {
	}

	/** Invoked by VisualizerViewer when toolbar menu needs to be populated. */
	@Override
	public void populateMenu(IMenuManager menuManager) {
	}

	// --- context menu handling ---

	/** Invoked by VisualizerViewer when context menu needs to be populated. */
	@Override
	public void populateContextMenu(IMenuManager menuManager) {
	}

	// --- workbench selection management ---

	/**
	 * Tests whether if the IVisualizer can display the selection
	 * (or something reachable from it).
	 */
	@Override
	public int handlesSelection(ISelection selection) {
		// Default implementation doesn't know how to display anything.
		return 0;
	}

	/**
	 * Invoked by VisualizerViewer when workbench selection changes.
	 */
	@Override
	public void workbenchSelectionChanged(ISelection selection) {
		// Default implementation does nothing.
	}

	// --- ISelectionProvider implementation ---

	// Delegate to selection manager.

	/** Adds external listener for selection change events. */
	@Override
	public void addSelectionChangedListener(ISelectionChangedListener listener) {
		m_selectionManager.addSelectionChangedListener(listener);
	}

	/** Removes external listener for selection change events. */
	@Override
	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
		m_selectionManager.removeSelectionChangedListener(listener);
	}

	/** Raises selection changed event. */
	public void raiseSelectionChangedEvent() {
		m_selectionManager.raiseSelectionChangedEvent();
	}

	/** Gets current externally-visible selection. */
	@Override
	public ISelection getSelection() {
		return m_selectionManager.getSelection();
	}

	/** Sets externally-visible selection. */
	@Override
	public void setSelection(ISelection selection) {
		m_selectionManager.setSelection(selection);
	}

	/** Sets externally-visible selection. */
	public void setSelection(ISelection selection, boolean raiseEvent) {
		m_selectionManager.setSelection(selection, raiseEvent);
	}

	/** Returns true if we currently have a non-empty selection. */
	public boolean hasSelection() {
		return m_selectionManager.hasSelection();
	}

	// --- ISelectionChangedListener implementation ---

	/**
	 * Intended to be invoked when visualizer control's selection changes.
	 * Sets control selection as its own selection,
	 * and raises selection changed event for any listeners.
	 */
	@Override
	public void selectionChanged(SelectionChangedEvent event) {
		setSelection(event.getSelection());
	}
}

Back to the top