2 * Copyright (C) 2009 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
.type
.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
.NameTypeDesignation
;
35 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignation
;
36 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
37 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationBase
;
38 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
39 import eu
.etaxonomy
.taxeditor
.model
.NameUtil
;
46 public class ListTypeWizardPage
extends WizardPage
{
48 private TaxonNameBase
<?
, ?
> name
;
53 public ListTypeWizardPage(TaxonNameBase
<?
, ?
> name
, WritableList typeDesignationsList
) {
57 this.typeDesignationsList
= typeDesignationsList
;
59 setTitle("Type designations for \""
60 + NameUtil
.getDisplayName(name
) + "\".");
61 setDescription("Select a type designation and click \"Edit ...\" or \"Remove\", or click \"Add ...\" to create a new designation.");
64 private Table typeDesignationsTable
;
65 private WritableList typeDesignationsList
= new WritableList();
67 private Button btnRemove
;
68 private Button btnEdit
;
70 private TypeDesignationBase
<?
> typeDesignation
;
71 private TableViewer tableViewer
;
74 public void createControl(Composite parent
) {
75 Composite container
= new Composite(parent
, SWT
.NULL
);
76 final GridLayout gridLayout
= new GridLayout();
77 gridLayout
.numColumns
= 3;
78 container
.setLayout(gridLayout
);
80 setControl(container
);
82 btnEdit
= new Button(container
, SWT
.NONE
);
83 btnEdit
.setText("Edit ...");
84 btnEdit
.addSelectionListener(new SelectionAdapter() {
85 public void widgetSelected(SelectionEvent e
) {
86 if (getSelectedTypeDesignation() != null) {
87 createTypeDesignationWizard(getSelectedTypeDesignation());
92 btnRemove
= new Button(container
, SWT
.NONE
);
93 btnRemove
.setText("Remove");
94 btnRemove
.addSelectionListener(new SelectionAdapter() {
95 public void widgetSelected(SelectionEvent e
) {
96 if (getSelectedTypeDesignation() != null) {
97 typeDesignationsList
.remove(getSelectedTypeDesignation());
98 setSelectedTypeDesignation(null);
103 setEnableTypeDesignationButtons(false);
105 final Button btnAdd
= new Button(container
, SWT
.NONE
);
106 final GridData gd_btnAdd
= new GridData(SWT
.RIGHT
, SWT
.CENTER
, true,
108 btnAdd
.setLayoutData(gd_btnAdd
);
109 btnAdd
.setText("Add ...");
110 btnAdd
.addSelectionListener(new SelectionAdapter() {
111 public void widgetSelected(SelectionEvent e
) {
112 createTypeDesignationWizard(null);
116 tableViewer
= new TableViewer(container
, SWT
.BORDER
| SWT
.SINGLE
);
118 typeDesignationsTable
= tableViewer
.getTable();
119 typeDesignationsTable
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true,
121 typeDesignationsTable
.addSelectionListener(new SelectionAdapter() {
122 public void widgetSelected(SelectionEvent e
) {
123 setEnableTypeDesignationButtons(true);
124 if (e
.item
.getData() instanceof TypeDesignationBase
) {
125 setSelectedTypeDesignation((TypeDesignationBase
<?
>) e
.item
.getData());
130 ObservableListContentProvider providerList
= new ObservableListContentProvider();
131 tableViewer
.setContentProvider(providerList
);
133 // IObservableMap[] providerMaps = BeansObservables.observeMaps(
134 // providerList.getKnownElements(), SpecimenTypeDesignation.class,
135 // new String[] { "typeSpecimen", "typeStatus" });
136 IObservableMap
[] providerMaps
= BeansObservables
.observeMaps(
137 providerList
.getKnownElements(), TypeDesignationBase
.class,
139 tableViewer
.setLabelProvider(new ObservableMapLabelProvider(
141 public String
getColumnText(Object element
, int columnIndex
) {
142 if (element
instanceof TypeDesignationBase
) {
143 return getTypeDesignationString((TypeDesignationBase
<?
>) element
);
148 public Image
getColumnImage(Object element
, int columnIndex
) {
149 if (element
instanceof TypeDesignationBase
) {
150 return getTypeDesignationImage((TypeDesignationBase
<?
>) element
);
156 tableViewer
.setInput(typeDesignationsList
);
157 tableViewer
.addDoubleClickListener(new IDoubleClickListener() {
158 public void doubleClick(DoubleClickEvent event
) {
159 if (((StructuredSelection
) event
.getSelection())
160 .getFirstElement() instanceof TypeDesignationBase
) {
161 TypeDesignationBase
<?
> typeDesignation
= (TypeDesignationBase
<?
>)
162 ((StructuredSelection
) event
.getSelection()).getFirstElement();
163 createTypeDesignationWizard(typeDesignation
);
169 private void setSelectedTypeDesignation(TypeDesignationBase
<?
> typeDesignation
) {
170 this.typeDesignation
= typeDesignation
;
173 private TypeDesignationBase
<?
> getSelectedTypeDesignation() {
174 return typeDesignation
;
177 private void createTypeDesignationWizard(TypeDesignationBase
<?
> typeDesignation
) {
178 Wizard wizard
= new TypeDesignationWizard(typeDesignation
, name
, typeDesignationsList
);
180 WizardDialog dialog
= new WizardDialog(EditorUtil
.getShell(), wizard
);
183 // if (dialog.open() == Window.OK) ...
186 protected void setEnableTypeDesignationButtons(boolean enabled
) {
187 btnRemove
.setEnabled(enabled
);
188 btnEdit
.setEnabled(enabled
);
191 private Image
getTypeDesignationImage(TypeDesignationBase
<?
> typeDesignation
) {
195 private String
getTypeDesignationString(TypeDesignationBase
<?
> typeDesignation
) {
197 if (typeDesignation
instanceof SpecimenTypeDesignation
) {
198 if (((SpecimenTypeDesignation
) typeDesignation
).getTypeSpecimen() != null) {
199 str
+= ((SpecimenTypeDesignation
) typeDesignation
).getTypeSpecimen().getTitleCache();
203 if (typeDesignation
.getTypeStatus() != null) {
204 str
+= " [" + typeDesignation
.getTypeStatus().getLabel() + "]";
208 if (typeDesignation
instanceof NameTypeDesignation
) {
209 if (((NameTypeDesignation
) typeDesignation
).getTypeName() != null) {
210 str
= ((NameTypeDesignation
) typeDesignation
).getTypeName().getTitleCache();
213 if (((NameTypeDesignation
) typeDesignation
).isLectoType()) {
214 str
+= " (Lectotype)";