1 package eu
.etaxonomy
.taxeditor
.prototype2
.view
;
3 import java
.beans
.PropertyChangeEvent
;
4 import java
.util
.ArrayList
;
7 import org
.eclipse
.core
.databinding
.DataBindingContext
;
8 import org
.eclipse
.core
.databinding
.beans
.BeansObservables
;
9 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
10 import org
.eclipse
.jface
.databinding
.swt
.SWTObservables
;
11 import org
.eclipse
.jface
.text
.Document
;
12 import org
.eclipse
.jface
.text
.source
.SourceViewer
;
13 import org
.eclipse
.swt
.SWT
;
14 import org
.eclipse
.swt
.custom
.StyledText
;
15 import org
.eclipse
.swt
.events
.FocusEvent
;
16 import org
.eclipse
.swt
.events
.FocusListener
;
17 import org
.eclipse
.swt
.events
.KeyAdapter
;
18 import org
.eclipse
.swt
.events
.KeyEvent
;
19 import org
.eclipse
.swt
.events
.MouseEvent
;
20 import org
.eclipse
.swt
.events
.SelectionAdapter
;
21 import org
.eclipse
.swt
.events
.SelectionEvent
;
22 import org
.eclipse
.swt
.events
.SelectionListener
;
23 import org
.eclipse
.swt
.graphics
.Point
;
24 import org
.eclipse
.swt
.graphics
.Rectangle
;
25 import org
.eclipse
.swt
.layout
.GridData
;
26 import org
.eclipse
.swt
.layout
.GridLayout
;
27 import org
.eclipse
.swt
.widgets
.Composite
;
28 import org
.eclipse
.swt
.widgets
.CoolBar
;
29 import org
.eclipse
.swt
.widgets
.CoolItem
;
30 import org
.eclipse
.swt
.widgets
.Display
;
31 import org
.eclipse
.swt
.widgets
.Event
;
32 import org
.eclipse
.swt
.widgets
.Label
;
33 import org
.eclipse
.swt
.widgets
.Listener
;
34 import org
.eclipse
.swt
.widgets
.Menu
;
35 import org
.eclipse
.swt
.widgets
.MenuItem
;
36 import org
.eclipse
.swt
.widgets
.Text
;
37 import org
.eclipse
.swt
.widgets
.ToolBar
;
38 import org
.eclipse
.swt
.widgets
.ToolItem
;
39 import org
.eclipse
.ui
.IEditorInput
;
40 import org
.eclipse
.ui
.IEditorSite
;
41 import org
.eclipse
.ui
.PartInitException
;
42 import org
.eclipse
.ui
.part
.EditorPart
;
43 import com
.swtdesigner
.ResourceManager
;
44 import com
.swtdesigner
.SWTResourceManager
;
46 import eu
.etaxonomy
.cdm
.model
.name
.TaxonName
;
47 import eu
.etaxonomy
.taxeditor
.prototype2
.model
.PropertySheetNode
;
48 import eu
.etaxonomy
.taxeditor
.prototype2
.view
.MySourceViewerConfig
;
49 import eu
.etaxonomy
.taxeditor
.prototype2
.controller
.FullNameTextViewerConfig
;
50 import eu
.etaxonomy
.taxeditor
.prototype2
.controller
.PropertySheetContentProvider
;
51 import eu
.etaxonomy
.taxeditor
.prototype2
.controller
.PropertySheetValueLabelProvider
;
52 import eu
.etaxonomy
.taxeditor
.prototype2
.controller
.SaveNameAction
;
53 import eu
.etaxonomy
.taxeditor
.prototype2
.Activator
;
55 public class NameEditorView
extends EditorPart
{
57 private StyledText styledText
;
58 private TaxonName taxonname
;
59 private Text clickHereToText
;
61 public boolean dirtyBoy
= false;
64 private DataBindingContext bindingContext
= new DataBindingContext();
66 public static final String ID
= "eu.etaxonomy.taxeditor.prototype2.view.nameeditorview"; //$NON-NLS-1$
69 * Create contents of the editor part
73 public void createPartControl(Composite parent
) {
77 // txtPlay = new Text(container, SWT.BORDER);
78 // txtPlay.setCapture(true);
79 // final GridData gd_txtPlay = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
80 // gd_txtPlay.heightHint = 96;
81 // txtPlay.setLayoutData(gd_txtPlay);
82 //// txtPlay.addVerifyListener(new VerifyListener() {
84 //// public void verifyText(VerifyEvent e) {
85 //// e.doit = Character.isDigit(e.character);
88 // txtPlay.addSelectionListener(new SelectionListener() {
91 // public void widgetDefaultSelected(SelectionEvent e) {
92 // // TODO Auto-generated method stub
97 // public void widgetSelected(SelectionEvent e) {
98 // System.out.println(e.toString());
105 // txtPlay.addKeyListener(new KeyListener() {
107 // public void keyPressed(KeyEvent e) {
108 // System.out.println(e.character);
109 // if (e.character == '=') {
110 // Shell shell = Activator.getDefault().getWorkbench().
111 // getActiveWorkbenchWindow().getShell();
112 // PopupList list = new PopupList(shell, SWT.H_SCROLL | SWT.V_SCROLL);
114 //// Combo list = new Combo(shell, SWT.H_SCROLL | SWT.V_SCROLL);
116 // // Add the items to the list
117 // String[] OPTIONS = { "Create homo. syn.",
118 // "Create hetero. syn.",
119 // "Create mis. name",
120 // "Create homonym"};
122 // list.setItems(OPTIONS);
124 // // Open the list and get the selected item
125 // String selected = list.open(txtPlay.getBounds());
127 // // Print the item to the console
128 // System.out.println(selected);
133 // public void keyReleased(KeyEvent e) {
134 // // TODO Auto-generated method stub
138 parent
.setLayout(new GridLayout());
141 final Label taxonomicallyIncludedInLabel
= new Label(parent
, SWT
.NONE
);
142 taxonomicallyIncludedInLabel
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, false, false));
143 taxonomicallyIncludedInLabel
.setText("Higher taxon: ");
145 final CoolBar coolBar
= new CoolBar(parent
, SWT
.NONE
);
146 new CoolItem(coolBar
, SWT
.PUSH
).setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/save_edit.gif"));
149 final ToolBar toolBar
= new ToolBar(parent
, SWT
.NONE
);
150 // toolBar.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
152 final ToolItem itemSave
= new ToolItem(toolBar
, SWT
.PUSH
);
153 // final CoolItem itemSave = new CoolItem(coolBar, SWT.PUSH);
154 itemSave
.setToolTipText("Save taxon \"" + taxonname
.getName() + "\"");
155 itemSave
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/save_edit.gif"));
156 itemSave
.addSelectionListener(new SelectionListener() {
157 public void mouseDown(final MouseEvent e
) {
159 // taxonname.setGenus(txtGenus.getText());
160 // taxonname.setSpecificEpithet(txtSpEpi.getText());
162 new SaveNameAction(taxonname
).run();
165 public void widgetDefaultSelected(SelectionEvent e
) {
166 new SaveNameAction(taxonname
).run();
169 public void widgetSelected(SelectionEvent e
) {
170 new SaveNameAction(taxonname
).run();
174 final ToolItem itemMove
= new ToolItem(toolBar
, SWT
.DROP_DOWN
);
175 itemMove
.setToolTipText("Move taxon \"" + taxonname
.getName() + "\"");
177 final Menu menuMove
= new Menu(toolBar
);
178 addDropDown(itemMove
, menuMove
);
180 final MenuItem moveTaxonpilosellaMenuItem
= new MenuItem(menuMove
, SWT
.NONE
);
181 moveTaxonpilosellaMenuItem
.setText("Move taxon \"" + taxonname
.getName() + "\" to another higher taxon");
182 moveTaxonpilosellaMenuItem
.addSelectionListener(new SelectionAdapter() {
183 public void widgetSelected(final SelectionEvent e
) {
184 new MoveDialogView(getSite().getShell());
185 MoveDialogView dialog
= new MoveDialogView(getSite().getShell());
190 final MenuItem turnTaxonpilosellaMenuItem
= new MenuItem(menuMove
, SWT
.NONE
);
191 turnTaxonpilosellaMenuItem
.setSelection(true);
192 turnTaxonpilosellaMenuItem
.setText("Turn taxon \"" + taxonname
.getName() + "\" into a synonym");
193 turnTaxonpilosellaMenuItem
.addSelectionListener(new SelectionAdapter() {
194 public void widgetSelected(final SelectionEvent e
) {
195 new MoveDialogView(getSite().getShell());
196 MoveDialogView dialog
= new MoveDialogView(getSite().getShell());
201 itemMove
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/correction_change.gif"));
203 final ToolItem itemDelete
= new ToolItem(toolBar
, SWT
.NONE
);
204 itemDelete
.setToolTipText("Delete taxon \"" + taxonname
.getName() + "\"");
205 itemDelete
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/delete_edit.gif"));
207 final ToolItem separator1
= new ToolItem(toolBar
, SWT
.SEPARATOR
);
209 final ToolItem itemAddRelationship
= new ToolItem(toolBar
, SWT
.DROP_DOWN
);
210 itemAddRelationship
.setToolTipText("Add nom. or tax. relation to \"" + taxonname
.getName() + "\"");
211 itemAddRelationship
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/rel_no_bg.gif"));
213 final Menu menuAddRel
= new Menu(toolBar
);
214 menuAddRel
.setData("x", null);
215 addDropDown(itemAddRelationship
, menuAddRel
);
217 final MenuItem testMenuItem
= new MenuItem(menuAddRel
, SWT
.NONE
);
218 testMenuItem
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/unknown_no_bg.gif"));
219 testMenuItem
.setText("Add synonymy (type unknown)");
221 final MenuItem addHomotypicSynonymMenuItem
= new MenuItem(menuAddRel
, SWT
.NONE
);
222 addHomotypicSynonymMenuItem
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/homosyn_no_bg.gif"));
223 addHomotypicSynonymMenuItem
.setText("Add homotypic synonym");
225 final MenuItem addHeterotypicSynoynmMenuItem
= new MenuItem(menuAddRel
, SWT
.NONE
);
226 addHeterotypicSynoynmMenuItem
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/heterosyn_no_bg.gif"));
227 addHeterotypicSynoynmMenuItem
.setText("Add heterotypic synoynm");
229 final MenuItem addBasionymMenuItem
= new MenuItem(menuAddRel
, SWT
.NONE
);
230 addBasionymMenuItem
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/basionym_no_bg.gif"));
231 addBasionymMenuItem
.setText("Add basionym");
233 final MenuItem addReplacedSynonymMenuItem
= new MenuItem(menuAddRel
, SWT
.NONE
);
234 addReplacedSynonymMenuItem
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/repsyn_no_bg.gif"));
235 addReplacedSynonymMenuItem
.setText("Add replaced synonym");
237 final MenuItem addHomonymMenuItem
= new MenuItem(menuAddRel
, SWT
.NONE
);
238 addHomonymMenuItem
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/homonym_no_bg.gif"));
239 addHomonymMenuItem
.setText("Add homonym");
241 final MenuItem addOrthographicVariantMenuItem
= new MenuItem(menuAddRel
, SWT
.NONE
);
242 addOrthographicVariantMenuItem
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/orthovariant_no_bg.gif"));
243 addOrthographicVariantMenuItem
.setText("Add orthographic variant");
245 final MenuItem addMisappliedNameMenuItem
= new MenuItem(menuAddRel
, SWT
.NONE
);
246 addMisappliedNameMenuItem
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/misapplied_no_bg.gif"));
247 addMisappliedNameMenuItem
.setText("Add misapplied name");
249 final MenuItem addConceptRelationMenuItem_1
= new MenuItem(menuAddRel
, SWT
.CASCADE
);
250 addConceptRelationMenuItem_1
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/concept_no_bg.gif"));
251 addConceptRelationMenuItem_1
.setText("Add concept relation");
253 final Menu menu
= new Menu(addConceptRelationMenuItem_1
);
254 addConceptRelationMenuItem_1
.setMenu(menu
);
256 final MenuItem checkboxMenuItem
= new MenuItem(menu
, SWT
.CHECK
);
257 checkboxMenuItem
.setText("congruent");
259 final MenuItem checkboxMenuItem_1
= new MenuItem(menu
, SWT
.CHECK
);
260 checkboxMenuItem_1
.setSelection(true);
261 checkboxMenuItem_1
.setText("included in");
263 final MenuItem checkboxMenuItem_2
= new MenuItem(menu
, SWT
.CHECK
);
264 checkboxMenuItem_2
.setText("includes");
266 final MenuItem checkboxMenuItem_3
= new MenuItem(menu
, SWT
.CHECK
);
267 checkboxMenuItem_3
.setText("overlaps");
269 final MenuItem checkboxMenuItem_4
= new MenuItem(menu
, SWT
.CHECK
);
270 checkboxMenuItem_4
.setText("excludes");
272 final MenuItem checkboxMenuItem_5
= new MenuItem(menu
, SWT
.CHECK
);
273 checkboxMenuItem_5
.setSelection(true);
274 checkboxMenuItem_5
.setText("doubtful");
276 final ToolItem separator2
= new ToolItem(toolBar
, SWT
.SEPARATOR
);
278 final ToolItem itemAddTaxon
= new ToolItem(toolBar
, SWT
.DROP_DOWN
);
279 itemAddTaxon
.setImage(ResourceManager
.getPluginImage(Activator
.getDefault(), "icons/add_edit.gif"));
280 itemAddTaxon
.setToolTipText("Add new taxon");
282 final Menu menuAdd
= new Menu(toolBar
);
283 menuAdd
.setData("x", null);
284 addDropDown(itemAddTaxon
, menuAdd
);
286 final MenuItem addTaxonToMenuItem
= new MenuItem(menuAdd
, SWT
.NONE
);
287 addTaxonToMenuItem
.setText("Add new taxon to \"" + taxonname
.getName() + "\"");
289 final MenuItem addNewTaxonMenuItem
= new MenuItem(menuAdd
, SWT
.NONE
);
290 addNewTaxonMenuItem
.setText("Add new taxon to \"Pilosella fuscoatra coll.\"");
292 final Composite composite
= new Composite(parent
, SWT
.NONE
);
293 composite
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
294 composite
.setBackground(Display
.getCurrent().getSystemColor(SWT
.COLOR_WHITE
));
295 final GridLayout gridLayout_2
= new GridLayout();
296 gridLayout_2
.horizontalSpacing
= 3;
297 gridLayout_2
.numColumns
= 2;
298 composite
.setLayout(gridLayout_2
);
300 // clickText = "Click here to start entering accepted name or enter its individual fields in the property sheet to the right";
301 clickText
= taxonname
.getName();
303 clickHereToText
= new Text(composite
, SWT
.WRAP
);
304 clickHereToText
.addKeyListener(new KeyAdapter() {
305 public void keyPressed(final KeyEvent e
) {
308 clickHereToText
.setForeground(SWTResourceManager
.getColor(192, 192, 192));
309 clickHereToText
.setText(clickText
);
310 clickHereToText
.setFont(SWTResourceManager
.getFont("Georgia", 12, SWT
.ITALIC
));
311 final GridData gd_clickHereToText
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true);
312 gd_clickHereToText
.widthHint
= 426;
313 clickHereToText
.setLayoutData(gd_clickHereToText
);
314 clickHereToText
.addFocusListener(new FocusListener() {
316 public void focusGained(FocusEvent e
) {
317 // clickHereToText.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
319 clickHereToText
.setText("");
320 clickHereToText
.setFont(SWTResourceManager
.getFont("Georgia", 12, SWT
.NONE
));
321 clickHereToText
.setForeground(SWTResourceManager
.getColor(0, 0, 0));
323 firePropertyChange(PROP_DIRTY
);
327 public void focusLost(FocusEvent e
) {
328 // clickHereToText.setBackground(null);
329 if (clickHereToText
.getText() == "") {
330 clickHereToText
.setForeground(SWTResourceManager
.getColor(192, 192, 192));
331 clickHereToText
.setText(clickText
);
332 clickHereToText
.setFont(SWTResourceManager
.getFont("Georgia", 12, SWT
.ITALIC
));
341 // Construct PropertySheetViewer, with bindings to model layer
342 PropertySheetViewer propertySheetViewer
= new PropertySheetViewer(composite
);
343 propertySheetViewer
.setBindingContext(bindingContext
);
345 propertySheetViewer
.setContentProvider(
346 new PropertySheetContentProvider());
347 propertySheetViewer
.getPropertyValueColumn().setLabelProvider(
348 new PropertySheetValueLabelProvider(propertySheetViewer
));
349 propertySheetViewer
.getPropertyValueColumn().setEditingSupport(
350 new PropertySheetValueEditingSupport(propertySheetViewer
));
352 propertySheetViewer
.setInput(getPropertySheetNodes(taxonname
));
354 // Construct name field(s)
355 FullNameTextViewer acceptedNameViewer
= new FullNameTextViewer(composite
, SWT
.BORDER
| SWT
.WRAP
| SWT
.FULL_SELECTION
| SWT
.FILL
);
356 acceptedNameViewer
.getTextWidget().setLayoutData(new GridData(SWT
.FILL
, SWT
.TOP
, true, false));
357 acceptedNameViewer
.configure(new FullNameTextViewerConfig());
360 // SourceViewer sourceviewer = new SourceViewer(composite, null, SWT.BORDER | SWT.WRAP | SWT.FULL_SELECTION);
361 // sourceviewer.setAnnotationHover(null);
362 // styledText = sourceviewer.getTextWidget();
363 // final GridData gd_styledText = new GridData(SWT.FILL, SWT.TOP, true, false);
364 // gd_styledText.heightHint = 41;
365 // gd_styledText.widthHint = 450;
366 // styledText.setLayoutData(gd_styledText);
367 // sourceviewer.setDocument(doc);
368 // sourceviewer.configure(new MySourceViewerConfig());
369 // sourceviewer.setTabsToSpacesConverter(null);
371 populateForm(); // will this be necessary if databinding is correctly set up?
373 Text testeroo
= new Text(composite
, SWT
.BORDER
);
374 testeroo
.setLayoutData(new GridData(SWT
.FILL
, SWT
.CENTER
, true, false));
376 bindingContext
.bindValue( SWTObservables
.observeText(testeroo
, SWT
.Modify
),
377 BeansObservables
.observeValue(taxonname
,"genus"),
381 // clickHereToText.addKeyListener(new KeyListener() {
383 // public void keyPressed(KeyEvent e) {
389 // public void keyReleased(KeyEvent e) {
390 // // TODO Auto-generated method stub
396 //container.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
401 private void populateForm() {
402 this.setPartName(taxonname
.getName());
406 public void setFocus() {
411 public void doSave(IProgressMonitor monitor
) {
412 // Do the Save operation
416 public void doSaveAs() {
417 // Do the Save As operation
421 public void init(IEditorSite site
, IEditorInput input
) throws PartInitException
{
423 if (!(input
instanceof IEditorInput
))
424 throw new PartInitException(
425 "Invalid Input: Must be IFileEditorInput");
427 if (input
.getAdapter(TaxonName
.class) != null) {
428 taxonname
= (TaxonName
) input
.getAdapter(TaxonName
.class);
438 private List
<PropertySheetNode
> getPropertySheetNodes(TaxonName taxonName
) {
440 List
<PropertySheetNode
> propertySheetNodes
= new ArrayList
<PropertySheetNode
>();
441 PropertySheetNode node
= new PropertySheetNode("Full Name", BeansObservables
.observeValue(taxonName
, "name"),
442 null, PropertySheetNode
.EDITABLE
);
443 propertySheetNodes
.add(node
);
444 new PropertySheetNode("Genus", BeansObservables
.observeValue(taxonName
, "genus"),
445 node
, PropertySheetNode
.EDITABLE
);
446 new PropertySheetNode("Species Epithet", BeansObservables
.observeValue(taxonName
, "specificEpithet"),
447 node
, PropertySheetNode
.EDITABLE
);
449 return propertySheetNodes
;
453 public boolean isDirty() {
458 public boolean isSaveAsAllowed() {
462 private static void addDropDown(final ToolItem item
, final Menu menu
) {
463 item
.addListener(SWT
.Selection
, new Listener() {
464 public void handleEvent(Event event
) {
465 if (event
.detail
== SWT
.ARROW
) {
466 Rectangle rect
= item
.getBounds();
467 Point pt
= new Point(rect
.x
, rect
.y
+ rect
.height
);
468 pt
= item
.getParent().toDisplay(pt
);
469 menu
.setLocation(pt
.x
, pt
.y
);
470 menu
.setVisible(true);