1 6 package com.nightlabs.rcp.composite; 7 8 import java.util.HashSet ; 9 import java.util.Iterator ; 10 import java.util.Set ; 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 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 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 Shell[] shs = Display.getDefault().getShells(); 82 shs[shs.length-1].addListener(SWT.MouseUp, shellMouseListener); 83 } 84 85 86 91 public boolean isSelected() { 92 return selected; 93 } 94 95 102 public void setSelected(boolean selected) { 103 this.selected = selected; 104 notifySelectionListeners(); 105 } 106 107 115 public void setSelected(boolean selected, int stateMask) { 116 this.selected = selected; 117 notifySelectionListeners(stateMask); 118 } 119 120 123 protected void toggleSelected(){ 124 setSelected(!isSelected()); 125 } 126 127 128 134 int compositeListIdx = -1; 135 142 public int getCompositeListIdx() { 143 return compositeListIdx; 144 } 145 146 private Set selectionListeners = new HashSet (); 147 148 protected void notifySelectionListeners() { 149 notifySelectionListeners(0); 150 } 151 152 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 iter = selectionListeners.iterator(); iter.hasNext();) { 161 SelectableCompositeListener listener = (SelectableCompositeListener) iter.next(); 162 listener.selectionStateChanged(evt); 163 } 164 } 165 166 private Object selectionObject; 167 168 169 public Object getSelectionObject() { 170 return selectionObject; 171 } 172 public void setSelectionObject(Object selectionObject) { 173 this.selectionObject = selectionObject; 174 } 175 176 public void removeSelectionListener(SelectionListener listener) { 177 } 181 182 public void addSelectionListener(SelectionListener listener) { 183 } 187 188 192 public void addSelectionChangeListener(SelectableCompositeListener listener) { 193 selectionListeners.add(listener); 194 } 195 199 public void removeSelectionChangeListener(SelectableCompositeListener selectionListener) { 200 selectionListeners.remove(selectionListener); 201 } 202 203 } 204 | Popular Tags |