comparison dwtx/jface/internal/text/revisions/RevisionSelectionProvider.d @ 162:1a5b8f8129df

...
author Frank Benoit <benoit@tionex.de>
date Mon, 08 Sep 2008 00:51:37 +0200
parents 75302ef3f92f
children
comparison
equal deleted inserted replaced
161:f8d52b926852 162:1a5b8f8129df
45 * <li>when the caret is moved to a revision's line (only on post-selection)</li> 45 * <li>when the caret is moved to a revision's line (only on post-selection)</li>
46 * </ul> 46 * </ul>
47 * <p> 47 * <p>
48 * Calling {@link #setSelection(ISelection)} will set the current sticky revision on the ruler. 48 * Calling {@link #setSelection(ISelection)} will set the current sticky revision on the ruler.
49 * </p> 49 * </p>
50 * 50 *
51 * @since 3.2 51 * @since 3.2
52 */ 52 */
53 public final class RevisionSelectionProvider : ISelectionProvider { 53 public final class RevisionSelectionProvider : ISelectionProvider {
54 54
55 /** 55 /**
69 if ( cast(ITextSelection)selection ) { 69 if ( cast(ITextSelection)selection ) {
70 ITextSelection ts= cast(ITextSelection) selection; 70 ITextSelection ts= cast(ITextSelection) selection;
71 int offset= ts.getOffset(); 71 int offset= ts.getOffset();
72 setSelectedRevision(fPainter.getRevision(offset)); 72 setSelectedRevision(fPainter.getRevision(offset));
73 } 73 }
74 74
75 } 75 }
76 76
77 public void dispose() { 77 public void dispose() {
78 fPostProvider.removePostSelectionChangedListener(this); 78 fPostProvider.removePostSelectionChangedListener(this);
79 } 79 }
80 } 80 }
81 81
82 private const RevisionPainter fPainter; 82 private const RevisionPainter fPainter;
83 private const ListenerList fListeners= new ListenerList(); 83 private const ListenerList fListeners;
84 84
85 /** 85 /**
86 * The text viewer once we are installed, <code>null</code> if not installed. 86 * The text viewer once we are installed, <code>null</code> if not installed.
87 */ 87 */
88 private ITextViewer fViewer; 88 private ITextViewer fViewer;
89 /** 89 /**
101 */ 101 */
102 private bool fIgnoreEvents= false; 102 private bool fIgnoreEvents= false;
103 103
104 /** 104 /**
105 * Creates a new selection provider. 105 * Creates a new selection provider.
106 * 106 *
107 * @param painter the painter that the created provider interacts with 107 * @param painter the painter that the created provider interacts with
108 */ 108 */
109 this(RevisionPainter painter) { 109 this(RevisionPainter painter) {
110 fListeners= new ListenerList();
110 fPainter= painter; 111 fPainter= painter;
111 } 112 }
112 113
113 /* 114 /*
114 * @see dwtx.jface.viewers.ISelectionProvider#addSelectionChangedListener(dwtx.jface.viewers.ISelectionChangedListener) 115 * @see dwtx.jface.viewers.ISelectionProvider#addSelectionChangedListener(dwtx.jface.viewers.ISelectionChangedListener)
115 */ 116 */
116 public void addSelectionChangedListener(ISelectionChangedListener listener) { 117 public void addSelectionChangedListener(ISelectionChangedListener listener) {
117 fListeners.add(listener); 118 fListeners.add(cast(Object)listener);
118 } 119 }
119 120
120 /* 121 /*
121 * @see dwtx.jface.viewers.ISelectionProvider#removeSelectionChangedListener(dwtx.jface.viewers.ISelectionChangedListener) 122 * @see dwtx.jface.viewers.ISelectionProvider#removeSelectionChangedListener(dwtx.jface.viewers.ISelectionChangedListener)
122 */ 123 */
123 public void removeSelectionChangedListener(ISelectionChangedListener listener) { 124 public void removeSelectionChangedListener(ISelectionChangedListener listener) {
124 fListeners.remove(listener); 125 fListeners.remove(cast(Object)listener);
125 } 126 }
126 127
127 /* 128 /*
128 * @see dwtx.jface.viewers.ISelectionProvider#getSelection() 129 * @see dwtx.jface.viewers.ISelectionProvider#getSelection()
129 */ 130 */
130 public ISelection getSelection() { 131 public ISelection getSelection() {
131 if (fSelection is null) 132 if (fSelection is null)
141 return; 142 return;
142 if ( cast(IStructuredSelection)selection ) { 143 if ( cast(IStructuredSelection)selection ) {
143 Object first= (cast(IStructuredSelection) selection).getFirstElement(); 144 Object first= (cast(IStructuredSelection) selection).getFirstElement();
144 if ( cast(Revision)first ) 145 if ( cast(Revision)first )
145 fPainter.handleRevisionSelected(cast(Revision) first); 146 fPainter.handleRevisionSelected(cast(Revision) first);
146 else if ( cast(String)first ) 147 else if ( auto str = cast(ArrayWrapperString)first )
147 fPainter.handleRevisionSelected(cast(String) first); 148 fPainter.handleRevisionSelected(str.array);
148 else if (selection.isEmpty()) 149 else if (selection.isEmpty())
149 fPainter.handleRevisionSelected(cast(Revision) null); 150 fPainter.handleRevisionSelected(cast(Revision) null);
150 } 151 }
151 } 152 }
152 153
153 /** 154 /**
154 * Installs the selection provider on the viewer. 155 * Installs the selection provider on the viewer.
155 * 156 *
156 * @param viewer the viewer on which we listen to for post selection events 157 * @param viewer the viewer on which we listen to for post selection events
157 */ 158 */
158 void install(ITextViewer viewer) { 159 void install(ITextViewer viewer) {
159 uninstall(); 160 uninstall();
160 fViewer= viewer; 161 fViewer= viewer;
164 IPostSelectionProvider postProvider= cast(IPostSelectionProvider) provider; 165 IPostSelectionProvider postProvider= cast(IPostSelectionProvider) provider;
165 fSelectionListener= new PostSelectionListener(postProvider); 166 fSelectionListener= new PostSelectionListener(postProvider);
166 } 167 }
167 } 168 }
168 } 169 }
169 170
170 /** 171 /**
171 * Uninstalls the selection provider. 172 * Uninstalls the selection provider.
172 */ 173 */
173 void uninstall() { 174 void uninstall() {
174 fViewer= null; 175 fViewer= null;
178 } 179 }
179 } 180 }
180 181
181 /** 182 /**
182 * Private protocol used by {@link RevisionPainter} to signal selection of a revision. 183 * Private protocol used by {@link RevisionPainter} to signal selection of a revision.
183 * 184 *
184 * @param revision the selected revision, or <code>null</code> for none 185 * @param revision the selected revision, or <code>null</code> for none
185 */ 186 */
186 void revisionSelected(Revision revision) { 187 void revisionSelected(Revision revision) {
187 setSelectedRevision(revision); 188 setSelectedRevision(revision);
188 } 189 }
189 190
190 /** 191 /**
191 * Updates the currently selected revision and sends out an event if it changed. 192 * Updates the currently selected revision and sends out an event if it changed.
192 * 193 *
193 * @param revision the newly selected revision or <code>null</code> for none 194 * @param revision the newly selected revision or <code>null</code> for none
194 */ 195 */
195 private void setSelectedRevision(Revision revision) { 196 private void setSelectedRevision(Revision revision) {
196 if (revision !is fSelection) { 197 if (revision !is fSelection) {
197 fSelection= revision; 198 fSelection= revision;