package org.reldb.dbrowser.ui.content.rel.var;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Button;
import org.reldb.dbrowser.ui.RevDatabase;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
public class VarTypeDialog extends Dialog {
static private String lastVariableType;
private Shell shlVariableTypeAndName;
private RevDatabase database;
private String variableType;
public VarTypeDialog(Shell shell, int style) {
super(shell, SWT.DIALOG_TRIM | SWT.RESIZE);
}
public VarTypeDialog(RevDatabase database, Shell shell) {
super(shell, SWT.DIALOG_TRIM);
this.database = database;
variableType = null;
}
private static String getVarTypeCode(String varType) {
if (varType == null)
return null;
int colonPos = varType.indexOf(':');
if (colonPos >= 0)
return varType.substring(0, colonPos);
return varType;
}
private static String obtainSelectedType(List listVarType) {
String[] selected = listVarType.getSelection();
if (selected == null || selected.length == 0)
return null;
lastVariableType = getVarTypeCode(selected[0]);
return lastVariableType;
}
/**
* Open the dialog.
* @return the desired variable type
*/
public String open() {
createContents();
shlVariableTypeAndName.open();
shlVariableTypeAndName.layout();
Display display = getParent().getDisplay();
while (!shlVariableTypeAndName.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return getVarTypeCode(variableType);
}
/**
* Create contents of the dialog.
*/
private void createContents() {
shlVariableTypeAndName = new Shell(getParent(), getStyle());
shlVariableTypeAndName.setSize(550, 320);
shlVariableTypeAndName.setText("Variable Type and Name");
shlVariableTypeAndName.setLayout(new FormLayout());
Label lblChooseTheKind = new Label(shlVariableTypeAndName, SWT.NONE);
FormData fd_lblChooseTheKind = new FormData();
fd_lblChooseTheKind.left = new FormAttachment(0, 10);
fd_lblChooseTheKind.top = new FormAttachment(0, 10);
fd_lblChooseTheKind.bottom = new FormAttachment(0, 24);
fd_lblChooseTheKind.right = new FormAttachment(100, -10);
lblChooseTheKind.setLayoutData(fd_lblChooseTheKind);
lblChooseTheKind.setText("Choose the kind of variable you wish to create.");
List listVarType = new List(shlVariableTypeAndName, SWT.BORDER);
FormData fd_listVarType = new FormData();
fd_listVarType.top = new FormAttachment(lblChooseTheKind, 6);
fd_listVarType.left = new FormAttachment(0, 10);
fd_listVarType.right = new FormAttachment(100, -10);
listVarType.setLayoutData(fd_listVarType);
if (lastVariableType == null)
lastVariableType = "REAL";
int index = 0;
for (String relvarType: database.getRelvarTypes()) {
listVarType.add(relvarType);
if (getVarTypeCode(relvarType).equalsIgnoreCase(lastVariableType))
listVarType.setSelection(index);
index++;
}
Button btnCancel = new Button(shlVariableTypeAndName, SWT.NONE);
FormData fd_btnCancel = new FormData();
fd_btnCancel.bottom = new FormAttachment(100, -10);
fd_btnCancel.right = new FormAttachment(100, -10);
btnCancel.setLayoutData(fd_btnCancel);
btnCancel.setText("Cancel");
Button btnOk = new Button(shlVariableTypeAndName, SWT.NONE);
FormData fd_btnOk = new FormData();
fd_btnOk.bottom = new FormAttachment(100, -10);
fd_btnOk.right = new FormAttachment(btnCancel, -10);
btnOk.setLayoutData(fd_btnOk);
btnOk.setText("Ok");
fd_listVarType.bottom = new FormAttachment(btnCancel, -10);
listVarType.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
variableType = obtainSelectedType(listVarType);
}
});
btnCancel.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
variableType = null;
shlVariableTypeAndName.dispose();
}
});
btnOk.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
variableType = obtainSelectedType(listVarType);
shlVariableTypeAndName.dispose();
}
});
listVarType.addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent e) {
variableType = obtainSelectedType(listVarType);
shlVariableTypeAndName.dispose();
}
});
}
}