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/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/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/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/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
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/TextWithLabelComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AbstractEditorPropertySheet.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AgentBasePropertySource.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AnnotationPropertySource.java -text
--- /dev/null
+/**
+ *
+ */
+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;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
+
+/**
+ * @author nho
+ *
+ */
+public abstract class AbstractSelectionComposite<T extends IdentifiableEntity> extends FormComposite implements SelectionListener{
+
+ protected T selection;
+
+ protected Label label;
+ protected Text text;
+ protected Button button;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public AbstractSelectionComposite(Composite parent, String labelString, T selection, int style) {
+ super(parent, style);
+
+ this.selection = selection;
+
+ this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ GridLayout layout = (GridLayout) this.getLayout();
+ layout.numColumns = 2;
+
+ label = toolkit.createLabel(this, labelString, SWT.WRAP);
+ GridData labelData = new GridData();
+ labelData.horizontalSpan = 2;
+ label.setLayoutData(labelData);
+
+ text = toolkit.createText(this, "", SWT.BORDER | SWT.WRAP);
+ text.setEditable(false);
+ text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+ button = toolkit.createButton(this, "Browse", SWT.PUSH);
+ button.addSelectionListener(this);
+
+ updateText();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // do nothing
+ }
+
+ /**
+ * Return the selected object
+ *
+ * @return
+ */
+ public T getSelection(){
+ return selection;
+ }
+
+ /**
+ *
+ * @param selection
+ */
+ public void setSelection(T selection){
+ this.selection = selection;
+ updateText();
+ }
+
+ protected void updateText(){
+ if(selection != null)
+ text.setText(selection.getTitleCache());
+ }
+
+ public void addModifyListener(ModifyListener listener){
+ text.addModifyListener(listener);
+ }
+
+ public void removeModifyListener(ModifyListener listener){
+ text.removeModifyListener(listener);
+ }
+
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.Hyperlink;
+
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.preference.LanguageMenuPreferences;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+
+/**
+ * @author nho
+ *
+ */
+public abstract class AbstractTermComboComposite<T extends DefinedTermBase> extends FormComposite implements SelectionListener, IPropertyChangeListener{
+
+ private static final Logger logger = Logger.getLogger(AbstractTermComboComposite.class);
+
+ T selection;
+
+ private Label label;
+ private Combo combo;
+
+ private ArrayList<T> terms;
+
+ private Comparator<T> termComparator;
+
+ private Composite msgComposite;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public AbstractTermComboComposite(Composite parent, String labelString, T selection, int visibleItems, int style) {
+ super(parent, style);
+
+ label = toolkit.createLabel(this, labelString);
+ label.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ // create combo
+ combo = new Combo(this, SWT.BORDER | SWT.READ_ONLY);
+ combo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ combo.setVisibleItemCount(visibleItems);
+
+ populateTerms();
+
+ combo.addSelectionListener(this);
+ PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
+ }
+
+ public T getSelection(){
+ return selection;
+ }
+
+ public void setSelection(T selection){
+ Listener[] listeners = combo.getListeners(SWT.Selection);
+
+ for (Listener listener : listeners){
+ combo.removeListener(SWT.Selection, listener);
+ }
+
+ combo.select(terms.indexOf(selection));
+
+ for (Listener listener : listeners){
+ combo.addListener(SWT.Selection, listener);
+ }
+ }
+
+ private void populateTerms(){
+ List<T> preferredTerms = preferredTerms();
+
+ combo.removeAll();
+
+ terms = new ArrayList<T>();
+
+ int i = 0;
+ int index = 0;
+ if(termComparator != null)
+ Collections.sort(preferredTerms, termComparator);
+ for (T term : preferredTerms) {
+ String description = term.getDescription();
+ if (description == null) {
+ logger.warn("No description for " + term + " - not added to combo");
+ continue;
+ }
+ combo.add(description);
+ terms.add(term);
+
+ i++;
+ if (selection != null) {
+ if (selection.equals(term)) {
+ index = i;
+ }
+ } else {
+ // TODO isn't it better to put the last language at the top of the menu, not automatically select?
+// if (lastLanguage != null && lastLanguage.equals(language)) {
+// index = i;
+// }
+ }
+ }
+
+ // Check whether language is in menu
+ if (msgComposite != null) {
+ msgComposite.dispose();
+ msgComposite = null;
+ }
+ if (selection != null && index == 0) {
+ createTermNotInPreferredTerms(selection);
+ }
+
+ combo.select(index);
+ }
+
+ /**
+ * @return
+ */
+ protected abstract List<T> preferredTerms();
+
+ private void createTermNotInPreferredTerms(T term) {
+
+ msgComposite = toolkit.createComposite(this);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ msgComposite.setLayout(layout);
+ msgComposite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL
+ | GridData.VERTICAL_ALIGN_CENTER));
+
+ String langText = term.getDescription() == null ? term.getLabel() : term.getDescription();
+ langText += " is not one of your preferred " + term.getClass().getSimpleName().toLowerCase() + "s. ";
+ Label label = toolkit.createLabel(msgComposite, langText, SWT.WRAP);
+ label.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL
+ | GridData.VERTICAL_ALIGN_CENTER));
+
+ Hyperlink linkEdit = toolkit.createHyperlink(msgComposite, "Edit preferences", SWT.WRAP);
+ linkEdit.addHyperlinkListener(new HyperlinkAdapter() {
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.forms.events.HyperlinkAdapter#linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent)
+ */
+ @Override
+ public void linkActivated(HyperlinkEvent e) {
+ org.eclipse.ui.dialogs.PreferencesUtil.createPreferenceDialogOn(EditorUtil.getShell(),
+ LanguageMenuPreferences.ID, null, null).open();
+ }
+ });
+
+ msgComposite.moveBelow(combo);
+
+ pack(true);
+ layout();
+ }
+
+ public void addSelectionListener(SelectionListener listener){
+ combo.addSelectionListener(listener);
+ }
+
+ public void removeSelectionListener(SelectionListener listener){
+ combo.removeSelectionListener(listener);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent e) {
+ selection = terms.get(combo.getSelectionIndex());
+ }
+
+ /* (non-Javadoc)
+ * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+ */
+ public void propertyChange(PropertyChangeEvent event) {
+ if (PreferencesUtil.PREFERRED_TERMS_CHANGE.equals(event.getProperty())) {
+ populateTerms();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.AbstractFormComposite#dispose()
+ */
+ @Override
+ public void dispose() {
+ super.dispose();
+ PreferencesUtil.getPreferenceStore().removePropertyChangeListener(this);
+ }
+
+ // not used
+ public void widgetDefaultSelected(SelectionEvent e) {}
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Composite;
+
+import eu.etaxonomy.cdm.model.common.Annotation;
+
+/**
+ * @author nho
+ *
+ */
+public class AnnotationComposite extends MultilineTextWithLabel implements ModifyListener{
+
+ private Annotation annotation;
+
+ /**
+ *
+ * @param parent
+ * @param annotation
+ * @param style
+ */
+ protected AnnotationComposite(Composite parent, Annotation annotation, int style) {
+ super(parent, "Annotation", null, 100, style);
+
+ this.setAnnotation(annotation);
+
+ text.addModifyListener(this);
+ }
+
+ /**
+ * @param annotation the annotation to set
+ */
+ public void setAnnotation(Annotation annotation) {
+ this.annotation = annotation;
+ setText(annotation.getText());
+ }
+
+ /**
+ * @return the annotation
+ */
+ public Annotation getAnnotation() {
+ return annotation;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ */
+ public void modifyText(ModifyEvent e) {
+ annotation.setText(getText());
+ }
+}
--- /dev/null
+/**
+ *
+ */
+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.widgets.Composite;
+
+import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
+
+/**
+ * @author nho
+ */
+public class DescriptionElementSourceComposite extends FormComposite implements ModifyListener{
+
+ private DescriptionElementSource source;
+
+ private ReferenceSelectionComposite citationSelection;
+ private TextWithLabelComposite microCitation;
+ private NameSelectionComposite nameSelection;
+
+ protected DescriptionElementSourceComposite(Composite parent, DescriptionElementSource source, int style){
+ super(parent, style);
+ this.source = source;
+
+ citationSelection = new ReferenceSelectionComposite(this, "Citation", source.getCitation(), SWT.NULL);
+ citationSelection.addModifyListener(this);
+
+ microCitation = new TextWithLabelComposite(this, "Citation Detail", source.getCitationMicroReference(), SWT.NULL);
+ microCitation.addModifyListener(this);
+
+ nameSelection = new NameSelectionComposite(this, "Name in Source", source.getNameUsedInSource(), SWT.NULL);
+ nameSelection.addModifyListener(this);
+ }
+
+
+ /**
+ * @return the source
+ */
+ public DescriptionElementSource getSource() {
+ return source;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ */
+ public void modifyText(ModifyEvent e) {
+ source.setCitation(citationSelection.getSelection());
+ source.setCitationMicroReference(microCitation.getText());
+ source.setNameUsedInSource(nameSelection.getSelection());
+ }
+}
\ No newline at end of file
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import java.net.URI;
+
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.forms.FormColors;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.internal.forms.widgets.FormFonts;
+
+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.taxon.TaxonBase;
+import eu.etaxonomy.taxeditor.editor.descriptiontree.detailpage.AbstractDescriptionDetailSection;
+
+/**
+ * @author nho
+ *
+ */
+public class EditorFormToolkit extends FormToolkit{
+
+ private BoldFontHolder2 boldFontHolder2;
+
+ /**
+ * @param display
+ */
+ public EditorFormToolkit(Display display) {
+ super(display);
+ init();
+ }
+
+ /**
+ *
+ */
+ private void init() {
+ boldFontHolder2 = new BoldFontHolder2();
+ }
+
+ /**
+ * @param display
+ */
+ public EditorFormToolkit(FormColors colors) {
+ super(colors);
+ init();
+ }
+
+ /**
+ *
+ * @param parent
+ * @param style
+ * @return
+ */
+ public FormComposite createFormComposite(Composite parent, int style){
+ return new FormComposite(parent, style);
+ }
+
+ /**
+ *
+ * @param parent
+ * @param labelString
+ * @param textHeight
+ * @param style
+ * @return
+ */
+ public MultilineTextWithLabel createMultilineTextWithLabel(Composite parent, String labelString, int textHeight, int style){
+ return new MultilineTextWithLabel(parent, labelString, "", textHeight, style);
+ }
+
+ /**
+ *
+ * @param parent
+ * @param source
+ * @param style
+ * @return
+ */
+ public DescriptionElementSourceComposite createDescriptionElementSourceComposite(Composite parent, DescriptionElementSource source, int style){
+ return new DescriptionElementSourceComposite(parent, source, style);
+ }
+
+ /**
+ *
+ * @param parent
+ * @param labelString
+ * @param initialText
+ * @param style
+ * @return
+ */
+ public TextWithLabelComposite createTextWithLabelComposite(Composite parent, String labelString, String initialText, int style){
+ return new TextWithLabelComposite(parent, labelString, initialText, style);
+ }
+
+ /**
+ *
+ * @param parent
+ * @param labelString
+ * @param selection
+ * @param style
+ * @return
+ */
+ public LanguageComboComposite createLanguageComboComposite(Composite parent, String labelString, Language selection, int style){
+ return new LanguageComboComposite(parent, labelString, selection, style);
+ }
+
+ /**
+ *
+ * @param parent
+ * @param imageUri
+ * @param style
+ * @return
+ */
+ public ImageComposite createImageComposite(Composite parent, URI imageUri, int style){
+ return new ImageComposite(parent, imageUri, style);
+ }
+
+ /**
+ *
+ * @param parent
+ * @param labelString
+ * @param initialText
+ * @param style
+ * @return
+ */
+ public TextActionComposite createTextActionComposite(Composite parent, String labelString, String initialText, int style){
+ return new TextActionComposite(parent, labelString, initialText, style);
+ }
+
+ /**
+ *
+ * @param parent
+ * @param annotation
+ * @param style
+ * @return
+ */
+ public AnnotationComposite createAnnotationComposite(Composite parent, Annotation annotation, int style) {
+ return new AnnotationComposite(parent, annotation, style);
+ }
+
+ /**
+ *
+ * @param parent
+ * @param selection
+ * @param style
+ * @return
+ */
+ public TaxonSelectionComposite createTaxonSelectionComposite(Composite parent, TaxonBase selection, int style) {
+ return new TaxonSelectionComposite(parent, "Taxon", selection, style);
+ }
+
+
+
+ /**
+ * Creates a section as a part of the form.
+ *
+ * @param parent
+ * the section parent
+ * @param sectionStyle
+ * 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());
+ adapt(section, true, true);
+ if (section.getToggle() != null) {
+ section.getToggle().setHoverDecorationColor(getColors()
+ .getColor(IFormColors.TB_TOGGLE_HOVER));
+ 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));
+ // call setTitleBarForeground regardless as it also sets the label color
+ section.setTitleBarForeground(getColors()
+ .getColor(IFormColors.TB_TOGGLE));
+ return section;
+ }
+
+ private class BoldFontHolder2 {
+ private Font normalFont;
+
+ private Font boldFont;
+
+ public BoldFontHolder2() {
+ }
+
+ public Font getBoldFont(Font font) {
+ createBoldFont(font);
+ return boldFont;
+ }
+
+ private void createBoldFont(Font font) {
+ if (normalFont == null || !normalFont.equals(font)) {
+ normalFont = font;
+ dispose();
+ }
+ if (boldFont == null) {
+ boldFont = FormFonts.getInstance().getBoldFont(getColors().getDisplay(),
+ normalFont);
+ }
+ }
+
+ public void dispose() {
+ if (boldFont != null) {
+ FormFonts.getInstance().markFinished(boldFont);
+ boldFont = null;
+ }
+ }
+ }
+
+
+}
--- /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 java.net.URI;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author n.hoffmann
+ *
+ */
+public class ImageComposite extends FormComposite implements ControlListener{
+
+ private Browser browser;
+
+ private URI imageUri;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ protected ImageComposite(Composite parent, URI imageUri, int style) {
+ super(parent, style);
+
+ this.setLayout(new GridLayout());
+
+ this.setImageUri(imageUri);
+
+ browser = new Browser(this, SWT.NONE);
+ browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ showImage();
+ browser.addControlListener(this);
+ }
+
+ /**
+ *
+ */
+ private void showImage() {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ String html = "";
+ html = "<HTML><HEAD><TITLE></TITLE></HEAD><BODY marginwidth=0 marginheight=0 leftmargin=0 topmargin=0>";
+ html += "<img width=\"" + calculateWidth() + "\" src=\"" + getImageUri() + "\" />";
+ html += "</BODY></HTML>";
+
+ browser.setText(html);
+ }
+ });
+ }
+
+ /**
+ * @return
+ */
+ public int calculateWidth() {
+ return browser.getBounds().width;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ControlListener#controlMoved(org.eclipse.swt.events.ControlEvent)
+ */
+ public void controlMoved(ControlEvent e) {
+ showImage();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.ControlListener#controlResized(org.eclipse.swt.events.ControlEvent)
+ */
+ public void controlResized(ControlEvent e) {
+ showImage();
+ }
+
+ /**
+ * @param imageUri the imageUri to set
+ */
+ public void setImageUri(URI imageUri) {
+ this.imageUri = imageUri;
+ showImage();
+ }
+
+ /**
+ * @return the imageUri
+ */
+ public URI getImageUri() {
+ return imageUri;
+ }
+
+ public void addControlListener(ControlListener listener){
+ browser.addControlListener(listener);
+ }
+
+ public void removeControlListener(ControlListener listener){
+ browser.removeControlListener(listener);
+ }
+
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import java.util.List;
+
+import org.eclipse.swt.widgets.Composite;
+
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+
+/**
+ * @author nho
+ *
+ */
+public class LanguageComboComposite extends AbstractTermComboComposite<Language> {
+
+ private static final int VISIBLE_ITEMS = 20;
+
+ /**
+ *
+ * @param parent
+ * @param labelString
+ * @param selection
+ * @param style
+ */
+ protected LanguageComboComposite(Composite parent, String labelString, Language selection, int style) {
+ super(parent, labelString, selection, VISIBLE_ITEMS, style);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.forms.AbstractTermComboComposite#preferredTerms()
+ */
+ @Override
+ protected List<Language> preferredTerms() {
+ return PreferencesUtil.getPreferredLanguages();
+ }
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+import eu.etaxonomy.taxeditor.model.Resources;
+
+/**
+ * @author nho
+ *
+ */
+public class MultilineTextWithLabel extends TextWithLabelComposite {
+
+ /**
+ * @param parent
+ * @param labelString
+ * @param initialText
+ * @param style
+ */
+ protected MultilineTextWithLabel(Composite parent, String labelString,
+ String initialText, int textHeight, int style) {
+ super(parent, labelString, initialText, style);
+ GridData gd = new GridData(SWT.FILL, SWT.TOP, true, true);
+ gd.heightHint = textHeight;
+ text.setLayoutData(gd);
+ }
+
+
+
+
+
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredNameSelectionDialog;
+
+/**
+ * @author nho
+ *
+ */
+public class NameSelectionComposite extends AbstractSelectionComposite<TaxonNameBase> {
+
+ /**
+ * @param parent
+ * @param labelString
+ * @param selection
+ * @param style
+ */
+ public NameSelectionComposite(Composite parent, String labelString,
+ TaxonNameBase selection, int style) {
+ super(parent, labelString, selection, style);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent e) {
+ selection = FilteredNameSelectionDialog.selectName(getShell(), selection);
+ updateText();
+ }
+
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;
+import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredReferenceSelectionDialog;
+
+/**
+ * @author nho
+ *
+ */
+public class ReferenceSelectionComposite extends AbstractSelectionComposite<ReferenceBase>{
+
+ /**
+ * @param parent
+ * @param labelString
+ * @param selection
+ * @param style
+ */
+ public ReferenceSelectionComposite(Composite parent, String labelString,
+ ReferenceBase selection, int style) {
+ super(parent, labelString, selection, style);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent e) {
+ selection = FilteredReferenceSelectionDialog.selectReference(getShell(), selection);
+
+ updateText();
+ }
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonSelectionDialog;
+
+/**
+ * @author nho
+ *
+ */
+public class TaxonSelectionComposite extends AbstractSelectionComposite<TaxonBase> {
+
+ /**
+ * @param parent
+ * @param labelString
+ * @param selection
+ * @param style
+ */
+ public TaxonSelectionComposite(Composite parent, String labelString,
+ TaxonBase selection, int style) {
+ super(parent, labelString, selection, style); }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent e) {
+ selection = FilteredTaxonSelectionDialog.selectTaxon(getShell());
+ updateText();
+ }
+
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionListener;
+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.Label;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+
+/**
+ * @author nho
+ *
+ */
+public class TextActionComposite extends FormComposite {
+
+ private Label label;
+ private Text text;
+ private Button button;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ protected TextActionComposite(Composite parent, String labelString, String initialText, int style) {
+ super(parent, style);
+
+ this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ GridLayout layout = (GridLayout) this.getLayout();
+ layout.numColumns = 2;
+
+ label = toolkit.createLabel(this, labelString, SWT.WRAP);
+ GridData labelData = new GridData(SWT.FILL, SWT.TOP, true, false);
+ labelData.horizontalSpan = 2;
+ label.setLayoutData(labelData);
+
+ text = toolkit.createText(this, "", SWT.BORDER | SWT.MULTI | SWT.WRAP);
+ text.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ setText(CdmUtils.Nz(initialText));
+
+ button = toolkit.createButton(this, "Show", SWT.PUSH);
+ }
+
+ /**
+ * @param text the text to set
+ */
+ public void setText(String string) {
+ text.setText(CdmUtils.Nz(string));
+ }
+
+ /**
+ * @return the text
+ */
+ public String getText() {
+ return text.getText();
+ }
+
+ public void addSelectionListener(SelectionListener listener){
+ button.addSelectionListener(listener);
+ }
+
+ public void removeSelectionListener(SelectionListener listener){
+ button.removeSelectionListener(listener);
+ }
+}
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.forms;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+
+/**
+ * @author nho
+ *
+ */
+public class TextWithLabelComposite extends FormComposite {
+ protected Text text;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ protected TextWithLabelComposite(Composite parent, String labelString, String initialText, int style) {
+ super(parent, style);
+
+ this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ toolkit.createLabel(this, labelString, SWT.WRAP);
+
+ text = toolkit.createText(this, "", SWT.BORDER | SWT.MULTI | SWT.WRAP);
+ text.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ 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
+ *
+ * @return
+ */
+ public String getText() {
+ return text.getText();
+ }
+
+ /**
+ * Set the text of this composites text composite
+ *
+ * @param string
+ */
+ public void setText(String string) {
+ Listener[] listeners = text.getListeners(SWT.Modify);
+
+ for(Listener listener : listeners){
+ text.removeListener(SWT.Modify, listener);
+ }
+
+ text.setText(CdmUtils.Nz(string));
+
+ for(Listener listener : listeners){
+ text.addListener(SWT.Modify, listener);
+ }
+ }
+}