All modification of data is now propagated as PropertyChangeEvents.
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/TaxonDescriptionTreeEditor.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/detailpage/AbstractDescriptionDetailSection.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/detailpage/AbstractDescriptionDetailsPage.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/detailpage/AnnotationSection.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/detailpage/CitationSection.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/detailpage/CommonNameDetailsPage.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/detailpage/CommonNameSection.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/detailpage/DistributionDetailSection.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SwapSynonymAndAcceptedHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/IReferenceSearch.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/ReferenceSelectComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AbstractEditorFormSection.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AbstractEntitySetSection.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AbstractFormComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AbstractSelectionComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AbstractTermComboComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AnnotationComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AnnotationSection.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/Container.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/DescriptionElementSourceComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/EditorFormToolkit.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/FormComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/IPropertyChangeEmitter.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/ImageComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/LanguageComboComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/MultilineTextWithLabel.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/NameSelectionComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/OriginalSourceSection.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/ReferenceSelectionComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/TaxonSelectionComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/TextActionComposite.java -text
*/
package eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.forms.events.ExpansionEvent;
-import org.eclipse.ui.forms.events.IExpansionListener;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.ToggleHyperlink;
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
-import eu.etaxonomy.taxeditor.forms.EditorFormToolkit;
+import eu.etaxonomy.taxeditor.forms.AbstractEditorFormSection;
/**
* @author nho
*
*/
-public abstract class AbstractDescriptionDetailSection extends Section implements IExpansionListener, ModifyListener{
+public abstract class AbstractDescriptionDetailSection extends AbstractEditorFormSection implements IPropertyChangeListener{
protected AbstractDescriptionDetailsPage page;
- protected EditorFormToolkit toolkit;
private Composite client;
/**
*/
public AbstractDescriptionDetailSection(Composite parent, AbstractDescriptionDetailsPage page, int sectionStyle) {
super(parent, Section.TITLE_BAR | SWT.NO_BACKGROUND | sectionStyle);
- toolkit = page.toolkit;
this.page = page;
this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
// default is empty
}
- /**
- * Call this method after dynamically changing the client area.
- * If the options changed is set to true, will also fire a state changed
- * event to inform the user of unsaved changes.
- *
- * @param changed
- */
- protected void internalUpdateSection(boolean changed){
- createDynamicContents();
- this.reflow();
- if(changed)
- fireStateChanged();
- }
-
public DescriptionElementBase getDescriptionElement() {
return page.getDescriptionElement();
}
- protected void fireStateChanged(){
- page.fireStateChanged();
- }
-
/* (non-Javadoc)
- * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
- public void modifyText(ModifyEvent e) {
- page.fireStateChanged();
+ public void propertyChange(PropertyChangeEvent event) {
+ page.propertyChange(event);
}
public ToggleHyperlink getToggle(){
return toggle;
}
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.events.IExpansionListener#expansionStateChanged(org.eclipse.ui.forms.events.ExpansionEvent)
- */
- public void expansionStateChanged(ExpansionEvent e) {
- // TODO Auto-generated method stub
-
- }
-
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.forms.events.IExpansionListener#expansionStateChanging(org.eclipse.ui.forms.events.ExpansionEvent)
- */
- public void expansionStateChanging(ExpansionEvent e) {
- // TODO Auto-generated method stub
-
- }
}
package eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.jface.util.IPropertyChangeListener;\r
+import org.eclipse.jface.util.PropertyChangeEvent;\r
import org.eclipse.jface.viewers.ISelection;\r
import org.eclipse.jface.viewers.IStructuredSelection;\r
import org.eclipse.swt.SWT;\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.widgets.FormToolkit;\r
import org.eclipse.ui.forms.widgets.Section;\r
import org.eclipse.ui.forms.widgets.SharedScrolledComposite;\r
\r
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.taxeditor.forms.AnnotationSection;\r
import eu.etaxonomy.taxeditor.forms.EditorFormToolkit;\r
+import eu.etaxonomy.taxeditor.forms.OriginalSourceSection;\r
\r
/**\r
* @author p.ciardelli\r
* @author n.hoffmann\r
*\r
*/\r
-public abstract class AbstractDescriptionDetailsPage implements IDetailsPage { \r
+public abstract class AbstractDescriptionDetailsPage implements IDetailsPage, IPropertyChangeListener { \r
private static final Logger logger = Logger.getLogger(AbstractDescriptionDetailsPage.class);\r
\r
protected IManagedForm managedForm;\r
private boolean hasExtensions = false;\r
\r
protected AbstractDescriptionDetailSection descriptionSection;\r
- private CitationSection citationSection;\r
+ private OriginalSourceSection citationSection;\r
private AnnotationSection annotationSection;\r
private ExtensionSection extensionSection;\r
\r
createDescriptionContents(parent);\r
\r
if(hasCitations)\r
- createCitations(parent);\r
+ citationSection = toolkit.createOriginalSourceSection(parent, getDescriptionElement(), SWT.NULL);\r
+ citationSection.addPropertyChangeListener(this);\r
if(hasAnnotations)\r
- createAnnotations(parent);\r
+ annotationSection = toolkit.createAnnotationSection(parent, getDescriptionElement(), SWT.NULL);\r
+ annotationSection.addPropertyChangeListener(this);\r
if(hasExtensions)\r
- createExtensions(parent);\r
+ // there are no extensions for description elements\r
\r
reflow(true);\r
}\r
* \r
* @param parent\r
*/\r
- abstract protected void createDescriptionContents(Composite parent);\r
- \r
- /**\r
- * \r
- * @param parent\r
- */\r
- protected void createCitations(Composite parent) {\r
- citationSection = new CitationSection(parent, this, SWT.NULL);\r
- toolkit.adaptSection(parent, citationSection, SWT.NULL);\r
- citationSection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
- } \r
- \r
- protected void createAnnotations(Composite parent){\r
- annotationSection = new AnnotationSection(parent, this, SWT.NULL);\r
- toolkit.adaptSection(parent, annotationSection, SWT.NULL);\r
- annotationSection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
- }\r
- \r
- protected void createExtensions(Composite parent){\r
- extensionSection = new ExtensionSection(parent, this, SWT.NULL);\r
- toolkit.adaptSection(parent, extensionSection, SWT.NULL);\r
- extensionSection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
- }\r
+ abstract protected void createDescriptionContents(Composite parent); \r
\r
- /**\r
- * Alerts editor that dirty state has changed.\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)\r
*/\r
- protected void fireStateChanged() {\r
+ public void propertyChange(PropertyChangeEvent event) {\r
managedForm.dirtyStateChanged();\r
}\r
\r
descriptionSection.updateSection();\r
\r
if(hasCitations){\r
- citationSection.updateSection();\r
+ citationSection.setEntity(getDescriptionElement());\r
}\r
if(hasAnnotations){\r
- annotationSection.updateSection();\r
+ annotationSection.setEntity(getDescriptionElement());\r
}\r
if(hasExtensions){\r
- extensionSection.updateSection();\r
+// extensionSection.updateSection();\r
}\r
}\r
\r
+++ /dev/null
-/**
- *
- */
-package eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage;
-
-import java.util.Set;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ToolBarManager;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.forms.widgets.Section;
-
-import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
-
-/**
- * @author n.hoffmann
- *
- */
-public class CitationSection extends AbstractDescriptionDetailSection{
-
- private Composite citationContainer;
-
- public CitationSection(Composite parent, AbstractDescriptionDetailsPage page, int style){
- super(parent, page, Section.TWISTIE | Section.COMPACT | style);
-
- setText("Citations");
- setTextClient(createToolbar(this));
- }
-
- /**
- * @return
- */
- private Control createToolbar(final Section section) {
- ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
-// IMenuService menuService = (IMenuService) EditorUtil.getService(IMenuService.class);
-// menuService.populateContributionManager(toolBarManager, "toolbar:de.md.contributions.sectionToolbar");
-
- Action addCitation = new Action("add", Action.AS_PUSH_BUTTON){
- /* (non-Javadoc)
- * @see org.eclipse.jface.action.Action#run()
- */
- @Override
- public void run() {
- getDescriptionElement().addSource(DescriptionElementSource.NewInstance());
- if(! section.isExpanded())
- section.setExpanded(true);
- internalUpdateSection(true);
- }
- };
- addCitation.setToolTipText("Create a new citation");
- toolBarManager.add(addCitation);
-
- return toolBarManager.createControl(section);
- }
-
- /*
- *
- */
- public void createDynamicContents() {
- if(citationContainer != null)
- citationContainer.dispose();
- citationContainer = toolkit.createFormComposite(getClient(), SWT.NULL);
-
- citationContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- citationContainer.setLayout(new GridLayout());
-
- Set<DescriptionElementSource> sources = null;
- if(getDescriptionElement() != null){
- sources = getDescriptionElement().getSources();
- }
-
- if(sources == null || sources.size() == 0){
- toolkit.createLabel(citationContainer, "No citations yet.");
- }else{
- for(DescriptionElementSource source : sources){
- toolkit.createDescriptionElementSourceComposite(citationContainer, source, SWT.NULL);
-
- Button button_remove = toolkit.createButton(citationContainer, "Remove", SWT.PUSH);
- button_remove.addSelectionListener(new RemoveListener(source));
- }
- }
- }
-
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#updateSection()
- */
- @Override
- public void updateSection() {
- internalUpdateSection(false);
- }
-
- private class RemoveListener extends SelectionAdapter{
- private DescriptionElementSource source;
-
- public RemoveListener(DescriptionElementSource source){
- this.source = source;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
- @Override
- public void widgetSelected(SelectionEvent e) {
- DescriptionElementBase sourcedObjcet = source.getSourcedObj();
-
- sourcedObjcet.removeSource(source);
- internalUpdateSection(true);
- }
- }
-}
@Override\r
protected void createDescriptionContents(Composite parent) {\r
descriptionSection = new CommonNameSection(parent, this, SWT.WRAP);\r
- toolkit.adaptSection(parent, descriptionSection, SWT.NULL);\r
+ toolkit.adapt(descriptionSection);\r
}\r
}
\ No newline at end of file
*/
package eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
* @author nho
*
*/
-public class CommonNameSection extends AbstractDescriptionDetailSection implements ModifyListener, SelectionListener{
+public class CommonNameSection extends AbstractDescriptionDetailSection{
LanguageComboComposite languageCombo;
TextWithLabelComposite commonName;
setText("Common Name Details");
languageCombo = toolkit.createLanguageComboComposite(getClient(), "Language", null, SWT.WRAP);
- languageCombo.addSelectionListener(this);
+ languageCombo.addPropertyChangeListener(this);
languageCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
commonName = toolkit.createTextWithLabelComposite(getClient(), "Common Name", null, SWT.WRAP);
- commonName.addModifyListener(this);
+ commonName.addPropertyChangeListener(this);
}
/* (non-Javadoc)
}
/* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#modifyText(org.eclipse.swt.events.ModifyEvent)
+ * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
@Override
- public void modifyText(ModifyEvent e) {
- super.modifyText(e);
+ public void propertyChange(PropertyChangeEvent event) {
+ super.propertyChange(event);
getDescriptionElement().setName(commonName.getText());
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
- public void widgetSelected(SelectionEvent e) {
- page.fireStateChanged();
getDescriptionElement().setLanguage(languageCombo.getSelection());
}
public CommonTaxonName getDescriptionElement() {
return (CommonTaxonName) super.getDescriptionElement();
}
-
- // not used
- public void widgetDefaultSelected(SelectionEvent e) {}
}
@Override\r
protected void createDescriptionContents(Composite parent) {\r
descriptionSection = new DistributionDetailSection(parent, this, SWT.WRAP);\r
- toolkit.adaptSection(parent, descriptionSection, SWT.NULL);\r
+ toolkit.adapt(descriptionSection);\r
}\r
\r
\r
@Override\r
protected void createDescriptionContents(Composite parent) {\r
descriptionSection = new ImageDetailsSection(parent, this, SWT.WRAP);\r
- toolkit.adaptSection(parent, descriptionSection, SWT.NULL);\r
+ toolkit.adapt(descriptionSection);\r
}\r
}
\ No newline at end of file
changed = false;
}
+ /**
+ * Call this method after dynamically changing the client area.
+ * If the options changed is set to true, will also fire a state changed
+ * event to inform the user of unsaved changes.
+ *
+ * @param changed
+ */
+ protected void internalUpdateSection(boolean changed){
+// createDynamicContents();
+ this.reflow();
+ if(changed)
+ firePropertyChangeEvent(null);
+ }
+
private ImageFile getImageFile(){
return (ImageFile) page.input;
}
@Override\r
protected void createDescriptionContents(Composite parent) {\r
descriptionSection = new LabelDetailsSection(parent, this, sectionHeader, description, SWT.WRAP);\r
- toolkit.adaptSection(parent, descriptionSection, SWT.NULL);\r
+ toolkit.adapt(descriptionSection);\r
}\r
}
\ No newline at end of file
*/
package eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.widgets.Composite;
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
setText(title);
detailDescription = toolkit.createMultilineTextWithLabel(getClient(), labelString, 100, SWT.WRAP);
- detailDescription.addModifyListener(this);
+ detailDescription.addPropertyChangeListener(this);
}
/* (non-Javadoc)
}
/* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#modifyText(org.eclipse.swt.events.ModifyEvent)
+ * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
@Override
- public void modifyText(ModifyEvent e) {
- super.modifyText(e);
+ public void propertyChange(PropertyChangeEvent event) {
+ super.propertyChange(event);
saveLabel();
}
@Override
protected void createDescriptionContents(Composite parent) {
descriptionSection = new TaxonInteractionDetailsSection(parent, this, SWT.WRAP);
- toolkit.adaptSection(parent, descriptionSection, SWT.NULL);
+ toolkit.adapt(descriptionSection);
}
}
*/
package eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.widgets.Composite;
import eu.etaxonomy.cdm.model.description.Feature;
super(parent, page, sectionStyle);
taxonSelection = toolkit.createTaxonSelectionComposite(getClient(), null, SWT.WRAP);
- taxonSelection.addModifyListener(this);
+ taxonSelection.addPropertyChangeListener(this);
interactionDescription = toolkit.createMultilineTextWithLabel(getClient(), "Description", 200, SWT.WRAP);
- interactionDescription.addModifyListener(this);
+ interactionDescription.addPropertyChangeListener(this);
}
/* (non-Javadoc)
}
/* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#modifyText(org.eclipse.swt.events.ModifyEvent)
+ * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
@Override
- public void modifyText(ModifyEvent e) {
- super.modifyText(e);
+ public void propertyChange(PropertyChangeEvent event) {
+ super.propertyChange(event);
getTaxonInteraction().addDescription(interactionDescription.getText(), CdmStore.getDefaultLanguage());
getTaxonInteraction().setTaxon2((Taxon) taxonSelection.getSelection());
}
@Override\r
protected void createDescriptionContents(Composite parent) {\r
descriptionSection = new TextDataSection(parent, this, SWT.WRAP);\r
- toolkit.adaptSection(parent, descriptionSection, SWT.NULL);\r
+ toolkit.adapt(descriptionSection);\r
}\r
}
\ No newline at end of file
*/
package eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.widgets.Composite;
import eu.etaxonomy.cdm.model.description.Feature;
multilineTextWithLabel = toolkit.createMultilineTextWithLabel(getClient(), "Text for this descriptive element:", 200, SWT.WRAP);
- multilineTextWithLabel.addModifyListener(this);
+ multilineTextWithLabel.addPropertyChangeListener(this);
}
/* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#modifyText(org.eclipse.swt.events.ModifyEvent)
+ * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
@Override
- public void modifyText(ModifyEvent e) {
- super.modifyText(e);
+ public void propertyChange(PropertyChangeEvent event) {
+ super.propertyChange(event);
DescriptionHelper.setCache(getDescriptionElement(), multilineTextWithLabel.getText());
}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.events.IExpansionListener;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.ToggleHyperlink;
+
+/**
+ * @author nho
+ *
+ */
+public abstract class AbstractEditorFormSection extends Section implements IExpansionListener, IPropertyChangeEmitter{
+
+
+ protected EditorFormToolkit toolkit;
+ private Composite client;
+
+ private Set<IPropertyChangeListener> propertyChangeListeners = new HashSet<IPropertyChangeListener>();
+
+ /**
+ * @param parent
+ * @param style
+ */
+ protected AbstractEditorFormSection(Composite parent, int style) {
+ super(parent, Section.TITLE_BAR | SWT.NO_BACKGROUND | style);
+
+ toolkit = new EditorFormToolkit(parent.getDisplay());
+
+ toolkit.adapt(this);
+
+ this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ client = toolkit.createComposite(this, SWT.WRAP);
+ client.setLayout(new GridLayout());
+
+ this.setClient(client);
+ this.addExpansionListener(this);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Widget#dispose()
+ */
+ @Override
+ public void dispose() {
+ super.dispose();
+ toolkit.dispose();
+ }
+
+ public ToggleHyperlink getToggle(){
+ return this.toggle;
+ }
+
+ public Composite getClient(){
+ return client;
+ }
+
+ public AbstractEditorFormSection getSection(){
+ return this;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.events.IExpansionListener#expansionStateChanged(org.eclipse.ui.forms.events.ExpansionEvent)
+ */
+ public void expansionStateChanged(ExpansionEvent e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.events.IExpansionListener#expansionStateChanging(org.eclipse.ui.forms.events.ExpansionEvent)
+ */
+ public void expansionStateChanging(ExpansionEvent e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#addPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
+ */
+ public void addPropertyChangeListener(IPropertyChangeListener listener) {
+ propertyChangeListeners.add(listener);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#removePropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
+ */
+ public void removePropertyChangeListener(IPropertyChangeListener listener) {
+ propertyChangeListeners.remove(listener);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#firePropertyChangeEvent()
+ */
+ public void firePropertyChangeEvent(PropertyChangeEvent event) {
+ for(IPropertyChangeListener listener : propertyChangeListeners){
+ listener.propertyChange(event);
+ }
+ }
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+import eu.etaxonomy.cdm.model.common.VersionableEntity;
+
+/**
+ * @author nho
+ *
+ */
+public abstract class AbstractEntitySetSection<T extends VersionableEntity> extends AbstractEditorFormSection {
+
+ protected T entity;
+ protected Composite container;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ protected AbstractEntitySetSection(Composite parent, T entity, int style) {
+ super(parent, style);
+ this.entity = entity;
+ setTextClient(createToolbar());
+
+ }
+
+ private Control createToolbar() {
+ ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
+// IMenuService menuService = (IMenuService) EditorUtil.getService(IMenuService.class);
+// menuService.populateContributionManager(toolBarManager, "toolbar:de.md.contributions.sectionToolbar");
+
+
+ toolBarManager.add(getAddAction());
+
+ return toolBarManager.createControl(this);
+ }
+
+ /**
+ * @return
+ */
+ protected abstract IAction getAddAction();
+
+ private void createContainer(){
+ if(container != null)
+ container.dispose();
+ container = toolkit.createContainer(getClient(), SWT.NULL);
+
+ container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ container.setLayout(new GridLayout());
+ }
+
+ /**
+ * Call this method after dynamically changing the client area.
+ * If the options changed is set to true, will also fire a state changed
+ * event to inform the user of unsaved changes.
+ *
+ * @param changed
+ */
+ protected void internalUpdateSection(boolean changed){
+ createContainer();
+ createDynamicContents();
+ this.reflow();
+ if(changed)
+ firePropertyChangeEvent(null);
+ }
+
+ /**
+ *
+ */
+ protected abstract void createDynamicContents();
+
+ /**
+ * Sets this composites entity
+ *
+ * Call this method when the page gets loaded
+ * or otherwise updated from outside
+ *
+ * @param entity the entity to set
+ */
+ public void setEntity(T entity) {
+ this.entity = entity;
+ internalUpdateSection(false);
+ }
+
+ /**
+ * @return the entity
+ */
+ public T getEntity() {
+ return entity;
+ }
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author nho
+ *
+ */
+public abstract class AbstractFormComposite extends Composite implements IPropertyChangeEmitter {
+
+ protected FormToolkit toolkit;
+ private Set<IPropertyChangeListener> propertyChangeListeners = new HashSet<IPropertyChangeListener>();
+
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public AbstractFormComposite(Composite parent, int style) {
+ super(parent, style);
+
+ GridLayout layout = new GridLayout();
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ layout.verticalSpacing = 0;
+ layout.horizontalSpacing = 0;
+
+ this.setLayout(layout);
+
+ toolkit = new FormToolkit(parent.getDisplay());
+
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+
+ this.setLayoutData(gridData);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.widgets.Widget#dispose()
+ */
+ @Override
+ public void dispose() {
+ super.dispose();
+ toolkit.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#addPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
+ */
+ public void addPropertyChangeListener(IPropertyChangeListener listener) {
+ propertyChangeListeners.add(listener);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#removePropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
+ */
+ public void removePropertyChangeListener(IPropertyChangeListener listener) {
+ propertyChangeListeners.remove(listener);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#firePropertyChangeEvent()
+ */
+ public void firePropertyChangeEvent(PropertyChangeEvent event) {
+ for(IPropertyChangeListener listener : propertyChangeListeners){
+ listener.propertyChange(event);
+ }
+ }
+}
package eu.etaxonomy.taxeditor.forms;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
* @author nho
*
*/
-public abstract class AbstractSelectionComposite<T extends IdentifiableEntity> extends FormComposite implements SelectionListener{
+public abstract class AbstractSelectionComposite<T extends IdentifiableEntity> extends AbstractFormComposite implements SelectionListener{
protected T selection;
// do nothing
}
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent e) {
+ firePropertyChangeEvent(null);
+ }
+
/**
* Return the selected object
*
if(selection != null)
text.setText(selection.getTitleCache());
}
-
- public void addModifyListener(ModifyListener listener){
- text.addModifyListener(listener);
- }
-
- public void removeModifyListener(ModifyListener listener){
- text.removeModifyListener(listener);
- }
-
}
* @author nho
*
*/
-public abstract class AbstractTermComboComposite<T extends DefinedTermBase> extends FormComposite implements SelectionListener, IPropertyChangeListener{
+public abstract class AbstractTermComboComposite<T extends DefinedTermBase> extends AbstractFormComposite implements SelectionListener, IPropertyChangeListener{
private static final Logger logger = Logger.getLogger(AbstractTermComboComposite.class);
/**
*
*/
-package eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage;
+package eu.etaxonomy.taxeditor.forms;
import java.util.Set;
import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.action.IAction;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.Section;
import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
import eu.etaxonomy.cdm.model.common.Annotation;
import eu.etaxonomy.cdm.model.common.AnnotationType;
-import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
import eu.etaxonomy.cdm.model.common.Language;
import eu.etaxonomy.taxeditor.store.CdmStore;
* @author n.hoffmann
*
*/
-public class AnnotationSection extends AbstractDescriptionDetailSection {
+public class AnnotationSection extends AbstractEntitySetSection<AnnotatableEntity> {
- private Button button_add;
- private Composite container;
-
/**
* @param parent
* @param style
*/
- public AnnotationSection(Composite parent, AbstractDescriptionDetailsPage page, int style) {
- super(parent, page, Section.TWISTIE | Section.COMPACT | style);
+ protected AnnotationSection(Composite parent, AnnotatableEntity annotatableEntity, int style) {
+ super(parent, annotatableEntity, Section.TWISTIE | Section.COMPACT | style);
setText("Annotations");
- setTextClient(createToolbar(this));
- }
-
- /**
- * @return
- */
- private Control createToolbar(final Section section) {
- ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
-// IMenuService menuService = (IMenuService) EditorUtil.getService(IMenuService.class);
-// menuService.populateContributionManager(toolBarManager, "toolbar:de.md.contributions.sectionToolbar");
-
- Action addAnnotation = new Action("add", Action.AS_PUSH_BUTTON){
- /* (non-Javadoc)
- * @see org.eclipse.jface.action.Action#run()
- */
- @Override
- public void run() {
- String text = "";
- AnnotationType type = AnnotationType.EDITORIAL();
- Language language = CdmStore.getDefaultLanguage();
-
- Annotation annotation = Annotation.NewInstance(text, type, language);
- getDescriptionElement().addAnnotation(annotation);
- internalUpdateSection(true);
- if(! section.isExpanded())
- section.setExpanded(true);
- internalUpdateSection(true);
- }
- };
- addAnnotation.setToolTipText("Create a new annotation");
- toolBarManager.add(addAnnotation);
-
- return toolBarManager.createControl(section);
}
+
/*
- *
+ * (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.AbstractEntitySetSection#createDynamicContents()
*/
+ @Override
public void createDynamicContents() {
-
- if(container != null)
- container.dispose();
- container = toolkit.createFormComposite(getClient(), SWT.NULL);
-
- container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- container.setLayout(new GridLayout());
Set<Annotation> annotations = null;
- if(getDescriptionElement() != null){
- annotations = getDescriptionElement().getAnnotations();
+ if(getEntity() != null){
+ annotations = getEntity().getAnnotations();
}
if(annotations == null || annotations.size() == 0){
}
}
}
-
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection#updateSection()
- */
- @Override
- public void updateSection() {
- internalUpdateSection(false);
- }
private class RemoveListener extends SelectionAdapter{
private Annotation annotation;
*/
@Override
public void widgetSelected(SelectionEvent e) {
-
- AnnotatableEntity annotatedObjcet = annotation.getAnnotatedObj();
-
- annotatedObjcet.removeAnnotation(annotation);
+ getEntity().removeAnnotation(annotation);
internalUpdateSection(true);
}
}
+
+
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.AbstractEntitySetSection#getAddAction()
+ */
+ @Override
+ protected IAction getAddAction() {
+ Action addAnnotation = new Action("add", Action.AS_PUSH_BUTTON){
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ String text = "";
+ AnnotationType type = AnnotationType.EDITORIAL();
+ Language language = CdmStore.getDefaultLanguage();
+
+ Annotation annotation = Annotation.NewInstance(text, type, language);
+ getEntity().addAnnotation(annotation);
+ internalUpdateSection(true);
+ if(! getSection().isExpanded())
+ getSection().setExpanded(true);
+ internalUpdateSection(true);
+ }
+ };
+ addAnnotation.setToolTipText("Create a new annotation");
+ return addAnnotation;
+ }
}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author nho
+ *
+ */
+public class Container extends AbstractFormComposite {
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public Container(Composite parent, int style) {
+ super(parent, style);
+ }
+
+}
*/
package eu.etaxonomy.taxeditor.forms;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
/**
* @author nho
*/
-public class DescriptionElementSourceComposite extends FormComposite implements ModifyListener{
+public class DescriptionElementSourceComposite extends AbstractFormComposite implements IPropertyChangeListener{
private DescriptionElementSource source;
this.source = source;
citationSelection = new ReferenceSelectionComposite(this, "Citation", source.getCitation(), SWT.NULL);
- citationSelection.addModifyListener(this);
+ citationSelection.addPropertyChangeListener(this);
microCitation = new TextWithLabelComposite(this, "Citation Detail", source.getCitationMicroReference(), SWT.NULL);
- microCitation.addModifyListener(this);
+ microCitation.addPropertyChangeListener(this);
nameSelection = new NameSelectionComposite(this, "Name in Source", source.getNameUsedInSource(), SWT.NULL);
- nameSelection.addModifyListener(this);
+ nameSelection.addPropertyChangeListener(this);
}
return source;
}
-
/* (non-Javadoc)
- * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
- public void modifyText(ModifyEvent e) {
+ public void propertyChange(PropertyChangeEvent event) {
source.setCitation(citationSelection.getSelection());
source.setCitationMicroReference(microCitation.getText());
source.setNameUsedInSource(nameSelection.getSelection());
+ firePropertyChangeEvent(event);
}
}
\ No newline at end of file
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.internal.forms.widgets.FormFonts;
+import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
import eu.etaxonomy.cdm.model.common.Annotation;
import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-import eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection;
/**
* @author nho
* @param style
* @return
*/
- public FormComposite createFormComposite(Composite parent, int style){
- return new FormComposite(parent, style);
+ public Container createContainer(Composite parent, int style){
+ return new Container(parent, style);
+
}
/**
return new TaxonSelectionComposite(parent, "Taxon", selection, style);
}
+ /**
+ *
+ * @param parent
+ * @param annotatableEntity
+ * @param style
+ * @return
+ */
+ public AnnotationSection createAnnotationSection(Composite parent, AnnotatableEntity annotatableEntity, int style){
+ return new AnnotationSection(parent, annotatableEntity, style);
+ }
+
+ /**
+ *
+ * @param parent
+ * @param entity
+ * @param style
+ * @return
+ */
+ public OriginalSourceSection createOriginalSourceSection(Composite parent, DescriptionElementBase entity, int style){
+ return new OriginalSourceSection(parent, entity, style);
+ }
/**
* the section style
* @return the section widget
*/
- public Section adaptSection(Composite parent, AbstractDescriptionDetailSection section, int sectionStyle) {
-// Section section = new Section(parent, getOrientation(), sectionStyle);
- section.setMenu(parent.getMenu());
+ public Section adapt(AbstractEditorFormSection section) {
+ section.setMenu(section.getParent().getMenu());
adapt(section, true, true);
if (section.getToggle() != null) {
section.getToggle().setHoverDecorationColor(getColors()
section.getToggle().setDecorationColor(getColors()
.getColor(IFormColors.TB_TOGGLE));
}
- section.setFont(boldFontHolder2.getBoldFont(parent.getFont()));
-
- getColors().initializeSectionToolBarColors();
- section.setTitleBarBackground(getColors().getColor(IFormColors.TB_BG));
- section.setTitleBarBorderColor(getColors()
- .getColor(IFormColors.TB_BORDER));
+
+ section.setFont(boldFontHolder2.getBoldFont(section.getParent().getFont()));
+
+// if ((section.getStyle() & Section.TITLE_BAR) != 0
+// || (section.getStyle() & Section.SHORT_TITLE_BAR) != 0) {
+ getColors().initializeSectionToolBarColors();
+ section.setTitleBarBackground(getColors().getColor(IFormColors.TB_BG));
+ section.setTitleBarBorderColor(getColors()
+ .getColor(IFormColors.TB_BORDER));
+// }
// call setTitleBarForeground regardless as it also sets the label color
section.setTitleBarForeground(getColors()
.getColor(IFormColors.TB_TOGGLE));
+++ /dev/null
-/**
- *
- */
-package eu.etaxonomy.taxeditor.forms;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-/**
- * @author nho
- *
- */
-public class FormComposite extends Composite {
-
- protected FormToolkit toolkit;
-
-
- /**
- * @param parent
- * @param style
- */
- public FormComposite(Composite parent, int style) {
- super(parent, style);
-
- GridLayout layout = new GridLayout();
- layout.marginWidth = 0;
- layout.marginHeight = 0;
- layout.verticalSpacing = 0;
- layout.horizontalSpacing = 0;
-
- this.setLayout(layout);
-
- toolkit = new FormToolkit(parent.getDisplay());
-
- GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
-
- this.setLayoutData(gridData);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.widgets.Widget#dispose()
- */
- @Override
- public void dispose() {
- super.dispose();
- toolkit.dispose();
- }
-}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
+/**
+ * @author nho
+ *
+ */
+public interface IPropertyChangeEmitter {
+
+ public void addPropertyChangeListener(IPropertyChangeListener listener);
+
+ public void removePropertyChangeListener(IPropertyChangeListener listener);
+
+ /**
+ * Notify registeres listeners of changed properties
+ */
+ public void firePropertyChangeEvent(PropertyChangeEvent event);
+}
* @author n.hoffmann
*
*/
-public class ImageComposite extends FormComposite implements ControlListener{
+public class ImageComposite extends AbstractFormComposite implements ControlListener{
private Browser browser;
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
+ @Override
public void widgetSelected(SelectionEvent e) {
- selection = FilteredNameSelectionDialog.selectName(getShell(), selection);
- updateText();
+ super.widgetSelected(e);
+ selection = FilteredNameSelectionDialog.selectName(getShell(), selection);
+ updateText();
}
}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import java.util.Set;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.widgets.Section;
+
+import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+
+/**
+ * @author n.hoffmann
+ *
+ */
+public class OriginalSourceSection extends AbstractEntitySetSection<DescriptionElementBase> implements IPropertyChangeListener{
+
+
+ public OriginalSourceSection(Composite parent, DescriptionElementBase entity, int style){
+ super(parent, entity, Section.TWISTIE | Section.COMPACT | style);
+
+ setText("Citations");
+ }
+
+ /*
+ *
+ */
+ public void createDynamicContents() {
+
+ Set<DescriptionElementSource> sources = null;
+ if(getEntity() != null){
+ sources = getEntity().getSources();
+ }
+
+ if(sources == null || sources.size() == 0){
+ toolkit.createLabel(container, "No citations yet.");
+ }else{
+ for(DescriptionElementSource source : sources){
+ DescriptionElementSourceComposite descriptionElementSourceComposite = toolkit.createDescriptionElementSourceComposite(container, source, SWT.NULL);
+ descriptionElementSourceComposite.addPropertyChangeListener(this);
+
+ Button button_remove = toolkit.createButton(container, "Remove", SWT.PUSH);
+ button_remove.addSelectionListener(new RemoveListener(source));
+ }
+ }
+ }
+
+ private class RemoveListener extends SelectionAdapter{
+ private DescriptionElementSource source;
+
+ public RemoveListener(DescriptionElementSource source){
+ this.source = source;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ getEntity().removeSource(source);
+ internalUpdateSection(true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.AbstractEntitySetSection#getAddAction()
+ */
+ @Override
+ protected IAction getAddAction() {
+ Action addCitation = new Action("add", Action.AS_PUSH_BUTTON){
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ getEntity().addSource(DescriptionElementSource.NewInstance());
+ if(! getSection().isExpanded())
+ getSection().setExpanded(true);
+ internalUpdateSection(true);
+ }
+ };
+ addCitation.setToolTipText("Create a new citation");
+ return addCitation;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+ */
+ public void propertyChange(PropertyChangeEvent event) {
+ firePropertyChangeEvent(event);
+ }
+}
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
+ @Override
public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
selection = FilteredReferenceSelectionDialog.selectReference(getShell(), selection);
updateText();
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
+ @Override
public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
selection = FilteredTaxonSelectionDialog.selectTaxon(getShell());
updateText();
}
* @author nho
*
*/
-public class TextActionComposite extends FormComposite {
+public class TextActionComposite extends AbstractFormComposite {
private Label label;
private Text text;
package eu.etaxonomy.taxeditor.forms;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
* @author nho
*
*/
-public class TextWithLabelComposite extends FormComposite {
+public class TextWithLabelComposite extends AbstractFormComposite implements ModifyListener{
protected Text text;
/**
text = toolkit.createText(this, "", SWT.BORDER | SWT.MULTI | SWT.WRAP);
text.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ text.addModifyListener(this);
setText(initialText);
}
- /**
- * Add a ModifyListener to this composites text element
- *
- * @param listener
- */
- public void addModifyListener(ModifyListener listener){
- text.addModifyListener(listener);
- }
-
- /**
- * Remove a ModifyListener from this composites text element
- *
- * @param listener
- */
- public void removeModifyListener(ModifyListener listener){
- text.removeModifyListener(listener);
- }
-
/**
* Get the text of this composites text composite
*
text.addListener(SWT.Modify, listener);
}
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ */
+ public void modifyText(ModifyEvent e) {
+ firePropertyChangeEvent(null);
+ }
}