blob: c8a618251cdbf4f6b5ef1c31f5b13b50bf82a881 [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.ruta.textruler.ui;
import java.awt.Toolkit;
import java.util.ArrayList;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
public class SelectTypesDialog extends Dialog implements Listener {
private Shell shell;
private Text typeNameUI;
private Table matchingTypesUI;
// private Table nameSpacesUI;
public String typeName = "error-TypeName-never-set";
private ArrayList<String> types;
private Button okButton;
private Button cancelButton;
private AddRemoveList list;
public SelectTypesDialog(Shell shell, ArrayList<String> types, AddRemoveList list) {
super(shell);
this.shell = shell;
this.types = types;
this.list = list;
createDialogArea();
init();
}
protected Control createDialogArea() {
Composite mainArea = (Composite) createDialogArea(shell);
createWideLabel(mainArea, " Type Name:");
typeNameUI = newText(mainArea, SWT.SINGLE, "Specify the type name");
typeNameUI.addListener(SWT.Modify, this);
createWideLabel(mainArea, " Matching Types:");
matchingTypesUI = newTable(mainArea, SWT.MULTI);
((GridData) matchingTypesUI.getLayoutData()).heightHint = 250;
((GridData) matchingTypesUI.getLayoutData()).minimumHeight = 100;
typeNameUI.addListener(SWT.Selection, this);
displayFilteredTypes("");
createButtonBar(mainArea);
return mainArea;
}
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
layout.verticalSpacing = 3;
layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
applyDialogFont(composite);
return composite;
}
@Override
protected Control createButtonBar(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 0;
layout.makeColumnsEqualWidth = true;
layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
composite.setLayout(layout);
GridData data = new GridData(SWT.CENTER, SWT.CENTER, false, false);
composite.setLayoutData(data);
createButtonsForButtonBar(composite);
return composite;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
okButton = createButton(parent, IDialogConstants.OK_ID, "OK", true);
cancelButton = createButton(parent, IDialogConstants.CANCEL_ID, " Cancel ", false);
okButton.setEnabled(false);
}
private void init() {
okButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
TableItem[] types = matchingTypesUI.getSelection();
ArrayList<String> selection = new ArrayList<String>();
for (TableItem item : types) {
selection.add(item.getText());
}
list.addAll(selection);
shell.dispose();
}
});
cancelButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
shell.dispose();
}
});
Display display = Display.getDefault();
int width = 300;
int height = 400;
shell.setSize(width, height);
shell.setMinimumSize(200, 250);
shell.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - width) / 2, (Toolkit
.getDefaultToolkit().getScreenSize().height - height) / 2);
shell.setLayout(new FillLayout());
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
protected Label createWideLabel(Composite parent, String message) {
Label label = null;
label = new Label(parent, SWT.WRAP);
label.setText(null != message ? message : "");
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
data.verticalAlignment = SWT.CENTER;
label.setLayoutData(data);
return label;
}
protected Text newText(Composite parent, int style, String tip) {
Text t = new Text(parent, style | SWT.BORDER);
t.setToolTipText(tip);
t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
t.addListener(SWT.KeyUp, this);
t.addListener(SWT.MouseUp, this);
return t;
}
protected Table newTable(Composite parent, int style) {
Table table = new Table(parent, style | SWT.BORDER);
GridData gd = new GridData(GridData.FILL_BOTH);
table.setLayoutData(gd);
table.addListener(SWT.Selection, this);
table.addListener(SWT.KeyUp, this);
return table;
}
private void displayFilteredTypes(String aTypeName) {
matchingTypesUI.setRedraw(false);
matchingTypesUI.removeAll();
String topEntry = "";
aTypeName = aTypeName.toLowerCase();
for (String type : types) {
String candidateTypeName = type.toLowerCase();
if (StringUtils.isBlank(aTypeName) || candidateTypeName.indexOf(aTypeName) != -1) {
if (StringUtils.isEmpty(topEntry)) {
topEntry = type;
}
TableItem item = new TableItem(matchingTypesUI, SWT.NULL);
item.setText(type);
}
}
// if (matchingTypesUI.getItemCount() > 0) {
// matchingTypesUI.select(0);
// displayNameSpacesForSelectedItem(topEntry);
// }
matchingTypesUI.setRedraw(true);
}
// private void displayNameSpacesForSelectedItem(String topEntry) {
// nameSpacesUI.removeAll();
// TableItem item = new TableItem(nameSpacesUI, SWT.NULL);
// item.setText(topEntry);
// if (nameSpacesUI.getItemCount() > 0) {
// nameSpacesUI.select(0);
// }
// nameSpacesUI.setRedraw(true);
// }
public void handleEvent(Event event) {
if (event.widget == typeNameUI && event.type == SWT.Modify) {
displayFilteredTypes(typeNameUI.getText());
}
else if (event.widget == matchingTypesUI && event.type == SWT.Selection) {
okButton.setEnabled(0 < matchingTypesUI.getSelectionCount());
}
}
public boolean isValid() {
return true;
}
}