4 package eu
.etaxonomy
.taxeditor
.ui
.selection
;
6 import org
.eclipse
.core
.runtime
.IStatus
;
7 import org
.eclipse
.jface
.wizard
.WizardDialog
;
8 import org
.eclipse
.swt
.SWT
;
9 import org
.eclipse
.swt
.events
.SelectionAdapter
;
10 import org
.eclipse
.swt
.events
.SelectionEvent
;
11 import org
.eclipse
.swt
.events
.SelectionListener
;
12 import org
.eclipse
.swt
.graphics
.Color
;
13 import org
.eclipse
.swt
.widgets
.Button
;
14 import org
.eclipse
.swt
.widgets
.Composite
;
15 import org
.eclipse
.swt
.widgets
.Label
;
16 import org
.eclipse
.swt
.widgets
.Shell
;
18 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
19 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
20 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
21 import eu
.etaxonomy
.cdm
.model
.common
.IIdentifiableEntity
;
22 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
23 import eu
.etaxonomy
.taxeditor
.model
.ImageResources
;
24 import eu
.etaxonomy
.taxeditor
.preference
.Resources
;
25 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
26 import eu
.etaxonomy
.taxeditor
.ui
.forms
.AbstractCdmFormElement
;
27 import eu
.etaxonomy
.taxeditor
.ui
.forms
.CdmFormFactory
;
28 import eu
.etaxonomy
.taxeditor
.ui
.forms
.CdmPropertyChangeEvent
;
29 import eu
.etaxonomy
.taxeditor
.ui
.forms
.ICdmFormElement
;
30 import eu
.etaxonomy
.taxeditor
.ui
.forms
.IEnableableFormElement
;
31 import eu
.etaxonomy
.taxeditor
.ui
.forms
.IEntityElement
;
32 import eu
.etaxonomy
.taxeditor
.ui
.forms
.ILabeledElement
;
33 import eu
.etaxonomy
.taxeditor
.ui
.forms
.ISelectableElement
;
34 import eu
.etaxonomy
.taxeditor
.ui
.forms
.SelectionArbitrator
;
38 * Abstract AbstractSelectionElement class.
42 * @created Nov 17, 2009
46 public abstract class AbstractSelectionElement
<T
> extends
47 AbstractCdmFormElement
implements SelectionListener
,
48 IEnableableFormElement
, ISelectableElement
, IEntityElement
<T
>,
49 ILabeledElement
, IConversationEnabled
{
53 protected Label label
;
55 protected Button button_selection
;
57 private SelectionArbitrator selectionArbitrator
;
59 protected Button button_edit
;
61 private final String labelString
;
63 private Composite selectableComposite
;
65 private Button button_remove
;
67 private final boolean isEditable
;
69 private final boolean isDeletable
;
71 private final ConversationHolder conversation
;
75 * Constructor for AbstractSelectionElement.
79 * a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory}
83 * @param parentElement
84 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
87 * a {@link java.lang.String} object.
101 public AbstractSelectionElement(CdmFormFactory formFactory
,
102 ConversationHolder conversation
, ICdmFormElement parentElement
,
103 String labelString
, T entity
, boolean isEditable
,
104 boolean isSelectable
, boolean isDeletable
, int style
) {
105 super(formFactory
, parentElement
);
107 this.isEditable
= isEditable
;
108 this.isDeletable
= isDeletable
;
110 this.labelString
= labelString
;
112 this.conversation
= conversation
;
114 if (isSelectable
&& formFactory
.getSelectionProvider() != null) {
115 selectionArbitrator
= formFactory
.createSelectionArbitrator(this);
118 createControls(getLayoutComposite(), SWT
.NULL
);
123 private void createControls(Composite parent
, int style
) {
125 label
= formFactory
.createLabel(getLayoutComposite(), labelString
,
130 selectableComposite
= formFactory
.createComposite(getLayoutComposite());
140 selectableComposite
.setLayout(CdmFormFactory
.LAYOUT(columns
, false));
141 selectableComposite
.setLayoutData(CdmFormFactory
.FILL_HORIZONTALLY());
143 addControl(selectableComposite
);
145 text
= formFactory
.createLabel(selectableComposite
, null, SWT
.WRAP
);
148 text
.setLayoutData(CdmFormFactory
.FILL_HORIZONTALLY());
149 text
.setBackground(StoreUtil
150 .getColor(Resources
.COLOR_TEXT_DISABLED_BACKGROUND
));
152 button_selection
= formFactory
.createButton(selectableComposite
, null,
154 button_selection
.setImage(ImageResources
155 .getImage(ImageResources
.BROWSE_ICON
));
156 button_selection
.setToolTipText("Browse existing");
157 addControl(button_selection
);
158 button_selection
.addSelectionListener(this);
161 button_edit
= formFactory
.createButton(selectableComposite
, null,
163 button_edit
.setImage(ImageResources
164 .getImage(ImageResources
.EDIT_ICON
));
165 button_edit
.setToolTipText("Edit");
166 addControl(button_edit
);
167 button_edit
.addSelectionListener(new EditListener(this));
171 button_remove
= formFactory
.createButton(selectableComposite
, null,
173 button_remove
.setImage(ImageResources
174 .getImage(ImageResources
.TRASH_ICON
));
175 button_remove
.setToolTipText("Remove");
176 addControl(button_remove
);
177 button_remove
.addSelectionListener(new DeleteListener(this));
182 * Return the selected object
184 * @return a T object.
186 public T
getSelection() {
194 * eu.etaxonomy.taxeditor.forms.IEnableableFormElement#setEnabled(boolean)
198 public void setEnabled(boolean enabled
) {
199 button_selection
.setEnabled(enabled
);
201 button_edit
.setEnabled(enabled
&& entity
!= null);
207 * setSelectionInternal
213 protected void setSelectionInternal(T selection
) {
214 if (selection
!= null && !selection
.equals(this.entity
)) {
215 setEntity(selection
);
216 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
222 * Setter for the field <code>entity</code>.
228 public void setEntity(T selection
) {
229 this.entity
= selection
;
234 * Updates this elements view
236 protected void updateElement() {
237 String title
= CdmUtils
.Nz(getTitle());
238 // we have to duplicate ampersands otherwise they are treated as
239 // mnenomic (see Label.setText() documentation)
240 title
= title
.replace("&", "&&");
241 text
.setText(title
); // title can be null
243 button_edit
.setEnabled(entity
!= null);
252 protected void updateFromWizard() {
254 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
262 * @return a {@link java.lang.String} object.
264 protected String
getTitle() {
265 if (entity
!= null && entity
instanceof IIdentifiableEntity
) {
266 return ((IIdentifiableEntity
) entity
).getTitleCache();
273 public void setSelected(boolean selected
) {
274 Color color
= getColor(selected
);
275 getLayoutComposite().setBackground(color
);
276 selectableComposite
.setBackground(color
);
277 label
.setBackground(color
);
283 * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
287 * Getter for the field <code>entity</code>.
290 * @return a T object.
293 public T
getEntity() {
300 * @see eu.etaxonomy.taxeditor.forms.section.cdmdetail.ISelectableElement#
301 * getSelectionArbitrator()
305 * Getter for the field <code>selectionArbitrator</code>.
308 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.SelectionArbitrator}
312 public SelectionArbitrator
getSelectionArbitrator() {
313 return selectionArbitrator
;
317 * Convenient access to current shell
319 * @return a {@link org.eclipse.swt.widgets.Shell} object.
321 protected Shell
getShell() {
322 return getLayoutComposite().getShell();
327 public void setIrrelevant(boolean irrelevant
) {
328 String colorId
= irrelevant ? Resources
.COLOR_COMPOSITE_IRRELEVANT
329 : Resources
.COLOR_TEXT_DISABLED_BACKGROUND
;
331 Color color
= StoreUtil
.getColor(colorId
);
332 text
.setBackground(color
);
335 private class DeleteListener
extends SelectionAdapter
{
337 private final AbstractSelectionElement
<T
> selectionElement
;
339 public DeleteListener(AbstractSelectionElement
<T
> selectionElement
) {
340 this.selectionElement
= selectionElement
;
344 public void widgetSelected(SelectionEvent e
) {
346 firePropertyChangeEvent(new CdmPropertyChangeEvent(
347 selectionElement
, null));
351 private class EditListener
extends SelectionAdapter
{
353 private final AbstractSelectionElement
<T
> selectionElement
;
355 public EditListener(AbstractSelectionElement
<T
> selectionElement
) {
356 this.selectionElement
= selectionElement
;
361 public void widgetSelected(SelectionEvent e
) {
362 WizardDialog dialog
= new WizardDialog(selectionElement
.getShell(),
363 new EditFromSelectionWizard(selectionElement
));
364 if (dialog
.open() == IStatus
.OK
) {
365 selectionElement
.updateFromWizard();
373 public void widgetDefaultSelected(SelectionEvent e
) {
378 * getConversationHolder
381 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
385 public ConversationHolder
getConversationHolder() {
391 public void setBackground(Color color
) {
392 label
.setBackground(color
);
397 public void setLabel(String labelString
) {
399 label
.setText(labelString
);
405 * Getter for the field <code>label</code>.
408 * @return a {@link java.lang.String} object.
411 public String
getLabel() {
413 return label
.getText();
420 public void update(CdmDataChangeMap changeEvents
) {