eclipseprojects/eu.etaxonomy.taxeditor.prototype2/src/eu/etaxonomy/taxeditor/prototype2/view/propertysheetsupport/PropertySheetContentProvider.java -text
eclipseprojects/eu.etaxonomy.taxeditor.prototype2/src/eu/etaxonomy/taxeditor/prototype2/view/propertysheetsupport/PropertySheetValueEditingSupport.java -text
eclipseprojects/eu.etaxonomy.taxeditor.prototype2/src/eu/etaxonomy/taxeditor/prototype2/view/propertysheetsupport/PropertySheetValueLabelProvider.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/.classpath -text
-eclipseprojects/eu.etaxonomy.taxeditor/.project -text
-eclipseprojects/eu.etaxonomy.taxeditor/META-INF/MANIFEST.MF -text
-eclipseprojects/eu.etaxonomy.taxeditor/build.properties -text
-eclipseprojects/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/a_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/add.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/add_edit.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/add_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/add_no_bg2.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/alt_window_16.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/alt_window_32.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/basionym.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/basionym_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/change.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/concept.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/concept_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/correction_change.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/db.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/delete.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/delete_edit.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/edit_16x16.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/edit_16x16.ico -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/heterosyn.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/heterosyn_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/homonym.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/homonym_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/homosyn.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/homosyn_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/impl_co.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/misapplied.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/misapplied_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/move.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/move_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/orthovariant.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/orthovariant_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/rel_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/repsyn.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/repsyn_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/save.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/save_edit.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/text.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/undo.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/unknown.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/unknown_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/icons/warn_tsk.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/plugin.xml -text
-eclipseprojects/eu.etaxonomy.taxeditor/splash.bmp -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/com/swtdesigner/ResourceManager.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/com/swtdesigner/SWTResourceManager.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Activator.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Application.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Perspective.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddQuickName.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddSynonymToTaxon.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionDeleteTaxon.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionMoveTaxon.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionOpenNameEditor.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionOpenNewChildNameEditor.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionPopulatePropertySheet.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionRemoveTaxonFromTree.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionSaveTaxon.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/NameTransfer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/SynonymRelationshipTransfer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/TaxonTransfer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/NameEditorInput.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/NameTreeContentProvider.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/PropertySheetNode.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EmptyEditorView.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MoveDialogView.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonView.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameListView.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameViewer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/PropertySheetViewer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/RecentNamesTableViewer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/TaxonomicTreeViewer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/TestDnD.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/UndoView.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/CompositeRectangle.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/ErrorAnnotation.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/GroupComposite.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameViewerVerifyListener.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/TesterooWritableSet.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/WarningAnnotation.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/heterosyn_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/homosyn_no_bg.gif -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetContentProvider.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueEditingSupport.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueLabelProvider.java -text
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<classpath>\r
- <classpathentry kind="src" path="src"/>\r
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
- <classpathentry kind="output" path="bin"/>\r
-</classpath>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<projectDescription>\r
- <name>eu.etaxonomy.taxeditor.prototype2</name>\r
- <comment></comment>\r
- <projects>\r
- </projects>\r
- <buildSpec>\r
- <buildCommand>\r
- <name>org.eclipse.jdt.core.javabuilder</name>\r
- <arguments>\r
- </arguments>\r
- </buildCommand>\r
- <buildCommand>\r
- <name>org.eclipse.pde.ManifestBuilder</name>\r
- <arguments>\r
- </arguments>\r
- </buildCommand>\r
- <buildCommand>\r
- <name>org.eclipse.pde.SchemaBuilder</name>\r
- <arguments>\r
- </arguments>\r
- </buildCommand>\r
- </buildSpec>\r
- <natures>\r
- <nature>org.eclipse.pde.PluginNature</nature>\r
- <nature>org.eclipse.jdt.core.javanature</nature>\r
- </natures>\r
-</projectDescription>\r
+++ /dev/null
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: EDIT Taxonomic Editor
-Bundle-SymbolicName: eu.etaxonomy.taxeditor;singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Activator: eu.etaxonomy.taxeditor.Activator
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.core.databinding,
- org.eclipse.core.databinding.beans,
- org.eclipse.jface.databinding,
- org.eclipse.jface.text,
- org.eclipse.ui.forms,
- org.eclipse.core.resources,
- eu.etaxonomy.cdmLibrary
-Eclipse-LazyStart: true
-Export-Package: com.swtdesigner,
- eu.etaxonomy.taxeditor,
- eu.etaxonomy.taxeditor.controller,
- eu.etaxonomy.taxeditor.model,
- eu.etaxonomy.taxeditor.view
-Main-Class: eu.etaxonomy.taxeditor.designproposal1.Application
+++ /dev/null
-source.. = src/\r
-output.. = bin/\r
-bin.includes = plugin.xml,\\r
- META-INF/,\\r
- .,\\r
- icons/,\\r
- splash.bmp,\\r
- bin/,\\r
- .project,\\r
- .classpath,\\r
- build.properties,\\r
- eu.etaxonomy.taxeditor.product\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<?pde version="3.1"?>\r
-\r
-<product name="EDIT Taxonomic Editor" id="eu.etaxonomy.taxeditor.designproposal1.product" application="eu.etaxonomy.taxeditor.designproposal1.application" useFeatures="false">\r
-\r
- <aboutInfo>\r
- <image path="icons/edit_16x16.gif"/>\r
- <text>\r
- Thanks for all the laughs!\r
- </text>\r
- </aboutInfo>\r
-\r
- <configIni use="default"/>\r
-\r
- <launcherArgs>\r
- <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>\r
- </launcherArgs>\r
-\r
- <windowImages i16="icons/edit_16x16.gif"/>\r
-\r
- <splash\r
- location="eu.etaxonomy.taxeditor.designproposal1" />\r
- <launcher name="EDIT Taxonomic Editor">\r
- <solaris/>\r
- <win useIco="true">\r
- <ico path="/eu.etaxonomy.taxeditor.designproposal2/icons/edit_16x16.ico"/>\r
- <bmp/>\r
- </win>\r
- </launcher>\r
-\r
- <vm>\r
- <windows type="jre">jre1.5.0_06</windows>\r
- </vm>\r
-\r
- <plugins>\r
- <plugin id="com.ibm.icu"/>\r
- <plugin id="eu.etaxonomy.taxeditor.designproposal1"/>\r
- <plugin id="org.eclipse.core.commands"/>\r
- <plugin id="org.eclipse.core.contenttype"/>\r
- <plugin id="org.eclipse.core.databinding"/>\r
- <plugin id="org.eclipse.core.expressions"/>\r
- <plugin id="org.eclipse.core.jobs"/>\r
- <plugin id="org.eclipse.core.runtime"/>\r
- <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>\r
- <plugin id="org.eclipse.equinox.app"/>\r
- <plugin id="org.eclipse.equinox.common"/>\r
- <plugin id="org.eclipse.equinox.preferences"/>\r
- <plugin id="org.eclipse.equinox.registry"/>\r
- <plugin id="org.eclipse.help"/>\r
- <plugin id="org.eclipse.jface"/>\r
- <plugin id="org.eclipse.jface.databinding"/>\r
- <plugin id="org.eclipse.jface.text"/>\r
- <plugin id="org.eclipse.osgi"/>\r
- <plugin id="org.eclipse.swt"/>\r
- <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>\r
- <plugin id="org.eclipse.text"/>\r
- <plugin id="org.eclipse.ui"/>\r
- <plugin id="org.eclipse.ui.forms"/>\r
- <plugin id="org.eclipse.ui.workbench"/>\r
- </plugins>\r
-\r
-</product>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<?eclipse version="3.2"?>\r
-<plugin>\r
-\r
- <extension\r
- id="application"\r
- point="org.eclipse.core.runtime.applications">\r
- <application>\r
- <run\r
- class="eu.etaxonomy.taxeditor.Application">\r
- </run>\r
- </application>\r
- </extension>\r
- <extension\r
- point="org.eclipse.ui.perspectives">\r
- <perspective\r
- class="eu.etaxonomy.taxeditor.Perspective"\r
- fixed="false"\r
- id="eu.etaxonomy.taxeditor.taxonperspective"\r
- name="Perspective">\r
- </perspective>\r
- </extension>\r
- <extension\r
- point="org.eclipse.ui.views">\r
- <view\r
- class="eu.etaxonomy.taxeditor.view.NameListView"\r
- icon="icons/edit_16x16.gif"\r
- id="eu.etaxonomy.taxeditor.prototype2.view.namelistview"\r
- name="Name List View">\r
- </view>\r
- <view\r
- class="eu.etaxonomy.taxeditor.view.UndoView"\r
- icon="icons/text.gif"\r
- id="eu.etaxonomy.taxeditor.prototype2.view.undoview"\r
- name="Recent Actions">\r
- </view>\r
- </extension>\r
- <extension\r
- point="org.eclipse.ui.editors">\r
- <editor\r
- class="eu.etaxonomy.taxeditor.view.MultiPageTaxonView"\r
- icon="icons/edit_16x16.gif"\r
- id="eu.etaxonomy.taxeditor.prototype2.view.multipagetaxonview"\r
- name="Multipart Test">\r
- </editor>\r
- <editor\r
- class="eu.etaxonomy.taxeditor.view.NameEditorView"\r
- icon="icons/edit_16x16.gif"\r
- id="eu.etaxonomy.taxeditor.prototype2.view.nameeditorview"\r
- name="New EditorPart">\r
- </editor>\r
- <editor\r
- class="eu.etaxonomy.taxeditor.view.EmptyEditorView"\r
- id="eu.etaxonomy.taxeditor.prototype2.view.EmptyEditorView"\r
- name="New EditorPart">\r
- </editor>\r
- </extension>\r
- <extension\r
- id="product"\r
- point="org.eclipse.core.runtime.products">\r
- <product\r
- application="eu.etaxonomy.taxeditor.application"\r
- name="EDIT Taxonomic Editor">\r
- <property\r
- name="appName"\r
- value="EDIT Taxonomic Editor - Prototype 2">\r
- </property>\r
- <property\r
- name="aboutImage"\r
- value="icons/edit_16x16.gif">\r
- </property>\r
- <property\r
- name="aboutText"\r
- value="Thanks for all the laughs!">\r
- </property>\r
- <property\r
- name="windowImages"\r
- value="icons/edit_16x16.gif">\r
- </property>\r
- </product>\r
- </extension>\r
-\r
-</plugin>\r
+++ /dev/null
-package com.swtdesigner;
-import java.io.File;
-import java.io.InputStream;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import org.eclipse.jface.resource.CompositeImageDescriptor;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.graphics.*;
-
-/**
- * Utility class for managing OS resources associated with SWT/JFace controls such as
- * colors, fonts, images, etc.
- *
- * !!! IMPORTANT !!! Application code must explicitly invoke the <code>dispose()</code>
- * method to release the operating system resources managed by cached objects
- * when those objects and OS resources are no longer needed (e.g. on
- * application shutdown)
- *
- * This class may be freely distributed as part of any application or plugin.
- * <p>
- * Copyright (c) 2003 - 2005, Instantiations, Inc. <br>All Rights Reserved
- *
- * @author scheglov_ke
- * @author Dan Rubel
- */
-public class ResourceManager extends SWTResourceManager {
-
- /**
- * Dispose of cached objects and their underlying OS resources. This should
- * only be called when the cached objects are no longer needed (e.g. on
- * application shutdown)
- */
- public static void dispose() {
- disposeColors();
- disposeFonts();
- disposeImages();
- disposeCursors();
- }
-
- //////////////////////////////
- // Image support
- //////////////////////////////
-
- /**
- * Maps image descriptors to images
- */
- private static HashMap<ImageDescriptor, Image> m_DescriptorImageMap = new HashMap<ImageDescriptor, Image>();
-
- /**
- * Maps images to image decorators
- */
- private static HashMap<Image, HashMap<Image, Image>> m_ImageToDecoratorMap = new HashMap<Image, HashMap<Image, Image>>();
-
- /**
- * Returns an image descriptor stored in the file at the specified path relative to the specified class
- * @param clazz Class The class relative to which to find the image descriptor
- * @param path String The path to the image file
- * @return ImageDescriptor The image descriptor stored in the file at the specified path
- */
- public static ImageDescriptor getImageDescriptor(Class<?> clazz, String path) {
- return ImageDescriptor.createFromFile(clazz, path);
- }
-
- /**
- * Returns an image descriptor stored in the file at the specified path
- * @param path String The path to the image file
- * @return ImageDescriptor The image descriptor stored in the file at the specified path
- */
- public static ImageDescriptor getImageDescriptor(String path) {
- try {
- return ImageDescriptor.createFromURL((new File(path)).toURI().toURL());
- } catch (MalformedURLException e) {
- return null;
- }
- }
-
- /**
- * Returns an image based on the specified image descriptor
- * @param descriptor ImageDescriptor The image descriptor for the image
- * @return Image The image based on the specified image descriptor
- */
- public static Image getImage(ImageDescriptor descriptor) {
- if (descriptor == null)
- return null;
- Image image = m_DescriptorImageMap.get(descriptor);
- if (image == null) {
- image = descriptor.createImage();
- m_DescriptorImageMap.put(descriptor, image);
- }
- return image;
- }
-
- /**
- * Returns an image composed of a base image decorated by another image
- * @param baseImage Image The base image that should be decorated
- * @param decorator Image The image to decorate the base image
- * @param corner The corner to place decorator image
- * @return Image The resulting decorated image
- */
- public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
- HashMap<Image, Image> decoratedMap = m_ImageToDecoratorMap.get(baseImage);
- if (decoratedMap == null) {
- decoratedMap = new HashMap<Image, Image>();
- m_ImageToDecoratorMap.put(baseImage, decoratedMap);
- }
- Image result = decoratedMap.get(decorator);
- if (result == null) {
- final Rectangle bid = baseImage.getBounds();
- final Rectangle did = decorator.getBounds();
- final Point baseImageSize = new Point(bid.width, bid.height);
- CompositeImageDescriptor compositImageDesc = new CompositeImageDescriptor() {
- protected void drawCompositeImage(int width, int height) {
- drawImage(baseImage.getImageData(), 0, 0);
- if (corner == TOP_LEFT) {
- drawImage(decorator.getImageData(), 0, 0);
- } else if (corner == TOP_RIGHT) {
- drawImage(decorator.getImageData(), bid.width - did.width - 1, 0);
- } else if (corner == BOTTOM_LEFT) {
- drawImage(decorator.getImageData(), 0, bid.height - did.height - 1);
- } else if (corner == BOTTOM_RIGHT) {
- drawImage(decorator.getImageData(), bid.width - did.width - 1, bid.height - did.height - 1);
- }
- }
- protected Point getSize() {
- return baseImageSize;
- }
- };
- result = compositImageDesc.createImage();
- decoratedMap.put(decorator, result);
- }
- return result;
- }
-
- /**
- * Dispose all of the cached images
- */
- public static void disposeImages() {
- SWTResourceManager.disposeImages();
- //
- for (Iterator<Image> I = m_DescriptorImageMap.values().iterator(); I.hasNext();)
- I.next().dispose();
- m_DescriptorImageMap.clear();
- }
-
- //////////////////////////////
- // Plugin images support
- //////////////////////////////
-
- /**
- * Maps URL to images
- */
- private static HashMap<URL, Image> m_URLImageMap = new HashMap<URL, Image>();
-
- /**
- * Retuns an image based on a plugin and file path
- * @param plugin Object The plugin containing the image
- * @param name String The path to th eimage within the plugin
- * @return Image The image stored in the file at the specified path
- */
- public static Image getPluginImage(Object plugin, String name) {
- try {
- try {
- URL url = getPluginImageURL(plugin, name);
- if (m_URLImageMap.containsKey(url))
- return m_URLImageMap.get(url);
- InputStream is = url.openStream();
- Image image;
- try {
- image = getImage(is);
- m_URLImageMap.put(url, image);
- } finally {
- is.close();
- }
- return image;
- } catch (Throwable e) {
- // Ignore any exceptions
- }
- } catch (Throwable e) {
- // Ignore any exceptions
- }
- return null;
- }
-
- /**
- * Retuns an image descriptor based on a plugin and file path
- * @param plugin Object The plugin containing the image
- * @param name String The path to th eimage within the plugin
- * @return ImageDescriptor The image descriptor stored in the file at the specified path
- */
- public static ImageDescriptor getPluginImageDescriptor(Object plugin, String name) {
- try {
- try {
- URL url = getPluginImageURL(plugin, name);
- return ImageDescriptor.createFromURL(url);
- } catch (Throwable e) {
- // Ignore any exceptions
- }
- } catch (Throwable e) {
- // Ignore any exceptions
- }
- return null;
- }
-
- /**
- * Retuns an URL based on a plugin and file path
- * @param plugin Object The plugin containing the file path
- * @param name String The file path
- * @return URL The URL representing the file at the specified path
- * @throws Exception
- */
- @SuppressWarnings("unchecked") //$NON-NLS-1$
- private static URL getPluginImageURL(Object plugin, String name) throws Exception {
- // try to work with 'plugin' as with OSGI BundleContext
- try {
- Class bundleClass = Class.forName("org.osgi.framework.Bundle"); //$NON-NLS-1$
- Class bundleContextClass = Class.forName("org.osgi.framework.BundleContext"); //$NON-NLS-1$
- if (bundleContextClass.isAssignableFrom(plugin.getClass())) {
- Method getBundleMethod = bundleContextClass.getMethod("getBundle", new Class[]{}); //$NON-NLS-1$
- Object bundle = getBundleMethod.invoke(plugin, new Object[]{});
- //
- Class ipathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
- Class pathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
- Constructor pathConstructor = pathClass.getConstructor(new Class[]{String.class});
- Object path = pathConstructor.newInstance(new Object[]{name});
- //
- Class platformClass = Class.forName("org.eclipse.core.runtime.Platform"); //$NON-NLS-1$
- Method findMethod = platformClass.getMethod("find", new Class[]{bundleClass, ipathClass}); //$NON-NLS-1$
- return (URL) findMethod.invoke(null, new Object[]{bundle, path});
- }
- } catch (Throwable e) {
- // Ignore any exceptions
- }
- // else work with 'plugin' as with usual Eclipse plugin
- {
- Class pluginClass = Class.forName("org.eclipse.core.runtime.Plugin"); //$NON-NLS-1$
- if (pluginClass.isAssignableFrom(plugin.getClass())) {
- //
- Class ipathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
- Class pathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
- Constructor pathConstructor = pathClass.getConstructor(new Class[]{String.class});
- Object path = pathConstructor.newInstance(new Object[]{name});
- //
- Method findMethod = pluginClass.getMethod("find", new Class[]{ipathClass}); //$NON-NLS-1$
- return (URL) findMethod.invoke(plugin, new Object[]{path});
- }
- }
- return null;
- }
-}
\ No newline at end of file
+++ /dev/null
-package com.swtdesigner;
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Canvas;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.CoolBar;
-import org.eclipse.swt.widgets.CoolItem;
-import org.eclipse.swt.widgets.Display;
-
-/**
- * Utility class for managing OS resources associated with SWT controls such as
- * colors, fonts, images, etc.
- *
- * !!! IMPORTANT !!! Application code must explicitly invoke the <code>dispose()</code>
- * method to release the operating system resources managed by cached objects
- * when those objects and OS resources are no longer needed (e.g. on
- * application shutdown)
- *
- * This class may be freely distributed as part of any application or plugin.
- * <p>
- * Copyright (c) 2003 - 2005, Instantiations, Inc. <br>All Rights Reserved
- *
- * @author scheglov_ke
- * @author Dan Rubel
- */
-public class SWTResourceManager {
-
- /**
- * Dispose of cached objects and their underlying OS resources. This should
- * only be called when the cached objects are no longer needed (e.g. on
- * application shutdown)
- */
- public static void dispose() {
- disposeColors();
- disposeFonts();
- disposeImages();
- disposeCursors();
- }
-
- //////////////////////////////
- // Color support
- //////////////////////////////
-
- /**
- * Maps RGB values to colors
- */
- private static HashMap<RGB, Color> m_ColorMap = new HashMap<RGB, Color>();
-
- /**
- * Returns the system color matching the specific ID
- * @param systemColorID int The ID value for the color
- * @return Color The system color matching the specific ID
- */
- public static Color getColor(int systemColorID) {
- Display display = Display.getCurrent();
- return display.getSystemColor(systemColorID);
- }
-
- /**
- * Returns a color given its red, green and blue component values
- * @param r int The red component of the color
- * @param g int The green component of the color
- * @param b int The blue component of the color
- * @return Color The color matching the given red, green and blue componet values
- */
- public static Color getColor(int r, int g, int b) {
- return getColor(new RGB(r, g, b));
- }
-
- /**
- * Returns a color given its RGB value
- * @param rgb RGB The RGB value of the color
- * @return Color The color matching the RGB value
- */
- public static Color getColor(RGB rgb) {
- Color color = m_ColorMap.get(rgb);
- if (color == null) {
- Display display = Display.getCurrent();
- color = new Color(display, rgb);
- m_ColorMap.put(rgb, color);
- }
- return color;
- }
-
- /**
- * Dispose of all the cached colors
- */
- public static void disposeColors() {
- for (Iterator<Color> iter = m_ColorMap.values().iterator(); iter.hasNext();)
- iter.next().dispose();
- m_ColorMap.clear();
- }
-
- //////////////////////////////
- // Image support
- //////////////////////////////
-
- /**
- * Maps image names to images
- */
- private static HashMap<String, Image> m_ClassImageMap = new HashMap<String, Image>();
-
- /**
- * Maps images to image decorators
- */
- private static HashMap<Image, HashMap<Image, Image>> m_ImageToDecoratorMap = new HashMap<Image, HashMap<Image, Image>>();
-
- /**
- * Returns an image encoded by the specified input stream
- * @param is InputStream The input stream encoding the image data
- * @return Image The image encoded by the specified input stream
- */
- protected static Image getImage(InputStream is) {
- Display display = Display.getCurrent();
- ImageData data = new ImageData(is);
- if (data.transparentPixel > 0)
- return new Image(display, data, data.getTransparencyMask());
- return new Image(display, data);
- }
-
- /**
- * Returns an image stored in the file at the specified path
- * @param path String The path to the image file
- * @return Image The image stored in the file at the specified path
- */
- public static Image getImage(String path) {
- return getImage("default", path); //$NON-NLS-1$
- }
-
- /**
- * Returns an image stored in the file at the specified path
- * @param section The section to which belongs specified image
- * @param path String The path to the image file
- * @return Image The image stored in the file at the specified path
- */
- public static Image getImage(String section, String path) {
- String key = section + '|' + SWTResourceManager.class.getName() + '|' + path;
- Image image = m_ClassImageMap.get(key);
- if (image == null) {
- try {
- FileInputStream fis = new FileInputStream(path);
- image = getImage(fis);
- m_ClassImageMap.put(key, image);
- fis.close();
- } catch (Exception e) {
- image = getMissingImage();
- m_ClassImageMap.put(key, image);
- }
- }
- return image;
- }
-
- /**
- * Returns an image stored in the file at the specified path relative to the specified class
- * @param clazz Class The class relative to which to find the image
- * @param path String The path to the image file
- * @return Image The image stored in the file at the specified path
- */
- public static Image getImage(Class<?> clazz, String path) {
- String key = clazz.getName() + '|' + path;
- Image image = m_ClassImageMap.get(key);
- if (image == null) {
- try {
- if (path.length() > 0 && path.charAt(0) == '/') {
- String newPath = path.substring(1, path.length());
- image = getImage(new BufferedInputStream(clazz.getClassLoader().getResourceAsStream(newPath)));
- } else {
- image = getImage(clazz.getResourceAsStream(path));
- }
- m_ClassImageMap.put(key, image);
- } catch (Exception e) {
- image = getMissingImage();
- m_ClassImageMap.put(key, image);
- }
- }
- return image;
- }
-
- private static final int MISSING_IMAGE_SIZE = 10;
- private static Image getMissingImage() {
- Image image = new Image(Display.getCurrent(), MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
- //
- GC gc = new GC(image);
- gc.setBackground(getColor(SWT.COLOR_RED));
- gc.fillRectangle(0, 0, MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
- gc.dispose();
- //
- return image;
- }
-
- /**
- * Style constant for placing decorator image in top left corner of base image.
- */
- public static final int TOP_LEFT = 1;
- /**
- * Style constant for placing decorator image in top right corner of base image.
- */
- public static final int TOP_RIGHT = 2;
- /**
- * Style constant for placing decorator image in bottom left corner of base image.
- */
- public static final int BOTTOM_LEFT = 3;
- /**
- * Style constant for placing decorator image in bottom right corner of base image.
- */
- public static final int BOTTOM_RIGHT = 4;
-
- /**
- * Returns an image composed of a base image decorated by another image
- * @param baseImage Image The base image that should be decorated
- * @param decorator Image The image to decorate the base image
- * @return Image The resulting decorated image
- */
- public static Image decorateImage(Image baseImage, Image decorator) {
- return decorateImage(baseImage, decorator, BOTTOM_RIGHT);
- }
-
- /**
- * Returns an image composed of a base image decorated by another image
- * @param baseImage Image The base image that should be decorated
- * @param decorator Image The image to decorate the base image
- * @param corner The corner to place decorator image
- * @return Image The resulting decorated image
- */
- public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
- HashMap<Image, Image> decoratedMap = m_ImageToDecoratorMap.get(baseImage);
- if (decoratedMap == null) {
- decoratedMap = new HashMap<Image, Image>();
- m_ImageToDecoratorMap.put(baseImage, decoratedMap);
- }
- Image result = decoratedMap.get(decorator);
- if (result == null) {
- Rectangle bid = baseImage.getBounds();
- Rectangle did = decorator.getBounds();
- result = new Image(Display.getCurrent(), bid.width, bid.height);
- GC gc = new GC(result);
- gc.drawImage(baseImage, 0, 0);
- //
- if (corner == TOP_LEFT) {
- gc.drawImage(decorator, 0, 0);
- } else if (corner == TOP_RIGHT) {
- gc.drawImage(decorator, bid.width - did.width - 1, 0);
- } else if (corner == BOTTOM_LEFT) {
- gc.drawImage(decorator, 0, bid.height - did.height - 1);
- } else if (corner == BOTTOM_RIGHT) {
- gc.drawImage(decorator, bid.width - did.width - 1, bid.height - did.height - 1);
- }
- //
- gc.dispose();
- decoratedMap.put(decorator, result);
- }
- return result;
- }
-
- /**
- * Dispose all of the cached images
- */
- public static void disposeImages() {
- for (Iterator<Image> I = m_ClassImageMap.values().iterator(); I.hasNext();)
- I.next().dispose();
- m_ClassImageMap.clear();
- //
- for (Iterator<HashMap<Image, Image>> I = m_ImageToDecoratorMap.values().iterator(); I.hasNext();) {
- HashMap<Image, Image> decoratedMap = I.next();
- for (Iterator<Image> J = decoratedMap.values().iterator(); J.hasNext();) {
- Image image = J.next();
- image.dispose();
- }
- }
- }
-
- /**
- * Dispose cached images in specified section
- * @param section the section do dispose
- */
- public static void disposeImages(String section) {
- for (Iterator<String> I = m_ClassImageMap.keySet().iterator(); I.hasNext();) {
- String key = I.next();
- if (!key.startsWith(section + '|'))
- continue;
- Image image = m_ClassImageMap.get(key);
- image.dispose();
- I.remove();
- }
- }
-
- //////////////////////////////
- // Font support
- //////////////////////////////
-
- /**
- * Maps font names to fonts
- */
- private static HashMap<String, Font> m_FontMap = new HashMap<String, Font>();
-
- /**
- * Maps fonts to their bold versions
- */
- private static HashMap<Font, Font> m_FontToBoldFontMap = new HashMap<Font, Font>();
-
- /**
- * Returns a font based on its name, height and style
- * @param name String The name of the font
- * @param height int The height of the font
- * @param style int The style of the font
- * @return Font The font matching the name, height and style
- */
- public static Font getFont(String name, int height, int style) {
- return getFont(name, height, style, false, false);
- }
-
-
- /**
- * Returns a font based on its name, height and style.
- * Windows-specific strikeout and underline flags are also supported.
- * @param name String The name of the font
- * @param size int The size of the font
- * @param style int The style of the font
- * @param strikeout boolean The strikeout flag (warning: Windows only)
- * @param underline boolean The underline flag (warning: Windows only)
- * @return Font The font matching the name, height, style, strikeout and underline
- */
- public static Font getFont(String name, int size, int style, boolean strikeout, boolean underline) {
- String fontName = name + '|' + size + '|' + style + '|' + strikeout + '|' + underline;
- Font font = m_FontMap.get(fontName);
- if (font == null) {
- FontData fontData = new FontData(name, size, style);
- if (strikeout || underline) {
- try {
- Class<?> logFontClass = Class.forName("org.eclipse.swt.internal.win32.LOGFONT"); //$NON-NLS-1$
- Object logFont = FontData.class.getField("data").get(fontData); //$NON-NLS-1$
- if (logFont != null && logFontClass != null) {
- if (strikeout) {
- logFontClass.getField("lfStrikeOut").set(logFont, new Byte((byte) 1)); //$NON-NLS-1$
- }
- if (underline) {
- logFontClass.getField("lfUnderline").set(logFont, new Byte((byte) 1)); //$NON-NLS-1$
- }
- }
- } catch (Throwable e) {
- System.err.println(
- "Unable to set underline or strikeout" + " (probably on a non-Windows platform). " + e); //$NON-NLS-1$ //$NON-NLS-2$
- }
- }
- font = new Font(Display.getCurrent(), fontData);
- m_FontMap.put(fontName, font);
- }
- return font;
- }
-
-
- /**
- * Return a bold version of the give font
- * @param baseFont Font The font for whoch a bold version is desired
- * @return Font The bold version of the give font
- */
- public static Font getBoldFont(Font baseFont) {
- Font font = m_FontToBoldFontMap.get(baseFont);
- if (font == null) {
- FontData fontDatas[] = baseFont.getFontData();
- FontData data = fontDatas[0];
- font = new Font(Display.getCurrent(), data.getName(), data.getHeight(), SWT.BOLD);
- m_FontToBoldFontMap.put(baseFont, font);
- }
- return font;
- }
-
- /**
- * Dispose all of the cached fonts
- */
- public static void disposeFonts() {
- for (Iterator<Font> iter = m_FontMap.values().iterator(); iter.hasNext();)
- iter.next().dispose();
- m_FontMap.clear();
- }
-
- //////////////////////////////
- // CoolBar support
- //////////////////////////////
-
- /**
- * Fix the layout of the specified CoolBar
- * @param bar CoolBar The CoolBar that shgoud be fixed
- */
- public static void fixCoolBarSize(CoolBar bar) {
- CoolItem[] items = bar.getItems();
- // ensure that each item has control (at least empty one)
- for (int i = 0; i < items.length; i++) {
- CoolItem item = items[i];
- if (item.getControl() == null)
- item.setControl(new Canvas(bar, SWT.NONE) {
- @Override
- public Point computeSize(int wHint, int hHint, boolean changed) {
- return new Point(20, 20);
- }
- });
- }
- // compute size for each item
- for (int i = 0; i < items.length; i++) {
- CoolItem item = items[i];
- Control control = item.getControl();
- control.pack();
- Point size = control.getSize();
- item.setSize(item.computeSize(size.x, size.y));
- }
- }
-
- //////////////////////////////
- // Cursor support
- //////////////////////////////
-
- /**
- * Maps IDs to cursors
- */
- private static HashMap<Integer, Cursor> m_IdToCursorMap = new HashMap<Integer, Cursor>();
-
- /**
- * Returns the system cursor matching the specific ID
- * @param id int The ID value for the cursor
- * @return Cursor The system cursor matching the specific ID
- */
- public static Cursor getCursor(int id) {
- Integer key = new Integer(id);
- Cursor cursor = m_IdToCursorMap.get(key);
- if (cursor == null) {
- cursor = new Cursor(Display.getDefault(), id);
- m_IdToCursorMap.put(key, cursor);
- }
- return cursor;
- }
-
- /**
- * Dispose all of the cached cursors
- */
- public static void disposeCursors() {
- for (Iterator<Cursor> iter = m_IdToCursorMap.values().iterator(); iter.hasNext();)
- iter.next().dispose();
- m_IdToCursorMap.clear();
- }
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor;\r
-\r
-import org.eclipse.core.databinding.observable.list.WritableList;\r
-import org.eclipse.core.databinding.observable.set.WritableSet;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.ui.plugin.AbstractUIPlugin;\r
-import org.osgi.framework.BundleContext;\r
-\r
-import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
-import eu.etaxonomy.cdm.model.agent.Person;\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-\r
-/**\r
- * The activator class controls the plug-in life cycle\r
- */\r
-public class Activator extends AbstractUIPlugin {\r
-\r
- /**\r
- * The plug-in ID\r
- */\r
- public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.prototype2.activator";\r
- /**\r
- * The shared instance\r
- */ \r
- private static Activator plugin;\r
- /**\r
- * All CDM services are called via the application controller\r
- */\r
- private CdmApplicationController cdmApp = new CdmApplicationController();\r
- /**\r
- * The dataset of taxa for this session\r
- */\r
- private WritableList observableTaxonTreeList = null;\r
- /**\r
- * Keeps track of which taxa have been edited\r
- */\r
- private WritableList observableRecentNamesList = null;\r
- public WritableSet observableSynonymSet = null;\r
- /**\r
- * The constructor\r
- */\r
- public Activator() {\r
-// BotanicalName botName = new BotanicalName(Rank.GENUS());\r
-// botName.setTitleCache("Hieracium L.");\r
-// botName.setUninomial("Hieracium");\r
-// botName.setCombinationAuthorTeam(new Person());\r
-// botName.getCombinationAuthorTeam().setTitleCache("L.");\r
-// Taxon genusTaxon = new Taxon();\r
-// genusTaxon.setName(botName);\r
-// genusTaxon.setSec(null);\r
-// \r
-// BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
-// botSpecies.setTitleCache("Hieracium asturianum Pau");\r
-// botSpecies.setUninomial("Hieracium");\r
-// botSpecies.setSpecificEpithet("asturianum");\r
-// botSpecies.setCombinationAuthorTeam(new Person());\r
-// botSpecies.getCombinationAuthorTeam().setTitleCache("Pau");\r
-// Taxon childTaxon = new Taxon();\r
-// childTaxon.setName(botSpecies);\r
-// childTaxon.setSec(null);\r
-// childTaxon.setTaxonomicParent(genusTaxon, null, null);\r
-//\r
-// BotanicalName botSpecies2= new BotanicalName(Rank.SPECIES());\r
-// botSpecies2.setTitleCache("Hieracium wolffii Zahn");\r
-// botSpecies2.setUninomial("Hieracium");\r
-// botSpecies2.setSpecificEpithet("wolffii");\r
-// botSpecies2.setCombinationAuthorTeam(new Person());\r
-// botSpecies2.getCombinationAuthorTeam().setTitleCache("Zahn");\r
-// Taxon childTaxon2 = new Taxon();\r
-// childTaxon2.setName(botSpecies2);\r
-// childTaxon2.setSec(null);\r
-// childTaxon2.setTaxonomicParent(genusTaxon, null, null);\r
-// \r
-// cdmApp.getTaxonService().saveTaxon(genusTaxon);\r
-// \r
-// System.exit(-1); \r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)\r
- */\r
- public void start(BundleContext context) throws Exception {\r
- super.start(context);\r
- plugin = this;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)\r
- */\r
- public void stop(BundleContext context) throws Exception {\r
- plugin = null;\r
- super.stop(context);\r
- }\r
-\r
- /**\r
- * Returns the shared instance\r
- *\r
- * @return the shared instance\r
- */\r
- public static Activator getDefault() {\r
- return plugin;\r
- }\r
-\r
- /**\r
- * Returns an image descriptor for the image file at the given\r
- * plug-in relative path\r
- *\r
- * @param path the path\r
- * @return the image descriptor\r
- */\r
- public static ImageDescriptor getImageDescriptor(String path) {\r
- return imageDescriptorFromPlugin(PLUGIN_ID, path);\r
- }\r
- \r
- \r
- public Image getImage(String key) {\r
- return getImageRegistry().get(key);\r
- }\r
-\r
- public CdmApplicationController getCdmApp() {\r
- return cdmApp;\r
- }\r
-\r
- public WritableList getObservableTaxonTreeList() {\r
- if (observableTaxonTreeList == null) {\r
- observableTaxonTreeList = new WritableList();\r
- observableTaxonTreeList.addAll(cdmApp.getTaxonService().getRootTaxa(null));\r
- }\r
- return observableTaxonTreeList;\r
- }\r
- \r
- public WritableList getObservableRecentNamesList() {\r
- if (observableRecentNamesList == null) {\r
- observableRecentNamesList = new WritableList();\r
- }\r
- return observableRecentNamesList;\r
- }\r
-\r
- public WritableSet getObservableSynonymSet() {\r
- if (observableSynonymSet == null) {\r
- observableSynonymSet = new WritableSet();\r
- } \r
- return observableSynonymSet; \r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor;
-
-import org.eclipse.equinox.app.IApplication;
-import org.eclipse.equinox.app.IApplicationContext;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * This class controls all aspects of the application's execution
- */
-public class Application implements IApplication {
-
- /* (non-Javadoc)
- * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
- */
- public Object start(IApplicationContext context) {
- Display display = PlatformUI.createDisplay();
- try {
- int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
- if (returnCode == PlatformUI.RETURN_RESTART) {
- return IApplication.EXIT_RESTART;
- }
- return IApplication.EXIT_OK;
- } finally {
- display.dispose();
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.equinox.app.IApplication#stop()
- */
- public void stop() {
- final IWorkbench workbench = PlatformUI.getWorkbench();
- if (workbench == null)
- return;
- final Display display = workbench.getDisplay();
- display.syncExec(new Runnable() {
- public void run() {
- if (!display.isDisposed())
- workbench.close();
- }
- });
- }
-}
+++ /dev/null
-package eu.etaxonomy.taxeditor;
-
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
-import org.eclipse.ui.application.ActionBarAdvisor;
-import org.eclipse.ui.application.IActionBarConfigurer;
-
-import eu.etaxonomy.taxeditor.controller.ActionOpenNameEditor;
-
-/**
- * An action bar advisor is responsible for creating, adding, and disposing of
- * the actions added to a workbench window. Each window will be populated with
- * new actions.
- */
-public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
-
- // Actions - important to allocate these only in makeActions, and then use
- // them
- // in the fill methods. This ensures that the actions aren't recreated
- // when fillActionBars is called with FILL_PROXY.
- private IWorkbenchAction exitAction;
- private ActionOpenNameEditor newNameAction;
-
- public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
- super(configurer);
- }
-
- protected void makeActions(final IWorkbenchWindow window) {
- // Creates the actions and registers them.
- // Registering is needed to ensure that key bindings work.
- // The corresponding commands keybindings are defined in the plugin.xml
- // file.
- // Registering also provides automatic disposal of the actions when
- // the window is closed.
-
- exitAction = ActionFactory.QUIT.create(window);
- register(exitAction);
-
- newNameAction = new ActionOpenNameEditor();
- register(newNameAction);
- }
-
- protected void fillMenuBar(IMenuManager menuBar) {
- MenuManager fileMenu = new MenuManager("&File",
- IWorkbenchActionConstants.M_FILE);
- menuBar.add(fileMenu);
- fileMenu.add(newNameAction);
- fileMenu.add(exitAction);
- }
-
-}
+++ /dev/null
-package eu.etaxonomy.taxeditor;
-
-import org.eclipse.ui.application.IWorkbenchConfigurer;
-import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
-import org.eclipse.ui.application.WorkbenchAdvisor;
-import org.eclipse.ui.application.WorkbenchWindowAdvisor;
-
-public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
-
- private static final String PERSPECTIVE_ID = "eu.etaxonomy.taxeditor.taxonperspective";
-
- public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
- IWorkbenchWindowConfigurer configurer) {
- return new ApplicationWorkbenchWindowAdvisor(configurer);
- }
-
- public String getInitialWindowPerspectiveId() {
- return PERSPECTIVE_ID;
- }
-
- public void initialize(IWorkbenchConfigurer configurer) {
- super.initialize(configurer);
-
- // Remembers the user's layout and window size
- // for the next time application is started
- configurer.setSaveAndRestore(true);
- }
-
-}
+++ /dev/null
-package eu.etaxonomy.taxeditor;
-
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.ui.application.ActionBarAdvisor;
-import org.eclipse.ui.application.IActionBarConfigurer;
-import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
-import org.eclipse.ui.application.WorkbenchWindowAdvisor;
-
-public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
-
- public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
- super(configurer);
- }
-
- public ActionBarAdvisor createActionBarAdvisor(
- IActionBarConfigurer configurer) {
- return new ApplicationActionBarAdvisor(configurer);
- }
-
- public void preWindowOpen() {
- IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
- configurer.setInitialSize(new Point(800, 600));
- configurer.setShowCoolBar(false);
- configurer.setShowStatusLine(false);
- configurer.setTitle("EDIT Taxonomic Editor");
- }
-
-}
+++ /dev/null
-package eu.etaxonomy.taxeditor;
-
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-
-import eu.etaxonomy.taxeditor.view.NameListView;
-
-public class Perspective implements IPerspectiveFactory {
-
- public static final String ID = "eu.etaxonomy.taxeditor.prototype2.perspective";
-
- public void createInitialLayout(IPageLayout layout) {
- String editorArea = layout.getEditorArea();
- layout.addStandaloneView(NameListView.ID, false, IPageLayout.LEFT, 0.30f, editorArea);
-// layout.addView(UndoView.ID, IPageLayout.BOTTOM, 0.8f, editorArea);
- layout.getViewLayout(NameListView.ID).setCloseable(false);
- addFastViews(layout);
- }
- private void addFastViews(IPageLayout layout) {
- System.currentTimeMillis();
- }
-}
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.ui.PlatformUI;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.Activator;\r
-import eu.etaxonomy.taxeditor.view.NameListView;\r
-import eu.etaxonomy.taxeditor.view.TaxonomicTreeViewer;\r
-\r
-/**\r
- * Open up a celleditor in the taxonomic tree \r
- * to add a quickname to taxon\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class ActionAddQuickName extends Action {\r
- Taxon parentTaxon;\r
- \r
- public ActionAddQuickName(Taxon parentTaxon) {\r
- this.parentTaxon = parentTaxon;\r
- }\r
- \r
- public void run() {\r
- \r
- // Create empty Taxon, add it to its parent\r
- Taxon childTaxon = new Taxon();\r
- childTaxon.setName(new BotanicalName(Rank.GENUS()));\r
- \r
- // TODO getTitleCache is currently returning "null", not null\r
- // hence its being set here - change!\r
- childTaxon.getName().setTitleCache(null);\r
- parentTaxon.addTaxonomicChild(childTaxon, null, null);\r
- \r
- // Add childTaxon to observable tree list, \r
- // causing it to appear in the tree\r
- Activator.getDefault().getObservableTaxonTreeList().add(childTaxon);\r
- \r
- // Open new node\r
- TaxonomicTreeViewer treeViewer = (TaxonomicTreeViewer) ((NameListView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().\r
- findView(NameListView.ID)).getTreeViewer(); \r
- treeViewer.revealTaxon(childTaxon);\r
- \r
- // Put cursor in empty node\r
- treeViewer.editElement(childTaxon, 0);\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.jface.action.Action;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.TesterooWritableSet;\r
-\r
-/**\r
- * Add a new synonym to a taxon.\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class ActionAddSynonymToTaxon extends Action {\r
- Taxon taxon;\r
- Synonym synonym;\r
- \r
- public ActionAddSynonymToTaxon(Taxon taxon, Synonym synonym) {\r
- this.taxon = taxon;\r
- this.synonym = synonym;\r
- }\r
-\r
- public ActionAddSynonymToTaxon(Taxon taxon, String synonymNameCache) {\r
- this.taxon = taxon;\r
- this.synonym = new Synonym();\r
- this.synonym.setName(BotanicalName.PARSED_NAME(synonymNameCache));\r
- } \r
-\r
- public void run() {\r
- taxon.addSynonym(synonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
-// taxon.removeSynonymRelation(synonym.getSynonymRelations()[0]);\r
- \r
- TesterooWritableSet.getInstance().add(synonym);\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.jface.action.Action;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-/**\r
- * Delete this taxon from the CDM\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class ActionDeleteTaxon extends Action {\r
- Taxon taxon;\r
- \r
- public ActionDeleteTaxon(Taxon taxon) {\r
- this.taxon = taxon;\r
- }\r
- \r
- public void run() {\r
-// Activator.getDefault().getCdmApp().getTaxonService().saveTaxon(taxon);\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.jface.action.Action;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.Activator;\r
-\r
-/**\r
- * Moves taxon in the taxonomic tree by assigning it a new parent\r
- * and triggering observable tree list update\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class ActionMoveTaxon extends Action {\r
- Taxon taxon;\r
- Taxon newParentTaxon;\r
- \r
- public ActionMoveTaxon(Taxon taxon, Taxon newParentTaxon) {\r
- this.taxon = taxon;\r
- this.newParentTaxon = newParentTaxon;\r
- }\r
- \r
- public void run() {\r
- \r
- // TODO Taxon.setParentTaxon(newParentTaxon)\r
- taxon.setTaxonomicParent(newParentTaxon, null, null);\r
- \r
- // Trigger re-draw in list by removing then adding taxon\r
- Activator.getDefault().getObservableTaxonTreeList().remove(taxon); \r
- Activator.getDefault().getObservableTaxonTreeList().add(taxon);\r
-\r
- // Save the taxon to the CDM\r
- Activator.getDefault().getCdmApp().getTaxonService().saveTaxon(taxon);\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
- package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.PlatformUI;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.Activator;\r
-import eu.etaxonomy.taxeditor.view.MultiPageTaxonView;\r
-import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
-import eu.etaxonomy.taxeditor.view.NameListView;\r
-import eu.etaxonomy.taxeditor.view.TaxonomicTreeViewer;\r
-\r
-/**\r
- * Opens a name editor for an existing or new taxon\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class ActionOpenNameEditor extends Action {\r
-\r
- private Taxon taxon;\r
- public static final String ID = "eu.etaxonomy.taxeditor.prototype2.controller.opennameeditoraction"; //$NON-NLS-1$\r
- \r
- public ActionOpenNameEditor(Taxon taxon) {\r
- this.taxon = taxon;\r
- }\r
-\r
- public ActionOpenNameEditor() {\r
-\r
- // the text for the menu item\r
- setText("New taxon");\r
- \r
- setId(ID);\r
- \r
- this.taxon = new Taxon();\r
- taxon.setName(new BotanicalName(Rank.GENUS()));\r
- \r
- }\r
- \r
- public void run() {\r
-\r
- // If this is a non-empty taxon being opened for the first time,\r
- // add to recent names list \r
- if (taxon.getName().getTitleCache() != null &&\r
- !Activator.getDefault().getObservableRecentNamesList().contains(taxon))\r
- Activator.getDefault().getObservableRecentNamesList().add(0, taxon);\r
- \r
- // If this taxon is not visible in the tree, open node\r
- ((TaxonomicTreeViewer) ((NameListView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().\r
- findView(NameListView.ID)).getTreeViewer()).revealTaxon(taxon);\r
- \r
- IEditorInput input = new NameEditorInput(taxon);\r
- try {\r
- Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().\r
- getActivePage().openEditor(input, MultiPageTaxonView.ID);\r
- } catch (PartInitException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- \r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.jface.action.Action;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-/**\r
- * Opens a name editor for a new taxon with a parent taxon\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class ActionOpenNewChildNameEditor extends Action {\r
-\r
- private Taxon taxon;\r
- public static final String ID = "eu.etaxonomy.taxeditor.prototype2.controller.opennameeditoraction"; //$NON-NLS-1$\r
- \r
- public ActionOpenNewChildNameEditor(Taxon parentTaxon) {\r
- \r
- taxon = new Taxon();\r
- taxon.setName(new BotanicalName(Rank.GENUS()));\r
- \r
- // TODO getTitleCache is currently returning "null", not null\r
- // hence its being set here - change!\r
- taxon.getName().setTitleCache(null);\r
- \r
- parentTaxon.addTaxonomicChild(taxon, null, null);\r
- }\r
-\r
- public ActionOpenNewChildNameEditor() {\r
- setId(ID);\r
- }\r
- \r
- public void run() {\r
- new ActionOpenNameEditor(taxon).run();\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.jface.action.Action;\r
-\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-\r
-/**\r
- * Open up a celleditor in the taxonomic tree \r
- * to add a quickname to taxon\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class ActionPopulatePropertySheet extends Action {\r
- TaxonNameBase name;\r
- \r
- public ActionPopulatePropertySheet(TaxonNameBase name) {\r
- this.name = name;\r
- }\r
- \r
- public void run() {\r
- \r
- \r
- // Open new node\r
-// System.out.println(PlatformUI.getWorkbench().getActiveWorkbenchWindow().\r
-// getActivePage().getActiveEditor().getSite().getPart()..getId());\r
-// MultiPageTaxonView mptv;\r
-// mptv.get\r
- \r
- \r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.jface.action.Action;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.Activator;\r
-\r
-/**\r
- * Remove a Taxon from the tree without removing it from\r
- * the CDM, i.e. when a temporary Taxon has been created for\r
- * quickname\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class ActionRemoveTaxonFromTree extends Action {\r
- Taxon taxon;\r
- \r
- public ActionRemoveTaxonFromTree(Taxon taxon) {\r
- this.taxon = taxon;\r
- }\r
- \r
- public void run() {\r
- \r
- // Remove Taxon from taxon tree list\r
- Activator.getDefault().getObservableTaxonTreeList().remove(taxon);\r
- \r
- taxon = null;\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.jface.action.Action;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.Activator;\r
-\r
-/**\r
- * Commit any changes to this taxon to the CDM\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class ActionSaveTaxon extends Action {\r
- Taxon taxon;\r
- \r
- public ActionSaveTaxon(Taxon taxon) {\r
- this.taxon = taxon;\r
- }\r
- \r
- public void run() {\r
- \r
- // If this is a new taxon, add it to the recent names list;\r
- // if it is already in the tree, remove then re-add it\r
- // to force a re-sort\r
- if (!Activator.getDefault().getObservableTaxonTreeList().contains(taxon)) {\r
- Activator.getDefault().getObservableRecentNamesList().add(0, taxon);\r
- } else {\r
- Activator.getDefault().getObservableTaxonTreeList().remove(taxon);\r
- } \r
- Activator.getDefault().getObservableTaxonTreeList().add(taxon);\r
-\r
- // Save the taxon to the CDM\r
- Activator.getDefault().getCdmApp().getTaxonService().saveTaxon(taxon);\r
- \r
- // Notify taxon listeners in case name has been updated \r
- taxon.firePropertyChange("name", null, null);\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.swt.dnd.ByteArrayTransfer;\r
-import org.eclipse.swt.dnd.TransferData;\r
-\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-\r
-/**\r
- * For drag and drop - a drag widget with this transfer type can only be dropped onto\r
- * a drop widget with the same type.\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class NameTransfer extends ByteArrayTransfer {\r
-\r
- private static final String TYPENAME = "name_type";\r
- private static final int NAMETYPEID = registerType (TYPENAME); \r
- private static final NameTransfer INSTANCE = new NameTransfer();\r
- \r
- /*\r
- * The object associated with this transfer event\r
- */\r
- private TaxonNameBase name;\r
- \r
- /*\r
- * Returns the singleton\r
- */\r
- public static NameTransfer getInstance() {\r
- return INSTANCE;\r
- }\r
- /*\r
- * Set transfer data for local use\r
- */\r
- public void setName(TaxonNameBase name) {\r
- this.name = name;\r
- }\r
- /*\r
- * Returns the local transfer data\r
- */\r
- public TaxonNameBase getName() {\r
- return name;\r
- }\r
- \r
- /* \r
- * The type ID is used to identify this transfer\r
- */\r
- @Override\r
- protected int[] getTypeIds() {\r
- return new int[] { NAMETYPEID };\r
- }\r
-\r
- @Override\r
- protected String[] getTypeNames() {\r
- return new String[] { TYPENAME } ;\r
- }\r
-\r
- @Override\r
- protected void javaToNative(Object object, TransferData transferData) {\r
- // No encoding needed since this is a hardcoded string read and written\r
- // in the same process.\r
- // See nativeToJava below\r
- byte[] check = TYPENAME.getBytes();\r
- super.javaToNative(check, transferData);\r
- }\r
-\r
- @Override\r
- protected Object nativeToJava(TransferData transferData) {\r
- Object result = super.nativeToJava(transferData);\r
- if (isInvalidNativeType(result)) {\r
- throw new RuntimeException(); //$NON-NLS-1$\r
- }\r
- return name;\r
- }\r
- \r
- private boolean isInvalidNativeType(Object result) {\r
- // No encoding needed since this is a hardcoded string read and written\r
- // in the same process.\r
- // See javaToNative above\r
- return !(result instanceof byte[])\r
- || !TYPENAME.equals(new String((byte[]) result));\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.swt.dnd.ByteArrayTransfer;\r
-import org.eclipse.swt.dnd.TransferData;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-\r
-/**\r
- * For drag and drop - a drag widget with this transfer type \r
- * can only be dropped onto a drop widget with the same type.\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class SynonymRelationshipTransfer extends ByteArrayTransfer {\r
-\r
- private static final String RELATIONTYPENAME = "relation_type";\r
- private static final int RELATIONTYPEID = registerType (RELATIONTYPENAME); \r
- private static final SynonymRelationshipTransfer INSTANCE = new SynonymRelationshipTransfer();\r
- \r
- /*\r
- * The object associated with this transfer event\r
- */\r
- private SynonymRelationship synonymRelationship;\r
- \r
- /*\r
- * Returns the singleton\r
- */\r
- public static SynonymRelationshipTransfer getInstance() {\r
- return INSTANCE;\r
- }\r
- /*\r
- * Set transfer data for local use\r
- */\r
- public void setSynonymRelationship(SynonymRelationship synonymRelationship) {\r
- this.synonymRelationship = synonymRelationship;\r
- }\r
- /*\r
- * Returns the local transfer data\r
- */\r
- public SynonymRelationship getSynonymRelationship() {\r
- return synonymRelationship;\r
- }\r
- \r
- /* \r
- * The type ID is used to identify this transfer\r
- */\r
- @Override\r
- protected int[] getTypeIds() {\r
- return new int[] { RELATIONTYPEID };\r
- }\r
-\r
- @Override\r
- protected String[] getTypeNames() {\r
- return new String[] { RELATIONTYPENAME } ;\r
- }\r
-\r
- @Override\r
- protected void javaToNative(Object object, TransferData transferData) {\r
- // No encoding needed since this is a hardcoded string read and written\r
- // in the same process.\r
- // See nativeToJava below\r
- byte[] check = RELATIONTYPENAME.getBytes();\r
- super.javaToNative(check, transferData);\r
- }\r
-\r
- @Override\r
- protected Object nativeToJava(TransferData transferData) {\r
- Object result = super.nativeToJava(transferData);\r
- if (isInvalidNativeType(result)) {\r
- throw new RuntimeException(); //$NON-NLS-1$\r
- }\r
- return synonymRelationship;\r
- }\r
- \r
- private boolean isInvalidNativeType(Object result) {\r
- // No encoding needed since this is a hardcoded string read and written\r
- // in the same process.\r
- // See javaToNative above\r
- return !(result instanceof byte[])\r
- || !RELATIONTYPENAME.equals(new String((byte[]) result));\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.controller;\r
-\r
-import org.eclipse.swt.dnd.ByteArrayTransfer;\r
-import org.eclipse.swt.dnd.TransferData;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-\r
-/**\r
- * For drag and drop - a drag widget with this transfer type can only be dropped onto\r
- * a drop widget with the same type.\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class TaxonTransfer extends ByteArrayTransfer {\r
-\r
- private static final String TAXONTYPENAME = "taxon_type";\r
- private static final int TAXONTYPEID = registerType (TAXONTYPENAME); \r
- private static final TaxonTransfer INSTANCE = new TaxonTransfer();\r
- \r
- /*\r
- * The object associated with this transfer event\r
- */\r
- private TaxonBase taxonBase;\r
- \r
- /*\r
- * Returns the singleton\r
- */\r
- public static TaxonTransfer getInstance() {\r
- return INSTANCE;\r
- }\r
- /*\r
- * Set transfer data for local use\r
- */\r
- public void setTaxon(TaxonBase taxon) {\r
- this.taxonBase = taxon;\r
- }\r
- /*\r
- * Returns the local transfer data\r
- */\r
- public TaxonBase getTaxon() {\r
- return taxonBase;\r
- }\r
- \r
- /* \r
- * The type ID is used to identify this transfer\r
- */\r
- @Override\r
- protected int[] getTypeIds() {\r
- return new int[] { TAXONTYPEID };\r
- }\r
-\r
- @Override\r
- protected String[] getTypeNames() {\r
- return new String[] { TAXONTYPENAME } ;\r
- }\r
-\r
- @Override\r
- protected void javaToNative(Object object, TransferData transferData) {\r
- // No encoding needed since this is a hardcoded string read and written\r
- // in the same process.\r
- // See nativeToJava below\r
- byte[] check = TAXONTYPENAME.getBytes();\r
- super.javaToNative(check, transferData);\r
- }\r
-\r
- @Override\r
- protected Object nativeToJava(TransferData transferData) {\r
- Object result = super.nativeToJava(transferData);\r
- if (isInvalidNativeType(result)) {\r
- throw new RuntimeException(); //$NON-NLS-1$\r
- }\r
- return taxonBase;\r
- }\r
- \r
- private boolean isInvalidNativeType(Object result) {\r
- // No encoding needed since this is a hardcoded string read and written\r
- // in the same process.\r
- // See javaToNative above\r
- return !(result instanceof byte[])\r
- || !TAXONTYPENAME.equals(new String((byte[]) result));\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.model;\r
-\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IPersistableElement;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-/**\r
- * @author p.ciardelli\r
- *\r
- */\r
-public class NameEditorInput implements IEditorInput {\r
-\r
- private Taxon taxon;\r
- \r
- public NameEditorInput (Taxon taxon) {\r
- this.taxon = taxon;\r
- }\r
- \r
- public boolean exists() {\r
- // TODO Auto-generated method stub\r
- return false;\r
- }\r
-\r
- public ImageDescriptor getImageDescriptor() {\r
- // TODO Auto-generated method stub\r
- return null;\r
- }\r
-\r
- public String getName() {\r
- if (taxon.getName().getNameCache() == null)\r
- return "New taxon";\r
- else\r
- return taxon.getName().getNameCache();\r
- }\r
-\r
- public IPersistableElement getPersistable() {\r
- // TODO Auto-generated method stub\r
- return null;\r
- }\r
-\r
- public String getToolTipText() {\r
- return getName();\r
- }\r
-\r
- public Object getAdapter(Class adapter) {\r
-\r
- if (adapter == Taxon.class) {\r
- return this.taxon;\r
- }\r
- \r
- return null;\r
- }\r
-\r
- /**\r
- * Overrides equals to ensure that a taxon can only be edited by\r
- * one editor at a time.\r
- * \r
- * @return boolean\r
- */\r
- public boolean equals(Object obj) { \r
- if (this.taxon.equals(((NameEditorInput) obj).taxon))\r
- return true;\r
- return false;\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.model;\r
-\r
-import java.util.Set;\r
-\r
-import org.eclipse.core.databinding.observable.Realm;\r
-import org.eclipse.core.databinding.observable.list.IListChangeListener;\r
-import org.eclipse.core.databinding.observable.list.IObservableList;\r
-import org.eclipse.core.databinding.observable.list.ListChangeEvent;\r
-import org.eclipse.core.databinding.observable.list.ListDiffEntry;\r
-import org.eclipse.core.databinding.observable.list.WritableList;\r
-import org.eclipse.core.databinding.observable.set.IObservableSet;\r
-import org.eclipse.core.databinding.observable.set.WritableSet;\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.jface.databinding.swt.SWTObservables;\r
-import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
-import org.eclipse.jface.viewers.ITreeContentProvider;\r
-import org.eclipse.jface.viewers.Viewer;\r
-import org.eclipse.swt.widgets.Display;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.view.TaxonomicTreeViewer;\r
-\r
-/**\r
- * Adds tree functionality (get parent, get children) to ObservableListContentProvider;\r
- * much code was copied almost in tact from parent class due to\r
- * viewer type restrictions and private settings of variables and methods\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class NameTreeContentProvider extends ObservableListContentProvider \r
- implements ITreeContentProvider {\r
-\r
- public Object[] getChildren(Object parentElement) {\r
- Set<Taxon> children = ((Taxon) parentElement).getTaxonomicChildren();\r
- observableList.addAll(children);\r
- return children == null ? new Object[0] : children.toArray();\r
- }\r
-\r
- public Object getParent(Object element) {\r
- return ((Taxon) element).getTaxonomicParent();\r
- }\r
-\r
- public boolean hasChildren(Object element) {\r
- return ((Taxon) element).hasTaxonomicChildren();\r
- }\r
- \r
- private IObservableList observableList;\r
-\r
- private Viewer viewer;\r
-\r
- private IListChangeListener listener = new IListChangeListener() {\r
- public void handleListChange(ListChangeEvent event) {\r
- if (viewer.getControl().isDisposed()) {\r
- return;\r
- }\r
- ListDiffEntry[] differences = event.diff.getDifferences();\r
- for (int i = 0; i < differences.length; i++) {\r
- ListDiffEntry entry = differences[i];\r
- \r
- if (entry.isAddition()) {\r
- \r
- knownElements.add(entry.getElement());\r
- \r
- ((TaxonomicTreeViewer) viewer).add(\r
- ((Taxon) entry.getElement()).getTaxonomicParent(), \r
- entry.getElement());\r
- } else {\r
-\r
- knownElements.remove(entry.getElement());\r
- \r
- ((TaxonomicTreeViewer) viewer).remove(entry.getElement());\r
- }\r
- }\r
- }\r
- };\r
-\r
- private IObservableSet knownElements;\r
-\r
- /**\r
- * \r
- */\r
- public NameTreeContentProvider() {\r
- \r
- Assert.isNotNull(Realm.getDefault());\r
- \r
- observableList = new WritableList(SWTObservables.getRealm(Display.getDefault()));\r
- knownElements = new WritableSet(SWTObservables.getRealm(Display.getDefault()));\r
- }\r
-\r
- public Object[] getElements(Object inputElement) {\r
- return observableList.toArray();\r
- }\r
-\r
- public void dispose() {\r
- observableList.removeListChangeListener(listener);\r
- }\r
-\r
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
- this.viewer = viewer;\r
-\r
- if (newInput != null && !(newInput instanceof IObservableList)) {\r
- throw new IllegalArgumentException(\r
- "This content provider only works with input of type IObservableList"); //$NON-NLS-1$\r
- }\r
-\r
- setInput((IObservableList) newInput);\r
- }\r
-\r
- /**\r
- * @param list\r
- */\r
- private void setInput(IObservableList list) {\r
- \r
- if (list == null) {\r
- list = new WritableList(SWTObservables.getRealm(Display.getDefault()));\r
- }\r
-\r
- if (observableList != null) {\r
- observableList.removeListChangeListener(listener);\r
- }\r
- \r
- knownElements.clear();\r
-\r
- observableList = list;\r
- \r
- knownElements.addAll(list);\r
- \r
-\r
- observableList.addListChangeListener(listener);\r
- }\r
-\r
- /**\r
- * @return the set of elements known to this content provider. Label providers may track\r
- * this set if they need to be notified about additions before the viewer sees the added\r
- * element, and notified about removals after the element was removed from the viewer.\r
- */\r
- public IObservableSet getKnownElements() {\r
- return knownElements;\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.model;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.eclipse.core.databinding.observable.value.IObservableValue;\r
-\r
-/**\r
- * \r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class PropertySheetNode {\r
- \r
- private boolean editable;\r
- private List<PropertySheetNode> childProperties;\r
- private PropertySheetNode parentProperty;\r
- private String propertyField;\r
- private String propertyValue;\r
- private IObservableValue observeValue;\r
- \r
- public static boolean EDITABLE = true;\r
- public static boolean NOT_EDITABLE = false;\r
- \r
- public PropertySheetNode(String field, String value, \r
- PropertySheetNode parent, boolean editable) {\r
- this.propertyField = field;\r
- this.propertyValue = value;\r
- this.parentProperty = parent;\r
- if (parent != null) parent.addChildProperty(this);\r
- this.editable = editable;\r
- }\r
- \r
- public PropertySheetNode(String field, IObservableValue observeValue, \r
- PropertySheetNode parent, boolean editable) {\r
- this(field, (String) observeValue.getValue(), parent, editable);\r
- this.observeValue = observeValue;\r
- }\r
- \r
- private void addChildProperty(PropertySheetNode childProperty ) {\r
- if (childProperties == null)\r
- childProperties = new ArrayList<PropertySheetNode>();\r
- if (!childProperties.contains(childProperty))\r
- childProperties.add(childProperty);\r
- }\r
-\r
- public boolean isEditable() {\r
- return editable;\r
- }\r
-\r
- public void setEditable(boolean editable) {\r
- this.editable = editable;\r
- }\r
-\r
- public String getPropertyField() {\r
- return propertyField;\r
- }\r
-\r
- public void setPropertyField(String propertyField) {\r
- this.propertyField = propertyField;\r
- }\r
-\r
- public String getPropertyValue() {\r
- if (observeValue != null)\r
- return (String) observeValue.getValue();\r
- return propertyValue;\r
- }\r
-\r
- public void setPropertyValue(String propertyValue) {\r
- this.propertyValue = propertyValue;\r
- }\r
-\r
- public List<PropertySheetNode> getChildProperties() {\r
- return childProperties;\r
- }\r
-\r
- public void setChildProperties(List<PropertySheetNode> subProperties) {\r
- this.childProperties = subProperties;\r
- }\r
-\r
- public PropertySheetNode getParentProperty() {\r
- return parentProperty;\r
- }\r
-\r
- public void setParentProperty(PropertySheetNode parentProperty) {\r
- this.parentProperty = parentProperty;\r
- } \r
- \r
- public IObservableValue getObserveValue() {\r
- return this.observeValue;\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.part.EditorPart;\r
-\r
-public class EmptyEditorView extends EditorPart {\r
-\r
- public static final String ID = "eu.etaxonomy.taxeditor.prototype2.view.EmptyEditorView"; //$NON-NLS-1$\r
-\r
- /**\r
- * Create contents of the editor part\r
- * @param parent\r
- */\r
- @Override\r
- public void createPartControl(Composite parent) {\r
- Composite container = new Composite(parent, SWT.NONE);\r
- //\r
- }\r
-\r
- @Override\r
- public void setFocus() {\r
- // Set the focus\r
- }\r
-\r
- @Override\r
- public void doSave(IProgressMonitor monitor) {\r
- // Do the Save operation\r
- }\r
-\r
- @Override\r
- public void doSaveAs() {\r
- // Do the Save As operation\r
- }\r
-\r
- @Override\r
- public void init(IEditorSite site, IEditorInput input)\r
- throws PartInitException {\r
- // Initialize the editor part\r
- }\r
-\r
- @Override\r
- public boolean isDirty() {\r
- return false;\r
- }\r
-\r
- @Override\r
- public boolean isSaveAsAllowed() {\r
- return false;\r
- }\r
-\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\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.jface.viewers.IDoubleClickListener;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.FocusEvent;\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.Point;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Group;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.swt.widgets.Text;\r
-\r
-import com.swtdesigner.ResourceManager;\r
-import com.swtdesigner.SWTResourceManager;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.Activator;\r
-\r
-public class MoveDialogView extends Dialog {\r
-\r
- private Text searchText;\r
- private TaxonomicTreeViewer treeViewer;\r
- private Label selectedTaxonNameLabel;\r
- private Taxon taxon;\r
- \r
- private List<Button> buttons = new ArrayList<Button>();\r
- \r
- public int open(Taxon taxon) {\r
- this.taxon = taxon;\r
- return super.open();\r
- }\r
- /**\r
- * Create the dialog\r
- * @param parentShell\r
- */\r
- public MoveDialogView(Shell parentShell) {\r
- super(parentShell);\r
- }\r
-\r
- /**\r
- * Create contents of the dialog\r
- * @param parent\r
- */\r
- @Override\r
- protected Control createDialogArea(Composite parent) {\r
- parent.setRedraw(true);\r
- Composite container = (Composite) super.createDialogArea(parent);\r
- final GridLayout gridLayout = new GridLayout();\r
- gridLayout.numColumns = 2;\r
- container.setLayout(gridLayout);\r
-\r
- final Label youHaveChosenLabel = new Label(container, SWT.WRAP);\r
- final GridData gd_youHaveChosenLabel = new GridData(SWT.LEFT, SWT.FILL, true, false, 2, 1);\r
-// gd_youHaveChosenLabel.heightHint = 30;\r
- youHaveChosenLabel.setLayoutData(gd_youHaveChosenLabel);\r
-// youHaveChosenLabel.setText("You have chosen to turn \"" + taxon.getName().getNameCache() +\r
-// "\" into a synonym. Please choose a new accepted name from one of the following options.");\r
- youHaveChosenLabel.setText("Choose a taxonomic parent for \"" + taxon.getName().getTitleCache() +\r
- "\"."); \r
-\r
- final Group group_1 = new Group(container, SWT.NONE);\r
- group_1.setLayout(new GridLayout());\r
- final GridData gd_group_1 = new GridData(SWT.FILL, SWT.FILL, true, true);\r
- gd_group_1.heightHint = 83;\r
- group_1.setLayoutData(gd_group_1);\r
-\r
- final Button chooseAcceptedNameButton = new Button(group_1, SWT.RADIO);\r
- buttons.add(chooseAcceptedNameButton);\r
- chooseAcceptedNameButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
- chooseAcceptedNameButton.setText("Choose from taxonomic tree");\r
-\r
- treeViewer = new TaxonomicTreeViewer(group_1);\r
- treeViewer.getTree().addFocusListener(new SelectButtonFocusListener(chooseAcceptedNameButton));\r
- treeViewer.addDoubleClickListener(new SelectTaxonDoubleClickListener()); \r
-\r
- final Composite composite = new Composite(container, SWT.NONE);\r
- composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
- composite.setLayout(new FillLayout(SWT.VERTICAL | SWT.HORIZONTAL));\r
- \r
- final Group group = new Group(composite, SWT.NONE);\r
- group.setLayout(new GridLayout());\r
-\r
- final Button chooseAcceptedTaxonButton = new Button(group, SWT.RADIO);\r
- buttons.add(chooseAcceptedTaxonButton);\r
- chooseAcceptedTaxonButton.setText("Choose from recently viewed taxa");\r
-\r
- TableViewer recentNamesViewer = new RecentNamesTableViewer(group);\r
- recentNamesViewer.addDoubleClickListener(new SelectTaxonDoubleClickListener());\r
- recentNamesViewer.getTable().addFocusListener(new SelectButtonFocusListener(chooseAcceptedTaxonButton));\r
- \r
- final Group group_2 = new Group(composite, SWT.NONE);\r
- final GridLayout gridLayout_1 = new GridLayout();\r
- gridLayout_1.numColumns = 2;\r
- group_2.setLayout(gridLayout_1);\r
-\r
- final Button searchForNameButton = new Button(group_2, SWT.RADIO);\r
- buttons.add(searchForNameButton);\r
- searchForNameButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));\r
- searchForNameButton.setText("Search for name of accepted taxon");\r
- new Label(group_2, SWT.NONE);\r
- \r
- searchText = new Text(group_2, SWT.BORDER);\r
- searchText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
- searchText.setForeground(SWTResourceManager.getColor(192, 192, 192));\r
- searchText.setText("Use \"*\" for wildcard searching");\r
- searchText.addFocusListener(new SelectButtonFocusListener(searchForNameButton) {\r
-\r
- public void focusGained(FocusEvent e) {\r
- selectButton(button);\r
- searchText.setForeground(SWTResourceManager.getColor(0,0,0));\r
- searchText.setText("");\r
- }\r
-\r
- public void focusLost(FocusEvent e) {\r
- if (searchText.getText() == "") {\r
- searchText.setForeground(SWTResourceManager.getColor(192, 192, 192));\r
- searchText.setText("Use \"*\" for wildcard searching"); \r
- }\r
- }\r
- \r
- });\r
-\r
- final Button searchButton = new Button(group_2, SWT.NONE);\r
- searchButton.setLayoutData(new GridData());\r
- searchButton.setText("Search");\r
-\r
- final Composite composite_1 = new Composite(container, SWT.NONE);\r
- composite_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 2, 1));\r
- composite_1.setLayout(new FillLayout());\r
-\r
- new Label(composite_1, SWT.NONE).setText("Selected taxon: ");\r
-\r
- selectedTaxonNameLabel = new Label(composite_1, SWT.RIGHT);\r
- selectedTaxonNameLabel.setFont(SWTResourceManager.getFont("", 9, SWT.BOLD));\r
- selectedTaxonNameLabel.setText("");\r
- new Label(container, SWT.NONE);\r
- \r
- \r
- //\r
- initButtons();\r
- \r
- return container;\r
- }\r
-\r
- /**\r
- * Create contents of the button bar\r
- * @param parent\r
- */\r
- @Override\r
- protected void createButtonsForButtonBar(Composite parent) {\r
- createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,\r
- true);\r
- createButton(parent, IDialogConstants.CANCEL_ID,\r
- IDialogConstants.CANCEL_LABEL, false);\r
- }\r
-\r
- private void initButtons() {\r
- for ( Button button : buttons) {\r
- button.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(final SelectionEvent e) {\r
- selectButton((Button) e.getSource());\r
- }\r
- }); \r
- }\r
- }\r
- \r
- /**\r
- * Since buttons are not in the same layout group, the others are not automatically \r
- * deselected when one is selected. This method takes care of that.\r
- * @param button\r
- */\r
- private void selectButton(Button selectedButton) {\r
- for ( Button button : buttons) {\r
- if (button == selectedButton)\r
- button.setSelection(true);\r
- else\r
- button.setSelection(false);\r
- }\r
- }\r
- \r
- /**\r
- * Return the initial size of the dialog\r
- */\r
- @Override\r
- protected Point getInitialSize() {\r
- return new Point(700, 500);\r
- }\r
- protected void configureShell(Shell newShell) {\r
- super.configureShell(newShell);\r
- newShell.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/edit_16x16.ico"));\r
- newShell.setText("Choose parent taxon for \"" + taxon.getName().getTitleCache() +\r
- "\"");\r
- }\r
-\r
- class SelectButtonFocusListener implements FocusListener {\r
-\r
- Button button; // the button that should be selected\r
- \r
- SelectButtonFocusListener(Button button) {\r
- this.button = button;\r
- }\r
- \r
- public void focusGained(FocusEvent e) {\r
- selectButton(button);\r
- }\r
-\r
- public void focusLost(FocusEvent e) { \r
- }\r
- \r
- }\r
- \r
- class SelectTaxonDoubleClickListener implements IDoubleClickListener {\r
-\r
- public void doubleClick(DoubleClickEvent event) { \r
-// TaxonName taxonname = null;\r
- Taxon taxon = null;\r
- try {\r
- taxon = (Taxon) ((StructuredSelection)event.getSelection()).getFirstElement();\r
- }catch (Exception e){\r
- e.printStackTrace();\r
- taxon = null;\r
- }\r
- selectedTaxonNameLabel.setText(taxon.getName().getTitleCache());\r
- }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.part.MultiPageEditorPart;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-/**\r
- * \r
- * Generates the tabbed editor with Name view on top and tabs for\r
- * "Facts", "Specimen", "Geography", etc.\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class MultiPageTaxonView extends MultiPageEditorPart {\r
-\r
- public static final String ID = "eu.etaxonomy.taxeditor.prototype2.view.multipagetaxonview";\r
- private Taxon taxon;\r
- \r
- @Override\r
- protected void createPages() {\r
- \r
- try {\r
- addPage(0, new NameEditorView(), getEditorInput());\r
- setPageText(0, "Name");\r
-\r
- addPage(1, new NameEditorView(), getEditorInput());\r
- setPageText(1, "Descriptive");\r
- \r
- addPage(2, new NameEditorView(), getEditorInput());\r
- setPageText(2, "Concepts");\r
- \r
- addPage(3, new NameEditorView(), getEditorInput());\r
- setPageText(3, "Geographic");\r
- \r
- } catch (PartInitException e) { \r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- \r
-// bindPartName();\r
- }\r
-\r
- @Override\r
- public void doSave(IProgressMonitor monitor) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
-\r
- @Override\r
- public void doSaveAs() {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
-\r
- @Override\r
- public boolean isSaveAsAllowed() {\r
- // TODO Auto-generated method stub\r
- return false;\r
- }\r
-\r
- @Override\r
- public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
- \r
- if (!(input instanceof IEditorInput))\r
- throw new PartInitException(\r
- "Invalid Input: Must be IFileEditorInput");\r
- \r
- // Get taxon from editor input\r
- if (input.getAdapter(Taxon.class) != null) {\r
- taxon = (Taxon) input.getAdapter(Taxon.class);\r
- } else {\r
- taxon = null;\r
- }\r
-\r
- // Listen for name changes fired when taxon is saved; \r
- // change tab for this taxon editor accordingly\r
- taxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
- public void propertyChange(PropertyChangeEvent e) {\r
- setPartName(taxon.getName().getTitleCache());\r
- }\r
- });\r
-\r
- // Any taxon that has been saved will by necessity have a name;\r
- // only a new taxon will not\r
- if (taxon.getName().getTitleCache() == null)\r
- setPartName("New taxon");\r
- else\r
- setPartName(taxon.getName().getTitleCache());\r
- \r
- setSite(site);\r
- setInput(input);\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.eclipse.core.databinding.beans.BeansObservables;\r
-import org.eclipse.core.databinding.observable.set.ISetChangeListener;\r
-import org.eclipse.core.databinding.observable.set.SetChangeEvent;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.text.source.SourceViewer;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DropTarget;\r
-import org.eclipse.swt.dnd.DropTargetAdapter;\r
-import org.eclipse.swt.dnd.DropTargetEvent;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.events.FocusEvent;\r
-import org.eclipse.swt.events.FocusListener;\r
-import org.eclipse.swt.events.MouseEvent;\r
-import org.eclipse.swt.events.MouseListener;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
-import org.eclipse.swt.graphics.Point;\r
-import org.eclipse.swt.graphics.Rectangle;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.CoolBar;\r
-import org.eclipse.swt.widgets.CoolItem;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Link;\r
-import org.eclipse.swt.widgets.Listener;\r
-import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.swt.widgets.MenuItem;\r
-import org.eclipse.swt.widgets.ToolBar;\r
-import org.eclipse.swt.widgets.ToolItem;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.part.EditorPart;\r
-\r
-import com.swtdesigner.ResourceManager;\r
-import com.swtdesigner.SWTResourceManager;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.Activator;\r
-import eu.etaxonomy.taxeditor.controller.ActionDeleteTaxon;\r
-import eu.etaxonomy.taxeditor.controller.ActionOpenNameEditor;\r
-import eu.etaxonomy.taxeditor.controller.ActionOpenNewChildNameEditor;\r
-import eu.etaxonomy.taxeditor.controller.ActionSaveTaxon;\r
-import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
-import eu.etaxonomy.taxeditor.model.PropertySheetNode;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.TesterooWritableSet;\r
-import eu.etaxonomy.taxeditor.view.propertysheetsupport.PropertySheetContentProvider;\r
-import eu.etaxonomy.taxeditor.view.propertysheetsupport.PropertySheetValueEditingSupport;\r
-import eu.etaxonomy.taxeditor.view.propertysheetsupport.PropertySheetValueLabelProvider;\r
-\r
-/**\r
- * TODO: user should always know what kind of name - BotanicalName,\r
- * ZoologicalName, etc. - he will be editing when a new taxon\r
- * is created\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class NameEditorView extends EditorPart {\r
- /**\r
- * The taxon the editor is editing \r
- */\r
- private Taxon taxon;\r
- /**\r
- * The higher taxon of the taxon the editor is editing \r
- */\r
- private Taxon higherTaxon = null; \r
- /**\r
- * Shared listener that sets dirty state to true \r
- * when any registered property changes \r
- */\r
- private PropertyChangeListener taxonChangeListener = new PropertyChangeListener() {\r
- public void propertyChange(PropertyChangeEvent arg0) {\r
- dirty = true;\r
- firePropertyChange(PROP_DIRTY);\r
- }\r
- }; \r
- /**\r
- * Arrays for the creation of synonyms - text and images \r
- */\r
- String [] relTypes = {"a synonym (type unknown)",\r
- "a homotypic synonym",\r
- "a heterotypic synoynm",\r
- "a basionym",\r
- "a replaced synonym",\r
- "a homonym",\r
- "an orthographic variant",\r
- "a misapplied name",\r
- "a concept relation"};\r
- String [] relImgs = {"unknown_no_bg.gif",\r
- "homosyn_no_bg.gif",\r
- "heterosyn_no_bg.gif",\r
- "basionym_no_bg.gif",\r
- "repsyn_no_bg.gif",\r
- "homonym_no_bg.gif",\r
- "orthovariant_no_bg.gif",\r
- "misapplied_no_bg.gif",\r
- "concept_no_bg.gif"};\r
- String [] conceptTypes = {"congruent","included in","includes","overlaps","excludes","doubtful"};\r
- /**\r
- * If true, show "save" prompt before closing editor \r
- */\r
- public boolean dirty = false;\r
- String clickText;\r
- \r
- private Composite nameComposite;\r
- private Composite contentComposite;\r
- \r
- private PropertySheetViewer propertySheetViewer;\r
- private Composite parent;\r
- \r
- public static final String ID = "eu.etaxonomy.taxeditor.prototype2.view.nameeditorview"; //$NON-NLS-1$\r
-\r
- public NameEditorView() {\r
- \r
- }\r
- /**\r
- * Create contents of the editor part\r
- * @param parent\r
- */\r
- @Override\r
- public void createPartControl(Composite parent) {\r
- \r
- this.parent = parent;\r
- parent.setLayout(new GridLayout());\r
- parent.setRedraw(true);\r
- \r
- \r
- createHigherTaxon();\r
- \r
-\r
- final CoolBar coolBar = new CoolBar(parent, SWT.NONE);\r
- new CoolItem(coolBar, SWT.PUSH).setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/save_edit.gif"));\r
- \r
- final ToolBar toolBar = new ToolBar(parent, SWT.NONE);\r
-// toolBar.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));\r
-\r
- final ToolItem itemSave = new ToolItem(toolBar, SWT.PUSH);\r
- itemSave.setToolTipText("Save taxon");\r
- itemSave.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/save_edit.gif"));\r
- itemSave.addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) {\r
- dirty = false;\r
- new ActionSaveTaxon(taxon).run();\r
- }\r
- public void widgetSelected(SelectionEvent e) {\r
- dirty = false;\r
- new ActionSaveTaxon(taxon).run();\r
- }\r
- });\r
-\r
- final ToolItem itemMove = new ToolItem(toolBar, SWT.DROP_DOWN);\r
- itemMove.setToolTipText("Move taxon");\r
- \r
- final Menu menuMove = new Menu(toolBar);\r
- addDropDown(itemMove, menuMove);\r
-\r
- final MenuItem moveTaxonMenuItem = new MenuItem(menuMove, SWT.NONE);\r
- moveTaxonMenuItem.setText("Move taxon to another higher taxon");\r
- moveTaxonMenuItem.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(final SelectionEvent e) {\r
- new MoveDialogView(getSite().getShell()); \r
- MoveDialogView dialog = new MoveDialogView(getSite().getShell());\r
- dialog.open(taxon); \r
- }\r
- });\r
-\r
- final MenuItem taxonToSynonymMenuItem = new MenuItem(menuMove, SWT.NONE);\r
- taxonToSynonymMenuItem.setSelection(true);\r
- taxonToSynonymMenuItem.setText("Turn taxon's accepted name into a synonym"); \r
- taxonToSynonymMenuItem.addSelectionListener(new SelectionAdapter() {\r
- public void widgetSelected(final SelectionEvent e) {\r
- new MoveDialogView(getSite().getShell()); \r
- MoveDialogView dialog = new MoveDialogView(getSite().getShell());\r
- dialog.open(taxon); \r
- }\r
- });\r
-\r
- itemMove.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/correction_change.gif"));\r
-\r
- final ToolItem itemDelete = new ToolItem(toolBar, SWT.NONE);\r
- itemDelete.setToolTipText("Delete taxon");\r
- itemDelete.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/delete_edit.gif"));\r
- itemDelete.addSelectionListener(new SelectionListener() {\r
-\r
- public void widgetDefaultSelected(SelectionEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
- public void widgetSelected(SelectionEvent e) {\r
- new ActionDeleteTaxon(taxon).run();\r
- }\r
- });\r
- \r
- new ToolItem(toolBar, SWT.SEPARATOR);\r
-\r
- final ToolItem itemAddRelationship = new ToolItem(toolBar, SWT.DROP_DOWN);\r
- itemAddRelationship.setToolTipText("Add nom. or tax. relation to taxon"); \r
- itemAddRelationship.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/rel_no_bg.gif"));\r
-\r
- /*\r
- * Create menu to add relations to the taxon\r
- */\r
- final Menu menuAddRel = new Menu(toolBar);\r
- addDropDown(itemAddRelationship, menuAddRel);\r
-\r
- for (int i = 0; i < relTypes.length; i++) {\r
- final MenuItem menuItem;\r
- if (relTypes[i].contains("concept")) {\r
- menuItem = new MenuItem(menuAddRel, SWT.CASCADE);\r
- \r
- final Menu conceptMenu = new Menu(menuItem);\r
- menuItem.setMenu(conceptMenu);\r
- \r
- for (int j = 0; j < conceptTypes.length; j++) {\r
- final MenuItem conceptMenuItem = new MenuItem(conceptMenu, SWT.CHECK);\r
- conceptMenuItem.setText(conceptTypes[j]);\r
- } \r
- } else {\r
- menuItem = new MenuItem(menuAddRel, SWT.NONE); \r
- }\r
- \r
- menuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/" + relImgs[i]));\r
- menuItem.setText("Add " + relTypes[i]);\r
- }\r
- \r
- new ToolItem(toolBar, SWT.SEPARATOR);\r
-\r
- final ToolItem itemAddTaxon = new ToolItem(toolBar, SWT.DROP_DOWN);\r
- itemAddTaxon.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/add_edit.gif"));\r
- itemAddTaxon.setToolTipText("Add new taxon");\r
-\r
- /*\r
- * drop-down to add new "included in" taxon\r
- */ \r
- final Menu menuAdd = new Menu(toolBar);\r
- addDropDown(itemAddTaxon, menuAdd);\r
-\r
- if (higherTaxon != null) {\r
- final MenuItem addToHigherTaxonItem = new MenuItem(menuAdd, SWT.NONE);\r
- addToHigherTaxonItem.setText("Add new taxon to \"" + higherTaxon.getName().getTitleCache() + "\"");\r
- addToHigherTaxonItem.addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
- public void widgetSelected(SelectionEvent e) {\r
- new ActionOpenNewChildNameEditor(higherTaxon).run();\r
- } \r
- });\r
- }\r
- final MenuItem addTaxonItem = new MenuItem(menuAdd, SWT.NONE);\r
- addTaxonItem.setText("Add new taxon to this taxon");\r
- addTaxonItem.addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
- public void widgetSelected(SelectionEvent e) {\r
- new ActionOpenNewChildNameEditor(taxon).run();\r
- } \r
- });\r
-\r
- contentComposite = new Composite(parent, SWT.NONE);\r
- contentComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
- contentComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- final GridLayout gridLayout_2 = new GridLayout();\r
- gridLayout_2.marginHeight = 0;\r
- gridLayout_2.marginWidth = 0;\r
- gridLayout_2.numColumns = 2;\r
- contentComposite.setLayout(gridLayout_2);\r
- contentComposite.setRedraw(true);\r
-\r
- \r
- nameComposite = new Composite(contentComposite, SWT.NONE);\r
- nameComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
- GridLayout gridLayout = new GridLayout();\r
- gridLayout.verticalSpacing = 10;\r
- nameComposite.setLayout(gridLayout); \r
- nameComposite.setRedraw(true);\r
- \r
- \r
-// clickText = "Click here to start entering accepted name or enter its individual fields in the property sheet to the right";\r
-// NameViewer_ acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, nameComposite);\r
-// acceptedNameViewer.setBindingContext(bindingContext);\r
-// acceptedNameViewer.configure(new NameViewerConfig());\r
- \r
- GroupComposite homoGroupComposite = new GroupComposite(nameComposite);\r
- homoGroupComposite.setTaxon(taxon);\r
- homoGroupComposite.setNameEditorView(this);\r
- \r
- new NameComposite(homoGroupComposite, taxon).setNameEditorView(this);\r
- \r
- TesterooWritableSet.getInstance().addSetChangeListener\r
- (new ISetChangeListener() {\r
- public void handleSetChange(SetChangeEvent event) {\r
- for ( Object addition: event.diff.getAdditions()) {\r
- if (addition instanceof Synonym)\r
- createHeterotypicalGroup((Synonym) addition);\r
- }\r
- nameComposite.layout();\r
- contentComposite.layout();\r
- }\r
- });\r
- \r
- // Listen for names being dragged outside of existing homotypic groups -\r
- // user wants to create a new group\r
- // Drop functionality\r
- Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};\r
- int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
- DropTarget target = new DropTarget(nameComposite, operations);\r
- target.setTransfer(types);\r
- target.addDropListener(dropTargetAdapter);\r
- \r
- /*\r
- * construct PropertySheetViewer, with bindings to model layer\r
- */\r
- propertySheetViewer = new PropertySheetViewer(contentComposite);\r
- \r
- propertySheetViewer.setContentProvider(\r
- new PropertySheetContentProvider());\r
- propertySheetViewer.getPropertyValueColumn().setLabelProvider(\r
- new PropertySheetValueLabelProvider(propertySheetViewer));\r
- propertySheetViewer.getPropertyValueColumn().setEditingSupport(\r
- new PropertySheetValueEditingSupport(propertySheetViewer));\r
- \r
- setPropertySheetNodes(taxon.getName()); \r
- }\r
- \r
- /**\r
- * Display hyperlinked higher taxon, if there is one\r
- */\r
- private void createHigherTaxon() {\r
- Composite higherTaxonComposite = new Composite(parent, SWT.NONE);\r
- higherTaxonComposite.setLayout(new FillLayout());\r
- (new Label(higherTaxonComposite, SWT.NONE)).setText("Higher taxon: ");\r
- if (higherTaxon == null)\r
- (new Label(higherTaxonComposite, SWT.NONE)).setText("none");\r
- else {\r
- Link higherTaxonLink = new Link(higherTaxonComposite, SWT.NONE);\r
- higherTaxonLink.setText("<a href=\"#\">" + higherTaxon.getName().getTitleCache() + "</a>");\r
- higherTaxonLink.addMouseListener(new MouseListener() {\r
- public void mouseDoubleClick(MouseEvent e) {\r
- new ActionOpenNameEditor(higherTaxon).run(); \r
- }\r
- public void mouseDown(MouseEvent e) {\r
- new ActionOpenNameEditor(higherTaxon).run();\r
- }\r
- public void mouseUp(MouseEvent e) {\r
- } \r
- });\r
- } \r
- }\r
- public void setPropertySheetNodes(TaxonNameBase taxonname) {\r
- propertySheetViewer.setInput(getPropertySheetNodes(taxonname));\r
- propertySheetViewer.setExpandedState(fullTitleNode, true);\r
- }\r
-\r
- private SourceViewer createAcceptedName_() {\r
- \r
-// Method[] methods = BotanicalName.class.getMethods();\r
-// for (int i = 0; i < methods.length; i++) {\r
-// System.out.println("Annotations:");\r
-// for (int j = 0; i < methods[j].getAnnotations().length; j++)\r
-// System.out.println("\t" + methods[i].getAnnotations()[j]);\r
-// System.out.println("Type: " + methods[i].getReturnType().toString());\r
-// System.out.println("Name:" + methods[i].getName());\r
-// System.out.println();\r
-// }\r
- // use annotations to find persistent methods\r
- \r
- \r
-// PropertyDescriptor descriptor;\r
-// try {\r
-// descriptor = new PropertyDescriptor("genus", taxonname.getClass());\r
-// try {\r
-// System.out.println("Property desc. test in createAcceptedName: " \r
-// + descriptor.getReadMethod().invoke(taxonname, null));\r
-// } catch (IllegalArgumentException e) {\r
-// // TODO Auto-generated catch block\r
-// e.printStackTrace();\r
-// } catch (IllegalAccessException e) {\r
-// // TODO Auto-generated catch block\r
-// e.printStackTrace();\r
-// } catch (InvocationTargetException e) {\r
-// // TODO Auto-generated catch block\r
-// e.printStackTrace();\r
-// }\r
-// } catch (IntrospectionException e) {\r
-// // TODO Auto-generated catch block\r
-// e.printStackTrace();\r
-// } \r
- \r
- final SourceViewer sourceViewer = new SourceViewer(nameComposite, null, 0); // createSourceViewer(taxon.getName());\r
- \r
- sourceViewer.getTextWidget().setLayoutData(\r
- new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));\r
- sourceViewer.getTextWidget().setFont(\r
- SWTResourceManager.getFont("Georgia", 12, SWT.NONE)); \r
- \r
- /*\r
- * if this is a new name, show text prompt to start entering data\r
- */\r
- if (taxon.getName().getNameCache() == null) {\r
- clickText = "Click here to start entering accepted name or enter individual fields in the property sheet to the right";\r
- \r
- sourceViewer.getTextWidget().setText(clickText);\r
- sourceViewer.getTextWidget().setFont(SWTResourceManager.getFont("Georgia", 12, SWT.ITALIC));\r
- sourceViewer.getTextWidget().setForeground(SWTResourceManager.getColor(192, 192, 192));\r
- sourceViewer.getTextWidget().addFocusListener(new FocusListener() {\r
- public void focusGained(FocusEvent e) {\r
- if (!dirty) {\r
- sourceViewer.getTextWidget().setText("");\r
- sourceViewer.getTextWidget().setFont(SWTResourceManager.getFont("Georgia", 12, SWT.NONE));\r
- sourceViewer.getTextWidget().setForeground(SWTResourceManager.getColor(0, 0, 0));\r
-// dirty = true;\r
-// firePropertyChange(PROP_DIRTY);\r
- }\r
- }\r
- public void focusLost(FocusEvent e) { \r
- if (sourceViewer.getTextWidget().getText() == "") {\r
- sourceViewer.getTextWidget().setForeground(SWTResourceManager.getColor(192, 192, 192));\r
- sourceViewer.getTextWidget().setText(clickText);\r
- sourceViewer.getTextWidget().setFont(SWTResourceManager.getFont("Georgia", 12, SWT.ITALIC));\r
- dirty = false;\r
- } else {\r
- dirty = true;\r
- }\r
- }\r
- }); \r
- }\r
- \r
- return sourceViewer;\r
- }\r
- \r
-\r
-\r
- /**\r
- * Creates the drop-down menu next to every synonym for changing relationship type\r
- * \r
- * @param label\r
- * @param name\r
- */\r
-// private void createRelationMenu(Control control, BotanicalName name) {\r
- private void createRelationMenu(final Label label) {\r
- \r
- final Menu menu = new Menu(label);\r
- label.setMenu(menu);\r
- \r
- // context menu usually only shows up w/ right menu click -\r
- // this listener lets the left click activate it as well\r
- label.addMouseListener(new MouseListener() {\r
- public void mouseDown(MouseEvent e) {\r
- menu.setVisible(true);\r
- }\r
- public void mouseDoubleClick(MouseEvent e) { }\r
- public void mouseUp(MouseEvent e) { }\r
- });\r
- \r
- createRelationMenuItem(menu, "delete_edit.gif", "Delete synonym from this taxon");\r
- createRelationMenuItem(menu, "correction_change.gif", "Move synonym to another taxon");\r
- \r
- new MenuItem(menu, SWT.SEPARATOR);\r
- \r
- for (int i= 0; i < relTypes.length; i++) {\r
- final String relImg = relImgs[i];\r
- String relText = "Turn this synonym into " + relTypes[i];\r
- createRelationMenuItem(menu, relImg, relText).addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) { \r
- }\r
- public void widgetSelected(SelectionEvent e) {\r
- label.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/" + relImg)); \r
- }\r
- });\r
- }\r
- }\r
- \r
- private MenuItem createRelationMenuItem(Menu menu, String img, String text) {\r
- final MenuItem menuItem = new MenuItem(menu, SWT.NONE);\r
- menuItem.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/" + img));\r
- menuItem.setText(text);\r
- return menuItem;\r
- }\r
- \r
- @Override\r
- public void setFocus() {\r
- // Set the focus\r
- }\r
-\r
- @Override\r
- public void doSave(IProgressMonitor monitor) {\r
- // Do the Save operation\r
- }\r
-\r
- @Override\r
- public void doSaveAs() {\r
- // Do the Save As operation\r
- }\r
-\r
- @Override\r
- public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
- \r
- if (!(input instanceof IEditorInput))\r
- throw new PartInitException(\r
- "Invalid Input: Must be IFileEditorInput");\r
- \r
- if (input.getAdapter(Taxon.class) != null) {\r
- taxon = (Taxon) input.getAdapter(Taxon.class);\r
- } else {\r
- \r
- taxon = null;\r
- }\r
- \r
- // Get parent taxon\r
- if (taxon.getTaxonomicParent() != null)\r
- higherTaxon = taxon.getTaxonomicParent();\r
- \r
- // Register listeners for any change in accepted name or set of relations\r
- taxon.getName().addPropertyChangeListener("titleCache", taxonChangeListener);\r
- taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
- \r
- setSite(site);\r
- setInput(input);\r
- \r
- }\r
-\r
- PropertySheetNode fullTitleNode;\r
- /**\r
- * @param taxonName\r
- * @return\r
- */\r
- private List<PropertySheetNode> getPropertySheetNodes(TaxonNameBase taxonName) {\r
- \r
- BotanicalName botName = (BotanicalName) taxonName;\r
- \r
- List<PropertySheetNode> propertySheetNodes = new ArrayList<PropertySheetNode>();\r
- fullTitleNode = new PropertySheetNode("Full Title", BeansObservables.observeValue(botName, "titleCache"), \r
- null, PropertySheetNode.EDITABLE);\r
- propertySheetNodes.add(fullTitleNode);\r
- \r
- // Note: only top-level nodes are "add"-ed - otherwise, they are\r
- // instantiated with their parent node\r
- if (botName.getRank() == null) botName.setRank(Rank.GENUS());\r
- new PropertySheetNode("Rank", botName.getRank().getLabel(), \r
- fullTitleNode, PropertySheetNode.NOT_EDITABLE); \r
- new PropertySheetNode("Genus", BeansObservables.observeValue(botName, "uninomial"), \r
- fullTitleNode, PropertySheetNode.EDITABLE);\r
- new PropertySheetNode("Species Epithet", BeansObservables.observeValue(botName, "specificEpithet"), \r
- fullTitleNode, PropertySheetNode.EDITABLE);\r
- \r
- String author = \r
- botName.getCombinationAuthorTeam() == null ? "" : \r
- botName.getCombinationAuthorTeam().getTitleCache();\r
- new PropertySheetNode("Author", author, \r
- fullTitleNode, PropertySheetNode.NOT_EDITABLE);\r
-\r
- return propertySheetNodes;\r
- }\r
- \r
- @Override\r
- public boolean isDirty() {\r
- return dirty;\r
- }\r
-\r
- @Override\r
- public boolean isSaveAsAllowed() {\r
- return false;\r
- }\r
- \r
- private static void addDropDown(final ToolItem item, final Menu menu) {\r
- item.addListener(SWT.Selection, new Listener() {\r
- public void handleEvent(Event event) {\r
- if (event.detail == SWT.ARROW) {\r
- Rectangle rect = item.getBounds();\r
- Point pt = new Point(rect.x, rect.y + rect.height);\r
- pt = item.getParent().toDisplay(pt);\r
- menu.setLocation(pt.x, pt.y);\r
- menu.setVisible(true);\r
- }\r
- }\r
- });\r
- }\r
- \r
- private void createHeterotypicalGroup(Synonym heterosyn) {\r
-\r
- GroupComposite heteroGroupComposite = new GroupComposite(nameComposite);\r
- heteroGroupComposite.setTaxon(taxon);\r
- heteroGroupComposite.setNameEditorView(this);\r
- \r
- NameComposite nameComposite = new NameComposite(heteroGroupComposite, heterosyn, taxon);\r
- nameComposite.setNameEditorView(this);\r
- nameComposite.setFocus();\r
- }\r
- \r
- /**\r
- * Creates a new homotypic group when a name composite is dropped outside of all existing\r
- * homotypic groups \r
- */\r
- DropTargetAdapter dropTargetAdapter = new DropTargetAdapter() {\r
- \r
- public void drop(DropTargetEvent event) {\r
- \r
- Synonym synonym = (Synonym) event.data; \r
- \r
- GroupComposite homotypicGroupComposite = new GroupComposite(nameComposite);\r
- homotypicGroupComposite.setTaxon(taxon);\r
- homotypicGroupComposite.setNameEditorView(NameEditorView.this);\r
- \r
- new NameComposite(homotypicGroupComposite, synonym, taxon).setFocus();\r
- \r
- NameEditorView.this.contentComposite.layout();\r
- } \r
- }; \r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import org.eclipse.jface.action.IMenuManager;\r
-import org.eclipse.jface.action.IToolBarManager;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.jface.viewers.TreeViewer;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.FocusEvent;\r
-import org.eclipse.swt.events.FocusListener;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\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.ExpandBar;\r
-import org.eclipse.swt.widgets.ExpandItem;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.swt.widgets.MenuItem;\r
-import org.eclipse.swt.widgets.Text;\r
-import org.eclipse.ui.part.ViewPart;\r
-\r
-import com.swtdesigner.ResourceManager;\r
-import com.swtdesigner.SWTResourceManager;\r
-\r
-import eu.etaxonomy.taxeditor.Activator;\r
-import eu.etaxonomy.taxeditor.view.RecentNamesTableViewer;\r
-import eu.etaxonomy.taxeditor.view.TaxonomicTreeViewer;\r
-\r
-/**\r
- * @author p.ciardelli\r
- *\r
- */\r
-public class NameListView extends ViewPart {\r
- \r
- private Text searchText;\r
- private Composite composite;\r
- private Composite taxTreeComposite = null;\r
- private Composite recentNamesComposite = null;\r
- private Composite searchComposite = null; \r
- private Composite top = null;\r
- private ExpandBar expandBar = null;\r
- private ExpandItem taxTreeExpandItem;\r
- private ExpandItem recentNamesExpandItem;\r
- private ExpandItem searchExpandItem;\r
- private TableViewer recentNamesViewer; \r
- public static final String ID = "eu.etaxonomy.taxeditor.prototype2.view.namelistview"; //$NON-NLS-1$\r
-\r
- private TreeViewer treeViewer;\r
- \r
- /**\r
- * Create contents of the view part\r
- * @param parent\r
- */\r
- @Override\r
- public void createPartControl(Composite parent) {\r
- \r
- parent.setLayout(new FillLayout());\r
- GridLayout gridLayout = new GridLayout();\r
- gridLayout.horizontalSpacing = 0;\r
- gridLayout.marginWidth = 0;\r
- gridLayout.marginHeight = 0;\r
- gridLayout.verticalSpacing = 0; \r
- \r
- top = new Composite(parent, SWT.NONE);\r
- top.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
-\r
- composite = new Composite(top, SWT.NONE);\r
- composite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- final GridLayout gridLayout_1 = new GridLayout();\r
- gridLayout_1.numColumns = 2;\r
- composite.setLayout(gridLayout_1);\r
- final Label lblDataSourceTitle = new Label(composite, SWT.NONE);\r
- lblDataSourceTitle.setFont(SWTResourceManager.getFont("Arial", 14, SWT.BOLD));\r
- lblDataSourceTitle.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- lblDataSourceTitle.setAlignment(SWT.CENTER);\r
- lblDataSourceTitle.setText(" Euro+Med"); \r
- \r
- final Label lblDbImg = new Label(composite, SWT.NONE);\r
- lblDbImg.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));\r
- lblDbImg.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- lblDbImg.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/db.gif"));\r
-\r
- final Menu menu = new Menu(lblDbImg);\r
- lblDbImg.setMenu(menu);\r
-\r
- final MenuItem checkboxMenuItem = new MenuItem(menu, SWT.CHECK);\r
- checkboxMenuItem.setSelection(true);\r
- checkboxMenuItem.setText("Euro+Med (mssql://128.14.101.12:80/europlusmed)");\r
-\r
- final MenuItem checkboxMenuItem_1 = new MenuItem(menu, SWT.CHECK);\r
- checkboxMenuItem_1.setText("WP6 (mssql://128.14.101.13:80/wp6)");\r
-\r
- final MenuItem palmWebora1922299480pwMenuItem = new MenuItem(menu, SWT.NONE);\r
- palmWebora1922299480pwMenuItem.setText("Palm Web (ora://192.22.99.4:80/pw)");\r
-\r
- new MenuItem(menu, SWT.SEPARATOR);\r
-\r
- final MenuItem newDataSourceMenuItem = new MenuItem(menu, SWT.NONE);\r
- newDataSourceMenuItem.setText("New data source ...");\r
- \r
- final Label lblDataSource = new Label(composite, SWT.NONE);\r
- final GridData gd_lblDataSource = new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1);\r
- gd_lblDataSource.heightHint = 16;\r
- lblDataSource.setLayoutData(gd_lblDataSource);\r
- lblDataSource.setFont(SWTResourceManager.getFont("Arial", 8, SWT.NONE));\r
- lblDataSource.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- lblDataSource.setAlignment(SWT.CENTER);\r
- lblDataSource.setText(" mssql://128.14.101.12:80/europlusmed");\r
-\r
- createExpandBar();\r
- top.setLayout(gridLayout);\r
- top.setTabList(new Control[] {composite, expandBar});\r
- }\r
-\r
- /**\r
- * This method initializes expandBar\r
- * \r
- */\r
- private void createExpandBar() {\r
- expandBar = new ExpandBar(top, SWT.V_SCROLL);\r
- GridData gridData = new GridData();\r
- gridData.horizontalAlignment = GridData.FILL;\r
- gridData.grabExcessHorizontalSpace = true;\r
- gridData.grabExcessVerticalSpace = true;\r
- gridData.verticalAlignment = GridData.FILL;\r
- expandBar.setLayoutData(gridData);\r
- createNameListComposite();\r
- createRecentNamesComposite();\r
- createSearchComposite();\r
- \r
- createActions();\r
- initializeToolBar();\r
- initializeMenu();\r
- \r
- }\r
- \r
- private void createNameListComposite() {\r
- taxTreeExpandItem = new ExpandItem(expandBar, SWT.NONE, 0);\r
- taxTreeExpandItem.setExpanded(true);\r
- taxTreeExpandItem.setHeight(200);\r
- taxTreeExpandItem.setText("Taxonomic Tree");\r
- \r
- taxTreeComposite = new Composite(expandBar, SWT.NONE);\r
- taxTreeComposite.setLayout(new FillLayout());\r
- taxTreeComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- \r
- taxTreeExpandItem.setControl(taxTreeComposite);\r
-\r
- treeViewer = new TaxonomicTreeViewer(taxTreeComposite);\r
- }\r
- \r
- private void createRecentNamesComposite() {\r
- recentNamesExpandItem = new ExpandItem(expandBar, SWT.NONE, 1);\r
- recentNamesExpandItem.setHeight(130);\r
- recentNamesExpandItem.setExpanded(true);\r
- recentNamesExpandItem.setText("Recently viewed names");\r
- recentNamesComposite = new Composite(expandBar, SWT.NONE);\r
- recentNamesComposite.setLayout(new GridLayout());\r
-\r
- recentNamesExpandItem.setControl(recentNamesComposite);\r
-\r
- recentNamesViewer = new RecentNamesTableViewer(recentNamesComposite);\r
- }\r
-\r
- private void createSearchComposite() {\r
- searchExpandItem = new ExpandItem(expandBar, SWT.NONE, 2);\r
- searchExpandItem.setHeight(50);\r
- searchExpandItem.setExpanded(true);\r
- searchExpandItem.setText("Search");\r
- searchComposite = new Composite(expandBar, SWT.NONE);\r
- final GridLayout gridLayout = new GridLayout();\r
- gridLayout.numColumns = 2;\r
- searchComposite.setLayout(gridLayout);\r
-\r
- searchExpandItem.setControl(searchComposite);\r
-\r
- searchText = new Text(searchComposite, SWT.BORDER);\r
- searchText.setForeground(SWTResourceManager.getColor(192, 192, 192));\r
- searchText.setText("Use \"*\" for wildcard searching");\r
- final GridData gd_useForText = new GridData(SWT.FILL, SWT.CENTER, true, false);\r
- searchText.setLayoutData(gd_useForText);\r
- searchText.addFocusListener(new FocusListener() {\r
-\r
- public void focusGained(FocusEvent e) {\r
- searchText.setForeground(SWTResourceManager.getColor(0,0,0));\r
- searchText.setText("");\r
- }\r
-\r
- public void focusLost(FocusEvent e) {\r
- if (searchText.getText() == "") {\r
- searchText.setForeground(SWTResourceManager.getColor(192, 192, 192));\r
- searchText.setText("Use \"*\" for wildcard searching"); \r
- }\r
- \r
- }\r
- \r
- });\r
-\r
- final Button searchButton = new Button(searchComposite, SWT.NONE);\r
- searchButton.setText("Search");\r
-\r
-// Image image = FileArrangerImages.getImageRegistry().get(\r
-// IFileArrangerImages.IMG_FTP);\r
-// ftpExpandItem.setImage(image);\r
- } \r
- \r
- private void createActions() {\r
- // Create the actions\r
- }\r
-\r
- /**\r
- * Initialize the toolbar\r
- */\r
- private void initializeToolBar() {\r
- IToolBarManager toolbarManager = getViewSite().getActionBars()\r
- .getToolBarManager();\r
- }\r
-\r
- /**\r
- * Initialize the menu\r
- */\r
- private void initializeMenu() {\r
- IMenuManager menuManager = getViewSite().getActionBars()\r
- .getMenuManager();\r
- }\r
-\r
- @Override\r
- public void setFocus() {\r
- // Set the focus\r
- }\r
-\r
- /**\r
- * Expose TreeViewer, i.e. to manipulate tree nodes\r
- * @return\r
- */\r
- public TreeViewer getTreeViewer() {\r
- return treeViewer;\r
- }\r
- \r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import java.util.Iterator;\r
-\r
-import org.eclipse.jface.text.Document;\r
-import org.eclipse.jface.text.Position;\r
-import org.eclipse.jface.text.source.Annotation;\r
-import org.eclipse.jface.text.source.AnnotationModel;\r
-import org.eclipse.jface.text.source.AnnotationPainter;\r
-import org.eclipse.jface.text.source.IAnnotationAccess;\r
-import org.eclipse.jface.text.source.SourceViewer;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.graphics.Color;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Display;\r
-\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.AnnotationMarkerAccess;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.ErrorAnnotation;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.WarningAnnotation;\r
-\r
-/**\r
- * SourceViewer implementation called by NameEditorView.\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class NameViewer extends SourceViewer {\r
- \r
- public NameViewer(Composite parent) {\r
- super(parent, null, SWT.WRAP | SWT.MULTI | SWT.RESIZE);\r
- \r
- // Set name viewer's text to name cache\r
- this.setDocument(new Document(""), new AnnotationModel());\r
- \r
- // Annotations section\r
- IAnnotationAccess fAnnotationAccess = new AnnotationMarkerAccess();\r
- \r
- // To paint the annotations\r
- AnnotationPainter annotationPainter = new AnnotationPainter(this, fAnnotationAccess);\r
-\r
- // Add ability to paint red squigglies\r
- annotationPainter.addAnnotationType(ErrorAnnotation.ERROR_TYPE);\r
- annotationPainter.setAnnotationTypeColor(ErrorAnnotation.ERROR_TYPE, \r
- new Color(Display.getDefault(), ErrorAnnotation.ERROR_RGB));\r
-\r
- // Add ability to paint yellow squigglies\r
- annotationPainter.addAnnotationType(WarningAnnotation.WARNING_TYPE);\r
- annotationPainter.setAnnotationTypeColor(WarningAnnotation.WARNING_TYPE, \r
- new Color(Display.getDefault(), WarningAnnotation.WARNING_RGB)); \r
- \r
- this.addPainter(annotationPainter);\r
- }\r
-\r
- public void setShowError(boolean hasProblem) {\r
- \r
- String text = this.getTextWidget().getText();\r
- \r
- Iterator<Annotation> annotations = this.getAnnotationModel().getAnnotationIterator();\r
- while (annotations.hasNext()) {\r
- Annotation annotation = annotations.next(); \r
- if (annotation.getType().equals(ErrorAnnotation.ERROR_TYPE))\r
- this.getAnnotationModel().removeAnnotation(annotation);\r
- }\r
- \r
- // Failed attempt to get multi-line squigglies drawn\r
- if (hasProblem && text.length() > 0) {\r
- for (int i = 1; i <= this.getTextWidget().getLineCount(); i++) {\r
- this.getAnnotationModel().addAnnotation(\r
- new ErrorAnnotation(i, "Could not parse name."), \r
- new Position(0, text.length()));\r
- }\r
- }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import org.eclipse.core.databinding.DataBindingContext;\r
-import org.eclipse.jface.viewers.ColumnLabelProvider;\r
-import org.eclipse.jface.viewers.TreeViewer;\r
-import org.eclipse.jface.viewers.TreeViewerColumn;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Listener;\r
-\r
-import eu.etaxonomy.taxeditor.model.PropertySheetNode;\r
-\r
-/**\r
- * Creates a tree viewer with two columns, one for field names the other\r
- * for their values. Note: labels and editing support for values column,\r
- * content provider and input for viewer must be set by the calling method \r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class PropertySheetViewer extends TreeViewer {\r
-\r
- final private TreeViewerColumn propertyFieldColumn;\r
- private TreeViewerColumn propertyValueColumn;\r
- private DataBindingContext bindingContext = new DataBindingContext();\r
- \r
- public PropertySheetViewer(Composite parent) {\r
- // Note: SWT.FULL_SELECTION hides lines connecting nodes\r
- super(parent, SWT.BORDER | SWT.FULL_SELECTION);\r
-\r
- this.getTree().setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, true));\r
-// this.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));\r
- \r
- // create a column for property fields\r
- propertyFieldColumn = new TreeViewerColumn(this, SWT.NONE);\r
- propertyFieldColumn.getColumn().setMoveable(true);\r
- propertyFieldColumn.setLabelProvider(new ColumnLabelProvider() {\r
- public String getText(Object element) {\r
- return ((PropertySheetNode) element).getPropertyField();\r
- }\r
- });\r
- \r
- // create a column for property values \r
- propertyValueColumn = new TreeViewerColumn(this, SWT.NONE);\r
- propertyValueColumn.getColumn().setMoveable(true);\r
- \r
- this.getTree().setLinesVisible(true);\r
- this.getTree().setHeaderVisible(true);\r
-// this.getTree().getVerticalBar().setEnabled(true);\r
- this.getTree().getVerticalBar().setEnabled(false);\r
- \r
- this.getTree().setSize(200, 300);\r
- propertyValueColumn.getColumn().setWidth(100);\r
- propertyFieldColumn.getColumn().setWidth(100);\r
- \r
-// try {\r
-// TableColumnLayout layout = new TableColumnLayout();\r
-// this.getTree().setLayout(layout);\r
-// \r
-// layout.setColumnData( propertyFieldColumn.getColumn(), new ColumnWeightData( 30 ) );\r
-// layout.setColumnData( propertyValueColumn.getColumn(), new ColumnWeightData( 60 ) );\r
-// } catch (RuntimeException e) {\r
-// // TODO Auto-generated catch block\r
-// e.printStackTrace();\r
-// }\r
- \r
- propertyFieldColumn.getColumn().addListener(SWT.Selection, new Listener() {\r
- public void handleEvent(Event event) {\r
- propertyFieldColumn.getColumn().pack();\r
- }\r
- });\r
- propertyValueColumn.getColumn().addListener(SWT.Selection, new Listener() {\r
- public void handleEvent(Event event) {\r
- propertyValueColumn.getColumn().pack();\r
- }\r
- }); \r
- this.getTree().addListener(SWT.MeasureItem, new Listener() {\r
- public void handleEvent(Event event) {\r
-// event.width *= 2; \r
- }\r
- });\r
- \r
- }\r
-\r
- public TreeViewerColumn getPropertyFieldColumn() {\r
- return propertyFieldColumn;\r
- }\r
-\r
- public TreeViewerColumn getPropertyValueColumn() {\r
- return propertyValueColumn;\r
- }\r
-\r
- public DataBindingContext getBindingContext() {\r
- return bindingContext;\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import org.eclipse.core.databinding.beans.BeansObservables;\r
-import org.eclipse.core.databinding.observable.map.IObservableMap;\r
-import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
-import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;\r
-import org.eclipse.jface.viewers.DoubleClickEvent;\r
-import org.eclipse.jface.viewers.IDoubleClickListener;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.widgets.Composite;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.Activator;\r
-import eu.etaxonomy.taxeditor.controller.ActionOpenNameEditor;\r
-\r
-public class RecentNamesTableViewer extends TableViewer {\r
-\r
- public RecentNamesTableViewer(Composite parent) {\r
- super(parent, SWT.H_SCROLL | SWT.V_SCROLL);\r
- this.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
- \r
- // Add content provider\r
- ObservableListContentProvider rnViewerContentProviderList = new ObservableListContentProvider();\r
- this.setContentProvider(rnViewerContentProviderList);\r
- \r
- // Label provider that listens for changes to name cache\r
- IObservableMap[] rnViewerLabelProviderMaps = BeansObservables.observeMaps(rnViewerContentProviderList.\r
- getKnownElements(), Taxon.class, new String[]{"name"});\r
- this.setLabelProvider(new ObservableMapLabelProvider(rnViewerLabelProviderMaps) {\r
- \r
- /*\r
- * JFace databinding syntax makes it to difficult to retrieve\r
- * Taxon.getName().getNameCache, so override function that returns\r
- * label\r
- * \r
- * (non-Javadoc)\r
- * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnText(java.lang.Object, int)\r
- */\r
- public String getColumnText(Object element, int columnIndex) {\r
- return ((Taxon) element).getName().getTitleCache();\r
- } \r
- });\r
- \r
- // Listens for new taxa opened for editing\r
- this.setInput(Activator.getDefault().getObservableRecentNamesList());\r
- \r
- // On double click, open name editor\r
- this.addDoubleClickListener(new IDoubleClickListener(){\r
-\r
- public void doubleClick(DoubleClickEvent event) { \r
- Taxon taxon = null;\r
- try {\r
- taxon = (Taxon) ((StructuredSelection)event.getSelection()).getFirstElement();\r
- }catch (Exception e){\r
- e.printStackTrace();\r
- taxon = null;\r
- }\r
- new ActionOpenNameEditor(taxon).run();\r
- }\r
- });\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import org.eclipse.core.databinding.beans.BeansObservables;\r
-import org.eclipse.core.databinding.observable.map.IObservableMap;\r
-import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
-import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;\r
-import org.eclipse.jface.viewers.CellEditor;\r
-import org.eclipse.jface.viewers.DoubleClickEvent;\r
-import org.eclipse.jface.viewers.ICellEditorListener;\r
-import org.eclipse.jface.viewers.ICellModifier;\r
-import org.eclipse.jface.viewers.IDoubleClickListener;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
-import org.eclipse.jface.viewers.TextCellEditor;\r
-import org.eclipse.jface.viewers.TreeViewer;\r
-import org.eclipse.jface.viewers.ViewerComparator;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DragSource;\r
-import org.eclipse.swt.dnd.DragSourceEvent;\r
-import org.eclipse.swt.dnd.DragSourceListener;\r
-import org.eclipse.swt.dnd.DropTarget;\r
-import org.eclipse.swt.dnd.DropTargetAdapter;\r
-import org.eclipse.swt.dnd.DropTargetEvent;\r
-import org.eclipse.swt.dnd.TextTransfer;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.events.MenuAdapter;\r
-import org.eclipse.swt.events.MenuEvent;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.swt.graphics.Point;\r
-import org.eclipse.swt.graphics.Rectangle;\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.Display;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Item;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Listener;\r
-import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.swt.widgets.MenuItem;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.swt.widgets.TableItem;\r
-import org.eclipse.swt.widgets.Tree;\r
-import org.eclipse.swt.widgets.TreeItem;\r
-import org.eclipse.ui.PlatformUI;\r
-\r
-import com.swtdesigner.ResourceManager;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.Activator;\r
-import eu.etaxonomy.taxeditor.controller.ActionAddQuickName;\r
-import eu.etaxonomy.taxeditor.controller.ActionMoveTaxon;\r
-import eu.etaxonomy.taxeditor.controller.ActionOpenNameEditor;\r
-import eu.etaxonomy.taxeditor.controller.ActionOpenNewChildNameEditor;\r
-import eu.etaxonomy.taxeditor.controller.ActionRemoveTaxonFromTree;\r
-import eu.etaxonomy.taxeditor.controller.ActionSaveTaxon;\r
-import eu.etaxonomy.taxeditor.model.NameTreeContentProvider;\r
-\r
-/**\r
- * Taxon tree viewer which responds to events within individual taxa.\r
- * \r
- * Good overview of TreeViewer: \r
- * http://www.eclipse.org/articles/Article-TreeViewer/TreeViewerArticle.htm\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class TaxonomicTreeViewer extends TreeViewer {\r
- \r
- /**\r
- * Creates a lazy-loading taxonomic tree that is sorted by TitleCache,\r
- * and which listens for name changes and new taxa\r
- * \r
- * @param parent\r
- */\r
- public TaxonomicTreeViewer(Composite parent) {\r
- \r
- // SW.VIRTUAL causes nodes to be loaded on-demand, improving performance\r
- super(parent, SWT.VIRTUAL);\r
-\r
- // Tree settings\r
- final Tree tree = this.getTree();\r
- tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));\r
- tree.setLinesVisible(false);\r
- tree.setHeaderVisible(false);\r
- \r
- createContent(); \r
- createDoubleClickListener();\r
- createRightClickListener();\r
- createQuickAdd();\r
- createDragAndDrop();\r
- createToolTips();\r
- }\r
- \r
- /**\r
- * Tool tips are used to show warnings; there is no tooltip mechanism for\r
- * individual tree items out-of-the-bo, so tipListener belows builds one\r
- */\r
- private void createToolTips() {\r
- Tree tree = this.getTree();\r
- \r
- // Disable native tooltip\r
- tree.setToolTipText ("");\r
- \r
- tree.addListener (SWT.Dispose, tipListener);\r
- tree.addListener (SWT.KeyDown, tipListener);\r
- tree.addListener (SWT.MouseMove, tipListener);\r
- tree.addListener (SWT.MouseHover, tipListener);\r
- }\r
-\r
- /**\r
- * Add drag and drop functionality\r
- */\r
- private void createDragAndDrop() {\r
- final Tree tree = this.getTree();\r
- Transfer[] types = new Transfer[] {TextTransfer.getInstance()};\r
- int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;\r
- \r
- final DragSource source = new DragSource (tree, operations);\r
- source.setTransfer(types);\r
- final TreeItem[] dragSourceItem = new TreeItem[1];\r
- source.addDragListener (new DragSourceListener () {\r
- public void dragStart(DragSourceEvent event) {\r
- TreeItem[] selection = tree.getSelection();\r
- if (selection.length > 0) {\r
- event.doit = true;\r
- dragSourceItem[0] = selection[0];\r
- } else {\r
- event.doit = false;\r
- }\r
- }\r
- public void dragSetData (DragSourceEvent event) {\r
- event.data = dragSourceItem[0].getText();\r
- }\r
- public void dragFinished(DragSourceEvent event) {\r
- if (event.detail == DND.DROP_MOVE)\r
- dragSourceItem[0].dispose();\r
- dragSourceItem[0] = null; // should this be put into above conditional clause?\r
- \r
- }\r
- });\r
-\r
- DropTarget target = new DropTarget(tree, operations);\r
- target.setTransfer(types);\r
- target.addDropListener (new DropTargetAdapter() {\r
- Display display = PlatformUI.getWorkbench().getDisplay();\r
- public void dragOver(DropTargetEvent event) {\r
- event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL;\r
- if (event.item != null) {\r
- TreeItem item = (TreeItem)event.item;\r
- Point pt = display.map(null, tree, event.x, event.y);\r
- Rectangle bounds = item.getBounds();\r
- if (pt.y < bounds.y + bounds.height/3) {\r
- event.feedback |= DND.FEEDBACK_INSERT_BEFORE;\r
- } else if (pt.y > bounds.y + 2*bounds.height/3) {\r
- event.feedback |= DND.FEEDBACK_INSERT_AFTER;\r
- } else {\r
- event.feedback |= DND.FEEDBACK_SELECT;\r
- }\r
- }\r
- }\r
- public void drop(DropTargetEvent event) {\r
- \r
- if (event.data == null) {\r
- event.detail = DND.DROP_NONE;\r
- return;\r
- }\r
- Taxon taxon = (Taxon) dragSourceItem[0].getData();\r
- Taxon parentTaxon = (Taxon) event.item.getData();\r
- \r
- new ActionMoveTaxon(taxon, parentTaxon).run();\r
- \r
- // TODO choose appropriate parentTaxon depending on where in tree,\r
- // esp. BETWEEN entries, taxon is dragged\r
- \r
-// if (event.item == null) {\r
-// // not sure which case this is ...\r
-// TreeItem item = new TreeItem(tree, SWT.NONE);\r
-// item.setText("unclear");\r
-// } else {\r
-// TreeItem item = (TreeItem)event.item;\r
-// Point pt = display.map(null, tree, event.x, event.y);\r
-// Rectangle bounds = item.getBounds();\r
-// TreeItem parent = item.getParentItem();\r
-// System.out.println(((Taxon) parent.getData()).getName().getNameCache());\r
-// if (parent != null) {\r
-// TreeItem[] items = parent.getItems();\r
-// int index = 0;\r
-// for (int i = 0; i < items.length; i++) {\r
-// if (items[i] == item) {\r
-// index = i;\r
-// break;\r
-// }\r
-// }\r
-// if (pt.y < bounds.y + bounds.height/3) {\r
-// TreeItem newItem = new TreeItem(parent, SWT.NONE, index);\r
-// newItem.setText(text);\r
-// } else if (pt.y > bounds.y + 2*bounds.height/3) {\r
-// TreeItem newItem = new TreeItem(parent, SWT.NONE, index+1);\r
-// newItem.setText(text);\r
-// } else {\r
-// TreeItem newItem = new TreeItem(item, SWT.NONE);\r
-// newItem.setText(text);\r
-// }\r
-// \r
-// } else {\r
-// System.out.println("y");\r
-// TreeItem[] items = tree.getItems();\r
-// int index = 0;\r
-// for (int i = 0; i < items.length; i++) {\r
-// if (items[i] == item) {\r
-// index = i;\r
-// break;\r
-// }\r
-// }\r
-// if (pt.y < bounds.y + bounds.height/3) {\r
-// TreeItem newItem = new TreeItem(tree, SWT.NONE, index);\r
-// newItem.setText(text);\r
-// } else if (pt.y > bounds.y + 2*bounds.height/3) {\r
-// TreeItem newItem = new TreeItem(tree, SWT.NONE, index+1);\r
-// newItem.setText(text);\r
-// } else {\r
-// TreeItem newItem = new TreeItem(item, SWT.NONE);\r
-// newItem.setText(text);\r
-// }\r
-// }\r
-// }\r
- }\r
- }); \r
- }\r
-\r
- /**\r
- * Taxa with no NameCache - i.e. added with quick name -\r
- * can be edited in place in the tax. tree\r
- */\r
- private void createQuickAdd() {\r
- \r
- final Tree tree = this.getTree();\r
- final TextCellEditor taxTreeNodeEditor = new TextCellEditor(tree);\r
- taxTreeNodeEditor.addListener(new ICellEditorListener() {\r
- public void applyEditorValue() {}\r
- public void cancelEditor() {\r
- // user has pressed ESC - transfer focus to parent item,\r
- // remove taxon from tree\r
- Taxon taxon = (Taxon) tree.getSelection()[0].getData();\r
- tree.setSelection(tree.getSelection()[0].getParentItem());\r
- new ActionRemoveTaxonFromTree(taxon).run();\r
- }\r
- public void editorValueChanged(boolean oldValidState,\r
- boolean newValidState) {}\r
- });\r
- \r
- this.setCellEditors(new CellEditor[] {taxTreeNodeEditor});\r
- this.setColumnProperties(new String[] {"col1"});\r
- this.setCellModifier(new ICellModifier() {\r
- public boolean canModify(Object element, String property) {\r
- // If name element has not been initialized,\r
- // this is a taxon added with QuickAdd\r
- if (((Taxon) element).getName().getTitleCache() == null)\r
- return true;\r
- return false;\r
- }\r
- public Object getValue(Object element, String property) {\r
- // If this node is editable, TitleCache is by definition empty\r
- return "";\r
- }\r
- public void modify(Object element, String property, Object value) {\r
- \r
- // Get Taxon object from TreeItem\r
- Taxon taxon = (Taxon)((Item) element).getData();\r
- \r
- if (((String) value).equals("")) {\r
- // Remove temporary Taxon from tree\r
- tree.setSelection(tree.getSelection()[0].getParentItem());\r
- new ActionRemoveTaxonFromTree(taxon).run(); \r
- \r
- } else {\r
- // Set Taxon's TitleCache, save it to CDM\r
- taxon.getName().setTitleCache((String) value);\r
- new ActionSaveTaxon(taxon).run();\r
- }\r
- }\r
- });\r
- \r
- }\r
-\r
- /**\r
- * On double click, open name editor\r
- */\r
- private void createDoubleClickListener() {\r
- this.addDoubleClickListener(new IDoubleClickListener(){\r
-\r
- public void doubleClick(DoubleClickEvent event) { \r
- Taxon taxon = null;\r
- try {\r
- taxon = (Taxon) ((StructuredSelection)event.getSelection()).getFirstElement();\r
- }catch (Exception e){\r
- e.printStackTrace();\r
- taxon = null;\r
- }\r
- new ActionOpenNameEditor(taxon).run();\r
- }\r
- }); \r
- }\r
-\r
- /**\r
- * Make right-click menu for tree nodes\r
- */\r
- private void createRightClickListener() {\r
- \r
- final Tree tree = this.getTree();\r
- final Menu menu = new Menu(tree); \r
- tree.setMenu(menu);\r
- menu.addMenuListener(new MenuAdapter() {\r
- public void menuShown(MenuEvent e) {\r
- \r
- // Get rid of existing menu items -\r
- // same menu is re-used for all nodes\r
- MenuItem[] items = menu.getItems();\r
- for (int i = 0; i < items.length; i++) {\r
- ((MenuItem) items[i]).dispose();\r
- }\r
- \r
- // Get Taxon associated with this node\r
- final Taxon taxon = (Taxon) tree.getSelection()[0].getData();\r
- System.out.println("open " + taxon.toString());\r
- \r
- // Add menu item to edit Taxon\r
- MenuItem itemEditTaxon = new MenuItem(menu, SWT.NONE);\r
- itemEditTaxon.setText("Edit taxon");\r
- itemEditTaxon.addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) {}\r
- public void widgetSelected(SelectionEvent e) {\r
- new ActionOpenNameEditor(taxon).run();\r
- }\r
- });\r
-\r
- new MenuItem(menu, SWT.SEPARATOR);\r
- \r
- // Add menu item to add a child node\r
- MenuItem itemAddChildTaxon = new MenuItem(menu, SWT.NONE);\r
- itemAddChildTaxon.setText("Add child taxon");\r
- itemAddChildTaxon.addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) {}\r
- public void widgetSelected(SelectionEvent e) {\r
- new ActionOpenNewChildNameEditor(taxon).run();\r
- }\r
- });\r
- \r
- // Add menu item to add a child node with edit name in place \r
- MenuItem itemQuickAdd = new MenuItem(menu, SWT.NONE);\r
- itemQuickAdd.setText("Add child taxon with quick name");\r
- itemQuickAdd.addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) {}\r
- public void widgetSelected(SelectionEvent e) {\r
- new ActionAddQuickName(taxon).run(); \r
- }\r
- });\r
- }\r
- });\r
- }\r
- \r
- /**\r
- * Set up content providers and viewer input\r
- */\r
- private void createContent() {\r
- // Use custom content provider extended to add tree node retrieval\r
- ObservableListContentProvider viewerContentProviderList = new NameTreeContentProvider();\r
- this.setContentProvider(viewerContentProviderList);\r
- \r
- // Label provider that listens for changes to name cache\r
- IObservableMap[] viewerLabelProviderMaps = BeansObservables.observeMaps(viewerContentProviderList.getKnownElements(), \r
- Taxon.class, new String[]{"name"});\r
- this.setLabelProvider(new ObservableMapLabelProvider(viewerLabelProviderMaps) {\r
- /* \r
- * TODO only show warning if there is something taxonomically amiss \r
- * \r
- * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnImage(java.lang.Object, int)\r
- */\r
- public Image getColumnImage(Object element, int columnIndex) {\r
- if (((Taxon) element).getName().getHasProblem())\r
- return ResourceManager.getPluginImage(Activator.getDefault(), "icons/warn_tsk.gif");\r
- return null;\r
- }\r
- /*\r
- * JFace databinding syntax makes it to difficult to retrieve\r
- * Taxon.getName().getNameCache, so override function that returns\r
- * label\r
- * \r
- * (non-Javadoc)\r
- * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnText(java.lang.Object, int)\r
- */\r
- public String getColumnText(Object element, int columnIndex) {\r
- return ((Taxon) element).getName().getTitleCache();\r
- } \r
- });\r
- \r
- // TaxonTreeList added to every time a node is opened with its\r
- // children, or when a new taxon is added\r
- this.setInput(Activator.getDefault().getObservableTaxonTreeList());\r
- \r
- // Sort according to "getColumnText" above, i.e. by NameCache\r
- this.setComparator(new ViewerComparator());\r
- }\r
-\r
- /**\r
- * If taxon node in the tree is hidden, open and select it\r
- * \r
- * @param taxon\r
- */\r
- public void revealTaxon(Taxon taxon) {\r
- this.setSelection(new StructuredSelection(taxon), true);\r
- this.reveal(taxon);\r
- }\r
- \r
- // Implement a "fake" tooltip\r
- final Listener labelListener = new Listener () {\r
- public void handleEvent (Event event) {\r
- Label label = (Label)event.widget;\r
- Shell shell = label.getShell ();\r
- switch (event.type) {\r
- case SWT.MouseDown:\r
- Event e = new Event ();\r
- e.item = (TableItem) label.getData ("_TABLEITEM");\r
- // Assuming table is single select, set the selection as if\r
- // the mouse down event went through to the table\r
- Tree tree = TaxonomicTreeViewer.this.getTree();\r
- tree.setSelection(new TreeItem [] {(TreeItem) e.item});\r
- tree.notifyListeners (SWT.Selection, e);\r
- shell.dispose ();\r
- tree.setFocus();\r
- break;\r
- case SWT.MouseExit:\r
- shell.dispose ();\r
- break;\r
- }\r
- }\r
- }; \r
- \r
- Listener tipListener = new Listener () {\r
- Shell tip = null;\r
- Label label = null;\r
- public void handleEvent (Event event) {\r
- switch (event.type) {\r
- case SWT.Dispose:\r
- case SWT.KeyDown:\r
- case SWT.MouseMove: {\r
- if (tip == null) break;\r
- tip.dispose ();\r
- tip = null;\r
- label = null;\r
- break;\r
- }\r
- case SWT.MouseHover: {\r
- Item item = TaxonomicTreeViewer.this.getItemAt(new Point(event.x, event.y));\r
- if (item != null) {\r
- if (tip != null && !tip.isDisposed ()) tip.dispose ();\r
- tip = new Shell (Display.getCurrent(), SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL);\r
- tip.setBackground (Display.getCurrent().getSystemColor (SWT.COLOR_INFO_BACKGROUND));\r
- FillLayout layout = new FillLayout ();\r
- layout.marginWidth = 2;\r
- tip.setLayout (layout);\r
- label = new Label (tip, SWT.NONE);\r
- label.setForeground (Display.getCurrent().getSystemColor (SWT.COLOR_INFO_FOREGROUND));\r
- label.setBackground (Display.getCurrent().getSystemColor (SWT.COLOR_INFO_BACKGROUND));\r
- label.setData ("_TABLEITEM", item);\r
-// label.setText (item.getText ());\r
- label.setText ("Joe mama");\r
- label.addListener (SWT.MouseExit, labelListener);\r
- label.addListener (SWT.MouseDown, labelListener);\r
- Point size = tip.computeSize (SWT.DEFAULT, SWT.DEFAULT);\r
- Rectangle rect = ((TreeItem) item).getBounds (0);\r
- Point pt = TaxonomicTreeViewer.this.getTree().toDisplay (rect.x, rect.y);\r
- tip.setBounds (pt.x, pt.y, size.x, size.y);\r
- tip.setVisible (true);\r
- }\r
- }\r
- }\r
- }\r
- };\r
- \r
-}\r
-\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.databinding.observable.set.ISetChangeListener;\r
-import org.eclipse.core.databinding.observable.set.SetChangeEvent;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DropTarget;\r
-import org.eclipse.swt.dnd.DropTargetAdapter;\r
-import org.eclipse.swt.dnd.DropTargetEvent;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Listener;\r
-import org.eclipse.swt.widgets.Shell;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.TesterooWritableSet;\r
-\r
-public class TestDnD {\r
-\r
- private static final Logger logger = Logger.getLogger(TestDnD.class);\r
- \r
- protected Shell shell;\r
- /**\r
- * Launch the application\r
- * @param args\r
- */\r
- public static void main(String[] args) {\r
- try {\r
- TestDnD window = new TestDnD();\r
- window.open();\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- /**\r
- * Open the window\r
- */\r
- public void open() {\r
- final Display display = Display.getDefault();\r
- createContents(display);\r
- shell.open();\r
- shell.layout();\r
- while (!shell.isDisposed()) {\r
- if (!display.readAndDispatch())\r
- display.sleep();\r
- }\r
- }\r
- Taxon taxon;\r
- Composite composite;\r
- /**\r
- * Create contents of the window\r
- */\r
- protected void createContents(Display display) {\r
- if (logger.isDebugEnabled()){ logger.debug("Creating contents" );}\r
- \r
- shell = new Shell();\r
- shell.setLayout(new FillLayout());\r
- shell.setSize(500, 375);\r
- shell.setText("SWT Application");\r
- \r
- composite = new Composite(shell, SWT.NONE);\r
- GridLayout gridLayout = new GridLayout();\r
- gridLayout.verticalSpacing = 10;\r
- composite.setLayout(gridLayout);\r
- composite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- \r
- taxon = new Taxon();\r
- taxon.setName(BotanicalName.PARSED_NAME("Accepted name"));\r
- \r
- GroupComposite homoGroupComposite = new GroupComposite(composite);\r
- homoGroupComposite.setTaxon(taxon);\r
- \r
- new NameComposite(homoGroupComposite, taxon);\r
- \r
- Synonym homosyn = new Synonym();\r
- \r
- homosyn.setName(BotanicalName.PARSED_NAME("Homotypic synonym"));\r
- taxon.addSynonym(homosyn, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());\r
- new NameComposite(homoGroupComposite, homosyn, taxon);\r
- \r
- homoGroupComposite.drawRect();\r
- \r
- createSynAndHetGroup("Heterotypic synonym 1");\r
- createSynAndHetGroup("Heterotypic synonym 2");\r
- createSynAndHetGroup("Heterotypic synonym 3");\r
- createSynAndHetGroup("Heterotypic synonym 4");\r
-\r
- TesterooWritableSet.getInstance().addSetChangeListener\r
- (new ISetChangeListener() {\r
- public void handleSetChange(SetChangeEvent event) {\r
- for ( Object addition: event.diff.getAdditions()) {\r
- if (addition instanceof Synonym)\r
- createHeterotypicalGroup((Synonym) addition);\r
- }\r
- composite.layout();\r
- }\r
- });\r
- \r
- // Drop functionality\r
- Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};\r
- int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
- DropTarget target = new DropTarget(composite, operations);\r
- target.setTransfer(types);\r
- target.addDropListener(dropTargetAdapter);\r
- \r
- composite.addListener(SWT.Modify, new Listener() {\r
-\r
- public void handleEvent(Event event) {\r
- System.out.println("!");\r
- \r
- }\r
-\r
- \r
- });\r
- \r
- }\r
- \r
- private void createSynAndHetGroup(String synonymNameCache) {\r
- Synonym heterosyn = new Synonym();\r
- heterosyn.setName(BotanicalName.PARSED_NAME(synonymNameCache)); \r
- taxon.addSynonym(heterosyn, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
- \r
- createHeterotypicalGroup(heterosyn);\r
- }\r
- \r
- private void createHeterotypicalGroup(Synonym heterosyn) {\r
-\r
- GroupComposite heteroGroupComposite = new GroupComposite(composite);\r
- heteroGroupComposite.setTaxon(taxon);\r
- \r
- new NameComposite(heteroGroupComposite, heterosyn, taxon).setFocus();\r
-\r
- heteroGroupComposite.layout();\r
- heteroGroupComposite.drawRect();\r
- heteroGroupComposite.layout();\r
- }\r
- \r
- DropTargetAdapter dropTargetAdapter = new DropTargetAdapter() {\r
- \r
- public void drop(DropTargetEvent event) {\r
- \r
- Synonym synonym = \r
- (Synonym) event.data; \r
- \r
- GroupComposite heteroGroupComposite = new GroupComposite(composite);\r
- heteroGroupComposite.setTaxon(taxon);\r
- \r
- new NameComposite(heteroGroupComposite, synonym, taxon).setFocus();\r
- \r
- TestDnD.this.composite.layout();\r
- } \r
- };\r
-}\r
-\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import org.eclipse.jface.action.IMenuManager;\r
-import org.eclipse.jface.action.IToolBarManager;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.PaintEvent;\r
-import org.eclipse.swt.events.PaintListener;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.swt.graphics.Rectangle;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Canvas;\r
-import org.eclipse.swt.widgets.Combo;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.FileDialog;\r
-import org.eclipse.swt.widgets.Group;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.List;\r
-import org.eclipse.swt.widgets.Table;\r
-import org.eclipse.swt.widgets.TableColumn;\r
-import org.eclipse.swt.widgets.TableItem;\r
-import org.eclipse.swt.widgets.Text;\r
-import org.eclipse.ui.part.ViewPart;\r
-import com.swtdesigner.ResourceManager;\r
-import com.swtdesigner.SWTResourceManager;\r
-\r
-import eu.etaxonomy.taxeditor.Activator;\r
-\r
-public class UndoView extends ViewPart {\r
-\r
- public static final String ID = "eu.etaxonomy.taxeditor.prototype2.view.undoview"; //$NON-NLS-1$\r
- private Table table;\r
-\r
- /**\r
- * Create contents of the view part\r
- * @param parent\r
- */\r
- @Override\r
- public void createPartControl(Composite parent) {\r
- Composite container = new Composite(parent, SWT.NONE);\r
- container.setLayout(new FillLayout(SWT.VERTICAL));\r
-\r
- table = new Table(container, SWT.NONE);\r
- table.getHorizontalBar().setVisible(false);\r
- table.setLinesVisible(true);\r
-\r
- final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE);\r
- newColumnTableColumn.setWidth(19);\r
-\r
- final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE);\r
- newColumnTableColumn_1.setWidth(1000);\r
- newColumnTableColumn_1.setText("New column");\r
-\r
- final TableItem newItemTableItem = new TableItem(table, SWT.BORDER);\r
- newItemTableItem.setText(1, "Created taxon \"Pilosella fuscoatra (Nägeli & Peter) Soják\"");\r
-\r
- final TableItem newItemTableItem_1 = new TableItem(table, SWT.BORDER);\r
- newItemTableItem_1.setText(1, "Added fact (Distribution) \"California deciduous forest ...\" to \"Pilosella fuscoatra (Nägeli & Peter) Soják\"");\r
-\r
- final TableItem newItemTableItem_2 = new TableItem(table, SWT.BORDER);\r
- newItemTableItem_2.setText(1, "Added fact (Distribution) \"Brazilian (Northerly region)\" to \"Pilosella fuscoatra (Nägeli & Peter) Soják\"");\r
-\r
- final TableItem newItemTableItem_3 = new TableItem(table, SWT.BORDER);\r
- newItemTableItem_3.setText(1, "Moved taxon \"Pilosella fuscoatra (Nägeli & Peter) Soják\" to \"Pilosella fuscoatra coll.\"");\r
-\r
- final TableItem newItemTableItem_4 = new TableItem(table, SWT.BORDER);\r
- newItemTableItem_4.setText(1, "Added unknown syn. \"Hieracium fuscoatrum Nägeli & Peter\" to \"Pilosella fuscoatra (Nägeli & Peter) Soják\"");\r
-\r
- final TableItem newItemTableItem_5 = new TableItem(table, SWT.BORDER);\r
- newItemTableItem_5.setText(1, "Changed rel. type to homo. syn. for \"Hieracium fuscoatrum Nägeli & Peter\" to \"Pilosella fuscoatra (Nägeli & Peter) Soják\"");\r
-\r
- final TableItem newItemTableItem_6 = new TableItem(table, SWT.BORDER);\r
- newItemTableItem_6.setText(1, "Edited name \"Hieracium fuscoatrum Nägeli & Peter\" to \"Pilosella fuscoatra (Nägeli & Peter) Soják\"");\r
-\r
- final TableItem newItemTableItem_7 = new TableItem(table, SWT.BORDER);\r
- newItemTableItem_7.setText(new String[] {"Undo the last action"});\r
- newItemTableItem_7.setImage(0, ResourceManager.getPluginImage(Activator.getDefault(), "icons/undo.gif"));\r
- newItemTableItem_7.setText(1, "Deleted fact (Distribution) \"Brazilian (Northerly region)\" to \"Pilosella fuscoatra (Nägeli & Peter) Soják\"");\r
- //\r
- createActions();\r
- initializeToolBar();\r
- initializeMenu();\r
- }\r
-\r
- /**\r
- * Create the actions\r
- */\r
- private void createActions() {\r
- // Create the actions\r
- }\r
-\r
- /**\r
- * Initialize the toolbar\r
- */\r
- private void initializeToolBar() {\r
- IToolBarManager toolbarManager = getViewSite().getActionBars()\r
- .getToolBarManager();\r
- }\r
-\r
- /**\r
- * Initialize the menu\r
- */\r
- private void initializeMenu() {\r
- IMenuManager menuManager = getViewSite().getActionBars()\r
- .getMenuManager();\r
- }\r
-\r
- @Override\r
- public void setFocus() {\r
- // Set the focus\r
- }\r
-\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
-\r
-import org.eclipse.swt.graphics.Color;\r
-import org.eclipse.swt.graphics.GC;\r
-import org.eclipse.swt.graphics.Rectangle;\r
-import org.eclipse.swt.widgets.Composite;\r
-\r
-public class CompositeRectangle {\r
-\r
- GC gc;\r
- Rectangle rectangle;\r
- Composite composite;\r
- \r
- CompositeRectangle(Composite composite, Color color) {\r
- this.gc = new GC(composite);\r
- this.composite = composite;\r
- draw(color);\r
- }\r
-\r
- public void draw(Color color) {\r
- this.rectangle = composite.getClientArea();\r
- gc.setForeground(color);\r
- gc.drawRectangle(rectangle.x, rectangle.y, rectangle.width - 1, rectangle.height - 1);\r
- }\r
- \r
- public void dispose() {\r
- gc.dispose();\r
- }\r
- \r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
-\r
-import org.eclipse.core.resources.IMarker;\r
-import org.eclipse.jface.text.Position;\r
-import org.eclipse.jface.text.source.Annotation;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.swt.graphics.RGB;\r
-\r
-public class ErrorAnnotation extends Annotation {\r
- private IMarker marker;\r
- private String text;\r
- private int line;\r
- private Position position;\r
-\r
- // error identifiers, images and colors\r
- public static String ERROR_TYPE = "error.type";\r
- public static Image ERROR_IMAGE;\r
- public static final RGB ERROR_RGB = new RGB(255, 0, 0); \r
- \r
- public ErrorAnnotation(IMarker marker) {\r
- this.marker = marker;\r
- }\r
-\r
- public ErrorAnnotation(int line, String text) {\r
- super(ERROR_TYPE, true, null);\r
- this.marker = null;\r
- this.line = line;\r
- this.text = text;\r
- }\r
-\r
- public IMarker getMarker() {\r
- return marker;\r
- }\r
-\r
- public int getLine() {\r
- return line;\r
- }\r
-\r
- public String getText() {\r
- return text;\r
- }\r
-\r
- public Image getImage() {\r
- return ERROR_IMAGE;\r
- }\r
-\r
- public int getLayer() {\r
- return 3;\r
- }\r
-\r
- public String getType() {\r
- return ERROR_TYPE;\r
- }\r
-\r
- public Position getPosition() {\r
- return position;\r
- }\r
-\r
- public void setPosition(Position position) {\r
- this.position = position;\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
-\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DropTarget;\r
-import org.eclipse.swt.dnd.DropTargetAdapter;\r
-import org.eclipse.swt.dnd.DropTargetEvent;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.graphics.GC;\r
-import org.eclipse.swt.graphics.Rectangle;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Display;\r
-\r
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
-import eu.etaxonomy.taxeditor.view.NameEditorView;\r
-\r
-public class GroupComposite extends Composite {\r
- \r
- Taxon taxon;\r
- Rectangle rectangle;\r
- HomotypicalGroup homotypicalGroup;\r
- boolean acceptedGroup;\r
- private NameEditorView nameEditorView;\r
- \r
- public void setTaxon(Taxon taxon) {\r
- this.taxon = taxon;\r
- }\r
- \r
- public GroupComposite(Composite parent) {\r
- super(parent, SWT.NONE);\r
- \r
- // Graphic layout of composite\r
- GridLayout gridLayout = new GridLayout();\r
- gridLayout.verticalSpacing = 0;\r
- gridLayout.marginHeight = 3;\r
- this.setLayout(gridLayout);\r
- this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
- this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- \r
-// this.addListener(SWT.Resize, new Listener() {\r
-// public void handleEvent(Event event) {\r
-// GC gc = new GC(GroupComposite.this);\r
-// rectangle = GroupComposite.this.getClientArea();\r
-// gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));\r
-// gc.drawRectangle(rectangle.x, rectangle.y, rectangle.width - 1, rectangle.height - 1);\r
-// System.out.println(rectangle.height);\r
-// }\r
-// }); \r
- \r
- // Drop functionality\r
- Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};\r
- int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
- DropTarget target = new DropTarget(this, operations);\r
- target.setTransfer(types);\r
- target.addDropListener(new DropTargetAdapter() {\r
- \r
- public void dragEnter(DropTargetEvent event) {\r
- \r
- \r
- \r
-// for (Control child : GroupComposite.this.getChildren()) {\r
-// if (child.getClass() != NameComposite.class) continue;\r
-//// System.out.println(child.getClass() + " " + event.data.getClass());\r
-// \r
-// if (((NameComposite) child).getName() == TaxonTransfer.getInstance().getTaxon().getName()) {\r
-// event.detail = DND.DROP_NONE;\r
-// return;\r
-// }\r
-// }\r
- \r
-// if (((NameComposite) event.widget).getParent() == GroupComposite.this)\r
-// event.detail = DND.DROP_NONE;\r
-// rectangle = GroupComposite.this.getClientArea();\r
-// GC gc = new GC(GroupComposite.this);\r
-// rectangle = GroupComposite.this.getClientArea();\r
-// gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));\r
-// gc.drawRectangle(rectangle.x, rectangle.y, rectangle.width - 1, rectangle.height - 1);\r
- \r
-// rectangle.draw(Display.getDefault().getSystemColor\r
-// (SWT.COLOR_BLACK));\r
- }\r
- \r
- public void dragLeave(DropTargetEvent event) {\r
-// rectangle.draw(Display.getDefault().getSystemColor\r
-// (SWT.COLOR_GRAY));\r
- }\r
- \r
- public void drop(DropTargetEvent event) {\r
- Synonym synonym = (Synonym) event.data; \r
- \r
- GroupComposite dropTargetComposite = \r
- (GroupComposite) ((DropTarget) \r
- event.getSource()).getControl();\r
- \r
- new NameComposite(dropTargetComposite, synonym, taxon).\r
- setNameEditorView(dropTargetComposite.getNameEditorView());\r
- }\r
- });\r
- }\r
- \r
- public void drawRect() {\r
- GC gc = new GC(this);\r
- Rectangle rect = this.getClientArea();\r
- gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_GREEN));\r
- gc.drawRectangle(rect.x, rect.y, rect.width - 2, rect.height - 2); \r
- }\r
-\r
- public HomotypicalGroup getHomotypicalGroup() {\r
- return homotypicalGroup;\r
- }\r
-\r
- public void setHomotypicalGroup(HomotypicalGroup homotypicalGroup) {\r
- this.homotypicalGroup = homotypicalGroup;\r
- }\r
- \r
- public boolean isAcceptedGroup() {\r
- return acceptedGroup;\r
- }\r
- \r
- public void setAcceptedGroup(boolean acceptedGroup) {\r
- this.acceptedGroup = acceptedGroup;\r
- }\r
-\r
- public void setNameEditorView(NameEditorView nameEditorView) {\r
- this.nameEditorView = nameEditorView;\r
- }\r
- \r
- public NameEditorView getNameEditorView() {\r
- return nameEditorView;\r
- }\r
- \r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
-\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.custom.StyledText;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DragSource;\r
-import org.eclipse.swt.dnd.DragSourceEvent;\r
-import org.eclipse.swt.dnd.DragSourceListener;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.events.FocusAdapter;\r
-import org.eclipse.swt.events.FocusEvent;\r
-import org.eclipse.swt.events.ModifyEvent;\r
-import org.eclipse.swt.events.ModifyListener;\r
-import org.eclipse.swt.events.MouseEvent;\r
-import org.eclipse.swt.events.MouseListener;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.swt.widgets.MenuItem;\r
-\r
-import com.swtdesigner.SWTResourceManager;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
-import eu.etaxonomy.taxeditor.view.NameEditorView;\r
-import eu.etaxonomy.taxeditor.view.NameViewer;\r
-\r
-public class NameComposite extends Composite {\r
- \r
- public static final int ACCEPTED = 0;\r
- public static final int HOMOTYPIC_SYNONYM = 1;\r
- public static final int HETEROTYPIC_SYNONYM = 2;\r
- \r
- Label relationLabel;\r
- Synonym synonym;\r
- Taxon taxon;\r
- int compositeType;\r
- NameViewer nameViewer;\r
- boolean initialized = false;\r
-\r
- /**\r
- * Temporary procedure until ability to get accepted taxon\r
- * from synonym is implemented\r
- * \r
- * @param parent\r
- * @param synonym\r
- * @param taxon\r
- */\r
- public NameComposite(Composite parent, Synonym synonym, Taxon taxon) {\r
- super(parent, SWT.NONE);\r
- \r
- this.taxon = taxon;\r
- this.synonym = synonym;\r
-\r
- // Either initialize group composite, \r
- // or assume its homotypic group\r
- if (parent instanceof GroupComposite) {\r
- \r
- if (((GroupComposite) parent).isAcceptedGroup())\r
- this.compositeType = HOMOTYPIC_SYNONYM;\r
- else\r
- this.compositeType = HETEROTYPIC_SYNONYM; \r
- \r
- if (((GroupComposite) parent).getHomotypicalGroup() == null) \r
- ((GroupComposite) parent).setHomotypicalGroup(\r
- synonym.getName().getHomotypicalGroup());\r
- else\r
- synonym.getName().setHomotypicalGroup(\r
- ((GroupComposite) parent).getHomotypicalGroup());\r
- } \r
- \r
- createNameComposite(); \r
- }\r
- \r
- public NameComposite(Composite parent, Synonym synonym) {\r
- super(parent, SWT.NONE);\r
- \r
- this.synonym = synonym;\r
-// this.taxon = (Taxon) synonym.getAcceptedTaxa().toArray()[0];\r
-\r
- // Either initialize group composite, \r
- // or assume its homotypic group\r
- if (parent instanceof GroupComposite) {\r
- \r
- if (((GroupComposite) parent).isAcceptedGroup())\r
- this.compositeType = HOMOTYPIC_SYNONYM;\r
- else\r
- this.compositeType = HETEROTYPIC_SYNONYM;\r
- \r
- if (((GroupComposite) parent).getHomotypicalGroup() == null) \r
- ((GroupComposite) parent).setHomotypicalGroup(\r
- synonym.getName().getHomotypicalGroup());\r
- else\r
- synonym.getName().setHomotypicalGroup(\r
- ((GroupComposite) parent).getHomotypicalGroup());\r
- } \r
- \r
- createNameComposite();\r
- }\r
-\r
- public NameComposite(Composite parent, Taxon taxon) {\r
- super(parent, SWT.NONE);\r
- \r
- this.taxon = taxon;\r
- this.compositeType = ACCEPTED;\r
- \r
- // Initialize homotypic group component\r
- if (parent instanceof GroupComposite) {\r
- \r
- ((GroupComposite) parent).setHomotypicalGroup(\r
- taxon.getName().getHomotypicalGroup());\r
- ((GroupComposite) parent).setAcceptedGroup(true);\r
- }\r
- \r
- createNameComposite();\r
- }\r
- \r
- /**\r
- * \r
- */\r
- public void createNameComposite() {\r
-\r
- Assert.isNotNull(taxon);\r
- \r
- // Graphic layout of composite\r
- GridLayout gridLayout = new GridLayout();\r
- gridLayout.verticalSpacing = 0;\r
- gridLayout.marginWidth = 5;\r
- gridLayout.marginHeight = 5;\r
- gridLayout.horizontalSpacing = 5;\r
- gridLayout.numColumns = (compositeType == ACCEPTED? 1: 2);\r
- this.setLayout(gridLayout);\r
- this.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
- this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- if (compositeType != ACCEPTED) {\r
-// relationLabel.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/heterosyn_no_bg.gif")); \r
- relationLabel = new Label(this, SWT.NONE);\r
- relationLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); \r
- relationLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
- \r
- if (this.compositeType == HOMOTYPIC_SYNONYM)\r
- relationLabel.setImage(SWTResourceManager.getImage(NameComposite.class, "homosyn_no_bg.gif"));\r
-// relationLabel.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/homosyn_no_bg.gif"));\r
- else\r
- relationLabel.setImage(SWTResourceManager.getImage(NameComposite.class, "heterosyn_no_bg.gif"));\r
-// relationLabel.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/heterosyn_no_bg.gif"));\r
- }\r
- nameViewer = new NameViewer(this); \r
- nameViewer.getTextWidget().setLayoutData(\r
- new GridData(SWT.FILL, SWT.CENTER, true, false));\r
- nameViewer.getTextWidget().setFont(\r
- SWTResourceManager.getFont("Georgia", \r
- (compositeType == ACCEPTED? 12 : 10), \r
- SWT.NONE)); \r
- \r
- // Add verify listener to check for line breaks\r
- nameViewer.getTextWidget().addVerifyListener(\r
- new NameViewerVerifyListener(taxon));\r
- \r
- // Listen for changes to name\r
- nameViewer.getTextWidget().addModifyListener(new ModifyListener () {\r
- public void modifyText(ModifyEvent e) {\r
- if (initialized) {\r
- String text = ((StyledText) e.widget).getText();\r
- setName(BotanicalName.PARSED_NAME(text));\r
- }\r
- }\r
- });\r
-\r
- // Listen for focus to send this name to the property sheet\r
- nameViewer.getTextWidget().addFocusListener(new FocusAdapter () {\r
- public void focusGained(FocusEvent e) {\r
- \r
- if (nameEditorView != null)\r
- nameEditorView.setPropertySheetNodes(getName());\r
- }\r
- });\r
- \r
- // Listen for user selecting text\r
- nameViewer.getTextWidget().addSelectionListener(new SelectionListener() {\r
-\r
- public void widgetDefaultSelected(SelectionEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
-\r
- public void widgetSelected(SelectionEvent e) {\r
- // e.x = start, y = e.finish - strange but true\r
-// nameViewer.getAnnotationModel().addAnnotation(\r
-// new WarningAnnotation(0, "Could not parse name."), \r
-// new Position(e.x, e.y - e.x));\r
- }\r
- \r
- });\r
- \r
- \r
- // Put name into name viewer, show error if parsed incorrectly\r
- nameViewer.getTextWidget().setText(getName().getTitleCache() == null ? "" : getName().getTitleCache());\r
- nameViewer.setShowError(getName().getHasProblem());\r
- \r
- // Put cursor at end of name viewer\r
- nameViewer.getTextWidget().setCaretOffset(\r
- nameViewer.getTextWidget().getText().length());\r
- \r
- // Set composite to initialized - any new input will now be parsed\r
- initialized = true;\r
- \r
- // Add drag functionality to synonyms only\r
- if (compositeType == ACCEPTED) return;\r
- \r
- // make menu temp\r
- createTempMenu();\r
- \r
- // **************** DRAG FUNCTIONALITY **************** //\r
- Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};\r
- int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;\r
- \r
- // Make composite draggable\r
- DragSource dragComposite = new DragSource (this, operations);\r
- dragComposite.setTransfer(types);\r
- dragComposite.addDragListener(dragSourceListener);\r
-\r
- // Make relation label draggable \r
- DragSource dragLabel = new DragSource (relationLabel, operations);\r
- dragLabel.setTransfer(types);\r
- dragLabel.addDragListener(dragSourceListener);\r
- }\r
- \r
- /**\r
- * Shared drag listener which destroys the NameComposite after the drag\r
- * gesture is completed.\r
- */\r
- DragSourceListener dragSourceListener = new DragSourceListener () {\r
- \r
- CompositeRectangle rectangle;\r
- \r
- public void dragStart(DragSourceEvent event) {\r
-\r
- rectangle = new CompositeRectangle(NameComposite.this,\r
- Display.getDefault().getSystemColor(SWT.COLOR_GRAY));\r
- \r
- event.doit = true;\r
- }\r
- public void dragSetData (DragSourceEvent event) {\r
- TaxonTransfer.getInstance().setTaxon(synonym);\r
- }\r
- public void dragFinished(DragSourceEvent event) {\r
- if (event.detail == DND.DROP_MOVE) {\r
- Composite parent = NameComposite.this.getParent();\r
- Composite grandParent = parent.getParent();\r
- \r
-// rectangle.dispose();\r
- NameComposite.this.dispose();\r
- \r
- // If this was the last child in its homo. group,\r
- // drop the group from the interface \r
- if (parent.getChildren().length == 0)\r
- parent.dispose();\r
- else\r
- // Only used if we're dropping it on its current homo. group\r
- parent.layout();\r
- \r
- grandParent.layout();\r
- }\r
- }\r
- };\r
- private NameEditorView nameEditorView;\r
- \r
- public void setName(TaxonNameBase name) {\r
- (compositeType == ACCEPTED? taxon : synonym).setName(name);\r
- nameViewer.setShowError(name.getHasProblem());\r
- }\r
- \r
- public TaxonNameBase getName() {\r
- return (compositeType == ACCEPTED? taxon : synonym).getName(); \r
- }\r
-\r
- public void setNameEditorView(NameEditorView nameEditorView) {\r
- this.nameEditorView = nameEditorView; \r
- }\r
- \r
- private void createTempMenu() {\r
- final Menu menu1 = new Menu(relationLabel);\r
- relationLabel.setMenu(menu1);\r
- relationLabel.addMouseListener(new MouseListener() {\r
-\r
- public void mouseDoubleClick(MouseEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
-\r
- public void mouseDown(MouseEvent e) {\r
- menu1.setVisible(true);\r
- }\r
-\r
- public void mouseUp(MouseEvent e) {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
- \r
- });\r
-\r
- final MenuItem deletehieraciumFuscoatrumMenuItem = new MenuItem(menu1, SWT.NONE);\r
- deletehieraciumFuscoatrumMenuItem.setText("Delete \"Hieracium wolffii subsp. trichotranssilvanicum\" from this taxon");\r
-\r
- new MenuItem(menu1, SWT.SEPARATOR);\r
-\r
- final MenuItem moveMenuItem = new MenuItem(menu1, SWT.NONE);\r
- moveMenuItem.setText("Make \"Hieracium wolffii subsp. trichotranssilvanicum\" the accepted name of a new taxon");\r
-\r
- final MenuItem makehieraciumFuscoatrumMenuItem = new MenuItem(menu1, SWT.NONE);\r
- makehieraciumFuscoatrumMenuItem.setText("Make \"Hieracium wolffii subsp. trichotranssilvanicum\" the accepted name of this taxon");\r
-\r
- new MenuItem(menu1, SWT.SEPARATOR);\r
-\r
- final MenuItem turnhieraciumFuscoatrumMenuItem_3 = new MenuItem(menu1, SWT.NONE);\r
- turnhieraciumFuscoatrumMenuItem_3.setText("Turn \"Hieracium wolffii subsp. trichotranssilvanicum\" into a basionym");\r
-\r
- final MenuItem turnhieraciumFuscoatrumMenuItem_4 = new MenuItem(menu1, SWT.NONE);\r
- turnhieraciumFuscoatrumMenuItem_4.setText("...");\r
- }\r
-\r
- \r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
-\r
-import java.util.Scanner;\r
-\r
-import org.eclipse.swt.custom.StyledText;\r
-import org.eclipse.swt.events.VerifyEvent;\r
-import org.eclipse.swt.events.VerifyListener;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.controller.ActionAddSynonymToTaxon;\r
-\r
-/**\r
- * Checks text entered into a name viewer for line breaks, creates\r
- * new synonyms accordingly\r
- * \r
- * @author p.ciardelli\r
- */\r
-public class NameViewerVerifyListener implements VerifyListener {\r
- \r
- private Taxon taxon;\r
-\r
- NameViewerVerifyListener(Taxon taxon) {\r
- this.taxon = taxon;\r
- }\r
- \r
- /* \r
- * Checks for 3 conditions of name viewer text:\r
- * 1) no line breaks in text\r
- * 2) line break at the end of the text\r
- * 3) line break in the middle of the text\r
- * \r
- * (non-Javadoc)\r
- * @see org.eclipse.swt.events.VerifyListener#verifyText(org.eclipse.swt.events.VerifyEvent)\r
- */\r
- public void verifyText(VerifyEvent e) {\r
- \r
- String verifyText = e.text;\r
- \r
- StyledText styledText = (StyledText)e.widget;\r
- String widgetText = styledText.getText(); \r
- int cursorPosition = styledText.getCaretOffset();\r
- \r
- // Is there a line break in verifyText?\r
- if (!verifyText.contains(System.getProperty("line.separator")))\r
- // Parse text normally\r
- return;\r
- \r
- // Don't add verifyText without further processing\r
- e.doit = false;\r
- \r
- // If user has entered return at the end of the line,\r
- // make a new, empty synonym\r
- if (widgetText.length() == cursorPosition &&\r
- verifyText.equals(System.getProperty("line.separator"))) {\r
- new ActionAddSynonymToTaxon(taxon, "").run();\r
- return;\r
- }\r
- \r
- // Concatenate old and new texts\r
- String textForSplitting = widgetText.substring(0, cursorPosition) \r
- + verifyText\r
- + widgetText.substring(cursorPosition);\r
- \r
- // Split on line breaks\r
- Scanner scanner = new Scanner( textForSplitting );\r
- scanner.useDelimiter (System.getProperty("line.separator"));\r
- \r
- // Put first string into name viewer\r
- styledText.setText(scanner.next()); \r
- \r
- // Start new synonyms with the rest\r
- while (scanner.hasNext())\r
- new ActionAddSynonymToTaxon(taxon, scanner.next()).run();\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
-\r
-import org.eclipse.core.databinding.observable.set.WritableSet;\r
-import org.eclipse.jface.databinding.swt.SWTObservables;\r
-import org.eclipse.swt.widgets.Display;\r
-\r
-public class TesterooWritableSet extends WritableSet {\r
- private static final TesterooWritableSet INSTANCE = new TesterooWritableSet();\r
- \r
- public static TesterooWritableSet getInstance() {\r
- return INSTANCE;\r
- }\r
- \r
- public TesterooWritableSet() {\r
- super(SWTObservables.getRealm(Display.getDefault()));\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
-\r
-import org.eclipse.core.resources.IMarker;\r
-import org.eclipse.jface.text.Position;\r
-import org.eclipse.jface.text.source.Annotation;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.swt.graphics.RGB;\r
-\r
-public class WarningAnnotation extends Annotation {\r
- private IMarker marker;\r
- private String text;\r
- private int line;\r
- private Position position;\r
-\r
- // error identifiers, images and colors\r
- public static String WARNING_TYPE = "warning.type";\r
- public static Image WARNING_IMAGE;\r
- public static final RGB WARNING_RGB = new RGB(244, 200, 45); \r
- \r
- public WarningAnnotation(IMarker marker) {\r
- this.marker = marker;\r
- }\r
-\r
- public WarningAnnotation(int line, String text) {\r
- super(WARNING_TYPE, true, null);\r
- this.marker = null;\r
- this.line = line;\r
- this.text = text;\r
- }\r
-\r
- public IMarker getMarker() {\r
- return marker;\r
- }\r
-\r
- public int getLine() {\r
- return line;\r
- }\r
-\r
- public String getText() {\r
- return text;\r
- }\r
-\r
- public Image getImage() {\r
- return WARNING_IMAGE;\r
- }\r
-\r
- public int getLayer() {\r
- return 3;\r
- }\r
-\r
- public String getType() {\r
- return WARNING_TYPE;\r
- }\r
-\r
- public Position getPosition() {\r
- return position;\r
- }\r
-\r
- public void setPosition(Position position) {\r
- this.position = position;\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
-\r
-import java.util.List;\r
-\r
-import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
-import org.eclipse.jface.viewers.ITreeContentProvider;\r
-import org.eclipse.jface.viewers.Viewer;\r
-\r
-import eu.etaxonomy.taxeditor.model.PropertySheetNode;\r
-\r
-public class PropertySheetContentProvider extends ObservableListContentProvider implements ITreeContentProvider {\r
-\r
- public Object[] getChildren(Object parentElement) {\r
- List<PropertySheetNode> children = ((PropertySheetNode) parentElement).getChildProperties();\r
- return children == null? new Object[0] : children.toArray();\r
- }\r
-\r
- public Object getParent(Object element) {\r
- return ((PropertySheetNode) element).getParentProperty();\r
- }\r
-\r
- public boolean hasChildren(Object element) {\r
- return ((PropertySheetNode) element).getChildProperties() != null;\r
- }\r
- \r
- public Object[] getElements(Object inputElement) {\r
- if (inputElement != null && inputElement instanceof List) {\r
- return ((List) inputElement).toArray();\r
- }\r
- return new Object[0];\r
- }\r
-\r
- public void dispose() {\r
- }\r
-\r
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
- }\r
-}\r
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
-\r
-import java.util.TreeMap;\r
-\r
-import org.eclipse.core.databinding.DataBindingContext;\r
-import org.eclipse.core.databinding.UpdateValueStrategy;\r
-import org.eclipse.core.databinding.observable.value.IObservableValue;\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.jface.databinding.swt.SWTObservables;\r
-import org.eclipse.jface.viewers.CellEditor;\r
-import org.eclipse.jface.viewers.EditingSupport;\r
-import org.eclipse.jface.viewers.TextCellEditor;\r
-import org.eclipse.jface.viewers.ViewerCell;\r
-import org.eclipse.swt.SWT;\r
-\r
-import eu.etaxonomy.taxeditor.model.PropertySheetNode;\r
-import eu.etaxonomy.taxeditor.view.PropertySheetViewer;\r
-\r
-public class PropertySheetValueEditingSupport extends EditingSupport {\r
-\r
- private TreeMap<String,CellEditor> cellEditors;\r
- private PropertySheetViewer viewer;\r
- private DataBindingContext bindingContext;\r
- \r
- public PropertySheetValueEditingSupport(PropertySheetViewer viewer) {\r
- super(viewer);\r
- this.viewer = viewer;\r
- this.bindingContext = viewer.getBindingContext();\r
- this.cellEditors = new TreeMap<String, CellEditor>();\r
- } \r
- \r
- protected boolean canEdit(Object element) {\r
- return ((PropertySheetNode) element).isEditable();\r
- }\r
-\r
- protected CellEditor getCellEditor(Object element) {\r
- String elementString = element.toString();\r
- if (cellEditors.get(elementString) == null)\r
- cellEditors.put(elementString, new TextCellEditor(viewer.getTree()));\r
- return cellEditors.get(elementString);\r
- }\r
-\r
- protected Object getValue(Object element) {\r
- return (PropertySheetNode) element;\r
- }\r
-\r
- protected void setValue(Object element, Object value) {\r
- ((PropertySheetNode) element).setPropertyValue(value.toString());\r
- this.getViewer().update(element, null);\r
- }\r
-\r
- protected void initializeCellEditorValue(CellEditor cellEditor, ViewerCell cell) {\r
- PropertySheetNode node = (PropertySheetNode) getValue(cell.getElement());\r
- \r
- // an empty string instead of a null makes the field editable\r
- cellEditor.setValue(node.getPropertyValue() == null ? "" : node.getPropertyValue());\r
- \r
- // if node element is observing a value, bind it to its TreeItem\r
- IObservableValue observeNodeValue = node.getObserveValue();\r
- if (observeNodeValue != null) {\r
- \r
- Assert.isNotNull(bindingContext,\r
- "Editing support: PropertySheetViewer's binding context must be explicitly set.");\r
- \r
- IObservableValue observeCellValue = SWTObservables.observeText(cellEditor.getControl(), SWT.Modify);\r
- bindingContext.bindValue(observeNodeValue, observeCellValue,\r
- new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT), null);\r
- \r
- }\r
- } \r
-}
\ No newline at end of file
+++ /dev/null
-package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
-\r
-import org.eclipse.core.databinding.DataBindingContext;\r
-import org.eclipse.core.databinding.beans.BeansObservables;\r
-import org.eclipse.core.databinding.observable.value.IObservableValue;\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.jface.viewers.ColumnLabelProvider;\r
-import org.eclipse.jface.viewers.ViewerCell;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.swt.widgets.TreeItem;\r
-\r
-import eu.etaxonomy.taxeditor.model.PropertySheetNode;\r
-import eu.etaxonomy.taxeditor.view.PropertySheetViewer;\r
-\r
-/**\r
- * \r
- * Borrowed from tomson <tom.schindl@bestsolution.at>'s GenericObservableMapCellLabelProvider\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-public class PropertySheetValueLabelProvider extends ColumnLabelProvider {\r
- \r
- private DataBindingContext bindingContext;\r
-\r
- public PropertySheetValueLabelProvider(PropertySheetViewer viewer) {\r
- this.bindingContext = viewer.getBindingContext();\r
- }\r
-\r
- public Image getImage(Object element) {\r
- return null;\r
- }\r
-\r
- public String getText(Object element) {\r
- return (String) ((PropertySheetNode) element).getPropertyValue();\r
- }\r
- \r
- public void update(ViewerCell cell) {\r
- \r
- Object element = cell.getElement();\r
- cell.setText(getText(element));\r
- Image image = getImage(element);\r
- cell.setImage(image);\r
- cell.setBackground(getBackground(element));\r
- cell.setForeground(getForeground(element));\r
- cell.setFont(getFont(element));\r
-\r
- // if node element is observing a value, bind it to its TreeItem\r
- IObservableValue observeNodeValue = ((PropertySheetNode) element).getObserveValue();\r
- if (observeNodeValue != null) {\r
- \r
- Assert.isNotNull(bindingContext,\r
- "Label provider: PropertySheetViewer's binding context must be explicitly set.");\r
- \r
- TreeItemColumnBean itemColumn = new TreeItemColumnBean((TreeItem) cell.getItem(),1);\r
- IObservableValue observeCellValue = BeansObservables.observeValue(itemColumn, "text");\r
- bindingContext.bindValue(observeCellValue, observeNodeValue, null, null);\r
- }\r
- }\r
- \r
- /**\r
- * TreeItem returns column texts by index, i.e. getText(1) - this is a wrapper which \r
- * allows BeansObservables to observe value with getText / setText\r
- **/\r
- class TreeItemColumnBean {\r
-\r
- TreeItem item;\r
- int index;\r
- \r
- TreeItemColumnBean(TreeItem item, int index) {\r
- this.item = item;\r
- this.index = index;\r
- }\r
-\r
- public String getText() {\r
- return item.getText(index);\r
- }\r
-\r
- public void setText(String string) {\r
- item.setText(index, string);\r
- }\r
- }\r
-}
\ No newline at end of file