/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
+ * Copyright (C) 2007 EDIT\r
+ * European Distributed Institute of Taxonomy \r
+ * http://www.e-taxonomy.eu\r
+ * \r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
\r
package eu.etaxonomy.taxeditor.view;\r
\r
import java.util.List;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.observable.set.IObservableSet;\r
import org.eclipse.jface.dialogs.Dialog;\r
import org.eclipse.jface.dialogs.IDialogConstants;\r
import org.eclipse.jface.viewers.DoubleClickEvent;\r
import org.eclipse.swt.events.FocusListener;\r
import org.eclipse.swt.events.SelectionAdapter;\r
import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.graphics.Font;\r
+import org.eclipse.swt.graphics.FontData;\r
import org.eclipse.swt.graphics.Point;\r
import org.eclipse.swt.layout.FillLayout;\r
import org.eclipse.swt.layout.GridData;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Control;\r
import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Event;\r
import org.eclipse.swt.widgets.Group;\r
import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Listener;\r
import org.eclipse.swt.widgets.Shell;\r
import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.swt.widgets.TreeItem;\r
\r
-import com.swtdesigner.ResourceManager;\r
import com.swtdesigner.SWTResourceManager;\r
\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
/**\r
- * This is a generic dialog that allows the user to choose a\r
- * taxon via the taxonomic tree, recently selected names, or search. \r
+ * This is a generic dialog that allows the user to choose a taxon via the\r
+ * taxonomic tree, recently selected names, or search.\r
* \r
* @author p.ciardelli\r
* @created 27.05.2008\r
* @version 1.0\r
*/\r
public class SelectTaxonDialog extends Dialog {\r
- private Text taxonNameText;\r
private static final Logger logger = Logger\r
.getLogger(SelectTaxonDialog.class);\r
- \r
+\r
public static final String TAXON_TO_SYNONYM = "taxontosynonym";\r
\r
private String dialogType;\r
private String shellText;\r
private String descriptionText;\r
- \r
+ private Text taxonNameText;\r
+\r
private TaxonomicTreeViewer treeViewer;\r
private Taxon taxon;\r
private Taxon destinationTaxon;\r
private List<Button> buttons = new ArrayList<Button>();\r
\r
private Composite selectComposite;\r
- \r
+\r
public SelectTaxonDialog(Shell parentShell, String dialogType) {\r
super(parentShell);\r
this.dialogType = dialogType;\r
}\r
- \r
+\r
public Taxon open(Taxon taxon) {\r
this.taxon = taxon;\r
- \r
+\r
if (dialogType.equals(TAXON_TO_SYNONYM)) {\r
this.shellText = "Choose an accepted name for \""\r
- + taxon.getName().getTitleCache() + "\"";\r
+ + CdmUtil.getDisplayName(taxon) + "\"";\r
this.descriptionText = "You have chosen to turn \""\r
- + taxon.getName().getTitleCache()\r
+ + CdmUtil.getDisplayName(taxon)\r
+ "\" into a synonym. Please choose a new accepted name from one of the following options.";\r
}\r
- \r
+\r
int returnCode = super.open();\r
if (returnCode == OK) {\r
return destinationTaxon;\r
\r
/**\r
* Create contents of the dialog\r
+ * \r
* @param parent\r
*/\r
@Override\r
container.setLayout(gridLayout);\r
\r
final Label descriptionLabel = new Label(container, SWT.WRAP);\r
- descriptionLabel.setLayoutData(new GridData(SWT.LEFT, SWT.FILL,\r
- true, false, 2, 1));\r
+ descriptionLabel.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true,\r
+ false, 2, 1));\r
descriptionLabel.setText(descriptionText);\r
\r
final Group taxTreeGroup = new Group(container, SWT.NONE);\r
gd_group_1.heightHint = 83;\r
taxTreeGroup.setLayoutData(gd_group_1);\r
\r
- final Button chooseTreeButton = new Button(taxTreeGroup,\r
- SWT.RADIO);\r
+ final Button chooseTreeButton = new Button(taxTreeGroup, SWT.RADIO);\r
buttons.add(chooseTreeButton);\r
- chooseTreeButton.setLayoutData(new GridData(SWT.FILL,\r
- SWT.CENTER, true, false));\r
+ chooseTreeButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,\r
+ false));\r
chooseTreeButton.setText("Choose from taxonomic tree");\r
\r
Composite taxTreeComposite = new Composite(taxTreeGroup, SWT.BORDER);\r
SWT.COLOR_WHITE));\r
\r
treeViewer = new TaxonomicTreeViewer(taxTreeComposite);\r
+\r
+ IObservableSet observableTaxonSet = TaxEditorPlugin.getDefault()\r
+ .getObservableSessionTaxa();\r
+ treeViewer.setLabelProvider(new TaxonomicTreeLabelProvider(\r
+ observableTaxonSet) {\r
+\r
+ });\r
treeViewer.getTree().addFocusListener(\r
new SelectButtonFocusListener(chooseTreeButton));\r
treeViewer.addDoubleClickListener(new SelectTaxonDoubleClickListener());\r
+ treeViewer.getTree().addListener(SWT.PaintItem, new Listener() {\r
+ \r
+ /** If MenuItem with taxon is being drawn, put it in italics.\r
+ * \r
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)\r
+ **/\r
+ public void handleEvent(Event event) {\r
+ Object data = event.item.getData();\r
+ if (data instanceof Taxon && ((Taxon) data).equals(taxon)) {\r
+ ((TreeItem) event.item).setFont(TaxEditorPlugin.getDefault().getFont\r
+ (ITaxEditorConstants.MENU_ITEM_ITALICS));\r
+ }\r
+ }\r
+ });\r
+\r
+ // Open up tree to reveal taxon\r
+ treeViewer.revealTaxon(taxon);\r
\r
final Composite rightPaneComposite = new Composite(container, SWT.NONE);\r
- rightPaneComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
- rightPaneComposite.setLayout(new FillLayout(SWT.VERTICAL | SWT.HORIZONTAL));\r
+ rightPaneComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,\r
+ true));\r
+ rightPaneComposite.setLayout(new FillLayout(SWT.VERTICAL\r
+ | SWT.HORIZONTAL));\r
\r
final Group recentNamesGroup = new Group(rightPaneComposite, SWT.NONE);\r
recentNamesGroup.setLayout(new GridLayout());\r
searchButton.setLayoutData(new GridData());\r
searchButton.setText("Search");\r
\r
- \r
selectComposite = new Composite(container, SWT.NONE);\r
selectComposite.setLayout(new RowLayout());\r
- selectComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.BOTTOM,\r
- true, false, 2, 1)); \r
+ selectComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.BOTTOM, true,\r
+ false, 2, 1));\r
\r
taxonNameText = new Text(selectComposite, SWT.BORDER);\r
taxonNameText.setFont(SWTResourceManager.getFont("", 12, SWT.BOLD));\r
}\r
\r
public void setSelectedTaxon(Taxon taxon) {\r
- \r
+\r
this.destinationTaxon = taxon;\r
TaxonNameBase taxonName = taxon.getName();\r
if (taxonName == null) {\r
return;\r
}\r
- \r
+\r
taxonNameText.setText(taxonName.getTitleCache());\r
- \r
+\r
setOkEnabled(true);\r
- } \r
- \r
+ }\r
+\r
/**\r
* Create contents of the button bar\r
+ * \r
* @param parent\r
*/\r
@Override\r
public void setOkEnabled(boolean enabled) {\r
getButton(IDialogConstants.OK_ID).setEnabled(enabled);\r
}\r
- \r
+\r
private void initButtons() {\r
for (Button button : buttons) {\r
button.addSelectionListener(new SelectionAdapter() {\r
});\r
}\r
}\r
- \r
+\r
/**\r
* Since buttons are not in the same layout group, the others are not\r
* automatically deselected when one is selected. This method takes care of\r
button.setSelection(false);\r
}\r
}\r
- \r
+\r
/**\r
* Return the initial size of the dialog\r
*/\r
protected Point getInitialSize() {\r
return new Point(700, 500);\r
}\r
+\r
protected void configureShell(Shell newShell) {\r
super.configureShell(newShell);\r
- newShell.setImage(ResourceManager.getPluginImage(TaxEditorPlugin\r
- .getDefault(), "icons/edit_16x16.ico"));\r
+ newShell.setImage(TaxEditorPlugin.getDefault().getImage(\r
+ ITaxEditorConstants.EDIT_ICON));\r
newShell.setText(shellText);\r
- } \r
- \r
+ }\r
+\r
class SelectButtonFocusListener implements FocusListener {\r
\r
- Button button; // the button that should be selected\r
+ /**\r
+ * The button whose group has gained focus.\r
+ */\r
+ Button button;\r
\r
SelectButtonFocusListener(Button button) {\r
this.button = button;\r
e.printStackTrace();\r
taxon = null;\r
}\r
- \r
+ if (taxon.equals(SelectTaxonDialog.this.taxon)) {\r
+ return;\r
+ }\r
+\r
setSelectedTaxon(taxon);\r
}\r
- } \r
+ }\r
}\r