taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/DynamicFeatureMenu.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/IDescriptiveInformationProvider.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/ImageDetailsPage.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/LabelDetailsPage.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TaxonDescriptionDetailsPage.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TaxonDescriptionFeature.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TaxonDescriptionTreeEditor.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TextDataDetailsPage.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/AddDescriptionHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/AddImageGalleryHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateDescriptionElementHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageListHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteDescriptionElementHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteDescriptionHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteImageHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DescriptionsMenuPropertyTester.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageDownInListHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageUpInListHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/CreateChildTaxonHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/EditNewTaxonHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/NextMemberHandler.java -text
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.events.ModifyEvent;\r
import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.events.MouseAdapter;\r
import org.eclipse.swt.layout.GridData;\r
import org.eclipse.swt.layout.GridLayout;\r
import org.eclipse.swt.layout.RowLayout;\r
+import org.eclipse.swt.widgets.Button;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Label;\r
import org.eclipse.swt.widgets.Text;\r
import org.eclipse.ui.forms.IDetailsPage;\r
import org.eclipse.ui.forms.IFormPart;\r
import org.eclipse.ui.forms.IManagedForm;\r
-import org.eclipse.ui.forms.events.HyperlinkAdapter;\r
-import org.eclipse.ui.forms.events.HyperlinkEvent;\r
import org.eclipse.ui.forms.widgets.FormToolkit;\r
-import org.eclipse.ui.forms.widgets.Hyperlink;\r
import org.eclipse.ui.forms.widgets.Section;\r
import org.eclipse.ui.forms.widgets.TableWrapData;\r
import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
protected Section section;\r
protected Composite client;\r
protected FormToolkit toolkit;\r
- private Label citationLabel;\r
+ private Text citationText;\r
private Label detailLabel;\r
private Text detailText;\r
private boolean hasCitationControls = false;\r
\r
private boolean citationListenersEnabled;\r
\r
+ private Composite citationComposite;\r
+\r
+ private Button btnEdit;\r
+\r
/* (non-Javadoc)\r
* @see org.eclipse.ui.forms.IDetailsPage#createContents(org.eclipse.swt.widgets.Composite)\r
*/\r
layout.rightMargin = 2;\r
layout.bottomMargin = 2;\r
parent.setLayout(layout);\r
- TableWrapData td2 = new TableWrapData(TableWrapData.FILL, TableWrapData.FILL_GRAB);\r
- td2.grabHorizontal = true;\r
+ TableWrapData td2 = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB);\r
parent.setLayoutData(td2); \r
\r
toolkit = mform.getToolkit();\r
section = toolkit.createSection(parent, Section.DESCRIPTION|Section.TITLE_BAR);\r
section.marginWidth = 10;\r
- TableWrapData td = new TableWrapData(TableWrapData.FILL, TableWrapData.FILL_GRAB);\r
+ TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB);\r
td.maxWidth = DEFAULT_WIDTH;\r
td.grabHorizontal = true;\r
section.setLayoutData(td);\r
\r
- client = toolkit.createComposite(section);\r
-// client = new Composite(section, SWT.BORDER);\r
+ client = toolkit.createComposite(section, SWT.NONE);\r
GridLayout glayout = new GridLayout();\r
glayout.marginWidth = glayout.marginHeight = 0;\r
client.setLayout(glayout);\r
- TableWrapData tdclient = new TableWrapData(TableWrapData.FILL, TableWrapData.FILL_GRAB);\r
+ TableWrapData tdclient = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB);\r
client.setLayoutData(tdclient);\r
\r
section.setClient(client);\r
hasCitationControls = true;\r
\r
// Citation\r
- final Composite citationComposite = toolkit.createComposite(client);\r
+ citationComposite = toolkit.createComposite(client);\r
GridLayout layout = new GridLayout();\r
layout.numColumns = 3;\r
citationComposite.setLayout(layout);\r
GridData gd = new GridData(GridData.GRAB_HORIZONTAL\r
| GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL\r
| GridData.VERTICAL_ALIGN_CENTER | GridData.FILL_HORIZONTAL);\r
- gd.heightHint = 60;\r
citationComposite.setLayoutData(gd);\r
\r
- citationLabel = toolkit.createLabel(citationComposite, NO_CITATION_MSG, SWT.WRAP);\r
- citationLabel.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
+ citationText = toolkit.createText(citationComposite, "", SWT.BORDER);\r
+ citationText.setEditable(false);\r
+ citationText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
| GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL\r
| GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));\r
\r
- Hyperlink linkEdit = toolkit.createHyperlink(citationComposite, "Edit", SWT.WRAP);\r
- linkEdit.addHyperlinkListener(new HyperlinkAdapter() {\r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.forms.events.HyperlinkAdapter#linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent)\r
- */\r
- @Override\r
- public void linkActivated(HyperlinkEvent e) {\r
- ReferenceBase reference = FilteredReferenceSelectionDialog.selectReference(client.getShell());\r
- \r
- if (reference != null) {\r
- setCitation(reference);\r
- ((ReferencedEntityBase) input).setCitation(reference);\r
- fireStateChanged();\r
- }\r
+ btnEdit = toolkit.createButton(citationComposite, "Edit ...", SWT.PUSH);\r
+ btnEdit.addMouseListener(new MouseAdapter() {\r
+ public void mouseUp(org.eclipse.swt.events.MouseEvent e) {\r
+ getReferenceFromDialog();\r
}\r
});\r
- linkEdit.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_END\r
+ btnEdit.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_END\r
| GridData.VERTICAL_ALIGN_BEGINNING ));\r
\r
- Hyperlink linkRemove = toolkit.createHyperlink(citationComposite, "Remove", SWT.WRAP);\r
- linkRemove.addHyperlinkListener(new HyperlinkAdapter() {\r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.forms.events.HyperlinkAdapter#linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent)\r
- */\r
- @Override\r
- public void linkActivated(HyperlinkEvent e) {\r
+ Button btnRemove = toolkit.createButton(citationComposite, "Remove", SWT.PUSH);\r
+ btnRemove.addMouseListener(new MouseAdapter() {\r
+ public void mouseUp(org.eclipse.swt.events.MouseEvent e) { \r
if (((ReferencedEntityBase) input).getCitation() == null) {\r
return;\r
}\r
fireStateChanged();\r
}\r
});\r
- linkRemove.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_END\r
+ btnRemove.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_END\r
| GridData.VERTICAL_ALIGN_BEGINNING ));\r
\r
// Citation details\r
}\r
\r
});\r
- }\r
+ } \r
\r
+ /**\r
+ * \r
+ */\r
+ protected void getReferenceFromDialog() {\r
+\r
+// ReferenceBase reference = ((ReferencedEntityBase) input).getCitation();\r
+ ReferenceBase reference = FilteredReferenceSelectionDialog.selectReference\r
+ (client.getShell(), ((ReferencedEntityBase) input).getCitation());\r
+ \r
+ if (reference != null) {\r
+ setCitation(reference);\r
+ ((ReferencedEntityBase) input).setCitation(reference);\r
+ fireStateChanged();\r
+ }\r
+ }\r
\r
/**\r
* @param detail\r
text = "Citation without title cache";\r
}\r
text += " ";\r
- citationLabel.setText(text);\r
+ \r
+ citationText.setText(text);\r
\r
- citationLabel.getParent().getParent().layout();\r
- citationLabel.getParent().layout(); \r
+ citationText.getParent().getParent().layout();\r
+ citationText.getParent().layout(); \r
}\r
\r
/**\r
\r
languages = new ArrayList<Language>();\r
languages.add(0, null);\r
+ languagesCombo.add("--- No language selected ---");\r
\r
int i = 0; \r
int index = 0;\r
List<Language> languagesTemp = PreferencesUtil.getPreferredLanguages();\r
Collections.sort(languagesTemp, new TermLanguageComparator<Language>());\r
for (Language language : languagesTemp) {\r
- \r
- if (i == 0) {\r
- languagesCombo.add("--- No language selected ---");\r
- } else {\r
- \r
- String description = language.getDescription(); \r
- if (description == null) {\r
- logger.warn("No description for " + language + " - not added to language menu");\r
- continue;\r
+ String description = language.getDescription(); \r
+ if (description == null) {\r
+ logger.warn("No description for " + language + " - not added to language menu");\r
+ continue;\r
+ }\r
+ languagesCombo.add(description);\r
+ languages.add(language);\r
+\r
+ i++;\r
+ if (selectedLanguage != null) {\r
+ if (selectedLanguage.equals(language)) {\r
+ index = i;\r
}\r
- languagesCombo.add(description);\r
- languages.add(language);\r
- \r
- if (selectedLanguage != null) {\r
- if (selectedLanguage.equals(language)) {\r
- index = i;\r
- }\r
- } else {\r
- // TODO isn't it better to put the last language at the top of the menu, not automatically select?\r
+ } else {\r
+ // TODO isn't it better to put the last language at the top of the menu, not automatically select?\r
// if (lastLanguage != null && lastLanguage.equals(language)) {\r
// index = i; \r
// }\r
- }\r
}\r
- i++;\r
}\r
\r
// Check whether language is in menu\r
import org.eclipse.jface.viewers.ITreeContentProvider;\r
import org.eclipse.jface.viewers.Viewer;\r
\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
return taxon.getDescriptions().toArray();\r
}\r
if (parentElement instanceof TaxonDescription) {\r
- return infoProvider.getDescriptionFeatures((TaxonDescription) parentElement).toArray();\r
+ if (((TaxonDescription) parentElement).isImageGallery()) {\r
+ return infoProvider.getDescriptionElements((TaxonDescription) parentElement, Feature.IMAGE()).toArray();\r
+ } else {\r
+ return infoProvider.getDescriptionFeatures((TaxonDescription) parentElement).toArray();\r
+ }\r
}\r
if (parentElement instanceof TaxonDescriptionFeature){\r
TaxonDescriptionFeature taxonDescriptionFeature = (TaxonDescriptionFeature) parentElement;\r
Feature feature = taxonDescriptionFeature.getFeature();\r
TaxonDescription description = taxonDescriptionFeature.getDescription();\r
- if (feature.equals(Feature.IMAGE())) {\r
- return ImagesHelper.getImages(description).toArray();\r
- } else {\r
- return infoProvider.getDescriptionElements(description, feature).toArray();\r
+ return infoProvider.getDescriptionElements(description, feature).toArray();\r
+ }\r
+ if (parentElement instanceof DescriptionElementBase) {\r
+ DescriptionElementBase descriptionElement = (DescriptionElementBase) parentElement; \r
+ if (descriptionElement.getInDescription().isImageGallery()) {\r
+ return ImagesHelper.getOrderedImages(descriptionElement).toArray();\r
}\r
}\r
return NO_CHILDREN;\r
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)\r
*/\r
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}\r
-}\r
+}
\ No newline at end of file
import eu.etaxonomy.cdm.model.description.CommonTaxonName;\r
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
import eu.etaxonomy.cdm.model.description.Distribution;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
import eu.etaxonomy.cdm.model.location.NamedArea;\r
*/\r
private String getElementText(DescriptionElementBase element) {\r
String text = DescriptionHelper.getCache(element);\r
+ boolean isImageGallery = element.getInDescription().isImageGallery();\r
if (text == null || text.length() == 0) {\r
- text = "No text provided";\r
+ text = isImageGallery ? "No label provided" : "No text provided";\r
+ }\r
+ if (isImageGallery) {\r
+ text = "Ordered image list: " + text;\r
}\r
return text;\r
}\r
if (text == null || text.length() == 0) {\r
text = "No label provided";\r
}\r
- return "Description: " + text;\r
+ return (description.isImageGallery() ? "Image Gallery: " : "Description: ") + text;\r
}\r
\r
/* (non-Javadoc)\r
import org.eclipse.jface.viewers.TreePath;\r
import org.eclipse.jface.viewers.TreeSelection;\r
import org.eclipse.jface.viewers.TreeViewer;\r
+import org.eclipse.jface.viewers.Viewer;\r
import org.eclipse.jface.viewers.ViewerComparator;\r
import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\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.Menu;\r
import org.eclipse.swt.widgets.Tree;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.PlatformUI;\r
import org.eclipse.ui.forms.DetailsPart;\r
import org.eclipse.ui.forms.IDetailsPage;\r
import org.eclipse.ui.forms.IDetailsPageProvider;\r
import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
import eu.etaxonomy.cdm.model.description.TextData;\r
import eu.etaxonomy.cdm.model.media.ImageFile;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
import eu.etaxonomy.taxeditor.model.ImagesHelper;\r
\r
/**\r
section.marginHeight = 5;\r
Composite client = toolkit.createComposite(section, SWT.WRAP);\r
GridLayout layout = new GridLayout();\r
- layout.numColumns = 2;\r
layout.marginWidth = 2;\r
layout.marginHeight = 2;\r
client.setLayout(layout);\r
-// client.setLayoutData(new GridData());\r
+ \r
+ Button btnExpand = toolkit.createButton(client, "Show all descriptive data", SWT.PUSH);\r
+ btnExpand.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));\r
+ btnExpand.addMouseListener(new MouseAdapter() {\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)\r
+ */\r
+ @Override\r
+ public void mouseUp(MouseEvent e) {\r
+ descriptionViewer.expandAll();\r
+ }\r
+ });\r
+ \r
Tree tree = toolkit.createTree(client, SWT.NULL);\r
GridData gd = new GridData(GridData.FILL_BOTH);\r
gd.heightHint = 20;\r
managedForm.addPart(spart);\r
\r
descriptionViewer = new TreeViewer(tree);\r
- \r
descriptionViewer.addSelectionChangedListener(new ISelectionChangedListener() {\r
private ISelection lastSelection;\r
\r
}\r
});\r
\r
-// descriptionViewer.setAutoExpandLevel(TreeViewer.ALL_LEVELS);\r
descriptionViewer.setAutoExpandLevel(2); // Show descriptions and features\r
descriptionViewer.setContentProvider(new DescriptionContentProvider(descriptiveInformationProvider));\r
descriptionViewer.setLabelProvider(new DescriptionLabelProvider());\r
descriptionViewer.setInput(page.getEditor().getEditorInput());\r
- descriptionViewer.setComparator(new ViewerComparator());\r
+ descriptionViewer.setComparator(new ViewerComparator() {\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)\r
+ */\r
+ @Override\r
+ public int compare(Viewer viewer, Object e1, Object e2) {\r
+ if (e1 instanceof ImageFile && e2 instanceof ImageFile) {\r
+ return 0;\r
+ }\r
+ return super.compare(viewer, e1, e2);\r
+ }\r
+ });\r
\r
// Set tree as page's selection provider\r
page.getSite().setSelectionProvider(descriptionViewer);\r
* @see org.eclipse.ui.forms.MasterDetailsBlock#registerPages(org.eclipse.ui.forms.DetailsPart)\r
*/\r
protected void registerPages(DetailsPart detailsPart) {\r
- detailsPart.registerPage(TaxonDescription.class, new TaxonDescriptionDetailsPage());\r
- detailsPart.registerPage(CommonTaxonName.class, new CommonNameDetailsPage());\r
- detailsPart.registerPage(Distribution.class, new DistributionDetailsPage());\r
- detailsPart.registerPage(TextData.class, new TextDataDetailsPage());\r
detailsPart.registerPage(ImageFile.class, new ImageDetailsPage());\r
detailsPart.setPageProvider(new PageProvider());\r
}\r
public synchronized void refreshTree(Object revealObject) { \r
descriptionViewer.refresh(true);\r
\r
+ Object[] segments = null;\r
if (revealObject instanceof DescriptionElementBase) {\r
DescriptionElementBase element = (DescriptionElementBase) revealObject;\r
- Object[] segments = new Object[3];\r
- segments[0] = element.getInDescription();\r
- segments[1] = element.getFeature();\r
- \r
TaxonDescriptionFeature tdf = descriptiveInformationProvider.getDescriptionFeature(element);\r
+ \r
+ segments = new Object[3];\r
+ segments[0] = element.getInDescription();\r
segments[1] = tdf;\r
+ segments[2] = element;\r
+ }\r
+ if (revealObject instanceof ImageFile) {\r
+ ImageFile image = (ImageFile) revealObject;\r
+ DescriptionElementBase element = ImagesHelper.findImageElement(image, getTaxon());\r
\r
- if (tdf.getFeature().equals(Feature.IMAGE())) {\r
- segments[2] = ImagesHelper.getImage(element);\r
- } else {\r
- segments[2] = element;\r
- } \r
- TreePath treePath = new TreePath(segments);\r
- descriptionViewer.setSelection(new TreeSelection(treePath), true);\r
+ segments = new Object[3];\r
+ segments[0] = element.getInDescription();\r
+ segments[1] = element;\r
+ segments[2] = image; \r
}\r
- \r
if (revealObject instanceof TaxonDescription) {\r
TaxonDescription description = (TaxonDescription) revealObject;\r
- Object[] segments = new Object[] {(TaxonDescription) revealObject};\r
+ segments = new Object[] {(TaxonDescription) revealObject}; \r
+ }\r
+ if (segments != null) {\r
TreePath treePath = new TreePath(segments);\r
- descriptionViewer.setSelection(new TreeSelection(treePath), true); \r
+ descriptionViewer.setSelection(new TreeSelection(treePath), true); \r
}\r
}\r
\r
+ /**\r
+ * @return\r
+ */\r
+ private Taxon getTaxon() {\r
+ IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();\r
+ if (editor != null && editor.getEditorInput() instanceof TaxonEditorInput) {\r
+ return ((TaxonEditorInput) editor.getEditorInput()).getTaxon();\r
+ }\r
+ return null;\r
+ }\r
+\r
/**\r
* @author p.ciardelli\r
*/\r
class PageProvider implements IDetailsPageProvider {\r
\r
+ private final static String IMAGE_GALLERY_ELEMENT = "isImageGalleryElement";\r
+ private final static String IMAGE_GALLERY_DESCRIPTION = "isImageGalleryDescription";\r
+\r
/* (non-Javadoc)\r
* @see org.eclipse.ui.forms.IDetailsPageProvider#getPage(java.lang.Object)\r
*/\r
public IDetailsPage getPage(Object key) {\r
- // TODO Fix bug #941\r
+ \r
+ // Descriptions\r
+ if (IMAGE_GALLERY_DESCRIPTION.equals(key)) {\r
+ return new LabelDetailsPage("Image Gallery Details", "Edit image gallery's label:");\r
+ }\r
+ if (TaxonDescription.class.equals(key)) {\r
+ return new LabelDetailsPage("Description Details", "Edit description's label:");\r
+ }\r
+ \r
+ // Features\r
if (Feature.DISTRIBUTION().equals(key)) {\r
return new DistributionMapDetailsPage();\r
}\r
+ \r
+ // Description elements\r
+ if (IMAGE_GALLERY_ELEMENT.equals(key)) {\r
+ return new LabelDetailsPage("Image List Details", "Edit ordered image list's label:");\r
+ }\r
+ if (CommonTaxonName.class.equals(key)) {\r
+ return new CommonNameDetailsPage();\r
+ }\r
+ if (Distribution.class.equals(key)) {\r
+ return new DistributionDetailsPage();\r
+ }\r
+ if (TextData.class.equals(key)) {\r
+ return new TextDataDetailsPage();\r
+ } \r
return null;\r
}\r
\r
* @see org.eclipse.ui.forms.IDetailsPageProvider#getPageKey(java.lang.Object)\r
*/\r
public Object getPageKey(Object object) {\r
+ \r
+ // Descriptions\r
+ if (object instanceof TaxonDescription) {\r
+ if (((TaxonDescription) object).isImageGallery()) {\r
+ return IMAGE_GALLERY_DESCRIPTION;\r
+ }\r
+ }\r
+ \r
+ // Features\r
if (object instanceof TaxonDescriptionFeature) {\r
return ((TaxonDescriptionFeature) object).getFeature();\r
}\r
- return null;\r
+ \r
+ // Description elements\r
+ if (object instanceof DescriptionElementBase) {\r
+ TaxonDescription description = (TaxonDescription) ((DescriptionElementBase) object).getInDescription();\r
+ if (description != null && description.isImageGallery()) {\r
+ return IMAGE_GALLERY_ELEMENT;\r
+ }\r
+ }\r
+ return object.getClass();\r
}\r
}\r
-}\r
-
\ No newline at end of file
+}
\ No newline at end of file
\r
// Check whether any features need to be removed, i.e. their elements were deleted\r
Set<Feature> keys = featureCache.keySet();\r
+ HashSet<Feature> removeFeatures = new HashSet<Feature>();\r
for (Feature feature : keys) {\r
if (!featuresTemp.contains(feature)) {\r
- featureCache.remove(feature);\r
+ removeFeatures.add(feature);\r
}\r
}\r
+ for (Feature feature : removeFeatures) {\r
+ featureCache.remove(feature);\r
+ }\r
\r
return new ArrayList<TaxonDescriptionFeature>(featureCache.values());\r
}\r
for (PresenceAbsenceTermBase<?> term : getStatusTerms()) {\r
if (term == null) {\r
} else {\r
- statusCombo.add(term.getLabel(CdmStore.getDefaultLanguage())); \r
+ statusCombo.add(term.getLabel()); \r
if (this.selectedStatus != null && this.selectedStatus.equals(term)) {\r
selectedIndex = i;\r
}\r
package eu.etaxonomy.taxeditor.editor.descriptiontree;\r
\r
import java.awt.Color;\r
-import java.lang.reflect.InvocationTargetException;\r
+import java.util.HashSet;\r
import java.util.Map;\r
+import java.util.Set;\r
\r
import org.apache.log4j.Logger;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.operation.IRunnableWithProgress;\r
import org.eclipse.jface.viewers.ISelection;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.browser.Browser;\r
import org.eclipse.swt.events.ControlEvent;\r
import org.eclipse.swt.events.ControlListener;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.widgets.Button;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.ui.IWorkbench;\r
-import org.eclipse.ui.PlatformUI;\r
import org.eclipse.ui.forms.IFormPart;\r
-import org.eclipse.ui.progress.IProgressService;\r
\r
+import eu.etaxonomy.cdm.ext.EditGeoServiceUtilities;\r
import eu.etaxonomy.cdm.ext.IEditGeoService;\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Distribution;\r
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
import eu.etaxonomy.taxeditor.store.CdmStore;\r
// }\r
// });\r
\r
+// // Create "Refresh Map" button\r
+// final Button refreshButton = mform.getToolkit().createButton(client, "Refresh Map", SWT.PUSH);\r
+// refreshButton.setLayoutData(new GridData());\r
+// refreshButton.addMouseListener(new MouseAdapter() {\r
+// public void mouseUp(MouseEvent e) {\r
+// loadMap();\r
+// }\r
+// }); \r
+ \r
parent.addControlListener(new ControlListener(){\r
public void controlMoved(ControlEvent e) {\r
// do nothing\r
int height = 0; \r
String bbox = "-180,-90,180,90"; \r
String backLayer = null;\r
- \r
- String parameter = geoService.getEditGeoServiceUrlParameterString(description, \r
- presenceAbsenceTermColors, width, height, bbox, backLayer);\r
+\r
+ String parameter = EditGeoServiceUtilities.getEditGeoServiceUrlParameterString(getDistributions(),\r
+ presenceAbsenceTermColors, 0, 0, null, "tdwg4");\r
\r
return url + "?" + parameter + "&bbox=-180,-90,180,90&ms=400";\r
}\r
\r
+ /**\r
+ * @return\r
+ */\r
+ private Set<Distribution> getDistributions() {\r
+ HashSet<Distribution> distributions = new HashSet<Distribution>();\r
+ for (DescriptionElementBase element : description.getElements()) {\r
+ if (element instanceof Distribution) {\r
+ distributions.add((Distribution) element);\r
+ }\r
+ }\r
+ return distributions;\r
+ }\r
+\r
/**\r
* @return\r
*/\r
--- /dev/null
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.ui.forms.IFormPart;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
+\r
+/**\r
+ * Edit the label for a TaxonDescription, or for a DescriptionElementBase whose cache is used\r
+ * as a label, e.g. a DescriptionElementBase which contains an image list.\r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class LabelDetailsPage extends AbstractDescriptionDetailsPage implements ModifyListener{\r
+ \r
+ private Text text;\r
+ private String sectionHeader;\r
+ private String description;\r
+ \r
+ public LabelDetailsPage(String sectionHeader, String description) {\r
+ this.sectionHeader = sectionHeader; \r
+ this.description = description;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)\r
+ */\r
+ public void modifyText(ModifyEvent e) {\r
+ saveLabel();\r
+ fireStateChanged();\r
+ } \r
+ \r
+ /**\r
+ * \r
+ */\r
+ private void saveLabel() {\r
+ if (input instanceof TaxonDescription) {\r
+ ((TaxonDescription) input).setTitleCache(text.getText());\r
+ }\r
+ if (input instanceof DescriptionElementBase) {\r
+ DescriptionHelper.setCache((DescriptionElementBase) input, text.getText());\r
+ }\r
+ }\r
+ \r
+ private String getLabel() {\r
+ if (input instanceof TaxonDescription) {\r
+ return ((TaxonDescription) input).getTitleCache();\r
+ }\r
+ if (input instanceof DescriptionElementBase) {\r
+ return DescriptionHelper.getCache((DescriptionElementBase) input);\r
+ }\r
+ return "";\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.editor.descriptionnew.AbstractDescriptionDetailsPage#createContents(org.eclipse.swt.widgets.Composite)\r
+ */\r
+ public void createContents(Composite parent) {\r
+ super.createContents(parent);\r
+\r
+ section.setText(sectionHeader); //$NON-NLS-1$\r
+ createLabel(description, client, parent);\r
+ text = new Text(client, SWT.BORDER | SWT.MULTI);\r
+ \r
+ GridData gd = new GridData(); \r
+ gd.horizontalAlignment = SWT.FILL;\r
+ gd.grabExcessHorizontalSpace = true;\r
+\r
+ gd.heightHint = 100;\r
+ text.setLayoutData(gd);\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.editor.descriptionnew.AbstractDescriptionDetailsPage#selectionChanged(org.eclipse.ui.forms.IFormPart, org.eclipse.jface.viewers.ISelection)\r
+ */\r
+ @Override\r
+ public void selectionChanged(IFormPart part, ISelection selection) {\r
+ super.selectionChanged(part, selection);\r
+ text.removeModifyListener(this);\r
+ text.setText(getLabel());\r
+ text.addModifyListener(this);\r
+ }\r
+}
\ No newline at end of file
\r
text = new Text(client, SWT.BORDER | SWT.MULTI | SWT.WRAP);\r
\r
-// GridData gd = new GridData(GridData.GRAB_HORIZONTAL\r
-// | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL\r
-// | GridData.VERTICAL_ALIGN_CENTER);\r
GridData gd = new GridData(); \r
gd.horizontalAlignment = SWT.FILL;\r
gd.grabExcessHorizontalSpace = true;\r
--- /dev/null
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operations.CreateTaxonDescriptionOperation;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class AddImageGalleryHandler extends AbstractHandler {\r
+ private static final Logger logger = Logger.getLogger(AddImageGalleryHandler.class);\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+ */\r
+ public Object execute(ExecutionEvent event) throws ExecutionException {\r
+ IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+ if (editor instanceof FormEditor) {\r
+ editor = ((FormEditor) editor).getActiveEditor();\r
+ }\r
+ IEditorInput input = editor.getEditorInput();\r
+ if (input instanceof TaxonEditorInput) {\r
+ Taxon taxon = ((TaxonEditorInput) input).getTaxon(); \r
+ IUndoableOperation operation;\r
+ try {\r
+ // TODO use undo context specific to editor\r
+ operation = new CreateTaxonDescriptionOperation(event.getCommand().getName(), \r
+ EditorUtil.getUndoContext(), taxon, (IPostOperationEnabled) editor, true);\r
+ EditorUtil.executeOperation(operation);\r
+ } catch (NotDefinedException e) {\r
+ logger.warn("Command name not set");\r
+ }\r
+ } \r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operations.AddImageToDescriptionElementOperation;\r
+import eu.etaxonomy.taxeditor.operations.CreateDescriptionElementOperation;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class CreateImageHandler extends AbstractHandler {\r
+ private static final Logger logger = Logger\r
+ .getLogger(CreateImageHandler.class);\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+ */\r
+ public Object execute(ExecutionEvent event) throws ExecutionException {\r
+ IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+ if (editor instanceof FormEditor) {\r
+ editor = ((FormEditor) editor).getActiveEditor();\r
+ }\r
+ IEditorInput input = editor.getEditorInput();\r
+ if (input instanceof TaxonEditorInput) {\r
+ Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+ \r
+ ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+ if (selection instanceof TreeSelection) {\r
+ TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+ \r
+ int count = paths[0].getSegmentCount();\r
+ DescriptionElementBase element = null;\r
+ for (int i = 0; i < count; i++ ) {\r
+ if (paths[0].getSegment(i) instanceof DescriptionElementBase) {\r
+ element = (DescriptionElementBase) paths[0].getSegment(i);\r
+ break;\r
+ }\r
+ }\r
+ \r
+ IUndoableOperation operation = null;\r
+ try {\r
+ // TODO use undo context specific to editor\r
+ operation = new AddImageToDescriptionElementOperation(event.getCommand().getName(), \r
+ EditorUtil.getUndoContext(), taxon, element, (IPostOperationEnabled) editor);\r
+ EditorUtil.executeOperation(operation);\r
+ } catch (NotDefinedException e) {\r
+ logger.warn("Command name not set");\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operations.CreateDescriptionElementOperation;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class CreateImageListHandler extends AbstractHandler {\r
+ private static final Logger logger = Logger\r
+ .getLogger(CreateImageListHandler.class);\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+ */\r
+ public Object execute(ExecutionEvent event) throws ExecutionException {\r
+ IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+ if (editor instanceof FormEditor) {\r
+ editor = ((FormEditor) editor).getActiveEditor();\r
+ }\r
+ IEditorInput input = editor.getEditorInput();\r
+ if (input instanceof TaxonEditorInput) {\r
+ Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+ \r
+ ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+ if (selection instanceof TreeSelection) {\r
+ TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+ TaxonDescription description = (TaxonDescription) (paths[0]).getFirstSegment();\r
+ \r
+ Feature feature = Feature.IMAGE();\r
+ \r
+ IUndoableOperation operation = null;\r
+ try {\r
+ // TODO use undo context specific to editor\r
+ operation = new CreateDescriptionElementOperation(event.getCommand().getName(), \r
+ EditorUtil.getUndoContext(), taxon, description, feature, (IPostOperationEnabled) editor);\r
+ EditorUtil.executeOperation(operation);\r
+ } catch (NotDefinedException e) {\r
+ logger.warn("Command name not set");\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+}\r
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
*/\r
public Object execute(ExecutionEvent event) throws ExecutionException {\r
- ISelection activeSelection = HandlerUtil.getActiveMenuSelection(event);\r
- ISelection currentSelection = HandlerUtil.getCurrentSelection(event);\r
- \r
\r
IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
if (editor instanceof FormEditor) {\r
if (selection instanceof TreeSelection) {\r
TreePath[] paths = ((TreeSelection) selection).getPaths();\r
TaxonDescription description = (TaxonDescription) (paths[0]).getFirstSegment();\r
- \r
- Feature feature = (Feature) ((Event)event.getTrigger()).data;\r
- \r
+ \r
IUndoableOperation operation;\r
try {\r
// TODO use undo context specific to editor\r
--- /dev/null
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.operations.RemoveImageFromDescriptionElementOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class DeleteImageHandler extends AbstractHandler {\r
+ private static final Logger logger = Logger\r
+ .getLogger(DeleteImageHandler.class);\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+ */\r
+ public Object execute(ExecutionEvent event) throws ExecutionException {\r
+ IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+ if (editor instanceof FormEditor) {\r
+ editor = ((FormEditor) editor).getActiveEditor();\r
+ }\r
+ IEditorInput input = editor.getEditorInput();\r
+ if (input instanceof TaxonEditorInput) {\r
+ Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+ \r
+ ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+ if (selection instanceof TreeSelection) {\r
+ TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+ \r
+ int count = paths[0].getSegmentCount();\r
+ DescriptionElementBase element = null;\r
+ for (int i = 0; i < count; i++ ) {\r
+ if (paths[0].getSegment(i) instanceof DescriptionElementBase) {\r
+ element = (DescriptionElementBase) paths[0].getSegment(i);\r
+ break;\r
+ }\r
+ }\r
+ ImageFile image = (ImageFile) paths[0].getLastSegment();\r
+ \r
+ IUndoableOperation operation = null;\r
+ try {\r
+ // TODO use undo context specific to editor\r
+ operation = new RemoveImageFromDescriptionElementOperation(event.getCommand().getName(), \r
+ EditorUtil.getUndoContext(), taxon, image, element, (IPostOperationEnabled) editor);\r
+ EditorUtil.executeOperation(operation);\r
+ } catch (NotDefinedException e) {\r
+ logger.warn("Command name not set");\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.eclipse.core.expressions.PropertyTester;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class DescriptionsMenuPropertyTester extends PropertyTester {\r
+\r
+ private List segments;\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)\r
+ */\r
+ public boolean test(Object receiver, String property, Object[] args,\r
+ Object expectedValue) {\r
+ \r
+ segments = getSegments((TreeSelection) receiver);\r
+ \r
+ if ("isInImageGallery".equals(property)) {\r
+ return isInImageGallery();\r
+ }\r
+ \r
+ if ("isInImageList".equals(property)) {\r
+ return isInImageGallery() && isInDescriptionElement();\r
+ }\r
+ \r
+ if ("isImage".equals(property)) {\r
+ return isImage();\r
+ }\r
+ \r
+ if ("isInDescription".equals(property)) {\r
+ return isInDescription();\r
+ }\r
+ \r
+ if ("isNonImageElement".equals(property)) {\r
+ return isInDescription() && isInDescriptionElement();\r
+ }\r
+ \r
+ return false;\r
+ }\r
+ \r
+ /**\r
+ * @param receiver\r
+ * @return\r
+ */\r
+ private List getSegments(TreeSelection selection) {\r
+ List list = new ArrayList();\r
+ TreePath segmentsPath = selection.getPaths()[0];\r
+ for (int i = 0; i < segmentsPath.getSegmentCount(); i++) {\r
+ list.add(segmentsPath.getSegment(i));\r
+ }\r
+ return list;\r
+ }\r
+\r
+ /**\r
+ * @return\r
+ */\r
+ private boolean isInDescription() {\r
+ for (Object o : segments) {\r
+ if (o instanceof TaxonDescription) {\r
+ return !((TaxonDescription) o).isImageGallery();\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * @return\r
+ */\r
+ private boolean isImage() {\r
+ for (Object o : segments) {\r
+ if (o instanceof ImageFile) {\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ private boolean isInImageGallery() {\r
+ for (Object o : segments) {\r
+ if (o instanceof TaxonDescription) {\r
+ return ((TaxonDescription) o).isImageGallery();\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ private boolean isInDescriptionElement() {\r
+ for (Object o : segments) {\r
+ if (o instanceof DescriptionElementBase) {\r
+ return true;\r
+ }\r
+ }\r
+ return false; \r
+ }\r
+ \r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.model.ImagesHelper;\r
+import eu.etaxonomy.taxeditor.operations.AddImageToDescriptionElementOperation;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.operations.MoveImageInListOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 11.08.2009\r
+ * @version 1.0\r
+ */\r
+public class MoveImageDownInListHandler extends AbstractHandler {\r
+ private static final Logger logger = Logger\r
+ .getLogger(CreateDescriptionElementHandler.class);\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+ */\r
+ public Object execute(ExecutionEvent event) throws ExecutionException {\r
+ \r
+ IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+ if (editor instanceof FormEditor) {\r
+ editor = ((FormEditor) editor).getActiveEditor();\r
+ }\r
+ IEditorInput input = editor.getEditorInput();\r
+ if (input instanceof TaxonEditorInput) {\r
+ Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+ \r
+ ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+ if (selection instanceof TreeSelection) {\r
+ TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+ int count = paths[0].getSegmentCount();\r
+ DescriptionElementBase element = null;\r
+ for (int i = 0; i < count; i++ ) {\r
+ if (paths[0].getSegment(i) instanceof DescriptionElementBase) {\r
+ element = (DescriptionElementBase) paths[0].getSegment(i);\r
+ break;\r
+ }\r
+ } \r
+ ImageFile image = (ImageFile) paths[0].getLastSegment();\r
+ IUndoableOperation operation = null;\r
+ try {\r
+ // TODO use undo context specific to editor\r
+ operation = new MoveImageInListOperation(event.getCommand().getName(), \r
+ EditorUtil.getUndoContext(), taxon, element, image, ImagesHelper.DOWN, (IPostOperationEnabled) editor);\r
+ EditorUtil.executeOperation(operation);\r
+ } catch (NotDefinedException e) {\r
+ logger.warn("Command name not set");\r
+ }\r
+ }\r
+ } \r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.taxeditor.editor.descriptiontree.handler;\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.TreePath;\r
+import org.eclipse.jface.viewers.TreeSelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.model.ImagesHelper;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.operations.MoveImageInListOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 11.08.2009\r
+ * @version 1.0\r
+ */\r
+public class MoveImageUpInListHandler extends AbstractHandler {\r
+ private static final Logger logger = Logger\r
+ .getLogger(CreateDescriptionElementHandler.class);\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+ */\r
+ public Object execute(ExecutionEvent event) throws ExecutionException {\r
+ \r
+ IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+ if (editor instanceof FormEditor) {\r
+ editor = ((FormEditor) editor).getActiveEditor();\r
+ }\r
+ IEditorInput input = editor.getEditorInput();\r
+ if (input instanceof TaxonEditorInput) {\r
+ Taxon taxon = ((TaxonEditorInput) input).getTaxon();\r
+ \r
+ ISelection selection = HandlerUtil.getCurrentSelection(event);\r
+ if (selection instanceof TreeSelection) {\r
+ TreePath[] paths = ((TreeSelection) selection).getPaths();\r
+ int count = paths[0].getSegmentCount();\r
+ DescriptionElementBase element = null;\r
+ for (int i = 0; i < count; i++ ) {\r
+ if (paths[0].getSegment(i) instanceof DescriptionElementBase) {\r
+ element = (DescriptionElementBase) paths[0].getSegment(i);\r
+ break;\r
+ }\r
+ } \r
+ ImageFile image = (ImageFile) paths[0].getLastSegment();\r
+ IUndoableOperation operation = null;\r
+ try {\r
+ // TODO use undo context specific to editor\r
+ operation = new MoveImageInListOperation(event.getCommand().getName(), \r
+ EditorUtil.getUndoContext(), taxon, element, image, ImagesHelper.UP, (IPostOperationEnabled) editor);\r
+ EditorUtil.executeOperation(operation);\r
+ } catch (NotDefinedException e) {\r
+ logger.warn("Command name not set");\r
+ }\r
+ }\r
+ } \r
+ return null;\r
+ }\r
+\r
+}\r