fixes #1041
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / forms / AbstractEditorFormSection.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.forms;
5
6 import java.util.HashSet;
7 import java.util.Set;
8
9 import org.eclipse.jface.util.IPropertyChangeListener;
10 import org.eclipse.jface.util.PropertyChangeEvent;
11 import org.eclipse.swt.SWT;
12 import org.eclipse.swt.layout.GridData;
13 import org.eclipse.swt.layout.GridLayout;
14 import org.eclipse.swt.widgets.Composite;
15 import org.eclipse.ui.forms.events.ExpansionEvent;
16 import org.eclipse.ui.forms.events.IExpansionListener;
17 import org.eclipse.ui.forms.widgets.Section;
18 import org.eclipse.ui.forms.widgets.ToggleHyperlink;
19
20 /**
21 * @author nho
22 *
23 */
24 public abstract class AbstractEditorFormSection extends Section implements IExpansionListener, IPropertyChangeEmitter, IPropertyChangeListener{
25
26
27 protected EditorFormToolkit toolkit;
28 private Composite client;
29
30 private Set<IPropertyChangeListener> propertyChangeListeners = new HashSet<IPropertyChangeListener>();
31
32 /**
33 * @param parent
34 * @param style
35 */
36 protected AbstractEditorFormSection(Composite parent, IPropertyChangeListener listener, int style) {
37 super(parent, style);
38
39 toolkit = new EditorFormToolkit(parent.getDisplay());
40
41 toolkit.adapt(this);
42
43 this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
44
45 client = toolkit.createComposite(this, SWT.WRAP);
46 client.setLayout(new GridLayout());
47
48 this.setClient(client);
49 this.addExpansionListener(this);
50 if(listener != null){
51 this.addPropertyChangeListener(listener);
52 }
53 }
54
55 /* (non-Javadoc)
56 * @see org.eclipse.swt.widgets.Widget#dispose()
57 */
58 @Override
59 public void dispose() {
60 super.dispose();
61 toolkit.dispose();
62 }
63
64 public ToggleHyperlink getToggle(){
65 return this.toggle;
66 }
67
68 public Composite getClient(){
69 return client;
70 }
71
72 public AbstractEditorFormSection getSection(){
73 return this;
74 }
75
76 /* (non-Javadoc)
77 * @see org.eclipse.ui.forms.events.IExpansionListener#expansionStateChanged(org.eclipse.ui.forms.events.ExpansionEvent)
78 */
79 public void expansionStateChanged(ExpansionEvent e) {
80 // TODO Auto-generated method stub
81
82 }
83
84 /* (non-Javadoc)
85 * @see org.eclipse.ui.forms.events.IExpansionListener#expansionStateChanging(org.eclipse.ui.forms.events.ExpansionEvent)
86 */
87 public void expansionStateChanging(ExpansionEvent e) {
88 // TODO Auto-generated method stub
89
90 }
91
92 /* (non-Javadoc)
93 * @see eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#addPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
94 */
95 public void addPropertyChangeListener(IPropertyChangeListener listener) {
96 propertyChangeListeners.add(listener);
97 }
98
99 /* (non-Javadoc)
100 * @see eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#removePropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
101 */
102 public void removePropertyChangeListener(IPropertyChangeListener listener) {
103 propertyChangeListeners.remove(listener);
104 }
105
106 /* (non-Javadoc)
107 * @see eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#firePropertyChangeEvent()
108 */
109 public void firePropertyChangeEvent(PropertyChangeEvent event) {
110 for(IPropertyChangeListener listener : propertyChangeListeners){
111 listener.propertyChange(event);
112 }
113 }
114
115 /* (non-Javadoc)
116 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
117 */
118 public void propertyChange(PropertyChangeEvent event) {
119 firePropertyChangeEvent(event);
120 }
121 }