4 package eu
.etaxonomy
.taxeditor
.ui
.selection
;
6 import org
.eclipse
.swt
.SWT
;
7 import org
.eclipse
.swt
.events
.SelectionAdapter
;
8 import org
.eclipse
.swt
.events
.SelectionEvent
;
9 import org
.eclipse
.swt
.events
.SelectionListener
;
10 import org
.eclipse
.swt
.graphics
.Color
;
11 import org
.eclipse
.swt
.widgets
.Button
;
12 import org
.eclipse
.swt
.widgets
.Composite
;
13 import org
.eclipse
.swt
.widgets
.Label
;
14 import org
.eclipse
.swt
.widgets
.Shell
;
16 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
17 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
18 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
19 import eu
.etaxonomy
.cdm
.model
.common
.IIdentifiableEntity
;
20 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
21 import eu
.etaxonomy
.taxeditor
.model
.ImageResources
;
22 import eu
.etaxonomy
.taxeditor
.preference
.Resources
;
23 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
24 import eu
.etaxonomy
.taxeditor
.ui
.forms
.AbstractCdmFormElement
;
25 import eu
.etaxonomy
.taxeditor
.ui
.forms
.CdmFormFactory
;
26 import eu
.etaxonomy
.taxeditor
.ui
.forms
.CdmPropertyChangeEvent
;
27 import eu
.etaxonomy
.taxeditor
.ui
.forms
.ICdmFormElement
;
28 import eu
.etaxonomy
.taxeditor
.ui
.forms
.IEnableableFormElement
;
29 import eu
.etaxonomy
.taxeditor
.ui
.forms
.IEntityElement
;
30 import eu
.etaxonomy
.taxeditor
.ui
.forms
.ILabeledElement
;
31 import eu
.etaxonomy
.taxeditor
.ui
.forms
.ISelectableElement
;
32 import eu
.etaxonomy
.taxeditor
.ui
.forms
.SelectionArbitrator
;
35 * <p>Abstract AbstractSelectionElement class.</p>
38 * @created Nov 17, 2009
42 public abstract class AbstractSelectionElement
<T
> extends AbstractCdmFormElement
implements SelectionListener
, IEnableableFormElement
, ISelectableElement
, IEntityElement
<T
>, ILabeledElement
, IConversationEnabled
{
46 protected Label label
;
48 protected Button button_selection
;
50 private SelectionArbitrator selectionArbitrator
;
52 protected Button button_edit
;
54 private String labelString
;
56 private Composite selectableComposite
;
58 private Button button_remove
;
60 private boolean isEditable
;
62 private boolean isDeletable
;
64 private EditFromSelectionWizard wizard
;
66 private ConversationHolder conversation
;
69 * <p>Constructor for AbstractSelectionElement.</p>
71 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} object.
72 * @param conversation TODO
73 * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
74 * @param labelString a {@link java.lang.String} object.
75 * @param entity a T object.
76 * @param isEditable a boolean.
77 * @param isSelectable a boolean.
78 * @param isDeletable a boolean.
80 * @param <T> a T object.
82 public AbstractSelectionElement(
83 CdmFormFactory formFactory
,
84 ConversationHolder conversation
,
85 ICdmFormElement parentElement
,
90 boolean isDeletable
, int style
) {
91 super(formFactory
, parentElement
);
93 this.isEditable
= isEditable
;
94 this.isDeletable
= isDeletable
;
96 this.labelString
= labelString
;
98 this.conversation
= conversation
;
100 if(isSelectable
&& formFactory
.getSelectionProvider() != null){
101 selectionArbitrator
= formFactory
.createSelectionArbitrator(this);
104 createControls(getLayoutComposite(), SWT
.NULL
);
109 private void createControls(Composite parent
, int style
){
111 label
= formFactory
.createLabel(getLayoutComposite(), labelString
, SWT
.NULL
);
115 selectableComposite
= formFactory
.createComposite(getLayoutComposite());
118 if(isEditable
) columns
+= 1;
119 if(isDeletable
) columns
+= 1;
121 selectableComposite
.setLayout(CdmFormFactory
.LAYOUT(columns
, false));
122 selectableComposite
.setLayoutData(CdmFormFactory
.FILL_HORIZONTALLY());
124 addControl(selectableComposite
);
126 text
= formFactory
.createLabel(selectableComposite
, null, SWT
.WRAP
);
129 text
.setLayoutData(CdmFormFactory
.FILL_HORIZONTALLY());
130 text
.setBackground(StoreUtil
.getColor(Resources
.COLOR_TEXT_DISABLED_BACKGROUND
));
132 button_selection
= formFactory
.createButton(selectableComposite
, null, SWT
.PUSH
);
133 button_selection
.setImage(ImageResources
.getImage(ImageResources
.BROWSE_ICON
));
134 button_selection
.setToolTipText("Browse existing");
135 addControl(button_selection
);
136 button_selection
.addSelectionListener(this);
139 button_edit
= formFactory
.createButton(selectableComposite
, null, SWT
.PUSH
);
140 button_edit
.setImage(ImageResources
.getImage(ImageResources
.EDIT_ICON
));
141 button_edit
.setToolTipText("Edit");
142 addControl(button_edit
);
146 button_remove
= formFactory
.createButton(selectableComposite
, null, SWT
.PUSH
);
147 button_remove
.setImage(ImageResources
.getImage(ImageResources
.TRASH_ICON
));
148 button_remove
.setToolTipText("Remove");
149 addControl(button_remove
);
150 button_remove
.addSelectionListener(new DeleteListener(this));
155 * Return the selected object
157 * @return a T object.
159 public T
getSelection(){
165 * @see eu.etaxonomy.taxeditor.forms.IEnableableFormElement#setEnabled(boolean)
168 public void setEnabled(boolean enabled
) {
169 button_selection
.setEnabled(enabled
);
171 button_edit
.setEnabled(enabled
&& entity
!= null);
176 * <p>setSelectionInternal</p>
178 * @param selection a T object.
180 protected void setSelectionInternal(T selection
){
181 if(selection
!= null && !selection
.equals(this.entity
)){
182 setEntity(selection
);
183 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
188 * <p>Setter for the field <code>entity</code>.</p>
190 * @param selection a T object.
192 public void setEntity(T selection
){
193 this.entity
= selection
;
200 private void createEditWizard(){
202 wizard
= new EditFromSelectionWizard(this);
203 button_edit
.addSelectionListener(wizard
);
208 * Updates this elements view
210 protected void updateElement(){
211 String title
= CdmUtils
.Nz(getTitle());
212 // we have to duplicate ampersands otherwise they are treated as mnenomic (see Label.setText() documentation)
213 title
= title
.replace("&", "&&");
214 text
.setText(title
); // title can be null
216 button_edit
.setEnabled(entity
!= null);
221 * <p>updateFromWizard</p>
223 protected void updateFromWizard(){
225 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
231 * @return a {@link java.lang.String} object.
233 protected String
getTitle(){
234 if (entity
!= null && entity
instanceof IIdentifiableEntity
) {
235 return ((IIdentifiableEntity
) entity
).getTitleCache();
241 public void setSelected(boolean selected
) {
242 Color color
= getColor(selected
);
243 getLayoutComposite().setBackground(color
);
244 selectableComposite
.setBackground(color
);
245 label
.setBackground(color
);
249 * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
252 * <p>Getter for the field <code>entity</code>.</p>
254 * @return a T object.
256 public T
getEntity() {
261 * @see eu.etaxonomy.taxeditor.forms.section.cdmdetail.ISelectableElement#getSelectionArbitrator()
264 * <p>Getter for the field <code>selectionArbitrator</code>.</p>
266 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.SelectionArbitrator} object.
268 public SelectionArbitrator
getSelectionArbitrator() {
269 return selectionArbitrator
;
273 * Convenient access to current shell
275 * @return a {@link org.eclipse.swt.widgets.Shell} object.
277 protected Shell
getShell(){
278 return getLayoutComposite().getShell();
282 public void setIrrelevant(boolean irrelevant
) {
283 String colorId
= irrelevant ? Resources
.COLOR_COMPOSITE_IRRELEVANT
: Resources
.COLOR_TEXT_DISABLED_BACKGROUND
;
285 Color color
= StoreUtil
.getColor(colorId
);
286 text
.setBackground(color
);
289 private class DeleteListener
extends SelectionAdapter
{
291 private AbstractSelectionElement selectionElement
;
293 public DeleteListener(AbstractSelectionElement selectionElement
){
294 this.selectionElement
= selectionElement
;
298 public void widgetSelected(SelectionEvent e
) {
300 firePropertyChangeEvent(new CdmPropertyChangeEvent(selectionElement
, null));
306 public void widgetDefaultSelected(SelectionEvent e
) {}
309 * <p>getConversationHolder</p>
311 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
313 public ConversationHolder
getConversationHolder() {
319 public void setBackground(Color color
) {
320 label
.setBackground(color
);
324 public void setLabel(String labelString
){
326 label
.setText(labelString
);
331 * <p>Getter for the field <code>label</code>.</p>
333 * @return a {@link java.lang.String} object.
335 public String
getLabel(){
337 return label
.getText();
343 public void update(CdmDataChangeMap changeEvents
) {}