blob: d4a0185ca611e041796074f8567ee39773b1d3ff [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.pear.insd.edit.vars;
import java.util.Arrays;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
/**
*
*
*/
abstract class AbstractVarValViewerHandler {
public Table table;
public TableViewer tableViewer;
public Button add;
public Button delete;
protected Button closeButton;
protected ITableLabelProvider labelProvider;
protected VarValList tableRowList = new VarValList();
protected String[] columnNames;
public AbstractVarValViewerHandler(Composite parent, String[] columnNames, int numParentColumns,
VarValList tableRowList, ITableLabelProvider labelProvider) {
this.tableRowList = tableRowList;
this.columnNames = columnNames;
this.labelProvider = labelProvider;
this.addChildControls(parent, numParentColumns);
}
protected abstract void createTableColumns();
protected abstract CellEditor[] createCellEditors();
protected abstract ICellModifier createCellModifiers();
protected abstract ViewerSorter createSorter();
/**
* Release resources
*/
public void dispose() {
// Tell the label provider to release its ressources
tableViewer.getLabelProvider().dispose();
}
/**
* Create a new shell, add the widgets, open the shell
*
* @return the shell that was created
*/
protected void addChildControls(Composite composite, int numColumns) {
GridLayout layout = new GridLayout(numColumns, false);
layout.marginWidth = 4;
composite.setLayout(layout);
// Create the table
createTable(composite);
// Create and setup the TableViewer
createTableViewer();
tableViewer.setContentProvider(new ExampleContentProvider());
tableViewer.setLabelProvider(labelProvider);
// The input for the table viewer is the instance of VarValList
tableViewer.setInput(tableRowList);
// Add the buttons
createButtons(composite);
}
/**
* Create the Table
*/
protected void createTable(Composite parent) {
int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION
| SWT.HIDE_SELECTION;
table = new Table(parent, style);
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.grabExcessVerticalSpace = true;
gridData.horizontalSpan = 3;
gridData.heightHint = 60;
table.setLayoutData(gridData);
table.setLinesVisible(true);
table.setHeaderVisible(true);
createTableColumns();
}
/**
* Create the TableViewer
*/
protected void createTableViewer() {
tableViewer = new TableViewer(table);
tableViewer.setUseHashlookup(true);
tableViewer.setColumnProperties(columnNames);
// Assign the cell editors to the viewer
tableViewer.setCellEditors(createCellEditors());
// Set the cell modifier for the viewer
tableViewer.setCellModifier(createCellModifiers());
// Set the default sorter for the viewer
tableViewer.setSorter(createSorter());
}
/*
* Close the window and dispose of resources
*/
public void close() {
Shell shell = table.getShell();
if (shell != null && !shell.isDisposed())
shell.dispose();
}
/**
* InnerClass that acts as a proxy for the VarValList providing content for the Table. It
* implements the IVarValListViewer interface since it must register changeListeners with the
* VarValList
*/
class ExampleContentProvider implements IStructuredContentProvider, IVarValListViewer {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
if (newInput != null)
((VarValList) newInput).addChangeListener(this);
if (oldInput != null)
((VarValList) oldInput).removeChangeListener(this);
}
public void dispose() {
tableRowList.removeChangeListener(this);
}
// Return the tableRows as an array of Objects
public Object[] getElements(Object parent) {
return tableRowList.getTableRows().toArray();
}
/*
* (non-Javadoc)
*
* @see IVarValListViewer#addTableRow(VarVal)
*/
public void addTableRow(VarVal tableRow) {
tableViewer.add(tableRow);
}
/*
* (non-Javadoc)
*
* @see IVarValListViewer#removeTableRow(VarVal)
*/
public void removeTableRow(VarVal tableRow) {
tableViewer.remove(tableRow);
}
/*
* (non-Javadoc)
*
* @see IVarValListViewer#updateTableRow(VarVal)
*/
public void updateTableRow(VarVal tableRow) {
tableViewer.update(tableRow, null);
}
}
/**
* Add the "Add", "Delete" and "Close" buttons
*
* @param parent
* the parent composite
*/
protected void createButtons(Composite parent) {
// Create and configure the "Add" button
add = new Button(parent, SWT.PUSH | SWT.CENTER);
add.setText("Add");
GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gridData.widthHint = 80;
add.setLayoutData(gridData);
add.addSelectionListener(new SelectionAdapter() {
// Add a tableRow to the VarValList and refresh the view
public void widgetSelected(SelectionEvent e) {
if (!tableRowList.addTableRow()) {
MessageDialog.openWarning(new Shell(), "Duplicate Variable",
"The variable 'New_Variable' already exists");
}
}
});
// Create and configure the "Delete" button
delete = new Button(parent, SWT.PUSH | SWT.CENTER);
delete.setText("Delete");
gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gridData.widthHint = 80;
delete.setLayoutData(gridData);
delete.addSelectionListener(new SelectionAdapter() {
// Remove the selection and refresh the view
public void widgetSelected(SelectionEvent e) {
VarVal tableRow = (VarVal) ((IStructuredSelection) tableViewer.getSelection())
.getFirstElement();
if (tableRow != null) {
tableRowList.removeTableRow(tableRow);
}
}
});
}
/**
* Return the column names in a collection
*
* @return List containing column names
*/
public java.util.List getColumnNames() {
return Arrays.asList(columnNames);
}
/**
* @return currently selected item
*/
public ISelection getSelection() {
return tableViewer.getSelection();
}
/**
* Return the VarValList
*/
public VarValList getTableRowList() {
return tableRowList;
}
/**
* Return the parent composite
*/
public Control getControl() {
return table.getParent();
}
/**
* Return the 'close' Button
*/
public Button getCloseButton() {
return closeButton;
}
}