Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SimpleWizardSelectionPage.java')
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SimpleWizardSelectionPage.java270
1 files changed, 270 insertions, 0 deletions
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SimpleWizardSelectionPage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SimpleWizardSelectionPage.java
new file mode 100644
index 000000000..a608b59ec
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SimpleWizardSelectionPage.java
@@ -0,0 +1,270 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, 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:
+ * Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dnd.internal;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.IWizardNode;
+import org.eclipse.jface.wizard.WizardSelectionPage;
+import org.eclipse.jst.pagedesigner.dnd.FeedBackInfo;
+import org.eclipse.jst.pagedesigner.dnd.ILocalDropHandler;
+import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
+import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.w3c.dom.Node;
+
+/**
+ * UI wizard selection page. To let user select which ILocalDropHandler to use
+ * to handle the drop.
+ *
+ * @author mengbo
+ */
+public class SimpleWizardSelectionPage extends WizardSelectionPage implements
+ ISelectionChangedListener {
+ private Object _localData;
+
+ private IHTMLGraphicalViewer _viewer;
+
+ private boolean _updateWidget;
+
+ private Node _widget;
+
+ private IDOMPosition _position;
+
+ /**
+ * for those handler that support wizard, then map to WizardNode, otherwise
+ * still map to the handler
+ */
+ private Map _objToWizardNodeOrHandler = new HashMap();
+
+ private Map _feedbackToHandlers;
+
+ private Object _currentHandler = null; // IWizardNode or a
+
+ // ILocalDropHandler that don't
+ // useWizard.
+
+ /**
+ * @param pageName
+ */
+ public SimpleWizardSelectionPage(IHTMLGraphicalViewer viewer,
+ Object localData, Map handlers) {
+ super(Messages.getString("SimpleWizardSelectionPage.PageName")); //$NON-NLS-1$
+ this.setTitle(Messages.getString("SimpleWizardSelectionPage.Title")); //$NON-NLS-1$
+ this.setDescription(Messages
+ .getString("SimpleWizardSelectionPage.Description")); //$NON-NLS-1$
+ this
+ .setMessage(Messages
+ .getString("SimpleWizardSelectionPage.Message")); //$NON-NLS-1$
+
+ this._viewer = viewer;
+ this._localData = localData;
+ this._feedbackToHandlers = handlers;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.verticalSpacing = 10;
+ container.setLayout(layout);
+ container.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ Label label = new Label(container, SWT.NONE);
+ label
+ .setText(Messages
+ .getString("SimpleWizardSelectionPage.Operation")); //$NON-NLS-1$
+ GridData gd = new GridData();
+ label.setLayoutData(gd);
+
+ final ListViewer listViewer = new ListViewer(container);
+ listViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ listViewer.setContentProvider(new IStructuredContentProvider() {
+ public Object[] getElements(Object inputElement) {
+ return ((List) inputElement).toArray();
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput,
+ Object newInput) {
+ }
+ });
+ listViewer.setLabelProvider(new LabelProvider() {
+ public String getText(Object element) {
+ return SimpleWizardSelectionPage.this.getText(element);
+ }
+ });
+ listViewer.addDoubleClickListener(new IDoubleClickListener() {
+ public void doubleClick(DoubleClickEvent event) {
+ selectionChanged(new SelectionChangedEvent(listViewer,
+ listViewer.getSelection()));
+ advanceToNextPage();
+ }
+ });
+ listViewer.setSorter(new ViewerSorter());
+ listViewer.setInput(getElements());
+ listViewer.addSelectionChangedListener(this);
+ Dialog.applyDialogFont(container);
+ setControl(container);
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ ISelection sel = event.getSelection();
+ if (sel instanceof IStructuredSelection) {
+ Object obj = ((IStructuredSelection) sel).getFirstElement();
+ if (obj != null) {
+ _currentHandler = this._objToWizardNodeOrHandler.get(obj);
+ if (_currentHandler == null) {
+ _currentHandler = getWizardNodeOrHandler(obj);
+ this._objToWizardNodeOrHandler.put(obj, _currentHandler);
+ }
+
+ if (_currentHandler instanceof IWizardNode) {
+ this.setSelectedNode((IWizardNode) _currentHandler);
+ } else {
+ this.getWizard().getContainer().updateButtons();
+ }
+ }
+ }
+ }
+
+ /**
+ * @param obj
+ * @return
+ */
+ private Object getWizardNodeOrHandler(Object obj) {
+ final ILocalDropHandler dropHandler = (ILocalDropHandler) _feedbackToHandlers
+ .get(obj);
+ if (dropHandler.useWizard(_localData, _viewer)) {
+ return new IWizardNode() {
+ IWizard _wizard = null;
+
+ public void dispose() {
+ }
+
+ public Point getExtent() {
+ return null;
+ }
+
+ public IWizard getWizard() {
+ if (_wizard == null) {
+ if (_updateWidget) {
+ _wizard = dropHandler.getWizard(_localData,
+ _widget, _viewer);
+ } else {
+ _wizard = dropHandler.getWizard(_localData,
+ _position, _viewer);
+ }
+ }
+ return _wizard;
+ }
+
+ public boolean isContentCreated() {
+ return _wizard != null;
+ }
+ };
+ } else {
+ return dropHandler;
+ }
+ }
+
+ /**
+ * could be have next page or just directly perform the action.
+ *
+ */
+ public void advanceToNextPage() {
+
+ getContainer().showPage(getNextPage());
+ }
+
+ /**
+ * @param element
+ * @return
+ */
+ protected String getText(Object element) {
+ return ((FeedBackInfo) element).getDescription();
+ }
+
+ /**
+ * @return
+ */
+ protected List getElements() {
+ return new ArrayList(this._feedbackToHandlers.keySet());
+ }
+
+ /**
+ * @param widget
+ */
+ public void setWidget(Node widget) {
+ _updateWidget = true;
+ _widget = widget;
+ }
+
+ /**
+ * @param position
+ */
+ public void setPosition(IDOMPosition position) {
+ _updateWidget = false;
+ _position = position;
+ }
+
+ /**
+ * @return
+ */
+ public Object getCurrentHandler() {
+ return _currentHandler;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.WizardSelectionPage#canFlipToNextPage()
+ */
+ public boolean canFlipToNextPage() {
+ return getCurrentHandler() instanceof IWizardNode
+ && super.canFlipToNextPage();
+ }
+}

Back to the top