blob: 5cae0b1697c6d7c9f67136cee517220592198039 [file] [log] [blame]
/*******************************************************************************
* 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) ;
}
}