2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.propertysheet
.namerelations
.wizard
;
12 import org
.eclipse
.core
.databinding
.beans
.BeansObservables
;
13 import org
.eclipse
.core
.databinding
.observable
.list
.WritableList
;
14 import org
.eclipse
.core
.databinding
.observable
.map
.IObservableMap
;
15 import org
.eclipse
.jface
.databinding
.viewers
.ObservableListContentProvider
;
16 import org
.eclipse
.jface
.databinding
.viewers
.ObservableMapLabelProvider
;
17 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
18 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
19 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
20 import org
.eclipse
.jface
.viewers
.TableViewer
;
21 import org
.eclipse
.jface
.wizard
.Wizard
;
22 import org
.eclipse
.jface
.wizard
.WizardDialog
;
23 import org
.eclipse
.jface
.wizard
.WizardPage
;
24 import org
.eclipse
.swt
.SWT
;
25 import org
.eclipse
.swt
.events
.SelectionAdapter
;
26 import org
.eclipse
.swt
.events
.SelectionEvent
;
27 import org
.eclipse
.swt
.graphics
.Image
;
28 import org
.eclipse
.swt
.layout
.GridData
;
29 import org
.eclipse
.swt
.layout
.GridLayout
;
30 import org
.eclipse
.swt
.widgets
.Button
;
31 import org
.eclipse
.swt
.widgets
.Composite
;
32 import org
.eclipse
.swt
.widgets
.Table
;
34 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationship
;
35 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
36 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
37 import eu
.etaxonomy
.cdm
.model
.name
.ZoologicalName
;
38 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
39 import eu
.etaxonomy
.taxeditor
.store
.model
.ImageResources
;
40 import eu
.etaxonomy
.taxeditor
.store
.model
.NameRelationsUtil
;
41 import eu
.etaxonomy
.taxeditor
.store
.model
.NameUtil
;
48 public class ListNameRelationsWizardPage
extends WizardPage
{
50 private Table nameRelationsTable
;
51 private WritableList nameRelationsList
= new WritableList();
52 private TaxonNameBase
<?
, ?
> name
;
54 private Button btnRemove
;
55 private Button btnEdit
;
57 private NameRelationship selectedRelation
;
59 private boolean isZoological
= false;
61 public ListNameRelationsWizardPage(TaxonNameBase
<?
, ?
> name
, WritableList nameRelationsList
) {
65 this.nameRelationsList
= nameRelationsList
;
66 if (name
instanceof ZoologicalName
) {
70 setTitle("Nomenclatural relations for \""
71 + NameUtil
.getDisplayName(name
) + "\".");
72 setDescription("Select a relation and click \"Edit ...\" or \"Remove\", or click \"Add ...\" to create a new relation.");
75 public void createControl(Composite parent
) {
76 Composite container
= new Composite(parent
, SWT
.NULL
);
77 final GridLayout gridLayout
= new GridLayout();
78 gridLayout
.numColumns
= 3;
79 container
.setLayout(gridLayout
);
81 setControl(container
);
83 btnEdit
= new Button(container
, SWT
.NONE
);
84 btnEdit
.setText("Edit ...");
86 btnRemove
= new Button(container
, SWT
.NONE
);
87 btnRemove
.setText("Remove");
88 btnRemove
.addSelectionListener(new SelectionAdapter() {
89 public void widgetSelected(SelectionEvent e
) {
90 removeSelectedRelation();
94 setEnableExistingRelationButtons(false);
96 final Button btnAdd
= new Button(container
, SWT
.NONE
);
97 final GridData gd_btnAdd
= new GridData(SWT
.RIGHT
, SWT
.CENTER
, true,
99 btnAdd
.setLayoutData(gd_btnAdd
);
100 btnAdd
.setText("Add ...");
101 btnAdd
.addSelectionListener(new SelectionAdapter() {
102 public void widgetSelected(SelectionEvent e
) {
107 final TableViewer tableViewer
= new TableViewer(container
, SWT
.BORDER
| SWT
.SINGLE
);
109 nameRelationsTable
= tableViewer
.getTable();
110 nameRelationsTable
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true,
112 nameRelationsTable
.addSelectionListener(new SelectionAdapter() {
113 public void widgetSelected(SelectionEvent e
) {
114 // TODO: As long as onNameBase.removeNameRelationship() doesn't work, "Remove" stays disabled ...
115 setEnableExistingRelationButtons(true);
116 if (e
.item
.getData() instanceof NameRelationship
) {
117 setSelectedRelation((NameRelationship
) e
.item
.getData());
122 ObservableListContentProvider providerList
= new ObservableListContentProvider();
123 tableViewer
.setContentProvider(providerList
);
125 IObservableMap
[] providerMaps
= BeansObservables
.observeMaps(
126 providerList
.getKnownElements(), NameRelationship
.class,
127 new String
[] { "fromName", "toName", "type" });
128 tableViewer
.setLabelProvider(new ObservableMapLabelProvider(
130 public String
getColumnText(Object element
, int columnIndex
) {
131 if (element
instanceof NameRelationship
) {
132 NameRelationship nameRelationship
= (NameRelationship
) element
;
133 return getRelationshipString(nameRelationship
);
138 public Image
getColumnImage(Object element
, int columnIndex
) {
139 if (element
instanceof NameRelationship
) {
140 NameRelationship nameRelationship
= (NameRelationship
) element
;
141 return getRelationshipImage(nameRelationship
);
146 tableViewer
.setInput(nameRelationsList
);
147 tableViewer
.addDoubleClickListener(new IDoubleClickListener() {
148 public void doubleClick(DoubleClickEvent event
) {
149 if (((StructuredSelection
) event
.getSelection())
150 .getFirstElement() instanceof NameRelationship
) {
151 // FIXME nothing is happening here
152 NameRelationship relation
= (NameRelationship
) ((StructuredSelection
) event
153 .getSelection()).getFirstElement();
154 // Editing existing relations disabled
155 // createRelationWizard(relation);
164 protected void removeSelectedRelation() {
165 if (getSelectedRelation() != null) {
166 nameRelationsList
.remove(getSelectedRelation());
167 setSelectedRelation(null);
174 protected void addRelation() {
175 Wizard wizard
= new NameRelationWizard(name
, nameRelationsList
);
177 WizardDialog dialog
= new WizardDialog(EditorUtil
.getShell(), wizard
);
182 private void setSelectedRelation(NameRelationship selectedRelation
) {
183 this.selectedRelation
= selectedRelation
;
186 private NameRelationship
getSelectedRelation() {
187 return selectedRelation
;
190 protected void setEnableExistingRelationButtons(boolean enabled
) {
191 btnRemove
.setEnabled(enabled
);
192 btnEdit
.setEnabled(false);
195 private Image
getRelationshipImage(NameRelationship nameRelationship
) {
196 if (nameRelationship
.getType().equals(NameRelationshipType
.BASIONYM())) {
200 return ImageResources
.getImage(
201 ImageResources
.BASIONYM_ICON
);
203 if (nameRelationship
.getType().equals(
204 NameRelationshipType
.ORTHOGRAPHIC_VARIANT())) {
205 return ImageResources
.getImage(
206 ImageResources
.ORTHOGRAPHIC_VARIANT_ICON
);
208 // return TaxEditorPlugin.getDefault().getImage(
209 // ITaxEditorConstants.EDIT_ICON);
213 private String
getRelationshipString(NameRelationship nameRelationship
) {
214 String fromName
= null;
216 String toName
= null;
217 if (nameRelationship
.getFromName() == null) {
220 fromName
= NameUtil
.getDisplayName(nameRelationship
.getFromName());
222 if (nameRelationship
.getType() == null) {
225 type
= NameRelationsUtil
.getNameRelationTypeLabel(nameRelationship
.getType(), isZoological
);
227 if (nameRelationship
.getToName() == null) {
230 toName
= NameUtil
.getDisplayName(nameRelationship
.getToName());
232 return "\"" + fromName
+ "\" is \"" + type
+ "\" of \"" + toName
+ "\"";