Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/Editor.java1060
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorEventListener.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorInput.java388
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/controls/ButtonPanelControl.java398
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractCustomFormToolkitEditorPage.java682
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractEditorPage.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/TreeViewerExplorerEditorPage.java1014
7 files changed, 1773 insertions, 1773 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/Editor.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/Editor.java
index d86ab77cd..1c7922127 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/Editor.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/Editor.java
@@ -1,530 +1,530 @@
-/*******************************************************************************
- * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tcf.te.ui.views.editor;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.tcf.te.ui.views.editor.pages.AbstractEditorPage;
-import org.eclipse.tcf.te.ui.views.extensions.EditorPageBinding;
-import org.eclipse.tcf.te.ui.views.extensions.EditorPageBindingExtensionPointManager;
-import org.eclipse.tcf.te.ui.views.extensions.EditorPageExtensionPointManager;
-import org.eclipse.tcf.te.ui.views.interfaces.IEditorPage;
-import org.eclipse.tcf.te.ui.views.interfaces.IEditorSaveAsAdapter;
-import org.eclipse.tcf.te.ui.views.interfaces.IUIConstants;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.IPersistable;
-import org.eclipse.ui.IPersistableEditor;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.XMLMemento;
-import org.eclipse.ui.forms.editor.FormEditor;
-import org.eclipse.ui.forms.editor.IFormPage;
-import org.eclipse.ui.internal.part.NullEditorInput;
-import org.eclipse.ui.views.properties.IPropertySheetPage;
-import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
-
-
-/**
- * Editor implementation.
- */
-@SuppressWarnings("restriction")
-public final class Editor extends FormEditor implements IPersistableEditor, ITabbedPropertySheetPageContributor {
-
- // The reference to an memento to restore once the editor got activated
- private IMemento mementoToRestore;
-
- // The editor event listener instance
- private EditorEventListener listener;
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
- */
- @Override
- protected void addPages() {
- // Read extension point and add the contributed pages.
- IEditorInput input = getEditorInput();
- // Get all applicable editor page bindings
- EditorPageBinding[] bindings = EditorPageBindingExtensionPointManager.getInstance().getApplicableEditorPageBindings(input);
- for (EditorPageBinding binding : bindings) {
- processPageBinding(binding);
- }
-
- if (mementoToRestore != null) {
- // Loop over all registered pages and pass on the editor specific memento
- // to the pages which implements IPersistableEditor as well
- for (Object page : pages) {
- if (page instanceof IPersistableEditor) {
- ((IPersistableEditor)page).restoreState(mementoToRestore);
- }
- }
- mementoToRestore = null;
- }
- }
-
- /**
- * Override this method to delegate the setFocus to
- * the active form page.
- */
- @Override
- public void setFocus() {
- IFormPage fpage = getActivePageInstance();
- if(fpage != null) {
- fpage.setFocus();
- }
- else {
- super.setFocus();
- }
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.ui.forms.editor.FormEditor#getActivePageInstance()
- */
- @Override
- public IFormPage getActivePageInstance() {
- int index = getActivePage();
- if (index != -1) {
- return getPage(index);
- }
- return super.getActivePageInstance();
- }
-
- /**
- * Returns the page which has the specified index.
- *
- * @param index The page's index.
- * @return The page object or null if it does not exists.
- */
- private IFormPage getPage(int index) {
- for (int i = 0; i < pages.size(); i++) {
- Object page = pages.get(i);
- if (page instanceof IFormPage) {
- IFormPage fpage = (IFormPage) page;
- if (fpage.getIndex() == index) {
- return fpage;
- }
- }
- }
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.editor.FormEditor#setActivePage(int)
- */
- @Override
- public void setActivePage(int pageIndex) {
- if (getPage(pageIndex) != null) {
- super.setActivePage(pageIndex);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.MultiPageEditorPart#getEditor(int)
- */
- @Override
- protected IEditorPart getEditor(int pageIndex) {
- return getPage(pageIndex) != null ? super.getEditor(pageIndex) : null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.editor.FormEditor#createPageContainer(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected Composite createPageContainer(Composite parent) {
- // Create page container is the first method called by the final
- // MultiPageEditorPart#createPartControl. Use it as hook to close
- // editors with a NullEditorInput.
- if (getEditorInput() instanceof NullEditorInput) {
-// DisplayUtil.safeAsyncExec(new Runnable() {
-// @Override
-// public void run() {
-// close(false);
-// }
-// });
- close(false);
- }
-
- return super.createPageContainer(parent);
- }
-
- /**
- * Update the editor page list. Pages which are not longer valid
- * will be removed and pages now being valid gets added.
- */
- public void updatePageList() {
- // Remember the currently active page
- String activePageId = getActivePageInstance() != null ? getActivePageInstance().getId() : null;
- String activePageTitle = getActivePageInstance() != null ? getActivePageInstance().getTitle() : null;
- // Get the editor input object
- IEditorInput input = getEditorInput();
- // Get all applicable editor page bindings
- List<EditorPageBinding> bindings = new ArrayList<EditorPageBinding>(Arrays.asList(EditorPageBindingExtensionPointManager.getInstance().getApplicableEditorPageBindings(input)));
- // Get a copy of the currently added pages
- List<Object> oldPages = pages != null ? new ArrayList<Object>(Arrays.asList(pages.toArray())) : new ArrayList<Object>();
- // Loop through the old pages and determine if the page is still applicable
- Iterator<Object> iterator = oldPages.iterator();
- while (iterator.hasNext()) {
- Object element = iterator.next();
- // Skip over pages not being a form page.
- if (!(element instanceof IFormPage)) {
- continue;
- }
- IFormPage page = (IFormPage)element;
- // Find the corresponding page binding
- EditorPageBinding binding = null;
- for (EditorPageBinding candidate : bindings) {
- if (candidate.getPageId().equals(page.getId())) {
- binding = candidate;
- break;
- }
- }
- if (binding != null) {
- // Found binding -> page is still applicable
- bindings.remove(binding);
- } else {
- // No binding found -> page is not longer applicable
- removePage(pages.indexOf(page));
- }
- }
- // If the are remaining bindings left, this are new pages.
- // --> Process them now
- for (EditorPageBinding binding : bindings) {
- processPageBinding(binding);
- }
- // If possible, restore the active page
- if (activePageId != null) {
- int index = getIndexOf(activePageId);
- if (index == -1 && activePageTitle != null) {
- index = getIndexOfByTitle(activePageTitle);
- }
- if (index != -1) setActivePage(index);
- }
- }
-
- /**
- * Process the given editor page binding.
- *
- * @param binding The editor page binding. Must not be <code>null</code>.
- */
- protected void processPageBinding(EditorPageBinding binding) {
- Assert.isNotNull(binding);
-
- String pageId = binding.getPageId();
- if (pageId != null) {
- // Get the corresponding editor page instance
- IEditorPage page = EditorPageExtensionPointManager.getInstance().getEditorPage(pageId, true);
- if (page != null) {
- try {
- // Associate this editor with the page instance.
- // This is typically done in the constructor, but we are
- // utilizing a default constructor to instantiate the page.
- page.initialize(this);
-
- // Read in the "insertBefore" and "insertAfter" properties of the binding
- String insertBefore = binding.getInsertBefore().trim();
- String insertAfter = binding.getInsertAfter().trim();
-
- boolean pageAdded = false;
-
- // insertBefore will be processed before insertAfter.
- if (!"".equals(insertBefore)) { //$NON-NLS-1$
- String[] pageIds = insertBefore.split(","); //$NON-NLS-1$
- for (String insertBeforePageId : pageIds) {
- // If it is "first", we insert the page at index 0
- if ("first".equalsIgnoreCase(insertBeforePageId)) { //$NON-NLS-1$
- if (getIndexOf(page.getId()) == -1) {
- addPage(0, page);
- }
- pageAdded = true;
- break;
- }
-
- // Find the index of the page we shall insert this page before
- int index = getIndexOf(insertBeforePageId);
- if (index != -1) {
- if (getIndexOf(page.getId()) == -1) {
- addPage(index, page);
- }
- pageAdded = true;
- break;
- }
- }
- }
-
- // If the page hasn't been added till now, process insertAfter
- if (!pageAdded && !"".equals(insertAfter)) { //$NON-NLS-1$
- String[] pageIds = insertAfter.split(","); //$NON-NLS-1$
- for (String insertAfterPageId : pageIds) {
- // If it is "last", we insert the page at the end
- if ("last".equalsIgnoreCase(insertAfterPageId)) { //$NON-NLS-1$
- if (getIndexOf(page.getId()) == -1) {
- addPage(page);
- }
- pageAdded = true;
- break;
- }
-
- // Find the index of the page we shall insert this page after
- int index = getIndexOf(insertAfterPageId);
- if (index != -1 && index + 1 < pages.size()) {
- if (getIndexOf(page.getId()) == -1) {
- addPage(index + 1, page);
- }
- pageAdded = true;
- break;
- }
- }
- }
-
- // Add the page to the end if not added otherwise
- if (!pageAdded && getIndexOf(page.getId()) == -1) {
- addPage(page);
- }
-
- } catch (PartInitException e) { /* ignored on purpose */ }
- }
- }
- }
-
- /**
- * Returns the index of the page with the given id.
- *
- * @param pageId The page id. Must not be <code>null</code>.
- * @return The page index or <code>-1</code> if not found.
- */
- private int getIndexOf(String pageId) {
- Assert.isNotNull(pageId);
- for (int i = 0; i < pages.size(); i++) {
- Object page = pages.get(i);
- if (page instanceof IFormPage) {
- IFormPage fpage = (IFormPage)page;
- if (fpage.getId().equals(pageId)) {
- return i;
- }
- }
- }
- return -1;
- }
-
- /**
- * Returns the index of the page with the given title.
- *
- * @param pageTitle The page title. Must not be <code>null</code>.
- * @return The page index or <code>-1</code> if not found.
- */
- private int getIndexOfByTitle(String pageTitle) {
- Assert.isNotNull(pageTitle);
- for (int i = 0; i < pages.size(); i++) {
- Object page = pages.get(i);
- if (page instanceof IFormPage) {
- IFormPage fpage = (IFormPage)page;
- if (fpage.getTitle().equals(pageTitle)) {
- return i;
- }
- }
- }
- return -1;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.editor.FormPage#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
- */
- @Override
- public void init(IEditorSite site, IEditorInput input) throws PartInitException {
- super.init(site, input);
-
- // Update the part name
- if (!"".equals(input.getName())) { //$NON-NLS-1$
- setPartName(input.getName());
- }
-
- // Dispose an existing event listener instance
- if (listener != null) { listener.dispose(); listener = null; }
- // Create the event listener. The event listener does register itself.
- listener = new EditorEventListener(this);
- }
-
- /**
- * Update the editor part name based on the current editor input.
- */
- public void updatePartName() {
- IEditorInput input = getEditorInput();
- String oldPartName = getPartName();
-
- if (input instanceof EditorInput) {
- // Reset the editor input name to trigger recalculation
- ((EditorInput)input).name = null;
- // If the name changed, apply the new name
- if (!oldPartName.equals(input.getName())) {
- setPartName(input.getName());
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.editor.FormEditor#dispose()
- */
- @Override
- public void dispose() {
- // Dispose an existing event listener instance
- if (listener != null) { listener.dispose(); listener = null; }
-
- super.dispose();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
- */
- @Override
- public void doSave(IProgressMonitor monitor) {
- // The pages may require some save pre processing
- for (Object page : pages) {
- if (page instanceof AbstractEditorPage) {
- ((AbstractEditorPage)page).preDoSave(monitor);
- }
- }
- // Commit the page changes
- commitPages(true);
- // The pages may require some save post processing
- for (Object page : pages) {
- if (page instanceof AbstractEditorPage) {
- ((AbstractEditorPage)page).postDoSave(monitor);
- }
- }
- editorDirtyStateChanged();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.EditorPart#doSaveAs()
- */
- @Override
- public void doSaveAs() {
- IEditorSaveAsAdapter adapter = getEditorInput() != null ? (IEditorSaveAsAdapter)Platform.getAdapterManager().getAdapter(getEditorInput(), IEditorSaveAsAdapter.class) : null;
- if (adapter != null) {
- Object newNode = adapter.doSaveAs(getEditorInput());
- if (newNode != null) {
- setInput(new EditorInput(newNode));
- updatePartName();
- updatePageList();
- for (Object page : pages) {
- if (page instanceof AbstractEditorPage) {
- ((AbstractEditorPage) page).init(getEditorSite(), getEditorInput());
- }
- }
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
- */
- @Override
- public boolean isSaveAsAllowed() {
- IEditorSaveAsAdapter adapter = getEditorInput() != null ? (IEditorSaveAsAdapter)Platform.getAdapterManager().getAdapter(getEditorInput(), IEditorSaveAsAdapter.class) : null;
- if (adapter != null) {
- return adapter.isSaveAsAllowed(getEditorInput());
- }
- return false;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPersistableEditor#restoreState(org.eclipse.ui.IMemento)
- */
- @Override
- public void restoreState(IMemento memento) {
- // Get the editor specific memento
- mementoToRestore = internalGetMemento(memento);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)
- */
- @Override
- public void saveState(IMemento memento) {
- // Get the editor specific memento
- memento = internalGetMemento(memento);
- // Loop over all registered pages and pass on the editor specific memento
- // to the pages which implements IPersistable as well
- for (Object page : pages) {
- if (page instanceof IPersistable) {
- ((IPersistable)page).saveState(memento);
- }
- }
- }
-
- /**
- * Internal helper method accessing our editor local child memento
- * from the given parent memento.
- */
- private IMemento internalGetMemento(IMemento memento) {
- // Assume the editor memento to be the same as the parent memento
- IMemento editorMemento = memento;
-
- // If the parent memento is not null, create a child within the parent
- if (memento != null) {
- editorMemento = memento.getChild(Editor.class.getName());
- if (editorMemento == null) {
- editorMemento = memento.createChild(Editor.class.getName());
- }
- } else {
- // The parent memento is null. Create a new internal instance
- // of a XMLMemento. This case is happening if the user switches
- // to another perspective an the view becomes visible by this switch.
- editorMemento = XMLMemento.createWriteRoot(Editor.class.getName());
- }
-
- return editorMemento;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.MultiPageEditorPart#getAdapter(java.lang.Class)
- */
- @Override
- public Object getAdapter(Class adapter) {
- if (adapter == IPropertySheetPage.class) {
- return new TabbedPropertySheetPage(this);
- }
- // We pass on the adapt request to the currently active page
- Object adapterInstance = getActivePageInstance() != null ? getActivePageInstance().getAdapter(adapter) : null;
- if (adapterInstance == null) {
- // If failed to adapt via the currently active page, pass on to the super implementation
- adapterInstance = super.getAdapter(adapter);
- }
- return adapterInstance;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor#getContributorId()
- */
- @Override
- public String getContributorId() {
- return IUIConstants.TABBED_PROPERTIES_CONTRIBUTOR_ID;
- }
-
- /**
- * Fires a property changed event.
- *
- * @param propertyId the id of the property that changed
- */
- @Override
- public final void firePropertyChange(final int propertyId) {
- super.firePropertyChange(propertyId);
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2011, 2013 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.ui.views.editor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tcf.te.ui.views.editor.pages.AbstractEditorPage;
+import org.eclipse.tcf.te.ui.views.extensions.EditorPageBinding;
+import org.eclipse.tcf.te.ui.views.extensions.EditorPageBindingExtensionPointManager;
+import org.eclipse.tcf.te.ui.views.extensions.EditorPageExtensionPointManager;
+import org.eclipse.tcf.te.ui.views.interfaces.IEditorPage;
+import org.eclipse.tcf.te.ui.views.interfaces.IEditorSaveAsAdapter;
+import org.eclipse.tcf.te.ui.views.interfaces.IUIConstants;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPersistable;
+import org.eclipse.ui.IPersistableEditor;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.XMLMemento;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.IFormPage;
+import org.eclipse.ui.internal.part.NullEditorInput;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+
+
+/**
+ * Editor implementation.
+ */
+@SuppressWarnings("restriction")
+public final class Editor extends FormEditor implements IPersistableEditor, ITabbedPropertySheetPageContributor {
+
+ // The reference to an memento to restore once the editor got activated
+ private IMemento mementoToRestore;
+
+ // The editor event listener instance
+ private EditorEventListener listener;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
+ */
+ @Override
+ protected void addPages() {
+ // Read extension point and add the contributed pages.
+ IEditorInput input = getEditorInput();
+ // Get all applicable editor page bindings
+ EditorPageBinding[] bindings = EditorPageBindingExtensionPointManager.getInstance().getApplicableEditorPageBindings(input);
+ for (EditorPageBinding binding : bindings) {
+ processPageBinding(binding);
+ }
+
+ if (mementoToRestore != null) {
+ // Loop over all registered pages and pass on the editor specific memento
+ // to the pages which implements IPersistableEditor as well
+ for (Object page : pages) {
+ if (page instanceof IPersistableEditor) {
+ ((IPersistableEditor)page).restoreState(mementoToRestore);
+ }
+ }
+ mementoToRestore = null;
+ }
+ }
+
+ /**
+ * Override this method to delegate the setFocus to
+ * the active form page.
+ */
+ @Override
+ public void setFocus() {
+ IFormPage fpage = getActivePageInstance();
+ if(fpage != null) {
+ fpage.setFocus();
+ }
+ else {
+ super.setFocus();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormEditor#getActivePageInstance()
+ */
+ @Override
+ public IFormPage getActivePageInstance() {
+ int index = getActivePage();
+ if (index != -1) {
+ return getPage(index);
+ }
+ return super.getActivePageInstance();
+ }
+
+ /**
+ * Returns the page which has the specified index.
+ *
+ * @param index The page's index.
+ * @return The page object or null if it does not exists.
+ */
+ private IFormPage getPage(int index) {
+ for (int i = 0; i < pages.size(); i++) {
+ Object page = pages.get(i);
+ if (page instanceof IFormPage) {
+ IFormPage fpage = (IFormPage) page;
+ if (fpage.getIndex() == index) {
+ return fpage;
+ }
+ }
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormEditor#setActivePage(int)
+ */
+ @Override
+ public void setActivePage(int pageIndex) {
+ if (getPage(pageIndex) != null) {
+ super.setActivePage(pageIndex);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.MultiPageEditorPart#getEditor(int)
+ */
+ @Override
+ protected IEditorPart getEditor(int pageIndex) {
+ return getPage(pageIndex) != null ? super.getEditor(pageIndex) : null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormEditor#createPageContainer(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Composite createPageContainer(Composite parent) {
+ // Create page container is the first method called by the final
+ // MultiPageEditorPart#createPartControl. Use it as hook to close
+ // editors with a NullEditorInput.
+ if (getEditorInput() instanceof NullEditorInput) {
+// DisplayUtil.safeAsyncExec(new Runnable() {
+// @Override
+// public void run() {
+// close(false);
+// }
+// });
+ close(false);
+ }
+
+ return super.createPageContainer(parent);
+ }
+
+ /**
+ * Update the editor page list. Pages which are not longer valid
+ * will be removed and pages now being valid gets added.
+ */
+ public void updatePageList() {
+ // Remember the currently active page
+ String activePageId = getActivePageInstance() != null ? getActivePageInstance().getId() : null;
+ String activePageTitle = getActivePageInstance() != null ? getActivePageInstance().getTitle() : null;
+ // Get the editor input object
+ IEditorInput input = getEditorInput();
+ // Get all applicable editor page bindings
+ List<EditorPageBinding> bindings = new ArrayList<EditorPageBinding>(Arrays.asList(EditorPageBindingExtensionPointManager.getInstance().getApplicableEditorPageBindings(input)));
+ // Get a copy of the currently added pages
+ List<Object> oldPages = pages != null ? new ArrayList<Object>(Arrays.asList(pages.toArray())) : new ArrayList<Object>();
+ // Loop through the old pages and determine if the page is still applicable
+ Iterator<Object> iterator = oldPages.iterator();
+ while (iterator.hasNext()) {
+ Object element = iterator.next();
+ // Skip over pages not being a form page.
+ if (!(element instanceof IFormPage)) {
+ continue;
+ }
+ IFormPage page = (IFormPage)element;
+ // Find the corresponding page binding
+ EditorPageBinding binding = null;
+ for (EditorPageBinding candidate : bindings) {
+ if (candidate.getPageId().equals(page.getId())) {
+ binding = candidate;
+ break;
+ }
+ }
+ if (binding != null) {
+ // Found binding -> page is still applicable
+ bindings.remove(binding);
+ } else {
+ // No binding found -> page is not longer applicable
+ removePage(pages.indexOf(page));
+ }
+ }
+ // If the are remaining bindings left, this are new pages.
+ // --> Process them now
+ for (EditorPageBinding binding : bindings) {
+ processPageBinding(binding);
+ }
+ // If possible, restore the active page
+ if (activePageId != null) {
+ int index = getIndexOf(activePageId);
+ if (index == -1 && activePageTitle != null) {
+ index = getIndexOfByTitle(activePageTitle);
+ }
+ if (index != -1) setActivePage(index);
+ }
+ }
+
+ /**
+ * Process the given editor page binding.
+ *
+ * @param binding The editor page binding. Must not be <code>null</code>.
+ */
+ protected void processPageBinding(EditorPageBinding binding) {
+ Assert.isNotNull(binding);
+
+ String pageId = binding.getPageId();
+ if (pageId != null) {
+ // Get the corresponding editor page instance
+ IEditorPage page = EditorPageExtensionPointManager.getInstance().getEditorPage(pageId, true);
+ if (page != null) {
+ try {
+ // Associate this editor with the page instance.
+ // This is typically done in the constructor, but we are
+ // utilizing a default constructor to instantiate the page.
+ page.initialize(this);
+
+ // Read in the "insertBefore" and "insertAfter" properties of the binding
+ String insertBefore = binding.getInsertBefore().trim();
+ String insertAfter = binding.getInsertAfter().trim();
+
+ boolean pageAdded = false;
+
+ // insertBefore will be processed before insertAfter.
+ if (!"".equals(insertBefore)) { //$NON-NLS-1$
+ String[] pageIds = insertBefore.split(","); //$NON-NLS-1$
+ for (String insertBeforePageId : pageIds) {
+ // If it is "first", we insert the page at index 0
+ if ("first".equalsIgnoreCase(insertBeforePageId)) { //$NON-NLS-1$
+ if (getIndexOf(page.getId()) == -1) {
+ addPage(0, page);
+ }
+ pageAdded = true;
+ break;
+ }
+
+ // Find the index of the page we shall insert this page before
+ int index = getIndexOf(insertBeforePageId);
+ if (index != -1) {
+ if (getIndexOf(page.getId()) == -1) {
+ addPage(index, page);
+ }
+ pageAdded = true;
+ break;
+ }
+ }
+ }
+
+ // If the page hasn't been added till now, process insertAfter
+ if (!pageAdded && !"".equals(insertAfter)) { //$NON-NLS-1$
+ String[] pageIds = insertAfter.split(","); //$NON-NLS-1$
+ for (String insertAfterPageId : pageIds) {
+ // If it is "last", we insert the page at the end
+ if ("last".equalsIgnoreCase(insertAfterPageId)) { //$NON-NLS-1$
+ if (getIndexOf(page.getId()) == -1) {
+ addPage(page);
+ }
+ pageAdded = true;
+ break;
+ }
+
+ // Find the index of the page we shall insert this page after
+ int index = getIndexOf(insertAfterPageId);
+ if (index != -1 && index + 1 < pages.size()) {
+ if (getIndexOf(page.getId()) == -1) {
+ addPage(index + 1, page);
+ }
+ pageAdded = true;
+ break;
+ }
+ }
+ }
+
+ // Add the page to the end if not added otherwise
+ if (!pageAdded && getIndexOf(page.getId()) == -1) {
+ addPage(page);
+ }
+
+ } catch (PartInitException e) { /* ignored on purpose */ }
+ }
+ }
+ }
+
+ /**
+ * Returns the index of the page with the given id.
+ *
+ * @param pageId The page id. Must not be <code>null</code>.
+ * @return The page index or <code>-1</code> if not found.
+ */
+ private int getIndexOf(String pageId) {
+ Assert.isNotNull(pageId);
+ for (int i = 0; i < pages.size(); i++) {
+ Object page = pages.get(i);
+ if (page instanceof IFormPage) {
+ IFormPage fpage = (IFormPage)page;
+ if (fpage.getId().equals(pageId)) {
+ return i;
+ }
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Returns the index of the page with the given title.
+ *
+ * @param pageTitle The page title. Must not be <code>null</code>.
+ * @return The page index or <code>-1</code> if not found.
+ */
+ private int getIndexOfByTitle(String pageTitle) {
+ Assert.isNotNull(pageTitle);
+ for (int i = 0; i < pages.size(); i++) {
+ Object page = pages.get(i);
+ if (page instanceof IFormPage) {
+ IFormPage fpage = (IFormPage)page;
+ if (fpage.getTitle().equals(pageTitle)) {
+ return i;
+ }
+ }
+ }
+ return -1;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormPage#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
+ */
+ @Override
+ public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+ super.init(site, input);
+
+ // Update the part name
+ if (!"".equals(input.getName())) { //$NON-NLS-1$
+ setPartName(input.getName());
+ }
+
+ // Dispose an existing event listener instance
+ if (listener != null) { listener.dispose(); listener = null; }
+ // Create the event listener. The event listener does register itself.
+ listener = new EditorEventListener(this);
+ }
+
+ /**
+ * Update the editor part name based on the current editor input.
+ */
+ public void updatePartName() {
+ IEditorInput input = getEditorInput();
+ String oldPartName = getPartName();
+
+ if (input instanceof EditorInput) {
+ // Reset the editor input name to trigger recalculation
+ ((EditorInput)input).name = null;
+ // If the name changed, apply the new name
+ if (!oldPartName.equals(input.getName())) {
+ setPartName(input.getName());
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormEditor#dispose()
+ */
+ @Override
+ public void dispose() {
+ // Dispose an existing event listener instance
+ if (listener != null) { listener.dispose(); listener = null; }
+
+ super.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+ // The pages may require some save pre processing
+ for (Object page : pages) {
+ if (page instanceof AbstractEditorPage) {
+ ((AbstractEditorPage)page).preDoSave(monitor);
+ }
+ }
+ // Commit the page changes
+ commitPages(true);
+ // The pages may require some save post processing
+ for (Object page : pages) {
+ if (page instanceof AbstractEditorPage) {
+ ((AbstractEditorPage)page).postDoSave(monitor);
+ }
+ }
+ editorDirtyStateChanged();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorPart#doSaveAs()
+ */
+ @Override
+ public void doSaveAs() {
+ IEditorSaveAsAdapter adapter = getEditorInput() != null ? (IEditorSaveAsAdapter)Platform.getAdapterManager().getAdapter(getEditorInput(), IEditorSaveAsAdapter.class) : null;
+ if (adapter != null) {
+ Object newNode = adapter.doSaveAs(getEditorInput());
+ if (newNode != null) {
+ setInput(new EditorInput(newNode));
+ updatePartName();
+ updatePageList();
+ for (Object page : pages) {
+ if (page instanceof AbstractEditorPage) {
+ ((AbstractEditorPage) page).init(getEditorSite(), getEditorInput());
+ }
+ }
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
+ */
+ @Override
+ public boolean isSaveAsAllowed() {
+ IEditorSaveAsAdapter adapter = getEditorInput() != null ? (IEditorSaveAsAdapter)Platform.getAdapterManager().getAdapter(getEditorInput(), IEditorSaveAsAdapter.class) : null;
+ if (adapter != null) {
+ return adapter.isSaveAsAllowed(getEditorInput());
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IPersistableEditor#restoreState(org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void restoreState(IMemento memento) {
+ // Get the editor specific memento
+ mementoToRestore = internalGetMemento(memento);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void saveState(IMemento memento) {
+ // Get the editor specific memento
+ memento = internalGetMemento(memento);
+ // Loop over all registered pages and pass on the editor specific memento
+ // to the pages which implements IPersistable as well
+ for (Object page : pages) {
+ if (page instanceof IPersistable) {
+ ((IPersistable)page).saveState(memento);
+ }
+ }
+ }
+
+ /**
+ * Internal helper method accessing our editor local child memento
+ * from the given parent memento.
+ */
+ private IMemento internalGetMemento(IMemento memento) {
+ // Assume the editor memento to be the same as the parent memento
+ IMemento editorMemento = memento;
+
+ // If the parent memento is not null, create a child within the parent
+ if (memento != null) {
+ editorMemento = memento.getChild(Editor.class.getName());
+ if (editorMemento == null) {
+ editorMemento = memento.createChild(Editor.class.getName());
+ }
+ } else {
+ // The parent memento is null. Create a new internal instance
+ // of a XMLMemento. This case is happening if the user switches
+ // to another perspective an the view becomes visible by this switch.
+ editorMemento = XMLMemento.createWriteRoot(Editor.class.getName());
+ }
+
+ return editorMemento;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.MultiPageEditorPart#getAdapter(java.lang.Class)
+ */
+ @Override
+ public Object getAdapter(Class adapter) {
+ if (adapter == IPropertySheetPage.class) {
+ return new TabbedPropertySheetPage(this);
+ }
+ // We pass on the adapt request to the currently active page
+ Object adapterInstance = getActivePageInstance() != null ? getActivePageInstance().getAdapter(adapter) : null;
+ if (adapterInstance == null) {
+ // If failed to adapt via the currently active page, pass on to the super implementation
+ adapterInstance = super.getAdapter(adapter);
+ }
+ return adapterInstance;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor#getContributorId()
+ */
+ @Override
+ public String getContributorId() {
+ return IUIConstants.TABBED_PROPERTIES_CONTRIBUTOR_ID;
+ }
+
+ /**
+ * Fires a property changed event.
+ *
+ * @param propertyId the id of the property that changed
+ */
+ @Override
+ public final void firePropertyChange(final int propertyId) {
+ super.firePropertyChange(propertyId);
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorEventListener.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorEventListener.java
index 2ab7f98b9..8efa40eb2 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorEventListener.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorEventListener.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2011, 2013 Wind River Systems, Inc. and others. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorInput.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorInput.java
index dc4e0a1de..fd7e2eb72 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorInput.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorInput.java
@@ -1,194 +1,194 @@
-/*******************************************************************************
- * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tcf.te.ui.views.editor;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.tcf.te.runtime.preferences.ScopedEclipsePreferences;
-import org.eclipse.tcf.te.ui.interfaces.IPreferenceKeys;
-import org.eclipse.tcf.te.ui.views.activator.UIPlugin;
-import org.eclipse.tcf.te.ui.views.interfaces.IUIConstants;
-import org.eclipse.tcf.te.ui.views.interfaces.ImageConsts;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.IPersistableElement;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.navigator.CommonNavigator;
-import org.eclipse.ui.navigator.CommonViewer;
-
-
-/**
- * Editor input implementation.
- */
-public final class EditorInput implements IEditorInput, IPersistableElement {
- // The parent editor id
- private final String id;
- // The editor input name, once determined
- /* default */ String name;
- // The node (selection) the editor is showing
- private final Object node;
-
- /**
- * Constructor.
- *
- * @param node The node (selection) the editor is showing. Must not be <code>null</code>.
- */
- public EditorInput(Object node) {
- this(node, IUIConstants.ID_EDITOR);
- }
-
- /**
- * Constructor.
- *
- * @param node The node (selection) the editor is showing. Must not be <code>null</code>.
- * @param id The parent editor id or <code>null</code>
- */
- public EditorInput(Object node, String id) {
- super();
- this.id = id;
- Assert.isNotNull(node);
- this.node = node;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#equals(java.lang.Object)
- */
- @Override
- public boolean equals(Object obj) {
- if (node != null && obj instanceof EditorInput) {
- return node.equals(((EditorInput)obj).node)
- && (id != null ? id.equals(((EditorInput)obj).id) : ((EditorInput)obj).id == null);
- }
- return super.equals(obj);
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#hashCode()
- */
- @Override
- public int hashCode() {
- return node != null ? node.hashCode() << 16 + (id != null ? id.hashCode() : 0) : super.hashCode();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IEditorInput#exists()
- */
- @Override
- public boolean exists() {
- return node != null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
- */
- @Override
- public ImageDescriptor getImageDescriptor() {
- return UIPlugin.getImageDescriptor(ImageConsts.EDITOR);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IEditorInput#getName()
- */
- @Override
- public String getName() {
- if (name == null && node != null) {
- ILabelProvider provider = node instanceof IAdaptable ? (ILabelProvider)((IAdaptable)node).getAdapter(ILabelProvider.class) : null;
- if (provider == null) {
- provider = (ILabelProvider)Platform.getAdapterManager().getAdapter(node, ILabelProvider.class);
- }
- name = provider != null ? provider.getText(node) : node.toString();
- }
-
- return name != null ? name : ""; //$NON-NLS-1$
- }
-
- /**
- * Get the common viewer used by the main view instance.
- *
- * @return The common viewer or <code>null</code>
- */
- protected CommonViewer getViewer() {
- if (PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null
- && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) {
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- IViewPart part = page.findView(IUIConstants.ID_EXPLORER);
- if (part instanceof CommonNavigator) {
- return ((CommonNavigator)part).getCommonViewer();
- }
- }
-
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IEditorInput#getPersistable()
- */
- @Override
- public IPersistableElement getPersistable() {
- ScopedEclipsePreferences store = org.eclipse.tcf.te.ui.activator.UIPlugin.getScopedPreferences();
- if (getFactoryId() != null && store != null && store.getBoolean(IPreferenceKeys.PREF_PERSIST_EDITORS)) {
- return this;
- }
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPersistableElement#getFactoryId()
- */
- @Override
- public String getFactoryId() {
- IPersistableElement adapter = (IPersistableElement)Platform.getAdapterManager().getAdapter(node, IPersistableElement.class);
- if (adapter != null) {
- return adapter.getFactoryId();
- }
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)
- */
- @Override
- public void saveState(IMemento memento) {
- IPersistableElement adapter = (IPersistableElement)Platform.getAdapterManager().getAdapter(node, IPersistableElement.class);
- if (adapter != null) {
- adapter.saveState(memento);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IEditorInput#getToolTipText()
- */
- @Override
- public String getToolTipText() {
- return getName();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
- */
- @Override
- public Object getAdapter(Class adapter) {
- if (IPersistableElement.class.isAssignableFrom(adapter)) {
- return getPersistable();
- }
-
- // If the adapter can be applied to the node instance, return the adapted node
- Object adapted = Platform.getAdapterManager().getAdapter(node, adapter);
- if (adapted != null) return adapted;
-
- return null;
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2011, 2013 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.ui.views.editor;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.tcf.te.runtime.preferences.ScopedEclipsePreferences;
+import org.eclipse.tcf.te.ui.interfaces.IPreferenceKeys;
+import org.eclipse.tcf.te.ui.views.activator.UIPlugin;
+import org.eclipse.tcf.te.ui.views.interfaces.IUIConstants;
+import org.eclipse.tcf.te.ui.views.interfaces.ImageConsts;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.CommonViewer;
+
+
+/**
+ * Editor input implementation.
+ */
+public final class EditorInput implements IEditorInput, IPersistableElement {
+ // The parent editor id
+ private final String id;
+ // The editor input name, once determined
+ /* default */ String name;
+ // The node (selection) the editor is showing
+ private final Object node;
+
+ /**
+ * Constructor.
+ *
+ * @param node The node (selection) the editor is showing. Must not be <code>null</code>.
+ */
+ public EditorInput(Object node) {
+ this(node, IUIConstants.ID_EDITOR);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param node The node (selection) the editor is showing. Must not be <code>null</code>.
+ * @param id The parent editor id or <code>null</code>
+ */
+ public EditorInput(Object node, String id) {
+ super();
+ this.id = id;
+ Assert.isNotNull(node);
+ this.node = node;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (node != null && obj instanceof EditorInput) {
+ return node.equals(((EditorInput)obj).node)
+ && (id != null ? id.equals(((EditorInput)obj).id) : ((EditorInput)obj).id == null);
+ }
+ return super.equals(obj);
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ return node != null ? node.hashCode() << 16 + (id != null ? id.hashCode() : 0) : super.hashCode();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#exists()
+ */
+ @Override
+ public boolean exists() {
+ return node != null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+ */
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return UIPlugin.getImageDescriptor(ImageConsts.EDITOR);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getName()
+ */
+ @Override
+ public String getName() {
+ if (name == null && node != null) {
+ ILabelProvider provider = node instanceof IAdaptable ? (ILabelProvider)((IAdaptable)node).getAdapter(ILabelProvider.class) : null;
+ if (provider == null) {
+ provider = (ILabelProvider)Platform.getAdapterManager().getAdapter(node, ILabelProvider.class);
+ }
+ name = provider != null ? provider.getText(node) : node.toString();
+ }
+
+ return name != null ? name : ""; //$NON-NLS-1$
+ }
+
+ /**
+ * Get the common viewer used by the main view instance.
+ *
+ * @return The common viewer or <code>null</code>
+ */
+ protected CommonViewer getViewer() {
+ if (PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null
+ && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) {
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ IViewPart part = page.findView(IUIConstants.ID_EXPLORER);
+ if (part instanceof CommonNavigator) {
+ return ((CommonNavigator)part).getCommonViewer();
+ }
+ }
+
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getPersistable()
+ */
+ @Override
+ public IPersistableElement getPersistable() {
+ ScopedEclipsePreferences store = org.eclipse.tcf.te.ui.activator.UIPlugin.getScopedPreferences();
+ if (getFactoryId() != null && store != null && store.getBoolean(IPreferenceKeys.PREF_PERSIST_EDITORS)) {
+ return this;
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IPersistableElement#getFactoryId()
+ */
+ @Override
+ public String getFactoryId() {
+ IPersistableElement adapter = (IPersistableElement)Platform.getAdapterManager().getAdapter(node, IPersistableElement.class);
+ if (adapter != null) {
+ return adapter.getFactoryId();
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void saveState(IMemento memento) {
+ IPersistableElement adapter = (IPersistableElement)Platform.getAdapterManager().getAdapter(node, IPersistableElement.class);
+ if (adapter != null) {
+ adapter.saveState(memento);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getToolTipText()
+ */
+ @Override
+ public String getToolTipText() {
+ return getName();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+ */
+ @Override
+ public Object getAdapter(Class adapter) {
+ if (IPersistableElement.class.isAssignableFrom(adapter)) {
+ return getPersistable();
+ }
+
+ // If the adapter can be applied to the node instance, return the adapted node
+ Object adapted = Platform.getAdapterManager().getAdapter(node, adapter);
+ if (adapted != null) return adapted;
+
+ return null;
+ }
+
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/controls/ButtonPanelControl.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/controls/ButtonPanelControl.java
index 430183dab..74d73563a 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/controls/ButtonPanelControl.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/controls/ButtonPanelControl.java
@@ -1,199 +1,199 @@
-/*******************************************************************************
- * Copyright (c) 2012 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tcf.te.ui.views.editor.controls;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.tcf.te.ui.controls.BaseControl;
-import org.eclipse.tcf.te.ui.swt.SWTControlUtil;
-import org.eclipse.tcf.te.ui.views.nls.Messages;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IPropertyListener;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.editor.FormEditor;
-import org.eclipse.ui.forms.editor.FormPage;
-
-/**
- * A panel control holding a set of buttons.
- * <p>
- * The panel control is associated with a managed form. If the managed form is the
- * embedded within a form editor or a form page, <code>getEditor()</code> will return
- * the parent form editor instance.
- * <p>
- * If the panel control has the default "Apply" button, the apply button will be
- * enabled once the parent form editor is marked dirty. If the "Apply" button is
- * clicked the form editor will be saved.
- */
-public class ButtonPanelControl extends BaseControl {
- // Reference to the parent managed form
- private final IManagedForm form;
-
- // The control sub-control
- private Composite panel;
- /* default */ Button applyButton;
-
- // Reference to the dirty state listener
- private IPropertyListener dirtyListener = null;
-
- /**
- * Constructor
- *
- * @param form The parent managed form. Must not be <code>null</code>.
- */
- public ButtonPanelControl(IManagedForm form) {
- super();
-
- Assert.isNotNull(form);
- this.form = form;
- }
-
- /**
- * Returns the parent managed form instance.
- *
- * @return The parent managed form instance.
- */
- protected final IManagedForm getManagedForm() {
- return form;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.AbstractFormPart#dispose()
- */
- @Override
- public void dispose() {
- // Dispose the dirty state listener
- if (dirtyListener != null && getEditor() != null) {
- getEditor().removePropertyListener(dirtyListener);
- dirtyListener = null;
- }
-
- super.dispose();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.controls.BaseControl#setupPanel(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void setupPanel(Composite parent) {
- super.setupPanel(parent);
-
- // Create the buttons panel
- panel = doCreatePanel(parent);
- Assert.isNotNull(panel);
-
- // Create the buttons within the buttons panel
- doCreateButtons(panel);
- }
-
- /**
- * Create the panel that holds the buttons.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- * @return The panel.
- */
- protected Composite doCreatePanel(Composite parent) {
- Assert.isNotNull(parent);
-
- Composite panel = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.marginHeight = 0; layout.marginWidth = 0;
- panel.setLayout(layout);
- GridData layoutData = new GridData(SWT.TRAIL, SWT.BEGINNING, true, false);
- if (parent.getLayout() instanceof GridLayout) layoutData.horizontalSpan = ((GridLayout)parent.getLayout()).numColumns;
- panel.setLayoutData(layoutData);
- panel.setBackground(parent.getBackground());
-
- return panel;
- }
-
- /**
- * Returns if or of not the control has an apply button added to the buttons
- * panel by default.
- * <p>
- * <b>Note:</b> The default return by this method is <code>true</code>.
- *
- * @return <code>true</code> if there should be an apply button.
- */
- protected boolean hasApplyButton() {
- return true;
- }
-
- /**
- * Creates the buttons within the given parent composite.
- *
- * @param parent The parent composite. Must not be <code>null</code>.
- */
- protected void doCreateButtons(Composite parent) {
- Assert.isNotNull(parent);
-
- // Create a "Apply" button if requested
- if (hasApplyButton() && getEditor() != null) {
- applyButton = new Button(parent, SWT.PUSH);
- applyButton.setText(Messages.ButtonPanelControl_applyButton_label);
- applyButton.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_ETOOL_SAVE_EDIT));
- applyButton.setBackground(parent.getBackground());
-
- GridData layoutData = new GridData(SWT.TRAIL, SWT.CENTER, false, false);
- layoutData.widthHint = SWTControlUtil.convertWidthInCharsToPixels(applyButton, 15);
- applyButton.setLayoutData(layoutData);
-
- applyButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- FormEditor editor = getEditor();
- Assert.isNotNull(editor);
- if (editor.isDirty()) {
- editor.doSave(new NullProgressMonitor());
- }
- }
- });
-
- dirtyListener = new IPropertyListener() {
- @Override
- public void propertyChanged(Object source, int propId) {
- if (propId == IEditorPart.PROP_DIRTY) {
- boolean dirty = getEditor().isDirty();
- applyButton.setEnabled(dirty);
- }
- }
- };
- getEditor().addPropertyListener(dirtyListener);
- applyButton.setEnabled(getEditor().isDirty());
- }
- }
-
- /**
- * Returns the parent form editor if the managed form is embedded
- * in such an editor.
- *
- * @return The parent form editor or <code>null</code>.
- */
- protected final FormEditor getEditor() {
- FormEditor editor = null;
-
- Object container = getManagedForm() != null ? getManagedForm().getContainer() : null;
- if (container instanceof FormEditor) {
- editor = (FormEditor)container;
- } else if (container instanceof FormPage) {
- editor = ((FormPage)container).getEditor();
- }
-
- return editor;
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2012, 2013 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.ui.views.editor.controls;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tcf.te.ui.controls.BaseControl;
+import org.eclipse.tcf.te.ui.swt.SWTControlUtil;
+import org.eclipse.tcf.te.ui.views.nls.Messages;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IPropertyListener;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+
+/**
+ * A panel control holding a set of buttons.
+ * <p>
+ * The panel control is associated with a managed form. If the managed form is the
+ * embedded within a form editor or a form page, <code>getEditor()</code> will return
+ * the parent form editor instance.
+ * <p>
+ * If the panel control has the default "Apply" button, the apply button will be
+ * enabled once the parent form editor is marked dirty. If the "Apply" button is
+ * clicked the form editor will be saved.
+ */
+public class ButtonPanelControl extends BaseControl {
+ // Reference to the parent managed form
+ private final IManagedForm form;
+
+ // The control sub-control
+ private Composite panel;
+ /* default */ Button applyButton;
+
+ // Reference to the dirty state listener
+ private IPropertyListener dirtyListener = null;
+
+ /**
+ * Constructor
+ *
+ * @param form The parent managed form. Must not be <code>null</code>.
+ */
+ public ButtonPanelControl(IManagedForm form) {
+ super();
+
+ Assert.isNotNull(form);
+ this.form = form;
+ }
+
+ /**
+ * Returns the parent managed form instance.
+ *
+ * @return The parent managed form instance.
+ */
+ protected final IManagedForm getManagedForm() {
+ return form;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.AbstractFormPart#dispose()
+ */
+ @Override
+ public void dispose() {
+ // Dispose the dirty state listener
+ if (dirtyListener != null && getEditor() != null) {
+ getEditor().removePropertyListener(dirtyListener);
+ dirtyListener = null;
+ }
+
+ super.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.controls.BaseControl#setupPanel(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void setupPanel(Composite parent) {
+ super.setupPanel(parent);
+
+ // Create the buttons panel
+ panel = doCreatePanel(parent);
+ Assert.isNotNull(panel);
+
+ // Create the buttons within the buttons panel
+ doCreateButtons(panel);
+ }
+
+ /**
+ * Create the panel that holds the buttons.
+ *
+ * @param parent The parent composite. Must not be <code>null</code>.
+ * @return The panel.
+ */
+ protected Composite doCreatePanel(Composite parent) {
+ Assert.isNotNull(parent);
+
+ Composite panel = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = 0; layout.marginWidth = 0;
+ panel.setLayout(layout);
+ GridData layoutData = new GridData(SWT.TRAIL, SWT.BEGINNING, true, false);
+ if (parent.getLayout() instanceof GridLayout) layoutData.horizontalSpan = ((GridLayout)parent.getLayout()).numColumns;
+ panel.setLayoutData(layoutData);
+ panel.setBackground(parent.getBackground());
+
+ return panel;
+ }
+
+ /**
+ * Returns if or of not the control has an apply button added to the buttons
+ * panel by default.
+ * <p>
+ * <b>Note:</b> The default return by this method is <code>true</code>.
+ *
+ * @return <code>true</code> if there should be an apply button.
+ */
+ protected boolean hasApplyButton() {
+ return true;
+ }
+
+ /**
+ * Creates the buttons within the given parent composite.
+ *
+ * @param parent The parent composite. Must not be <code>null</code>.
+ */
+ protected void doCreateButtons(Composite parent) {
+ Assert.isNotNull(parent);
+
+ // Create a "Apply" button if requested
+ if (hasApplyButton() && getEditor() != null) {
+ applyButton = new Button(parent, SWT.PUSH);
+ applyButton.setText(Messages.ButtonPanelControl_applyButton_label);
+ applyButton.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_ETOOL_SAVE_EDIT));
+ applyButton.setBackground(parent.getBackground());
+
+ GridData layoutData = new GridData(SWT.TRAIL, SWT.CENTER, false, false);
+ layoutData.widthHint = SWTControlUtil.convertWidthInCharsToPixels(applyButton, 15);
+ applyButton.setLayoutData(layoutData);
+
+ applyButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ FormEditor editor = getEditor();
+ Assert.isNotNull(editor);
+ if (editor.isDirty()) {
+ editor.doSave(new NullProgressMonitor());
+ }
+ }
+ });
+
+ dirtyListener = new IPropertyListener() {
+ @Override
+ public void propertyChanged(Object source, int propId) {
+ if (propId == IEditorPart.PROP_DIRTY) {
+ boolean dirty = getEditor().isDirty();
+ applyButton.setEnabled(dirty);
+ }
+ }
+ };
+ getEditor().addPropertyListener(dirtyListener);
+ applyButton.setEnabled(getEditor().isDirty());
+ }
+ }
+
+ /**
+ * Returns the parent form editor if the managed form is embedded
+ * in such an editor.
+ *
+ * @return The parent form editor or <code>null</code>.
+ */
+ protected final FormEditor getEditor() {
+ FormEditor editor = null;
+
+ Object container = getManagedForm() != null ? getManagedForm().getContainer() : null;
+ if (container instanceof FormEditor) {
+ editor = (FormEditor)container;
+ } else if (container instanceof FormPage) {
+ editor = ((FormPage)container).getEditor();
+ }
+
+ return editor;
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractCustomFormToolkitEditorPage.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractCustomFormToolkitEditorPage.java
index 678c234dc..70eb2529f 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractCustomFormToolkitEditorPage.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractCustomFormToolkitEditorPage.java
@@ -1,341 +1,341 @@
-/*******************************************************************************
- * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tcf.te.ui.views.editor.pages;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ContributionManager;
-import org.eclipse.jface.action.GroupMarker;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.tcf.te.runtime.interfaces.IDisposable;
-import org.eclipse.tcf.te.ui.forms.CustomFormToolkit;
-import org.eclipse.tcf.te.ui.forms.FormLayoutFactory;
-import org.eclipse.tcf.te.ui.views.activator.UIPlugin;
-import org.eclipse.tcf.te.ui.views.interfaces.ImageConsts;
-import org.eclipse.tcf.te.ui.views.nls.Messages;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IPropertyListener;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.menus.CommandContributionItem;
-import org.eclipse.ui.menus.CommandContributionItemParameter;
-import org.eclipse.ui.menus.IMenuService;
-
-/**
- * Abstract details editor page implementation managing
- * an custom form toolkit instance.
- */
-public abstract class AbstractCustomFormToolkitEditorPage extends AbstractEditorPage {
- // Reference to the form toolkit instance
- private CustomFormToolkit toolkit = null;
- // Reference to the toolbar manager to release menu contributions for
- private IToolBarManager manager = null;
-
- // The default help action class definition
- static protected class HelpAction extends Action {
- /* default */ final String helpID;
-
- /**
- * Constructor.
- *
- * @param helpID The context help id. Must not be <code>null</code>.
- */
- public HelpAction(String helpID) {
- super(Messages.AbstractCustomFormToolkitEditorPage_HelpAction_label, IAction.AS_PUSH_BUTTON);
- Assert.isNotNull(helpID);
- this.helpID = helpID;
- setToolTipText(Messages.AbstractCustomFormToolkitEditorPage_HelpAction_tooltip);
- setImageDescriptor(UIPlugin.getImageDescriptor(ImageConsts.HELP));
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.action.Action#run()
- */
- @Override
- public void run() {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- @Override
- public void run() {
- PlatformUI.getWorkbench().getHelpSystem().displayHelp(helpID);
- }
- });
- }
- }
-
- // The default apply changes action class definition
- static protected class ApplyAction extends Action implements IPropertyListener, IDisposable {
- private final IEditorPart part;
-
- /**
- * Constructor
- */
- public ApplyAction(IEditorPart part) {
- super(Messages.AbstractCustomFormToolkitEditorPage_ApplyAction_label, IAction.AS_PUSH_BUTTON);
- Assert.isNotNull(part);
- this.part = part;
- setToolTipText(Messages.AbstractCustomFormToolkitEditorPage_ApplyAction_tooltip);
- setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ETOOL_SAVE_EDIT));
- setDisabledImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ETOOL_SAVE_EDIT_DISABLED));
-
- part.addPropertyListener(this);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tcf.te.runtime.interfaces.IDisposable#dispose()
- */
- @Override
- public void dispose() {
- if (part != null) part.dispose();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.action.Action#run()
- */
- @Override
- public void run() {
- if (part != null && part.isDirty()) {
- part.doSave(new NullProgressMonitor());
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPropertyListener#propertyChanged(java.lang.Object, int)
- */
- @Override
- public void propertyChanged(Object source, int propId) {
- if (propId == IEditorPart.PROP_DIRTY) {
- boolean dirty = part != null && part.isDirty();
- setEnabled(dirty);
- }
- }
- }
-
- /**
- * Returns the custom form toolkit instance.
- *
- * @return The custom form toolkit instance or <code>null</code>.
- */
- protected final CustomFormToolkit getFormToolkit() {
- return toolkit;
- }
-
- /**
- * Sets the custom form toolkit instance.
- *
- * @param toolkit The custom form toolkit instance or <code>null</code>.
- */
- protected final void setFormToolkit(CustomFormToolkit toolkit) {
- this.toolkit = toolkit;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.editor.FormPage#dispose()
- */
- @Override
- public void dispose() {
- // Get the menu service and release the toolbar manager
- if (manager instanceof ContributionManager) {
- IMenuService service = (IMenuService) getSite().getService(IMenuService.class);
- if (service != null) {
- service.releaseContributions((ContributionManager)manager);
- }
- }
- // Dispose the custom form toolkit
- if (toolkit != null) { toolkit.dispose(); toolkit = null; }
- // Dispose all the rest
- super.dispose();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
- */
- @Override
- protected void createFormContent(IManagedForm managedForm) {
- super.createFormContent(managedForm);
-
- Assert.isNotNull(managedForm);
-
- // Create the toolkit instance
- toolkit = new CustomFormToolkit(managedForm.getToolkit());
-
- // Configure the managed form
- configureManagedForm(managedForm);
-
- // Do create the content of the form now
- doCreateFormContent(managedForm.getForm().getBody(), getFormToolkit());
-
- // Re-arrange the controls
- managedForm.reflow(true);
- }
-
- /**
- * Configure the managed form to be ready for usage.
- *
- * @param managedForm The managed form. Must not be <code>null</code>.
- */
- protected void configureManagedForm(IManagedForm managedForm) {
- Assert.isNotNull(managedForm);
-
- // Configure main layout
- Composite body = managedForm.getForm().getBody();
- body.setLayout(FormLayoutFactory.createFormGridLayout(false, 1));
-
- // Set context help id
- if (getContextHelpId() != null) {
- PlatformUI.getWorkbench().getHelpSystem().setHelp(managedForm.getForm(), getContextHelpId());
- }
-
- // Decorate the form header
- getFormToolkit().getFormToolkit().decorateFormHeading(managedForm.getForm().getForm());
- // And set the header text and image
- if (getFormTitle() != null) managedForm.getForm().getForm().setText(getFormTitle());
- managedForm.getForm().getForm().setImage(getFormImage());
-
- // Add the toolbar items which will appear in the form header
- manager = managedForm.getForm().getForm().getToolBarManager();
- // Add the default "additions" separator
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- // Create fixed toolbar contribution items
- createToolbarContributionItems(manager);
- // Get the menu service and populate contributed toolbar actions
- IMenuService service = (IMenuService) getSite().getService(IMenuService.class);
- if (service != null && manager instanceof ContributionManager) {
- service.populateContributionManager((ContributionManager)manager, "toolbar:" + getId()); //$NON-NLS-1$
- }
- // Trigger an update of the toolbar widget
- manager.update(true);
- }
-
- /**
- * Returns the context help id to associate with the page form.
- *
- * @return The context help id.
- */
- protected String getContextHelpId() {
- return null;
- }
-
- /**
- * Returns the form title to set to the top form header.
- *
- * @return The form title.
- */
- protected String getFormTitle() {
- return null;
- }
-
- /**
- * Returns the image to be set to the top form header.
- *
- * @return The image or <code>null</code> to use no image.
- */
- protected Image getFormImage() {
- return null;
- }
-
- /**
- * Create the toolbar contribution items.
- *
- * @param manager The toolbar manager. Must not be <code>null</code>.
- */
- protected void createToolbarContributionItems(IToolBarManager manager) {
- Assert.isNotNull(manager);
-
- manager.add(new Separator("group.connect")); //$NON-NLS-1$
- manager.add(new Separator("group.launch")); //$NON-NLS-1$
- manager.add(new GroupMarker("group.launch.rundebug")); //$NON-NLS-1$
- manager.add(new GroupMarker("group.launch.modes")); //$NON-NLS-1$
- manager.add(new GroupMarker("group.launch.additions")); //$NON-NLS-1$
-
- manager.add(new Separator("group.showIn")); //$NON-NLS-1$
- if (hasShowInSystemManagementAction()) {
- manager.add(new CommandContributionItem(new CommandContributionItemParameter(PlatformUI.getWorkbench(),
- "org.eclipse.tcf.te.ui.views.command.showIn.systemManagement", //$NON-NLS-1$
- "org.eclipse.tcf.te.ui.command.showIn.systemManagement", //$NON-NLS-1$
- CommandContributionItem.STYLE_PUSH)));
- }
-
- manager.add(new Separator("group.save")); //$NON-NLS-1$
- // If the page should have an apply button, add one to the toolbar
- if (hasApplyAction()) {
- Action applyAction = doCreateApplyAction(getEditor());
- if (applyAction != null) manager.add(applyAction);
- }
-
- manager.add(new Separator("group.help")); //$NON-NLS-1$
- // If the page is associated with a context help id, add a default
- // help action button into the toolbar
- if (getContextHelpId() != null) {
- Action helpAction = doCreateHelpAction(getContextHelpId());
- if (helpAction != null) manager.add(helpAction);
- }
- }
-
- /**
- * Create the help action.
- *
- * @param contextHelpId The context help id. Must not be <code>null</code>.
- * @return The help action or <code>null</code>.
- */
- protected Action doCreateHelpAction(String contextHelpId) {
- Assert.isNotNull(contextHelpId);
- return new HelpAction(contextHelpId);
- }
-
- /**
- * Creates the apply action.
- *
- * @param part The editor part. Must not be <code>null</code>.
- * @return The apply action or <code>null</code>.
- */
- protected Action doCreateApplyAction(IEditorPart part) {
- Assert.isNotNull(part);
- return new ApplyAction(part);
- }
-
- /**
- * Returns if or if not the page should have an
- * ShowInSystemManagementView button in the toolbar.
- * <p>
- * The default implementation returns <code>true</code>.
- *
- * @return <code>True</code> if the page does have an ShowInSystemManagementView button, <code>false</code> otherwise.
- */
- protected boolean hasShowInSystemManagementAction() {
- return true;
- }
-
- /**
- * Returns if or if not the page should have an apply button in
- * the toolbar.
- * <p>
- * The default implementation returns <code>false</code>.
- *
- * @return <code>True</code> if the page does have an apply button, <code>false</code> otherwise.
- */
- protected boolean hasApplyAction() {
- return false;
- }
-
- /**
- * Do create the managed form content.
- *
- * @param parent The parent composite. Must not be <code>null</code>
- * @param toolkit The {@link CustomFormToolkit} instance. Must not be <code>null</code>.
- */
- protected abstract void doCreateFormContent(Composite parent, CustomFormToolkit toolkit);
-}
+/*******************************************************************************
+ * Copyright (c) 2011, 2013 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.ui.views.editor.pages;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ContributionManager;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tcf.te.runtime.interfaces.IDisposable;
+import org.eclipse.tcf.te.ui.forms.CustomFormToolkit;
+import org.eclipse.tcf.te.ui.forms.FormLayoutFactory;
+import org.eclipse.tcf.te.ui.views.activator.UIPlugin;
+import org.eclipse.tcf.te.ui.views.interfaces.ImageConsts;
+import org.eclipse.tcf.te.ui.views.nls.Messages;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IPropertyListener;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.menus.CommandContributionItemParameter;
+import org.eclipse.ui.menus.IMenuService;
+
+/**
+ * Abstract details editor page implementation managing
+ * an custom form toolkit instance.
+ */
+public abstract class AbstractCustomFormToolkitEditorPage extends AbstractEditorPage {
+ // Reference to the form toolkit instance
+ private CustomFormToolkit toolkit = null;
+ // Reference to the toolbar manager to release menu contributions for
+ private IToolBarManager manager = null;
+
+ // The default help action class definition
+ static protected class HelpAction extends Action {
+ /* default */ final String helpID;
+
+ /**
+ * Constructor.
+ *
+ * @param helpID The context help id. Must not be <code>null</code>.
+ */
+ public HelpAction(String helpID) {
+ super(Messages.AbstractCustomFormToolkitEditorPage_HelpAction_label, IAction.AS_PUSH_BUTTON);
+ Assert.isNotNull(helpID);
+ this.helpID = helpID;
+ setToolTipText(Messages.AbstractCustomFormToolkitEditorPage_HelpAction_tooltip);
+ setImageDescriptor(UIPlugin.getImageDescriptor(ImageConsts.HELP));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ PlatformUI.getWorkbench().getHelpSystem().displayHelp(helpID);
+ }
+ });
+ }
+ }
+
+ // The default apply changes action class definition
+ static protected class ApplyAction extends Action implements IPropertyListener, IDisposable {
+ private final IEditorPart part;
+
+ /**
+ * Constructor
+ */
+ public ApplyAction(IEditorPart part) {
+ super(Messages.AbstractCustomFormToolkitEditorPage_ApplyAction_label, IAction.AS_PUSH_BUTTON);
+ Assert.isNotNull(part);
+ this.part = part;
+ setToolTipText(Messages.AbstractCustomFormToolkitEditorPage_ApplyAction_tooltip);
+ setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ETOOL_SAVE_EDIT));
+ setDisabledImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ETOOL_SAVE_EDIT_DISABLED));
+
+ part.addPropertyListener(this);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.runtime.interfaces.IDisposable#dispose()
+ */
+ @Override
+ public void dispose() {
+ if (part != null) part.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ if (part != null && part.isDirty()) {
+ part.doSave(new NullProgressMonitor());
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IPropertyListener#propertyChanged(java.lang.Object, int)
+ */
+ @Override
+ public void propertyChanged(Object source, int propId) {
+ if (propId == IEditorPart.PROP_DIRTY) {
+ boolean dirty = part != null && part.isDirty();
+ setEnabled(dirty);
+ }
+ }
+ }
+
+ /**
+ * Returns the custom form toolkit instance.
+ *
+ * @return The custom form toolkit instance or <code>null</code>.
+ */
+ protected final CustomFormToolkit getFormToolkit() {
+ return toolkit;
+ }
+
+ /**
+ * Sets the custom form toolkit instance.
+ *
+ * @param toolkit The custom form toolkit instance or <code>null</code>.
+ */
+ protected final void setFormToolkit(CustomFormToolkit toolkit) {
+ this.toolkit = toolkit;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormPage#dispose()
+ */
+ @Override
+ public void dispose() {
+ // Get the menu service and release the toolbar manager
+ if (manager instanceof ContributionManager) {
+ IMenuService service = (IMenuService) getSite().getService(IMenuService.class);
+ if (service != null) {
+ service.releaseContributions((ContributionManager)manager);
+ }
+ }
+ // Dispose the custom form toolkit
+ if (toolkit != null) { toolkit.dispose(); toolkit = null; }
+ // Dispose all the rest
+ super.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
+ */
+ @Override
+ protected void createFormContent(IManagedForm managedForm) {
+ super.createFormContent(managedForm);
+
+ Assert.isNotNull(managedForm);
+
+ // Create the toolkit instance
+ toolkit = new CustomFormToolkit(managedForm.getToolkit());
+
+ // Configure the managed form
+ configureManagedForm(managedForm);
+
+ // Do create the content of the form now
+ doCreateFormContent(managedForm.getForm().getBody(), getFormToolkit());
+
+ // Re-arrange the controls
+ managedForm.reflow(true);
+ }
+
+ /**
+ * Configure the managed form to be ready for usage.
+ *
+ * @param managedForm The managed form. Must not be <code>null</code>.
+ */
+ protected void configureManagedForm(IManagedForm managedForm) {
+ Assert.isNotNull(managedForm);
+
+ // Configure main layout
+ Composite body = managedForm.getForm().getBody();
+ body.setLayout(FormLayoutFactory.createFormGridLayout(false, 1));
+
+ // Set context help id
+ if (getContextHelpId() != null) {
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(managedForm.getForm(), getContextHelpId());
+ }
+
+ // Decorate the form header
+ getFormToolkit().getFormToolkit().decorateFormHeading(managedForm.getForm().getForm());
+ // And set the header text and image
+ if (getFormTitle() != null) managedForm.getForm().getForm().setText(getFormTitle());
+ managedForm.getForm().getForm().setImage(getFormImage());
+
+ // Add the toolbar items which will appear in the form header
+ manager = managedForm.getForm().getForm().getToolBarManager();
+ // Add the default "additions" separator
+ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ // Create fixed toolbar contribution items
+ createToolbarContributionItems(manager);
+ // Get the menu service and populate contributed toolbar actions
+ IMenuService service = (IMenuService) getSite().getService(IMenuService.class);
+ if (service != null && manager instanceof ContributionManager) {
+ service.populateContributionManager((ContributionManager)manager, "toolbar:" + getId()); //$NON-NLS-1$
+ }
+ // Trigger an update of the toolbar widget
+ manager.update(true);
+ }
+
+ /**
+ * Returns the context help id to associate with the page form.
+ *
+ * @return The context help id.
+ */
+ protected String getContextHelpId() {
+ return null;
+ }
+
+ /**
+ * Returns the form title to set to the top form header.
+ *
+ * @return The form title.
+ */
+ protected String getFormTitle() {
+ return null;
+ }
+
+ /**
+ * Returns the image to be set to the top form header.
+ *
+ * @return The image or <code>null</code> to use no image.
+ */
+ protected Image getFormImage() {
+ return null;
+ }
+
+ /**
+ * Create the toolbar contribution items.
+ *
+ * @param manager The toolbar manager. Must not be <code>null</code>.
+ */
+ protected void createToolbarContributionItems(IToolBarManager manager) {
+ Assert.isNotNull(manager);
+
+ manager.add(new Separator("group.connect")); //$NON-NLS-1$
+ manager.add(new Separator("group.launch")); //$NON-NLS-1$
+ manager.add(new GroupMarker("group.launch.rundebug")); //$NON-NLS-1$
+ manager.add(new GroupMarker("group.launch.modes")); //$NON-NLS-1$
+ manager.add(new GroupMarker("group.launch.additions")); //$NON-NLS-1$
+
+ manager.add(new Separator("group.showIn")); //$NON-NLS-1$
+ if (hasShowInSystemManagementAction()) {
+ manager.add(new CommandContributionItem(new CommandContributionItemParameter(PlatformUI.getWorkbench(),
+ "org.eclipse.tcf.te.ui.views.command.showIn.systemManagement", //$NON-NLS-1$
+ "org.eclipse.tcf.te.ui.command.showIn.systemManagement", //$NON-NLS-1$
+ CommandContributionItem.STYLE_PUSH)));
+ }
+
+ manager.add(new Separator("group.save")); //$NON-NLS-1$
+ // If the page should have an apply button, add one to the toolbar
+ if (hasApplyAction()) {
+ Action applyAction = doCreateApplyAction(getEditor());
+ if (applyAction != null) manager.add(applyAction);
+ }
+
+ manager.add(new Separator("group.help")); //$NON-NLS-1$
+ // If the page is associated with a context help id, add a default
+ // help action button into the toolbar
+ if (getContextHelpId() != null) {
+ Action helpAction = doCreateHelpAction(getContextHelpId());
+ if (helpAction != null) manager.add(helpAction);
+ }
+ }
+
+ /**
+ * Create the help action.
+ *
+ * @param contextHelpId The context help id. Must not be <code>null</code>.
+ * @return The help action or <code>null</code>.
+ */
+ protected Action doCreateHelpAction(String contextHelpId) {
+ Assert.isNotNull(contextHelpId);
+ return new HelpAction(contextHelpId);
+ }
+
+ /**
+ * Creates the apply action.
+ *
+ * @param part The editor part. Must not be <code>null</code>.
+ * @return The apply action or <code>null</code>.
+ */
+ protected Action doCreateApplyAction(IEditorPart part) {
+ Assert.isNotNull(part);
+ return new ApplyAction(part);
+ }
+
+ /**
+ * Returns if or if not the page should have an
+ * ShowInSystemManagementView button in the toolbar.
+ * <p>
+ * The default implementation returns <code>true</code>.
+ *
+ * @return <code>True</code> if the page does have an ShowInSystemManagementView button, <code>false</code> otherwise.
+ */
+ protected boolean hasShowInSystemManagementAction() {
+ return true;
+ }
+
+ /**
+ * Returns if or if not the page should have an apply button in
+ * the toolbar.
+ * <p>
+ * The default implementation returns <code>false</code>.
+ *
+ * @return <code>True</code> if the page does have an apply button, <code>false</code> otherwise.
+ */
+ protected boolean hasApplyAction() {
+ return false;
+ }
+
+ /**
+ * Do create the managed form content.
+ *
+ * @param parent The parent composite. Must not be <code>null</code>
+ * @param toolkit The {@link CustomFormToolkit} instance. Must not be <code>null</code>.
+ */
+ protected abstract void doCreateFormContent(Composite parent, CustomFormToolkit toolkit);
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractEditorPage.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractEditorPage.java
index b0309e0a7..836008178 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractEditorPage.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/AbstractEditorPage.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2011, 2013 Wind River Systems, Inc. and others. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/TreeViewerExplorerEditorPage.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/TreeViewerExplorerEditorPage.java
index 63c69d82c..4a2fb12c9 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/TreeViewerExplorerEditorPage.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/pages/TreeViewerExplorerEditorPage.java
@@ -1,507 +1,507 @@
-/*******************************************************************************
- * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tcf.te.ui.views.editor.pages;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.net.URL;
-
-import org.eclipse.core.commands.Command;
-import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.core.expressions.EvaluationContext;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.util.SafeRunnable;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ILabelDecorator;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TreePath;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWTException;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeColumn;
-import org.eclipse.tcf.te.core.interfaces.IFilterable;
-import org.eclipse.tcf.te.core.interfaces.IPropertyChangeProvider;
-import org.eclipse.tcf.te.ui.forms.CustomFormToolkit;
-import org.eclipse.tcf.te.ui.trees.TreeControl;
-import org.eclipse.tcf.te.ui.utils.TreeViewerUtil;
-import org.eclipse.ui.ISources;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.commands.ICommandService;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.widgets.Form;
-import org.eclipse.ui.handlers.IHandlerService;
-import org.eclipse.ui.part.MultiPageSelectionProvider;
-import org.osgi.framework.Bundle;
-
-/**
- * Tree viewer based editor page implementation.
- */
-public abstract class TreeViewerExplorerEditorPage extends AbstractCustomFormToolkitEditorPage implements IDoubleClickListener {
- // The references to the pages subcontrol's (needed for disposal)
- private TreeControl treeControl;
- private IToolBarManager toolbarMgr;
- private PropertyChangeListener pcListener;
- private Image formImage;
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.editor.FormPage#dispose()
- */
- @Override
- public void dispose() {
- IPropertyChangeProvider provider = getPropertyChangeProvider();
- if(provider != null && pcListener != null) {
- provider.removePropertyChangeListener(pcListener);
- }
- if(formImage != null) {
- formImage.dispose();
- }
- if (treeControl != null) { treeControl.dispose(); treeControl = null; }
- super.dispose();
- }
-
- /**
- * Set the initial focus to the tree.
- */
- @Override
- public void setFocus() {
- Control control = treeControl.getViewer().getControl();
- if(control != null && !control.isDisposed()) {
- control.setFocus();
- }
- else {
- super.setFocus();
- }
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractEditorPage#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
- */
- @Override
- public void setInitializationData(IConfigurationElement config, String propertyName, Object data) {
- super.setInitializationData(config, propertyName, data);
- String iconPath = config.getAttribute("icon"); //$NON-NLS-1$
- if(iconPath != null) {
- String bundleId = config.getContributor().getName();
- Bundle bundle = Platform.getBundle(bundleId);
- if(bundle != null) {
- URL iconURL = bundle.getEntry(iconPath);
- if(iconURL != null) {
- ImageDescriptor iconDesc = ImageDescriptor.createFromURL(iconURL);
- if(iconDesc != null) {
- formImage = iconDesc.createImage();
- }
- }
- }
- }
- treeControl = doCreateTreeControl();
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractCustomFormToolkitEditorPage#getFormImage()
- */
- @Override
- protected Image getFormImage() {
- return formImage;
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractCustomFormToolkitEditorPage#createToolbarContributionItems(org.eclipse.jface.action.IToolBarManager)
- */
- @Override
- protected void createToolbarContributionItems(IToolBarManager manager) {
- this.toolbarMgr = manager;
- treeControl.createToolbarContributionItems(manager);
- super.createToolbarContributionItems(manager);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractCustomFormToolkitEditorPage#doCreateFormContent(org.eclipse.swt.widgets.Composite, org.eclipse.tcf.te.ui.forms.CustomFormToolkit)
- */
- @Override
- protected void doCreateFormContent(Composite parent, CustomFormToolkit toolkit) {
- Assert.isNotNull(parent);
- Assert.isNotNull(toolkit);
-
- // Setup the tree control
- Assert.isNotNull(treeControl);
- treeControl.setupFormPanel(parent, toolkit);
-
- // Register the context menu at the parent workbench part site.
- getSite().registerContextMenu(getId(), treeControl.getContextMenuManager(), treeControl.getViewer());
-
- // Set the initial input
- Object input = getViewerInput();
- treeControl.getViewer().setInput(input);
-
- addViewerListeners();
-
- // adjust the tree column width initially to take the full size of control
- adjustTreeColumnWidth(treeControl.getViewer());
-
- updateUI();
- }
-
- /**
- * Determines the current visible width of the tree control and
- * adjust the column width according to there relative weight.
- *
- * @param viewer The viewer or <code>null</code>.
- */
- protected void adjustTreeColumnWidth(Viewer viewer) {
- if (!(viewer instanceof TreeViewer)) return;
-
- final TreeViewer treeViewer = (TreeViewer)viewer;
- final Tree tree = treeViewer.getTree();
- tree.addControlListener(new ControlListener() {
-
- @Override
- public void controlResized(ControlEvent e) {
- int sumColumnWidth = 0;
- int treeWidth = tree.getSize().x - tree.getVerticalBar().getSize().x;
-
- TreeColumn[] columns = tree.getColumns();
-
- // Summarize the tree column width
- for (TreeColumn column : columns) {
- Object widthHint = column.getData("widthHint"); //$NON-NLS-1$
- sumColumnWidth += widthHint instanceof Integer ? ((Integer)widthHint).intValue() : column.getWidth();
- }
-
- // Calculate the new width for each column
- int sumColumnWidth2 = 0;
- TreeColumn maxColumn = null;
- for (TreeColumn column : columns) {
- Object widthHint = column.getData("widthHint"); //$NON-NLS-1$
- int width = widthHint instanceof Integer ? ((Integer)widthHint).intValue() : column.getWidth();
- int weight = (width * 100) / sumColumnWidth;
- int newWidth = (weight * treeWidth) / 100;
- sumColumnWidth2 += newWidth;
- column.setWidth(newWidth);
- if (maxColumn == null || maxColumn.getWidth() < column.getWidth()) {
- maxColumn = column;
- }
- }
-
- // If we end up with a slighter larger width of all columns than
- // the tree widget is, reduce the size of the largest column
- if (sumColumnWidth2 > treeWidth && maxColumn != null) {
- int delta = sumColumnWidth2 - treeWidth + 2;
- maxColumn.setWidth(maxColumn.getWidth() - delta);
- }
-
- tree.removeControlListener(this);
- }
-
- @Override
- public void controlMoved(ControlEvent e) {
- }
- });
- }
-
- /**
- * Add tree viewer listeners to the tree control.
- */
- private void addViewerListeners() {
- TreeViewer viewer = (TreeViewer) treeControl.getViewer();
- viewer.addSelectionChangedListener(new ISelectionChangedListener(){
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- propagateSelection();
- }});
- viewer.getTree().addFocusListener(new FocusAdapter(){
- @Override
- public void focusGained(FocusEvent e) {
- propagateSelection();
- }
- });
- viewer.addDoubleClickListener(this);
-
- IPropertyChangeProvider provider = getPropertyChangeProvider();
- if(provider != null) {
- pcListener = new PropertyChangeListener() {
- @Override
- public void propertyChange(final PropertyChangeEvent event) {
- Object object = event.getSource();
- Object input = getTreeViewerInput();
- if (object == input) {
- if (Display.getCurrent() != null) {
- updateUI();
- }
- else {
- Display display = getSite().getShell().getDisplay();
- display.asyncExec(new Runnable() {
- @Override
- public void run() {
- updateUI();
- }
- });
- }
- }
- }
- };
- provider.addPropertyChangeListener(pcListener);
- }
- }
-
- @Override
- public Object getAdapter(Class adapter) {
- if(TreeViewer.class.equals(adapter)) {
- return treeControl.getViewer();
- }
- return super.getAdapter(adapter);
- }
-
- /**
- * Get an adapter instance from the adaptable with the specified
- * adapter interface.
- *
- * @param adaptable The adaptable to get the adapter.
- * @param adapter The adapter interface class.
- * @return An adapter or null if it does not adapt to this type.
- */
- @SuppressWarnings("rawtypes")
- private Object getAdapter(Object adaptable, Class adapter) {
- Object adapted = null;
- if(adapter.isInstance(adaptable)) {
- adapted = adaptable;
- }
- if(adapted == null && adaptable instanceof IAdaptable) {
- adapted = ((IAdaptable)adaptable).getAdapter(adapter);
- }
- if(adapted == null && adaptable != null) {
- adapted = Platform.getAdapterManager().getAdapter(adaptable, adapter);
- }
- return adapted;
- }
-
- /**
- * Get an adapter of IFilteringLabelDecorator.
- *
- * @return an IFilteringLabelDecorator adapter or null if it does not adapt to IFilteringLabelDecorator.
- */
- private IFilterable adaptFilterable() {
- Object input = getTreeViewerInput();
- if (input != null) {
- return (IFilterable) getAdapter(input, IFilterable.class);
- }
- return null;
- }
-
- protected abstract Object getViewerInput();
-
- /**
- * Get the viewer input adapter for the input.
- *
- * @param input the input of the tree viewer.
- * @return The adapter.
- */
- private IPropertyChangeProvider getPropertyChangeProvider() {
- Object input = getTreeViewerInput();
- if (input != null) {
- return (IPropertyChangeProvider) getAdapter(input, IPropertyChangeProvider.class);
- }
- return null;
- }
-
- Object getTreeViewerInput() {
- if (treeControl != null && treeControl.getViewer() != null) {
- return treeControl.getViewer().getInput();
- }
- return null;
- }
-
- /**
- * Creates and returns a tree control.
- *
- * @return The new tree control.
- */
- protected TreeControl doCreateTreeControl() {
- return new TreeControl(getViewerId(), this);
- }
-
- /**
- * Returns the associated tree control.
- *
- * @return The associated tree control or <code>null</code>.
- */
- public final TreeControl getTreeControl() {
- return treeControl;
- }
-
- /**
- * Update the page's ui including its toolbar and title text and image.
- */
- protected void updateUI() {
- toolbarMgr.update(true);
- IManagedForm managedForm = getManagedForm();
- Form form = managedForm.getForm().getForm();
- Object element = getTreeViewerInput();
- boolean filterEnabled = false;
- IFilterable filterDecorator = adaptFilterable();
- if (filterDecorator != null) {
- TreeViewer viewer = (TreeViewer) treeControl.getViewer();
- filterEnabled = TreeViewerUtil.isFiltering(viewer, TreePath.EMPTY);
- }
- ILabelDecorator titleDecorator = getTitleBarDecorator();
- String text = getFormTitle();
- if (text != null) {
- if (titleDecorator != null) {
- text = titleDecorator.decorateText(text, element);
- }
- if (filterEnabled) {
- TreeViewer viewer = (TreeViewer) treeControl.getViewer();
- text = TreeViewerUtil.getDecoratedText(text, viewer, TreePath.EMPTY);
- }
- }
- Image image = getFormImage();
- if (image != null) {
- if (titleDecorator != null) {
- image = titleDecorator.decorateImage(image, element);
- }
- if (filterEnabled) {
- TreeViewer viewer = (TreeViewer) treeControl.getViewer();
- image = TreeViewerUtil.getDecoratedImage(image, viewer, TreePath.EMPTY);
- }
- }
- if (text != null) {
- try {
- form.setText(text);
- }
- catch (Exception e) {
- // Ignore any disposed exception
- }
- }
- if (image != null) {
- try {
- form.setImage(image);
- }
- catch (Exception e) {
- // Ignore any disposed exception
- }
- }
- }
-
- /**
- * Get the title bar's decorator or null if there's no decorator for it.
- */
- protected ILabelDecorator getTitleBarDecorator() {
- return null;
- }
-
- /**
- * Propagate the current selection to the editor's selection provider.
- */
- protected void propagateSelection() {
- ISelection selection = treeControl.getViewer().getSelection();
- ISelectionProvider selectionProvider = getSite().getSelectionProvider();
- // If the parent control is already disposed, we have no real chance of
- // testing for it. Catch the SWT exception here just in case.
- try {
- selectionProvider.setSelection(selection);
- if (selectionProvider instanceof MultiPageSelectionProvider) {
- SelectionChangedEvent changedEvent = new SelectionChangedEvent(selectionProvider, selection);
- ((MultiPageSelectionProvider) selectionProvider).firePostSelectionChanged(changedEvent);
- }
- }
- catch (SWTException e) {
- /* ignored on purpose */
- }
- }
-
- /**
- * Get the id of the command invoked when the tree is double-clicked.
- * If the id is null, then no command is invoked.
- *
- * @return The double-click command id.
- */
- protected String getDoubleClickCommandId() {
- return null;
- }
-
- /**
- * Get the tree viewer's id. This viewer id is used by
- * viewer extension to define columns and filters.
- *
- * @return This viewer's id or null.
- */
- protected abstract String getViewerId();
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
- */
- @Override
- public void doubleClick(final DoubleClickEvent event) {
- // If an handled and enabled command is registered for the ICommonActionConstants.OPEN
- // retargetable action id, redirect the double click handling to the command handler.
- //
- // Note: The default tree node expansion must be re-implemented in the active handler!
- String commandId = getDoubleClickCommandId();
- Command cmd = null;
- if(commandId != null) {
- ICommandService service = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class);
- cmd = service != null ? service.getCommand(commandId) : null;
- }
- if (cmd != null && cmd.isDefined() && cmd.isEnabled()) {
- final Command command = cmd;
- SafeRunner.run(new SafeRunnable(){
- @Override
- public void handleException(Throwable e) {
- // Ignore exception
- }
- @Override
- public void run() throws Exception {
- IHandlerService handlerSvc = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
- Assert.isNotNull(handlerSvc);
-
- ISelection selection = event.getSelection();
- EvaluationContext ctx = new EvaluationContext(handlerSvc.getCurrentState(), selection);
- ctx.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
- ctx.addVariable(ISources.ACTIVE_MENU_SELECTION_NAME, selection);
- ctx.setAllowPluginActivation(true);
-
- ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
- Assert.isNotNull(pCmd);
-
- handlerSvc.executeCommandInContext(pCmd, null, ctx);
- }});
- } else {
- IStructuredSelection selection = (IStructuredSelection) event.getSelection();
- Object element = selection.getFirstElement();
- TreeViewer viewer = (TreeViewer) treeControl.getViewer();
- if (viewer.isExpandable(element)) {
- viewer.setExpandedState(element, !viewer.getExpandedState(element));
- }
- }
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2011, 2013 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.ui.views.editor.pages;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.net.URL;
+
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.util.SafeRunnable;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.tcf.te.core.interfaces.IFilterable;
+import org.eclipse.tcf.te.core.interfaces.IPropertyChangeProvider;
+import org.eclipse.tcf.te.ui.forms.CustomFormToolkit;
+import org.eclipse.tcf.te.ui.trees.TreeControl;
+import org.eclipse.tcf.te.ui.utils.TreeViewerUtil;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.widgets.Form;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.part.MultiPageSelectionProvider;
+import org.osgi.framework.Bundle;
+
+/**
+ * Tree viewer based editor page implementation.
+ */
+public abstract class TreeViewerExplorerEditorPage extends AbstractCustomFormToolkitEditorPage implements IDoubleClickListener {
+ // The references to the pages subcontrol's (needed for disposal)
+ private TreeControl treeControl;
+ private IToolBarManager toolbarMgr;
+ private PropertyChangeListener pcListener;
+ private Image formImage;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.editor.FormPage#dispose()
+ */
+ @Override
+ public void dispose() {
+ IPropertyChangeProvider provider = getPropertyChangeProvider();
+ if(provider != null && pcListener != null) {
+ provider.removePropertyChangeListener(pcListener);
+ }
+ if(formImage != null) {
+ formImage.dispose();
+ }
+ if (treeControl != null) { treeControl.dispose(); treeControl = null; }
+ super.dispose();
+ }
+
+ /**
+ * Set the initial focus to the tree.
+ */
+ @Override
+ public void setFocus() {
+ Control control = treeControl.getViewer().getControl();
+ if(control != null && !control.isDisposed()) {
+ control.setFocus();
+ }
+ else {
+ super.setFocus();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractEditorPage#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+ */
+ @Override
+ public void setInitializationData(IConfigurationElement config, String propertyName, Object data) {
+ super.setInitializationData(config, propertyName, data);
+ String iconPath = config.getAttribute("icon"); //$NON-NLS-1$
+ if(iconPath != null) {
+ String bundleId = config.getContributor().getName();
+ Bundle bundle = Platform.getBundle(bundleId);
+ if(bundle != null) {
+ URL iconURL = bundle.getEntry(iconPath);
+ if(iconURL != null) {
+ ImageDescriptor iconDesc = ImageDescriptor.createFromURL(iconURL);
+ if(iconDesc != null) {
+ formImage = iconDesc.createImage();
+ }
+ }
+ }
+ }
+ treeControl = doCreateTreeControl();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractCustomFormToolkitEditorPage#getFormImage()
+ */
+ @Override
+ protected Image getFormImage() {
+ return formImage;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractCustomFormToolkitEditorPage#createToolbarContributionItems(org.eclipse.jface.action.IToolBarManager)
+ */
+ @Override
+ protected void createToolbarContributionItems(IToolBarManager manager) {
+ this.toolbarMgr = manager;
+ treeControl.createToolbarContributionItems(manager);
+ super.createToolbarContributionItems(manager);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractCustomFormToolkitEditorPage#doCreateFormContent(org.eclipse.swt.widgets.Composite, org.eclipse.tcf.te.ui.forms.CustomFormToolkit)
+ */
+ @Override
+ protected void doCreateFormContent(Composite parent, CustomFormToolkit toolkit) {
+ Assert.isNotNull(parent);
+ Assert.isNotNull(toolkit);
+
+ // Setup the tree control
+ Assert.isNotNull(treeControl);
+ treeControl.setupFormPanel(parent, toolkit);
+
+ // Register the context menu at the parent workbench part site.
+ getSite().registerContextMenu(getId(), treeControl.getContextMenuManager(), treeControl.getViewer());
+
+ // Set the initial input
+ Object input = getViewerInput();
+ treeControl.getViewer().setInput(input);
+
+ addViewerListeners();
+
+ // adjust the tree column width initially to take the full size of control
+ adjustTreeColumnWidth(treeControl.getViewer());
+
+ updateUI();
+ }
+
+ /**
+ * Determines the current visible width of the tree control and
+ * adjust the column width according to there relative weight.
+ *
+ * @param viewer The viewer or <code>null</code>.
+ */
+ protected void adjustTreeColumnWidth(Viewer viewer) {
+ if (!(viewer instanceof TreeViewer)) return;
+
+ final TreeViewer treeViewer = (TreeViewer)viewer;
+ final Tree tree = treeViewer.getTree();
+ tree.addControlListener(new ControlListener() {
+
+ @Override
+ public void controlResized(ControlEvent e) {
+ int sumColumnWidth = 0;
+ int treeWidth = tree.getSize().x - tree.getVerticalBar().getSize().x;
+
+ TreeColumn[] columns = tree.getColumns();
+
+ // Summarize the tree column width
+ for (TreeColumn column : columns) {
+ Object widthHint = column.getData("widthHint"); //$NON-NLS-1$
+ sumColumnWidth += widthHint instanceof Integer ? ((Integer)widthHint).intValue() : column.getWidth();
+ }
+
+ // Calculate the new width for each column
+ int sumColumnWidth2 = 0;
+ TreeColumn maxColumn = null;
+ for (TreeColumn column : columns) {
+ Object widthHint = column.getData("widthHint"); //$NON-NLS-1$
+ int width = widthHint instanceof Integer ? ((Integer)widthHint).intValue() : column.getWidth();
+ int weight = (width * 100) / sumColumnWidth;
+ int newWidth = (weight * treeWidth) / 100;
+ sumColumnWidth2 += newWidth;
+ column.setWidth(newWidth);
+ if (maxColumn == null || maxColumn.getWidth() < column.getWidth()) {
+ maxColumn = column;
+ }
+ }
+
+ // If we end up with a slighter larger width of all columns than
+ // the tree widget is, reduce the size of the largest column
+ if (sumColumnWidth2 > treeWidth && maxColumn != null) {
+ int delta = sumColumnWidth2 - treeWidth + 2;
+ maxColumn.setWidth(maxColumn.getWidth() - delta);
+ }
+
+ tree.removeControlListener(this);
+ }
+
+ @Override
+ public void controlMoved(ControlEvent e) {
+ }
+ });
+ }
+
+ /**
+ * Add tree viewer listeners to the tree control.
+ */
+ private void addViewerListeners() {
+ TreeViewer viewer = (TreeViewer) treeControl.getViewer();
+ viewer.addSelectionChangedListener(new ISelectionChangedListener(){
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ propagateSelection();
+ }});
+ viewer.getTree().addFocusListener(new FocusAdapter(){
+ @Override
+ public void focusGained(FocusEvent e) {
+ propagateSelection();
+ }
+ });
+ viewer.addDoubleClickListener(this);
+
+ IPropertyChangeProvider provider = getPropertyChangeProvider();
+ if(provider != null) {
+ pcListener = new PropertyChangeListener() {
+ @Override
+ public void propertyChange(final PropertyChangeEvent event) {
+ Object object = event.getSource();
+ Object input = getTreeViewerInput();
+ if (object == input) {
+ if (Display.getCurrent() != null) {
+ updateUI();
+ }
+ else {
+ Display display = getSite().getShell().getDisplay();
+ display.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ updateUI();
+ }
+ });
+ }
+ }
+ }
+ };
+ provider.addPropertyChangeListener(pcListener);
+ }
+ }
+
+ @Override
+ public Object getAdapter(Class adapter) {
+ if(TreeViewer.class.equals(adapter)) {
+ return treeControl.getViewer();
+ }
+ return super.getAdapter(adapter);
+ }
+
+ /**
+ * Get an adapter instance from the adaptable with the specified
+ * adapter interface.
+ *
+ * @param adaptable The adaptable to get the adapter.
+ * @param adapter The adapter interface class.
+ * @return An adapter or null if it does not adapt to this type.
+ */
+ @SuppressWarnings("rawtypes")
+ private Object getAdapter(Object adaptable, Class adapter) {
+ Object adapted = null;
+ if(adapter.isInstance(adaptable)) {
+ adapted = adaptable;
+ }
+ if(adapted == null && adaptable instanceof IAdaptable) {
+ adapted = ((IAdaptable)adaptable).getAdapter(adapter);
+ }
+ if(adapted == null && adaptable != null) {
+ adapted = Platform.getAdapterManager().getAdapter(adaptable, adapter);
+ }
+ return adapted;
+ }
+
+ /**
+ * Get an adapter of IFilteringLabelDecorator.
+ *
+ * @return an IFilteringLabelDecorator adapter or null if it does not adapt to IFilteringLabelDecorator.
+ */
+ private IFilterable adaptFilterable() {
+ Object input = getTreeViewerInput();
+ if (input != null) {
+ return (IFilterable) getAdapter(input, IFilterable.class);
+ }
+ return null;
+ }
+
+ protected abstract Object getViewerInput();
+
+ /**
+ * Get the viewer input adapter for the input.
+ *
+ * @param input the input of the tree viewer.
+ * @return The adapter.
+ */
+ private IPropertyChangeProvider getPropertyChangeProvider() {
+ Object input = getTreeViewerInput();
+ if (input != null) {
+ return (IPropertyChangeProvider) getAdapter(input, IPropertyChangeProvider.class);
+ }
+ return null;
+ }
+
+ Object getTreeViewerInput() {
+ if (treeControl != null && treeControl.getViewer() != null) {
+ return treeControl.getViewer().getInput();
+ }
+ return null;
+ }
+
+ /**
+ * Creates and returns a tree control.
+ *
+ * @return The new tree control.
+ */
+ protected TreeControl doCreateTreeControl() {
+ return new TreeControl(getViewerId(), this);
+ }
+
+ /**
+ * Returns the associated tree control.
+ *
+ * @return The associated tree control or <code>null</code>.
+ */
+ public final TreeControl getTreeControl() {
+ return treeControl;
+ }
+
+ /**
+ * Update the page's ui including its toolbar and title text and image.
+ */
+ protected void updateUI() {
+ toolbarMgr.update(true);
+ IManagedForm managedForm = getManagedForm();
+ Form form = managedForm.getForm().getForm();
+ Object element = getTreeViewerInput();
+ boolean filterEnabled = false;
+ IFilterable filterDecorator = adaptFilterable();
+ if (filterDecorator != null) {
+ TreeViewer viewer = (TreeViewer) treeControl.getViewer();
+ filterEnabled = TreeViewerUtil.isFiltering(viewer, TreePath.EMPTY);
+ }
+ ILabelDecorator titleDecorator = getTitleBarDecorator();
+ String text = getFormTitle();
+ if (text != null) {
+ if (titleDecorator != null) {
+ text = titleDecorator.decorateText(text, element);
+ }
+ if (filterEnabled) {
+ TreeViewer viewer = (TreeViewer) treeControl.getViewer();
+ text = TreeViewerUtil.getDecoratedText(text, viewer, TreePath.EMPTY);
+ }
+ }
+ Image image = getFormImage();
+ if (image != null) {
+ if (titleDecorator != null) {
+ image = titleDecorator.decorateImage(image, element);
+ }
+ if (filterEnabled) {
+ TreeViewer viewer = (TreeViewer) treeControl.getViewer();
+ image = TreeViewerUtil.getDecoratedImage(image, viewer, TreePath.EMPTY);
+ }
+ }
+ if (text != null) {
+ try {
+ form.setText(text);
+ }
+ catch (Exception e) {
+ // Ignore any disposed exception
+ }
+ }
+ if (image != null) {
+ try {
+ form.setImage(image);
+ }
+ catch (Exception e) {
+ // Ignore any disposed exception
+ }
+ }
+ }
+
+ /**
+ * Get the title bar's decorator or null if there's no decorator for it.
+ */
+ protected ILabelDecorator getTitleBarDecorator() {
+ return null;
+ }
+
+ /**
+ * Propagate the current selection to the editor's selection provider.
+ */
+ protected void propagateSelection() {
+ ISelection selection = treeControl.getViewer().getSelection();
+ ISelectionProvider selectionProvider = getSite().getSelectionProvider();
+ // If the parent control is already disposed, we have no real chance of
+ // testing for it. Catch the SWT exception here just in case.
+ try {
+ selectionProvider.setSelection(selection);
+ if (selectionProvider instanceof MultiPageSelectionProvider) {
+ SelectionChangedEvent changedEvent = new SelectionChangedEvent(selectionProvider, selection);
+ ((MultiPageSelectionProvider) selectionProvider).firePostSelectionChanged(changedEvent);
+ }
+ }
+ catch (SWTException e) {
+ /* ignored on purpose */
+ }
+ }
+
+ /**
+ * Get the id of the command invoked when the tree is double-clicked.
+ * If the id is null, then no command is invoked.
+ *
+ * @return The double-click command id.
+ */
+ protected String getDoubleClickCommandId() {
+ return null;
+ }
+
+ /**
+ * Get the tree viewer's id. This viewer id is used by
+ * viewer extension to define columns and filters.
+ *
+ * @return This viewer's id or null.
+ */
+ protected abstract String getViewerId();
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
+ */
+ @Override
+ public void doubleClick(final DoubleClickEvent event) {
+ // If an handled and enabled command is registered for the ICommonActionConstants.OPEN
+ // retargetable action id, redirect the double click handling to the command handler.
+ //
+ // Note: The default tree node expansion must be re-implemented in the active handler!
+ String commandId = getDoubleClickCommandId();
+ Command cmd = null;
+ if(commandId != null) {
+ ICommandService service = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class);
+ cmd = service != null ? service.getCommand(commandId) : null;
+ }
+ if (cmd != null && cmd.isDefined() && cmd.isEnabled()) {
+ final Command command = cmd;
+ SafeRunner.run(new SafeRunnable(){
+ @Override
+ public void handleException(Throwable e) {
+ // Ignore exception
+ }
+ @Override
+ public void run() throws Exception {
+ IHandlerService handlerSvc = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
+ Assert.isNotNull(handlerSvc);
+
+ ISelection selection = event.getSelection();
+ EvaluationContext ctx = new EvaluationContext(handlerSvc.getCurrentState(), selection);
+ ctx.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
+ ctx.addVariable(ISources.ACTIVE_MENU_SELECTION_NAME, selection);
+ ctx.setAllowPluginActivation(true);
+
+ ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
+ Assert.isNotNull(pCmd);
+
+ handlerSvc.executeCommandInContext(pCmd, null, ctx);
+ }});
+ } else {
+ IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+ Object element = selection.getFirstElement();
+ TreeViewer viewer = (TreeViewer) treeControl.getViewer();
+ if (viewer.isExpandable(element)) {
+ viewer.setExpandedState(element, !viewer.getExpandedState(element));
+ }
+ }
+ }
+}

Back to the top