KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > ui > internal > presentations > defaultpresentation > NativeTabFolder


1 /*******************************************************************************
2  * Copyright (c) 2004, 2005 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.ui.internal.presentations.defaultpresentation;
12
13 import org.eclipse.jface.util.Geometry;
14 import org.eclipse.swt.SWT;
15 import org.eclipse.swt.custom.CLabel;
16 import org.eclipse.swt.custom.ViewForm;
17 import org.eclipse.swt.graphics.Image;
18 import org.eclipse.swt.graphics.Point;
19 import org.eclipse.swt.graphics.Rectangle;
20 import org.eclipse.swt.widgets.Composite;
21 import org.eclipse.swt.widgets.Control;
22 import org.eclipse.swt.widgets.Event;
23 import org.eclipse.swt.widgets.Listener;
24 import org.eclipse.swt.widgets.TabFolder;
25 import org.eclipse.swt.widgets.TabItem;
26 import org.eclipse.swt.widgets.Widget;
27 import org.eclipse.ui.IPropertyListener;
28 import org.eclipse.ui.internal.dnd.DragUtil;
29 import org.eclipse.ui.internal.layout.SizeCache;
30 import org.eclipse.ui.internal.presentations.util.AbstractTabFolder;
31 import org.eclipse.ui.internal.presentations.util.AbstractTabItem;
32 import org.eclipse.ui.internal.presentations.util.PartInfo;
33 import org.eclipse.ui.internal.presentations.util.ProxyControl;
34 import org.eclipse.ui.internal.presentations.util.StandardSystemToolbar;
35 import org.eclipse.ui.internal.presentations.util.TabFolderEvent;
36 import org.eclipse.ui.internal.util.Util;
37
38 /**
39  * @since 3.1
40  */

41 public class NativeTabFolder extends AbstractTabFolder {
42
43     private TabFolder control;
44     private ViewForm viewForm;
45     private StandardSystemToolbar systemToolbar;
46     private CLabel title;
47     private ProxyControl topCenter;
48     private SizeCache topCenterCache;
49     
50     private Listener selectionListener = new Listener() {
51         public void handleEvent(Event e) {
52             fireEvent(TabFolderEvent.EVENT_TAB_SELECTED, getTab(e.item));
53         }
54     };
55     
56     private IPropertyListener systemToolbarListener = new IPropertyListener() {
57
58         public void propertyChanged(Object JavaDoc source, int propId) {
59             Point location;
60             
61             if (propId == TabFolderEvent.EVENT_PANE_MENU) {
62                 location = getPaneMenuLocation();
63             } else {
64                 location = new Point(0,0);
65             }
66             
67             fireEvent(propId, getSelection(), location);
68         }
69         
70     };
71     
72     public NativeTabFolder(Composite parent) {
73         control = new TabFolder(parent, SWT.BOTTOM);
74         control.addListener(SWT.Selection, selectionListener);
75         attachListeners(control, false);
76         
77         viewForm = new ViewForm(control, SWT.FLAT);
78         attachListeners(viewForm, false);
79         systemToolbar = new StandardSystemToolbar(viewForm, true, false, true, true, true);
80         systemToolbar.addListener(systemToolbarListener);
81         viewForm.setTopRight(systemToolbar.getControl());
82         
83         topCenter = new ProxyControl(viewForm);
84         topCenterCache = new SizeCache();
85         
86         title = new CLabel(viewForm, SWT.LEFT);
87         attachListeners(title, false);
88         viewForm.setTopLeft(title);
89     }
90     
91     /* (non-Javadoc)
92      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#computeSize(int, int)
93      */

94     public Point computeSize(int widthHint, int heightHint) {
95         return new Point(50, 50);
96     }
97
98     /* (non-Javadoc)
99      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#add(int)
100      */

101     public AbstractTabItem add(int index, int flags) {
102         NativeTabItem item = new NativeTabItem(this, index);
103         item.getWidget().setData(item);
104         
105         return item;
106     }
107     
108     /* (non-Javadoc)
109      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#layout(boolean)
110      */

111     public void layout(boolean flushCache) {
112         super.layout(flushCache);
113         
114         Rectangle oldBounds = viewForm.getBounds();
115         Rectangle newBounds = control.getClientArea();
116         
117         viewForm.setBounds(newBounds);
118         
119         if (Util.equals(oldBounds, newBounds)) {
120             viewForm.layout(flushCache);
121         }
122     }
123     
124     /* (non-Javadoc)
125      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getPaneMenuLocation()
126      */

127     public Point getPaneMenuLocation() {
128         return systemToolbar.getPaneMenuLocation();
129     }
130     
131     /* (non-Javadoc)
132      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#setState(int)
133      */

134     public void setState(int state) {
135         super.setState(state);
136         
137         systemToolbar.setState(state);
138     }
139     
140     /* (non-Javadoc)
141      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getClientArea()
142      */

143     public Rectangle getClientArea() {
144         Control content = viewForm.getContent();
145         
146         if (content == null) {
147             return new Rectangle(0,0,0,0);
148         }
149         
150         return Geometry.toControl(control, DragUtil.getDisplayBounds(content));
151     }
152
153     /* (non-Javadoc)
154      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getItems()
155      */

156     public AbstractTabItem[] getItems() {
157         TabItem[] items = control.getItems();
158         
159         AbstractTabItem[] result = new AbstractTabItem[items.length];
160         
161         for (int i = 0; i < result.length; i++) {
162             result[i] = getTab(items[i]);
163         }
164         
165         return result;
166     }
167     
168     /**
169      * @param item
170      * @return
171      * @since 3.1
172      */

173     private AbstractTabItem getTab(Widget item) {
174         return (AbstractTabItem)item.getData();
175     }
176
177     /* (non-Javadoc)
178      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#setSelection(org.eclipse.ui.internal.presentations.util.Widget)
179      */

180     public void setSelection(AbstractTabItem toSelect) {
181         if (toSelect == null) {
182             return;
183         }
184         
185         NativeTabItem tab = (NativeTabItem) toSelect;
186         control.setSelection(new TabItem[] {(TabItem)tab.getWidget()});
187     }
188
189     /* (non-Javadoc)
190      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#setSelectedInfo(org.eclipse.ui.internal.presentations.util.PartInfo)
191      */

192     public void setSelectedInfo(PartInfo info) {
193         if (!Util.equals(title.getText(), info.title)) {
194             title.setText(info.title);
195         }
196         if (title.getImage() != info.image) {
197             title.setImage(info.image);
198         }
199     }
200     /* (non-Javadoc)
201      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getToolbarParent()
202      */

203     public Composite getToolbarParent() {
204         return viewForm;
205     }
206
207     /* (non-Javadoc)
208      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getTabArea()
209      */

210     public Rectangle getTabArea() {
211
212         Rectangle bounds = control.getBounds();
213         
214         Rectangle clientArea = control.getClientArea();
215         
216         bounds.x = 0;
217         bounds.y = 0;
218         Geometry.expand(bounds, 0, 0, - (clientArea.height + clientArea.y), 0);
219         
220         return Geometry.toDisplay(control.getParent(), bounds);
221     }
222     
223     /* (non-Javadoc)
224      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#setToolbar(org.eclipse.swt.widgets.Control)
225      */

226     public void setToolbar(Control toolbarControl) {
227         
228         if (toolbarControl != null) {
229             topCenterCache.setControl(toolbarControl);
230             topCenter.setTarget(topCenterCache);
231             viewForm.setTopCenter(topCenter.getControl());
232         } else {
233             topCenterCache.setControl(null);
234             topCenter.setTarget(null);
235             viewForm.setTopCenter(null);
236         }
237         
238         super.setToolbar(toolbarControl);
239     }
240     
241     public Control getControl() {
242         return control;
243     }
244     
245     /* (non-Javadoc)
246      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#isOnBorder(org.eclipse.swt.graphics.Point)
247      */

248     public boolean isOnBorder(Point globalPos) {
249         Point localPos = getControl().toControl(globalPos);
250         
251         Rectangle clientArea = getClientArea();
252         return localPos.y > clientArea.y && localPos.y < clientArea.y + clientArea.height;
253     }
254     
255     public AbstractTabItem getSelection() {
256         TabItem[] sel = control.getSelection();
257         
258         if (sel.length == 0) {
259             return null;
260         }
261
262         return getTab(sel[0]);
263     }
264     
265     /* (non-Javadoc)
266      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getContentParent()
267      */

268     public Composite getContentParent() {
269         return viewForm;
270     }
271     
272     /* (non-Javadoc)
273      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#setContent(org.eclipse.swt.widgets.Control)
274      */

275     public void setContent(Control newContent) {
276         viewForm.setContent(newContent);
277     }
278     
279     /**
280      * @return
281      * @since 3.1
282      */

283     public TabFolder getTabFolder() {
284         return control;
285     }
286
287     /**
288      * @param item
289      * @param newTitle
290      * @since 3.1
291      */

292     /* protected */ void setSelectedTitle(String JavaDoc newTitle) {
293         title.setText(newTitle);
294     }
295
296     /**
297      * @param image
298      * @since 3.1
299      */

300     /* protected */ void setSelectedImage(Image image) {
301         title.setImage(image);
302     }
303
304     /* (non-Javadoc)
305      * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getItem(org.eclipse.swt.graphics.Point)
306      */

307     public AbstractTabItem getItem(Point toFind) {
308         return getSelection();
309     }
310     
311     /**
312      * @param enabled
313      * @since 3.1
314      */

315     public void enablePaneMenu(boolean enabled) {
316         systemToolbar.enablePaneMenu(enabled);
317     }
318 }
319
Popular Tags