1 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 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 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 94 public Point computeSize(int widthHint, int heightHint) { 95 return new Point(50, 50); 96 } 97 98 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 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 127 public Point getPaneMenuLocation() { 128 return systemToolbar.getPaneMenuLocation(); 129 } 130 131 134 public void setState(int state) { 135 super.setState(state); 136 137 systemToolbar.setState(state); 138 } 139 140 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 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 173 private AbstractTabItem getTab(Widget item) { 174 return (AbstractTabItem)item.getData(); 175 } 176 177 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 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 203 public Composite getToolbarParent() { 204 return viewForm; 205 } 206 207 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 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 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 268 public Composite getContentParent() { 269 return viewForm; 270 } 271 272 275 public void setContent(Control newContent) { 276 viewForm.setContent(newContent); 277 } 278 279 283 public TabFolder getTabFolder() { 284 return control; 285 } 286 287 292 void setSelectedTitle(String newTitle) { 293 title.setText(newTitle); 294 } 295 296 300 void setSelectedImage(Image image) { 301 title.setImage(image); 302 } 303 304 307 public AbstractTabItem getItem(Point toFind) { 308 return getSelection(); 309 } 310 311 315 public void enablePaneMenu(boolean enabled) { 316 systemToolbar.enablePaneMenu(enabled); 317 } 318 } 319 | Popular Tags |