KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > rcp > composite > SelectableComposite


1 /*
2  * Created on Jan 7, 2005
3  * by alex
4  *
5  */

6 package com.nightlabs.rcp.composite;
7
8 import java.util.HashSet JavaDoc;
9 import java.util.Iterator JavaDoc;
10 import java.util.Set JavaDoc;
11
12 import org.eclipse.swt.SWT;
13 import org.eclipse.swt.events.MouseEvent;
14 import org.eclipse.swt.events.MouseListener;
15 import org.eclipse.swt.events.SelectionListener;
16 import org.eclipse.swt.graphics.Color;
17 import org.eclipse.swt.graphics.RGB;
18 import org.eclipse.swt.graphics.Rectangle;
19 import org.eclipse.swt.widgets.Composite;
20 import org.eclipse.swt.widgets.Display;
21 import org.eclipse.swt.widgets.Event;
22 import org.eclipse.swt.widgets.Listener;
23 import org.eclipse.swt.widgets.Shell;
24
25 /**
26  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
27  *
28  */

29 public class SelectableComposite extends Composite {
30
31     private boolean selected = false;
32     private Color normalBGColor;
33     private Color selectedBGColor;
34     
35     private MouseListener mouseListener = new MouseListener() {
36         public void mouseClicked(MouseEvent e) {
37         }
38
39         public void mouseDoubleClick(MouseEvent evt) {
40             setSelected(true,evt.stateMask);
41         }
42
43         public void mouseDown(MouseEvent arg0) {
44         }
45
46         public void mouseUp(MouseEvent evt) {
47             setSelected(true,evt.stateMask);
48         }
49     };
50     
51     Listener shellMouseListener = new Listener() {
52         public void handleEvent (Event event) {
53             switch (event.type) {
54                 case SWT.MouseDown:
55                     break;
56                 case SWT.MouseMove:
57                     break;
58                 case SWT.MouseUp:
59                     System.out.println("mouse up with x"+event.x+", y"+event.y);
60                     Rectangle rect = getBounds ();
61                     if (rect.contains (event.x, event.y)) {
62                         setSelected(true);
63                     }
64                     break;
65             }
66         }
67     };
68         
69     /**
70      * @param parent
71      * @param style
72      */

73     public SelectableComposite(Composite parent, int style) {
74         super(parent, style);
75         normalBGColor = this.getBackground();
76         selectedBGColor = new Color(Display.getDefault(),new RGB(0,0,255));
77 // addMouseListener(mouseListener);
78
// Button button = new Button(parent,style);
79
// button.addSelectionListener()
80
// Display.getDefault().getShells()[0].addListener(SWT.MouseUp, shellMouseListener);
81
Shell[] shs = Display.getDefault().getShells();
82         shs[shs.length-1].addListener(SWT.MouseUp, shellMouseListener);
83     }
84     
85
86     /**
87      * Checks if this Composite is selected or not.
88      *
89      * @return
90      */

91     public boolean isSelected() {
92         return selected;
93     }
94     
95     /**
96      * Sets the selection state of this composite
97      * to the passed value and sets its
98      * Backgroundcolor accordingly.
99      *
100      * @param selected
101      */

102     public void setSelected(boolean selected) {
103         this.selected = selected;
104         notifySelectionListeners();
105     }
106     
107     /**
108      * Sets the selection state of this composite
109      * to the passed value and sets its
110      * Backgroundcolor accordingly.
111      *
112      * @param selected
113      * @param sateMask
114      */

115     public void setSelected(boolean selected, int stateMask) {
116         this.selected = selected;
117         notifySelectionListeners(stateMask);
118     }
119
120     /**
121      * Switches the selection state.
122      */

123     protected void toggleSelected(){
124         setSelected(!isSelected());
125     }
126     
127     
128     /**
129      * A package visible int to
130      * store the list idx of this
131      * Composite within a CompositeList
132      * eg. {@link HorizontalMultiColumnCompositeList}.
133      */

134     int compositeListIdx = -1;
135     /**
136      * Returns the compositeListIdx.
137      * This is and should only be used in connection
138      * with a {@link HorizontalMultiColumnCompositeList}.
139      *
140      * @return
141      */

142     public int getCompositeListIdx() {
143         return compositeListIdx;
144     }
145     
146     private Set JavaDoc selectionListeners = new HashSet JavaDoc();
147     
148     protected void notifySelectionListeners() {
149         notifySelectionListeners(0);
150     }
151     
152     /**
153      * Nofify all selectionChangeListener
154      */

155     protected void notifySelectionListeners(int stateMask) {
156         CompositeSelectionEvent evt = new CompositeSelectionEvent();
157         evt.setSource(this);
158         evt.setSelected(isSelected());
159         evt.setStateMask(stateMask);
160         for (Iterator JavaDoc iter = selectionListeners.iterator(); iter.hasNext();) {
161             SelectableCompositeListener listener = (SelectableCompositeListener) iter.next();
162             listener.selectionStateChanged(evt);
163         }
164     }
165     
166     private Object JavaDoc selectionObject;
167     
168     
169     public Object JavaDoc getSelectionObject() {
170         return selectionObject;
171     }
172     public void setSelectionObject(Object JavaDoc selectionObject) {
173         this.selectionObject = selectionObject;
174     }
175     
176     public void removeSelectionListener(SelectionListener listener) {
177 // if (eventTable == null) return;
178
// eventTable.unhook (SWT.Selection, listener);
179
// eventTable.unhook (SWT.DefaultSelection,listener);
180
}
181     
182     public void addSelectionListener(SelectionListener listener) {
183 // TypedListener typedListener = new TypedListener (listener);
184
// addListener (SWT.Selection,typedListener);
185
// addListener (SWT.DefaultSelection,typedListener);
186
}
187     
188     /**
189      * Add a listener to this selectable Composite.
190      * @param selectionListener
191      */

192     public void addSelectionChangeListener(SelectableCompositeListener listener) {
193         selectionListeners.add(listener);
194     }
195     /**
196      * Remove a listener to this this selectable Composite.
197      * @param selectionListener
198      */

199     public void removeSelectionChangeListener(SelectableCompositeListener selectionListener) {
200         selectionListeners.remove(selectionListener);
201     }
202     
203 }
204
Popular Tags