Java tutorial
package org.eclipse.cdt.cpp.ui.internal.views; /* * Copyright (c) 2001, 2002 International Business Machines Corporation. All rights reserved. * This program and the accompanying materials are made available under the terms of * the Common Public License which accompanies this distribution. */ import org.eclipse.cdt.dstore.hosts.views.OutputViewer; import org.eclipse.cdt.cpp.ui.internal.*; import org.eclipse.cdt.cpp.ui.internal.actions.*; import org.eclipse.cdt.cpp.ui.internal.vcm.*; import org.eclipse.cdt.cpp.ui.internal.api.*; import org.eclipse.cdt.dstore.ui.*; import org.eclipse.cdt.dstore.ui.widgets.ObjectWindow; import org.eclipse.cdt.dstore.ui.widgets.*; import org.eclipse.cdt.dstore.ui.actions.CustomAction; import org.eclipse.cdt.dstore.core.client.*; import org.eclipse.cdt.dstore.core.model.*; import org.eclipse.cdt.dstore.extra.internal.extra.*; import org.eclipse.cdt.dstore.ui.resource.*; import org.eclipse.cdt.dstore.ui.views.*; //import org.eclipse.help.*; import org.eclipse.ui.help.ViewContextComputer; import org.eclipse.ui.help.WorkbenchHelp; import org.eclipse.ui.internal.*; import org.eclipse.core.resources.*; import org.eclipse.ui.views.navigator.*; import org.eclipse.jface.viewers.*; import org.eclipse.jface.action.*; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.swt.events.*; import org.eclipse.swt.widgets.*; import org.eclipse.swt.graphics.*; import java.util.*; import java.lang.reflect.*; import org.eclipse.ui.*; import org.eclipse.ui.part.*; import org.eclipse.core.runtime.*; import org.eclipse.jface.resource.*; public class ObjectsViewPart extends GenericViewPart implements ICppProjectListener { class LockViewAction extends Action { public LockViewAction(String label, ImageDescriptor image) { super(label, image); } public void run() { _viewer.toggleLock(); } } private DataStore _currentDataStore; protected ModelInterface _api; protected CppPlugin _plugin; protected LockViewAction _lockAction; private boolean _isLocked; protected DataElement _lastSelected = null; public ObjectsViewPart() { super(); _plugin = CppPlugin.getDefault(); _api = _plugin.getModelInterface(); _isLinked = true; _isLocked = false; } protected String getF1HelpId() { return "org.eclipse.cdt.cpp.ui.objects_view_context"; } public void updateViewForeground() { ArrayList colours = _plugin.readProperty("ViewForeground"); if (colours.size() == 3) { int r = new Integer((String) colours.get(0)).intValue(); int g = new Integer((String) colours.get(1)).intValue(); int b = new Integer((String) colours.get(2)).intValue(); _viewer.getViewer().setForeground(r, g, b); } } public void updateViewBackground() { ArrayList colours = _plugin.readProperty("ViewBackground"); if (colours.size() == 3) { int r = new Integer((String) colours.get(0)).intValue(); int g = new Integer((String) colours.get(1)).intValue(); int b = new Integer((String) colours.get(2)).intValue(); _viewer.getViewer().setBackground(r, g, b); } } public void updateViewFont() { ArrayList fontArray = _plugin.readProperty("ViewFont"); if (fontArray.size() > 0) { String fontStr = (String) fontArray.get(0); fontStr = fontStr.replace(',', '|'); FontData fontData = new FontData(fontStr); _viewer.getViewer().setFont(fontData); } } public ObjectWindow createViewer(Composite parent, IActionLoader loader) { DataStore dataStore = _plugin.getCurrentDataStore(); return new ObjectWindow(parent, ObjectWindow.TREE, dataStore, _plugin.getImageRegistry(), loader); } public IActionLoader getActionLoader() { IActionLoader loader = CppActionLoader.getInstance(); return loader; } public void createPartControl(Composite parent) { super.createPartControl(parent); _api.getDummyShell(); updateViewBackground(); updateViewForeground(); updateViewFont(); CppProjectNotifier notifier = _api.getProjectNotifier(); notifier.addProjectListener(this); initInput(null); // deprecated // WorkbenchHelp.setHelp(_viewer.getViewer().getControl(), new ViewContextComputer(this, getF1HelpId())); MenuManager menuMgr = _viewer.getMenuManager(); getSite().registerContextMenu(menuMgr, (StructuredViewer) _viewer.getViewer()); } public void initInput(DataStore dataStore) { _viewer.setInput((getSite().getPage().getInput())); } public void initDataElementInput(DataElement de) { } private void handleSelection(IStructuredSelection es) { if (es != null) { Object object = es.getFirstElement(); if (object != null) { boolean changed = false; boolean dataElement = false; DataStore dataStore = _plugin.getCurrentDataStore(); if (object instanceof IResource) { if (object instanceof ResourceElement) { ResourceElement theElement = (ResourceElement) object; dataStore = ((ResourceElement) object).getDataStore(); changed = _plugin.setCurrentProject(theElement); } else if (object instanceof Repository) { dataStore = ((Repository) object).getDataStore(); changed = _plugin.setCurrentProject((Repository) object); } else { changed = _plugin.setCurrentProject((IResource) object); } } else if (object instanceof DataElement) { DataElement theObject = (DataElement) object; DataElement theParent = _api.getProjectFor(theObject); if (theParent != null) { IProject project = _api.findProjectResource(theParent); if (project != null) { dataStore = theParent.getDataStore(); changed = _plugin.setCurrentProject(project); dataElement = true; } } } if (changed) { if (dataStore != null) { _plugin.setCurrentDataStore(dataStore); dataStore.getDomainNotifier().enable(true); } } initInput(dataStore); } } } public final void selectionChanged(IWorkbenchPart part, ISelection sel) { if (sel instanceof IStructuredSelection) { IStructuredSelection es = (IStructuredSelection) sel; if (part == this) { Object object = es.getFirstElement(); if (object instanceof DataElement) { DataElement element = (DataElement) object; if (_lastSelected == null || (element != _lastSelected && !_lastSelected.getType().equals(element.getType()))) { // hack to clear cache that maps elements to resources ObjectActionContributorManager manager = ObjectActionContributorManager.getManager(); manager.flushLookup(); } _lastSelected = element; } } } internalSelectionChanged(part, sel); } protected void internalSelectionChanged(IWorkbenchPart part, ISelection sel) { if (sel instanceof IStructuredSelection) { IStructuredSelection es = (IStructuredSelection) sel; if (((part instanceof ResourceNavigator) || (part instanceof CppProjectsViewPart)) && (part != this)) { if (part.getSite().getPage() == getSite().getPage()) { handleSelection(es); } } } } public void dispose() { IWorkbench aWorkbench = _plugin.getWorkbench(); IWorkbenchWindow win = aWorkbench.getActiveWorkbenchWindow(); win.getSelectionService().removeSelectionListener(this); CppProjectNotifier notifier = _api.getProjectNotifier(); notifier.removeProjectListener(this); if (_viewer != null) _viewer.dispose(); super.dispose(); } public void setFocus() { DataStore current = _plugin.getCurrentDataStore(); if (current != _currentDataStore) { _currentDataStore = current; initInput(_currentDataStore); } super.setFocus(); } public void projectChanged(CppProjectEvent event) { int type = event.getType(); IProject project = event.getProject(); switch (type) { case CppProjectEvent.OPEN: { initInput(_plugin.getCurrentDataStore()); } break; case CppProjectEvent.CLOSE: case CppProjectEvent.DELETE: { initInput(_plugin.getCurrentDataStore()); setFocus(); } break; case CppProjectEvent.COMMAND: { updateSelectionStatus(event); } break; case CppProjectEvent.VIEW_CHANGE: { updateViewBackground(); updateViewForeground(); updateViewFont(); } break; case CppProjectEvent.REFRESH: { initInput(_plugin.getCurrentDataStore()); } default: break; } } protected void updateSelectionStatus(CppProjectEvent event) { if (event.getType() == CppProjectEvent.COMMAND) { if (event.getStatus() == CppProjectEvent.DONE) { _viewer.enableSelection(true); } else if (event.getStatus() == CppProjectEvent.START) { _viewer.enableSelection(false); } } } public void fillLocalToolBar() { super.fillLocalToolBar(); if (!_isLocked) { IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager(); ImageDescriptor image = _plugin.getImageDescriptor("lock"); _lockAction = new LockViewAction("Lock View", image); _lockAction.setChecked(_viewer.isLocked()); toolBarManager.add(_lockAction); } } public void lock(boolean flag) { if (_viewer.isLocked() != flag) { _viewer.toggleLock(); if (flag == true) { if (_lockAction != null) { IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager(); toolBarManager.removeAll(); } _isLocked = flag; } } } }