/******************************************************************************* * Copyright (c) 2007, 2008 Borland Software Corporation 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: * Borland Software Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.m2m.internal.qvt.oml.common.ui.wizards.choosers; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.m2m.internal.qvt.oml.emf.util.ui.choosers.metamodel.ChooserNode; import org.eclipse.m2m.internal.qvt.oml.emf.util.ui.choosers.metamodel.ChooserNodeContentProvider; import org.eclipse.m2m.internal.qvt.oml.emf.util.ui.choosers.metamodel.EPackageDecoratingLabelProvider; import org.eclipse.m2m.internal.qvt.oml.emf.util.ui.choosers.metamodel.EPackageSorter; import org.eclipse.swt.SWT; 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.eclipse.ui.PlatformUI; public abstract class TreeChooserPage extends WizardPage { public TreeChooserPage(String pageId, String title, boolean useCheckboxes, String helpId) { super(pageId); myTitle = title; myHelpId = helpId; myUseCheckboxes = useCheckboxes; } /** * Implement to validate page * @return <code>true</code> if page is valid, <code>false</code> otherwise */ protected abstract boolean validatePage(); /** * A factory method for myViewer object creation */ protected AbstractTreeViewer createViewer(Composite parent, int style) { return new TreeViewer(parent, style); } /** * Implement to specify root elements of the tree * @return an array of ChooserNode objects which will be root elements in the tree */ protected abstract ChooserNode[] getTreeRoots(); public void createControl(Composite parent) { setPageComplete(false); Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); Label firstLabel = new Label(composite, SWT.LEFT); firstLabel.setText(myTitle); int style = SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER; myViewer = createViewer(composite, style); if(myViewer.getContentProvider() == null) { myViewer.setContentProvider(CONTENT_PROVIDER); } if(myViewer.getSorter() == null) { myViewer.setSorter(VIEWER_SORTER); } if(myViewer.getLabelProvider() == null) { myViewer.setLabelProvider(LABEL_PROVIDER); } GridData data = new GridData(GridData.FILL_BOTH); data.heightHint = 250; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; myViewer.getControl().setLayoutData(data); if(myViewer.getInput() == null) { myViewer.setInput(getTreeRoots()); } setupViewer(myViewer); setControl(composite); setPageComplete(validatePage()); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, myHelpId); } /** * Called after myViewer is created and initialized * Override to perform some actions * (add listener or expand some nodes for example) * @param viewer - the viewer used */ protected void setupViewer(AbstractTreeViewer viewer) { viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { setPageComplete(validatePage()); if (isCurrentPage()) { getContainer().updateButtons(); } } }); } @Override public void setVisible(boolean visible) { super.setVisible(visible); if (visible) { myViewer.getControl().setFocus(); } } /** * @return tree viewer selection */ public ISelection getSelection() { return myViewer.getSelection(); } /** * @return whether the tree view displays checkboxes */ public boolean isUseCheckboxes() { return myUseCheckboxes; } protected AbstractTreeViewer getViewer() { return myViewer; } private final boolean myUseCheckboxes; private AbstractTreeViewer myViewer; private final String myHelpId; private final String myTitle; private static final ITreeContentProvider CONTENT_PROVIDER = new ChooserNodeContentProvider(); private static final ILabelProvider LABEL_PROVIDER = new EPackageDecoratingLabelProvider(); private static final ViewerSorter VIEWER_SORTER = new EPackageSorter(); }