blob: 383c720f15b3f5df901b53ec21de6b73c56a476c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 IBM 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.common.snippets.internal.ui;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.wst.common.snippets.core.ISnippetVariable;
import org.eclipse.wst.common.snippets.internal.palette.SnippetVariable;
/**
* Not ready yet.
*/
public class SnippetVariableTableViewer {
protected List fLibraryVariables;
protected ISnippetVariable fSelection;
protected List fSelectionChangedListeners;
protected TableViewer fTableViewer = null;
protected List fValueChangedListeners;
protected Hashtable fValues = null;
/**
* Constructor for VariableInsertionDialog.
*
* @param parentShell
*/
public SnippetVariableTableViewer(Composite parent) {
super();
createContents(parent);
}
public void addSelectionChangedListener(ISelectionChangedListener listener) {
getSelectionChangedListeners().add(listener);
}
public void addValueChangedListener(ValueChangedListener listener) {
getValueChangeListeners().add(listener);
}
public Control createContents(Composite parent) {
// pity we can't just use a PropertySheetPage, but the column headers
// aren't customizable
fTableViewer = new TableViewer(new Table(parent, SWT.FULL_SELECTION | SWT.SINGLE | SWT.BORDER));
// GridData data = new GridData(GridData.FILL_BOTH);
// fTableViewer.getTable().setLayoutData(data);
fTableViewer.getTable().setHeaderVisible(true);
fTableViewer.getTable().setLinesVisible(true);
fTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
ISelection sel = event.getSelection();
if (sel != null && !sel.isEmpty() && sel instanceof IStructuredSelection)
fSelection = (ISnippetVariable) ((IStructuredSelection) sel).getFirstElement();
else
fSelection = null;
fireSelectionChanged(event);
}
});
fTableViewer.setContentProvider(new ArrayContentProvider());
fTableViewer.setLabelProvider(new ITableLabelProvider() {
public void addListener(ILabelProviderListener listener) {
}
public void dispose() {
}
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
if (element == null)
return null;
SnippetVariable var = (SnippetVariable) element;
if (columnIndex == 0)
return var.getId();
else if (columnIndex == 1)
return (String) fValues.get(var.getId());
return ""; //$NON-NLS-1$
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
}
});
TableLayout tlayout = new TableLayout();
tlayout.addColumnData(new ColumnWeightData(35, true));
tlayout.addColumnData(new ColumnWeightData(65, true));
fTableViewer.getTable().setLayout(tlayout); // Create the Host column
TableColumn tc1 = new TableColumn(fTableViewer.getTable(), SWT.NONE);
tc1.setText("Variable ID"); //$NON-NLS-1$
tc1.setResizable(true);
tc1.setWidth(40);
TableColumn tc2 = new TableColumn(fTableViewer.getTable(), SWT.NONE);
tc2.setText("Value"); //$NON-NLS-1$
tc2.setResizable(true);
tc2.setWidth(40);
fTableViewer.setCellEditors(new CellEditor[]{new TextCellEditor(fTableViewer.getTable()), new TextCellEditor(fTableViewer.getTable())});
fTableViewer.setColumnProperties(new String[]{"id", "value"}); //$NON-NLS-1$ //$NON-NLS-2$
ICellModifier cellmodifier = new ICellModifier() {
public boolean canModify(Object element, String property) {
return property.equals("value"); //$NON-NLS-1$
}
public Object getValue(Object element, String property) {
if (property.equals("id")) //$NON-NLS-1$
return ((SnippetVariable) element).getId();
else if (property.equals("value")) //$NON-NLS-1$
return fValues.get(((SnippetVariable) element).getId());
return ""; //$NON-NLS-1$
}
public void modify(Object element, String property, Object value) {
TableItem item = (TableItem) element;
SnippetVariable var = (SnippetVariable) item.getData();
if (property.equals("value")) { //$NON-NLS-1$
String oldValue = (String) fValues.get(var.getId());
fValues.put(var.getId(), value);
item.setText(1, (String) value);
fireValueChanged(new String(var.getId()), property, oldValue, new String((String) value));
}
}
};
fTableViewer.setCellModifier(cellmodifier);
fTableViewer.setInput(getLibraryVariables());
refresh();
return getControl();
}
protected void fireSelectionChanged(SelectionChangedEvent event) {
ISelectionChangedListener[] listeners = new ISelectionChangedListener[getSelectionChangedListeners().size()];
getSelectionChangedListeners().toArray(listeners);
for (int i = 0; i < listeners.length; i++)
listeners[i].selectionChanged(event);
}
protected void fireValueChanged(String key, String property, String oldValue, String newValue) {
ValueChangedListener[] listeners = new ValueChangedListener[getValueChangeListeners().size()];
getValueChangeListeners().toArray(listeners);
for (int i = 0; i < listeners.length; i++)
listeners[i].valueChanged(key, property, oldValue, newValue);
}
public Control getControl() {
return getTable();
}
/**
* Gets the libraryVariables.
*
* @return Returns a List
*/
public List getLibraryVariables() {
if (fLibraryVariables == null)
fLibraryVariables = new ArrayList();
return fLibraryVariables;
}
public ISnippetVariable getSelectedVariable() {
return fSelection;
}
protected List getSelectionChangedListeners() {
if (fSelectionChangedListeners == null)
fSelectionChangedListeners = new ArrayList();
return fSelectionChangedListeners;
}
/**
* Gets the tableViewer.
*
* @return Returns a TableViewer
*/
public Table getTable() {
if (fTableViewer == null)
return null;
return fTableViewer.getTable();
}
public String getValue(ISnippetVariable var) {
return getValue(((SnippetVariable) var).getId());
}
public String getValue(String id) {
if (getValues().containsKey(id))
return (String) getValues().get(id);
return ""; //$NON-NLS-1$
}
protected List getValueChangeListeners() {
if (fValueChangedListeners == null)
fValueChangedListeners = new ArrayList();
return fValueChangedListeners;
}
/**
* Gets the values.
*
* @return Returns a Hashtable
*/
public Hashtable getValues() {
if (fValues == null)
fValues = new Hashtable();
return fValues;
}
protected void refresh() {
if (fLibraryVariables != null) {
fValues = null;
for (int i = 0; i < fLibraryVariables.size(); i++) {
SnippetVariable var = (SnippetVariable) fLibraryVariables.get(i);
getValues().put(var.getId(), var.getDefaultValue());
}
}
if (fTableViewer != null) {
fTableViewer.setInput(fLibraryVariables);
}
}
public void removeSelectionChangedListener(ISelectionChangedListener listener) {
getSelectionChangedListeners().remove(listener);
}
public void removeValueChangedListener(ValueChangedListener listener) {
getValueChangeListeners().remove(listener);
}
/**
* Sets the libraryVariables.
*
* @param libraryVariables
* The libraryVariables to set
*/
public void setLibraryVariables(List libraryVariables) {
fLibraryVariables = libraryVariables;
refresh();
}
}