Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/AbstractTreeSelectionDialog.java')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/AbstractTreeSelectionDialog.java282
1 files changed, 282 insertions, 0 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/AbstractTreeSelectionDialog.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/AbstractTreeSelectionDialog.java
new file mode 100644
index 000000000..8dcfa83df
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/dialogs/AbstractTreeSelectionDialog.java
@@ -0,0 +1,282 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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.tcf.ui.dialogs;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.DecoratingLabelProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+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.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.tcf.te.runtime.concurrent.util.ExecutorsUtil;
+import org.eclipse.tcf.te.tcf.ui.navigator.ViewerSorter;
+import org.eclipse.tcf.te.ui.jface.dialogs.CustomTitleAreaDialog;
+import org.eclipse.tcf.te.ui.swt.SWTControlUtil;
+import org.eclipse.tcf.te.ui.views.navigator.DelegatingLabelProvider;
+
+/**
+ * Tree selection dialog implementation.
+ */
+public abstract class AbstractTreeSelectionDialog extends CustomTitleAreaDialog {
+ // The tree viewer
+ /* default */ TreeViewer viewer;
+
+ // The selection. Will be filled in if "OK" is pressed
+ private ISelection selection;
+
+ /**
+ * Constructor.
+ *
+ * @param parent The parent shell used to view the dialog, or <code>null</code>.
+ * @param services The list of (remote) services the agents must provide to be selectree, or <code>null</code>.
+ */
+ public AbstractTreeSelectionDialog(Shell shell, String contextHelpId) {
+ super(shell, contextHelpId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#isResizable()
+ */
+ @Override
+ protected boolean isResizable() {
+ return true;
+ }
+
+ /**
+ * Returns whether the dialog shall support multi selection or not.
+ * <p>
+ * The default implementation returns <code>true</code>.
+ *
+ * @return <code>True</code> if multi selection is supported, <code>false</code> otherwise.
+ */
+ protected boolean supportsMultiSelection() {
+ return false;
+ }
+
+ /**
+ * Returns the tree viewer instance.
+ *
+ * @return The tree viewer instance or <code>null</code>.
+ */
+ protected final TreeViewer getViewer() {
+ return viewer;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.jface.dialogs.CustomTitleAreaDialog#createDialogAreaContent(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createDialogAreaContent(Composite parent) {
+ super.createDialogAreaContent(parent);
+
+ setDialogTitle(getDialogTitle());
+ setTitle(getTitle());
+ setDefaultMessage(getDefaultMessage(), IMessageProvider.NONE);
+
+ Composite comp = new Composite(parent, SWT.NONE);
+ GridLayout gl = new GridLayout(2, false);
+ gl.marginWidth = 0;
+ gl.marginHeight = 0;
+ comp.setLayout(gl);
+ GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ comp.setLayoutData(layoutData);
+
+ createTreeAreaContent(comp);
+ createButtonAreaContent(comp);
+ }
+
+ protected TreeViewer createTreeAreaContent(Composite parent) {
+ // Create the tree viewer
+ viewer = new TreeViewer(parent, (supportsMultiSelection() ? SWT.MULTI : SWT.SINGLE) | SWT.BORDER);
+
+ // Configure the tree
+ Tree tree = viewer.getTree();
+
+ @SuppressWarnings("unused")
+ TreeColumn column = new TreeColumn(tree, SWT.LEFT);
+
+ ColumnViewerToolTipSupport.enableFor(viewer);
+
+ TableLayout treeLayout = new TableLayout();
+ treeLayout.addColumnData(new ColumnWeightData(100));
+ tree.setLayout(treeLayout);
+
+ GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ layoutData.minimumWidth = 150;
+ layoutData.minimumHeight = 150;
+ tree.setLayoutData(layoutData);
+
+ viewer.setContentProvider(getContentProvider());
+ viewer.setLabelProvider(getLabelProvider());
+
+ // Subclasses may customize the viewer before setting the input
+ configureTreeViewer(viewer);
+
+ viewer.setInput(getInput());
+ viewer.addDoubleClickListener(new IDoubleClickListener() {
+ @Override
+ public void doubleClick(DoubleClickEvent event) {
+ if (!viewer.getSelection().isEmpty()) {
+ okPressed();
+ }
+ }
+ });
+ viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ updateEnablement(viewer);
+ }
+ });
+
+ viewer.refresh();
+ updateSelection(getSelection());
+
+ return viewer;
+ }
+
+ protected abstract void updateSelection(ISelection selection);
+
+ protected abstract void createButtonAreaContent(Composite parent);
+
+ protected abstract IContentProvider getContentProvider();
+
+ protected IBaseLabelProvider getLabelProvider() {
+ DelegatingLabelProvider labelProvider = new DelegatingLabelProvider();
+ return new DecoratingLabelProvider(labelProvider, labelProvider);
+ }
+
+ protected void refresh() {
+ ExecutorsUtil.executeInUI(new Runnable() {
+ @Override
+ public void run() {
+ viewer.refresh();
+ updateEnablement(viewer);
+ }
+ });
+ }
+
+ protected abstract Object getInput();
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.TrayDialog#createButtonBar(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createButtonBar(Composite parent) {
+ Control buttonBar = super.createButtonBar(parent);
+ updateEnablement(viewer);
+ return buttonBar;
+ }
+
+ /**
+ * Update the enablement of the dialog widgets.
+ *
+ * @param viewer The tree viewer. Must not be <code>null</code>.
+ */
+ protected void updateEnablement(TreeViewer viewer) {
+ Assert.isNotNull(viewer);
+
+ // Adjust the OK button enablement
+ Button okButton = getButton(IDialogConstants.OK_ID);
+ SWTControlUtil.setEnabled(okButton, isValidSelection());
+ }
+
+ protected boolean isValidSelection() {
+ int selCount = viewer.getTree().getSelectionCount();
+ return supportsMultiSelection() ? selCount > 0 : selCount == 1;
+ }
+
+ /**
+ * Configure the tree viewer.
+ * <p>
+ * The default implementation does nothing. Subclasses may overwrite this
+ * method to customize the tree viewer before the input gets set.
+ *
+ * @param viewer The tree viewer. Must not be <code>null</code>.
+ */
+ protected void configureTreeViewer(TreeViewer viewer) {
+ Assert.isNotNull(viewer);
+ viewer.setSorter(new ViewerSorter());
+ }
+
+ /**
+ * Returns the dialog title.
+ *
+ * @return The dialog title.
+ */
+ protected abstract String getDialogTitle();
+
+ /**
+ * Returns the title.
+ *
+ * @return The title.
+ */
+ protected abstract String getTitle();
+
+ /**
+ * Returns the default message.
+ *
+ * @return The default message.
+ */
+ protected abstract String getDefaultMessage();
+
+ /**
+ * Returns the selection which had been set to the viewer at
+ * the time of closing the dialog with either "OK" or "Cancel".
+ *
+ * @return The selection or <code>null</code>.
+ */
+ public ISelection getSelection() {
+ return selection;
+ }
+
+ /**
+ * Set the selection to be shown when the dialog opens.
+ * @param selection The selection to set.
+ */
+ public void setSelection(ISelection selection) {
+ this.selection = selection;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.jface.dialogs.CustomTitleAreaDialog#okPressed()
+ */
+ @Override
+ protected void okPressed() {
+ selection = viewer.getSelection();
+ super.okPressed();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
+ */
+ @Override
+ protected void cancelPressed() {
+ selection = null;
+ super.cancelPressed();
+ }
+}

Back to the top