import org.eclipse.jface.viewers.ViewerComparator;\r
import org.eclipse.jface.wizard.WizardPage;\r
import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.KeyAdapter;\r
+import org.eclipse.swt.events.KeyEvent;\r
import org.eclipse.swt.events.ModifyEvent;\r
import org.eclipse.swt.events.ModifyListener;\r
import org.eclipse.swt.events.SelectionAdapter;\r
private WritableList observableSearchResultsList = new WritableList();\r
private NonViralName noResultsDummyName = NonViralName.NewInstance(null);\r
\r
+ private Button btnSearch;\r
+\r
public ChooseRelatedNameWizardPage(NameRelationWizardModel relationModel) {\r
super("");\r
\r
}\r
\r
public void createControl(Composite parent) {\r
+ \r
+ // Create composite for popup dialog \r
Composite container = new Composite(parent, SWT.NULL);\r
final GridLayout gridLayout = new GridLayout();\r
gridLayout.numColumns = 3;\r
container.setLayout(gridLayout);\r
-\r
setControl(container);\r
\r
+ // Create search text\r
final Label lblChooseName = new Label(container, SWT.NONE);\r
lblChooseName.setText("Choose name for relation:");\r
new Label(container, SWT.NONE);\r
new Label(container, SWT.NONE);\r
\r
+ // Create input field for search term\r
txtName = new Text(container, SWT.BORDER);\r
txtName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+ \r
+ // Listen for user hitting <CR> in input field\r
+ txtName.addKeyListener(new KeyAdapter() {\r
+ public void keyReleased(KeyEvent e) {\r
+ int key = e.keyCode;\r
+ if (key == SWT.CR) {\r
+ populateSearchResults();\r
+ }\r
+ }\r
+ });\r
\r
- final Button btnSearch = new Button(container, SWT.NONE);\r
+ // Create "Search" button\r
+ btnSearch = new Button(container, SWT.NONE);\r
btnSearch.setEnabled(false);\r
btnSearch.setLayoutData(new GridData());\r
btnSearch.setText("Search");\r
btnSearch.addSelectionListener(new SelectionAdapter() {\r
+ \r
+ // Populate search results resultsTable after clicking button\r
public void widgetSelected(SelectionEvent e) {\r
- String searchText = txtName.getText();\r
- btnSearch.setEnabled(false);\r
- Set<TaxonNameBase> results = CdmUtil.getNameByName(searchText);\r
-\r
- observableSearchResultsList.clear();\r
- if (results.size() == 0) {\r
- // Populate observable list with dummy name\r
- observableSearchResultsList.add(noResultsDummyName);\r
- } else {\r
- observableSearchResultsList.addAll(results);\r
- }\r
- btnSearch.setEnabled(true);\r
+ populateSearchResults();\r
}\r
});\r
\r
+ // Create "Create New Name" button\r
final Button btnNewName = new Button(container, SWT.NONE);\r
btnNewName.setEnabled(false);\r
btnNewName.setText("Create New Name");\r
btnNewName.addSelectionListener(new SelectionAdapter() {\r
+ \r
+ // Use input field text to create and select a new name\r
public void widgetSelected(SelectionEvent e) {\r
setRawNewName(txtName.getText());\r
btnNewName.setEnabled(false);\r
}\r
});\r
+ \r
+ // Create results viewer\r
createSearchResultsViewer(container);\r
\r
+ // Enable / disable buttons according to whether there is input text or not\r
txtName.addModifyListener(new ModifyListener() {\r
public void modifyText(ModifyEvent e) {\r
if (txtName.getText().length() > 0) {\r
}\r
});\r
\r
+ // Create text field to display selected name\r
txtNewName = new Text(container, SWT.BORDER);\r
final GridData gd_txtNewName = new GridData(SWT.FILL, SWT.CENTER, true,\r
false, 3, 1);\r
SWT.COLOR_WHITE));\r
txtNewName.setEditable(false);\r
\r
+ // If editing an existing relation, show the related name\r
if (relationModel.getRelatedName() != null) {\r
txtNewName.setText(CdmUtil.getDisplayName(relationModel.getRelatedName()));\r
nameSelected = true;\r
}\r
}\r
\r
+ protected void populateSearchResults() {\r
+ String searchText = txtName.getText();\r
+ btnSearch.setEnabled(false);\r
+ Set<TaxonNameBase> results = CdmUtil.getNameByName(searchText);\r
+\r
+ observableSearchResultsList.clear();\r
+ if (results.size() == 0) {\r
+ // Populate observable list with dummy name\r
+ observableSearchResultsList.add(noResultsDummyName);\r
+ } else {\r
+ observableSearchResultsList.addAll(results);\r
+ }\r
+ btnSearch.setEnabled(true);\r
+ }\r
+\r
private void createSearchResultsViewer(Composite parent) {\r
// TODO no reason to use observable lists and all that nonsense\r
// implement à la propertysheet.reference.ReferenceSearchDialog instead\r