diff options
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.java | 270 |
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(); + } +} |