/******************************************************************************* * Copyright (c) 2004, 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.jsf.facesconfig.ui.dialog; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jst.jsf.common.ui.internal.guiutils.SWTUtils; import org.eclipse.jst.jsf.facesconfig.ui.page.IFacesConfigPage; 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.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /** * @author Bryan Yang * */ public class CommonListDialog extends Dialog implements ISelectionChangedListener, ISelectionProvider { private static final int MIN_DIALOG_WIDTH = 300; private Text inputText; private StructuredViewer structuredViewer; private String value; private IFacesConfigPage page; private Object input; private String label; private String caption; /** The mini width for the text control */ private static final int TEXT_MINI_WIDTH = 100; /** * @param parentShell * @param page * @param input * @param caption * @param label */ protected CommonListDialog(Shell parentShell, IFacesConfigPage page, Object input, String caption, String label) { super(parentShell); this.page = page; this.input = input; this.label = label; this.caption = caption; parentShell.setText(caption); } /* * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(caption); } /* * @see org.eclipse.jface.window.Window#getInitialSize() */ protected Point getInitialSize() { Point shellSize = super.getInitialSize(); return new Point(Math.max( convertHorizontalDLUsToPixels(MIN_DIALOG_WIDTH), shellSize.x), shellSize.y); } /* * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ protected Control createDialogArea(Composite parent) { Composite composite = SWTUtils.createComposite(parent, 1); SWTUtils.createLabel(composite, label, 1); inputText = SWTUtils.createTextBox(composite, 1); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.widthHint = TEXT_MINI_WIDTH; inputText.setLayoutData(gd); structuredViewer = createViewer(composite); structuredViewer.addSelectionChangedListener(this); return composite; } /** * Create the structured viewer, set up content & label provider for it. * Defaultly create a tableviewer. * * @param parent * @return the structured viewer */ protected StructuredViewer createViewer(Composite parent) { GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 200; gd.widthHint = 150; parent.setLayoutData(gd); GridLayout layout = new GridLayout(); parent.setLayout(layout); TableViewer tableViewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL); gd = new GridData(GridData.FILL_BOTH); tableViewer.getControl().setLayoutData(gd); tableViewer.setContentProvider(new AdapterFactoryContentProvider( getAdapterFactory())); tableViewer.setLabelProvider(new AdapterFactoryLabelProvider( getAdapterFactory())); configViewer(tableViewer); tableViewer.setInput(input); return tableViewer; } /** * set the structuredViewer's input * * @param input */ private void setViewerInput(Object input) { structuredViewer.setInput(input); this.input = input; } /** * get the input object of this section. * @return the input */ public Object getInput() { return input; } /** * set input object for this section. * @param newInput */ public void setInput(Object newInput) { input = newInput; setViewerInput(input); } /** * Config the viewer, such as set a filter and so on. Sub classes should * override this method to add filter. * * @param structuredViewer_ */ protected void configViewer(StructuredViewer structuredViewer_) { // do nothing; sub-classes should override } //TODO: why bother with this interface? public void selectionChanged(SelectionChangedEvent event) { // selectionChanged not handled } public void addSelectionChangedListener(ISelectionChangedListener listener) { // do nothing; not handling setSelection } public ISelection getSelection() { return structuredViewer.getSelection(); } public void removeSelectionChangedListener( ISelectionChangedListener listener) { // do nothing; not handling setSelection } public void setSelection(ISelection selection) { // do nothing; not handling change in selection } /** * the convenient method to get the AdapterFactory instance of the editor; * * @return the AdapterFactory instance. */ public AdapterFactory getAdapterFactory() { return (AdapterFactory) page.getEditor().getAdapter( AdapterFactory.class); } /** * the convenient method to get the EditingDomain instance of the editor; * * @return the EditingDomain instance. */ public EditingDomain getEditingDomain() { return (EditingDomain) page.getEditor().getAdapter(EditingDomain.class); } /** * @return the value */ public String getValue() { return value; } /** * @param value */ public void setValue(String value) { this.value = value; refresh(); } private void refresh() { inputText.setText(value) ; } }