|
Lines 10-17
Link Here
|
| 10 |
*******************************************************************************/ |
10 |
*******************************************************************************/ |
| 11 |
package org.eclipse.ui.internal.presentations; |
11 |
package org.eclipse.ui.internal.presentations; |
| 12 |
|
12 |
|
|
|
13 |
import java.util.ArrayList; |
| 14 |
import java.util.List; |
| 15 |
|
| 13 |
import org.eclipse.jface.action.IMenuManager; |
16 |
import org.eclipse.jface.action.IMenuManager; |
| 14 |
import org.eclipse.jface.action.MenuManager; |
17 |
import org.eclipse.jface.action.MenuManager; |
|
|
18 |
import org.eclipse.jface.resource.ColorRegistry; |
| 15 |
import org.eclipse.jface.resource.FontRegistry; |
19 |
import org.eclipse.jface.resource.FontRegistry; |
| 16 |
import org.eclipse.jface.util.Geometry; |
20 |
import org.eclipse.jface.util.Geometry; |
| 17 |
import org.eclipse.swt.SWT; |
21 |
import org.eclipse.swt.SWT; |
|
Lines 24-44
Link Here
|
| 24 |
import org.eclipse.swt.events.MouseAdapter; |
28 |
import org.eclipse.swt.events.MouseAdapter; |
| 25 |
import org.eclipse.swt.events.MouseEvent; |
29 |
import org.eclipse.swt.events.MouseEvent; |
| 26 |
import org.eclipse.swt.events.MouseListener; |
30 |
import org.eclipse.swt.events.MouseListener; |
|
|
31 |
import org.eclipse.swt.events.SelectionAdapter; |
| 32 |
import org.eclipse.swt.events.SelectionEvent; |
| 27 |
import org.eclipse.swt.graphics.Color; |
33 |
import org.eclipse.swt.graphics.Color; |
|
|
34 |
import org.eclipse.swt.graphics.Image; |
| 28 |
import org.eclipse.swt.graphics.Point; |
35 |
import org.eclipse.swt.graphics.Point; |
| 29 |
import org.eclipse.swt.graphics.Rectangle; |
36 |
import org.eclipse.swt.graphics.Rectangle; |
| 30 |
import org.eclipse.swt.widgets.Control; |
37 |
import org.eclipse.swt.widgets.Control; |
|
|
38 |
import org.eclipse.swt.widgets.Display; |
| 31 |
import org.eclipse.swt.widgets.Event; |
39 |
import org.eclipse.swt.widgets.Event; |
| 32 |
import org.eclipse.swt.widgets.Listener; |
40 |
import org.eclipse.swt.widgets.Listener; |
| 33 |
import org.eclipse.swt.widgets.Menu; |
41 |
import org.eclipse.swt.widgets.Menu; |
|
|
42 |
import org.eclipse.swt.widgets.ToolBar; |
| 43 |
import org.eclipse.swt.widgets.ToolItem; |
| 34 |
import org.eclipse.ui.IPropertyListener; |
44 |
import org.eclipse.ui.IPropertyListener; |
| 35 |
import org.eclipse.ui.PlatformUI; |
45 |
import org.eclipse.ui.PlatformUI; |
|
|
46 |
import org.eclipse.ui.internal.IWorkbenchGraphicConstants; |
| 36 |
import org.eclipse.ui.internal.IWorkbenchThemeConstants; |
47 |
import org.eclipse.ui.internal.IWorkbenchThemeConstants; |
|
|
48 |
import org.eclipse.ui.internal.WorkbenchImages; |
| 49 |
import org.eclipse.ui.internal.WorkbenchMessages; |
| 50 |
import org.eclipse.ui.internal.dnd.DragUtil; |
| 37 |
import org.eclipse.ui.presentations.IPresentablePart; |
51 |
import org.eclipse.ui.presentations.IPresentablePart; |
| 38 |
import org.eclipse.ui.presentations.IStackPresentationSite; |
52 |
import org.eclipse.ui.presentations.IStackPresentationSite; |
| 39 |
import org.eclipse.ui.presentations.PresentationUtil; |
53 |
import org.eclipse.ui.presentations.PresentationUtil; |
| 40 |
import org.eclipse.ui.presentations.StackDropResult; |
54 |
import org.eclipse.ui.presentations.StackDropResult; |
| 41 |
import org.eclipse.ui.presentations.StackPresentation; |
55 |
import org.eclipse.ui.presentations.StackPresentation; |
|
|
56 |
import org.eclipse.ui.themes.ITheme; |
| 42 |
|
57 |
|
| 43 |
/** |
58 |
/** |
| 44 |
* Base class for StackPresentations that display IPresentableParts in a CTabFolder. |
59 |
* Base class for StackPresentations that display IPresentableParts in a CTabFolder. |
|
Lines 52-57
Link Here
|
| 52 |
private boolean activeState = false; |
67 |
private boolean activeState = false; |
| 53 |
private int tabPosition; |
68 |
private int tabPosition; |
| 54 |
private MenuManager systemMenuManager = new MenuManager(); |
69 |
private MenuManager systemMenuManager = new MenuManager(); |
|
|
70 |
private TabFolderLayout layout; |
| 71 |
|
| 72 |
private Color backgroundGradientStart; |
| 73 |
private Color backgroundGradientEnd; |
| 74 |
private Color background; |
| 75 |
|
| 76 |
//private ToolBar viewToolBar; |
| 77 |
//private ToolBarManager viewToolBarMgr; |
| 78 |
|
| 79 |
// Controls which will be inserted into the title bar if there is room, or above the client pane |
| 80 |
// if not |
| 81 |
private List topControls = new ArrayList(); |
| 82 |
|
| 83 |
// Stand-in for the top controls |
| 84 |
//private Composite toolbarProxy; |
| 55 |
|
85 |
|
| 56 |
private int mousedownState = -1; |
86 |
private int mousedownState = -1; |
| 57 |
|
87 |
|
|
Lines 128-133
Link Here
|
| 128 |
} |
158 |
} |
| 129 |
}; |
159 |
}; |
| 130 |
|
160 |
|
|
|
161 |
public int getTopTrimStart() { |
| 162 |
return layout.getTrimStart(); |
| 163 |
} |
| 164 |
|
| 131 |
private Listener resizeListener = new Listener() { |
165 |
private Listener resizeListener = new Listener() { |
| 132 |
public void handleEvent(Event e) { |
166 |
public void handleEvent(Event e) { |
| 133 |
setControlSize(); |
167 |
setControlSize(); |
|
Lines 166-176
Link Here
|
| 166 |
} |
200 |
} |
| 167 |
} |
201 |
} |
| 168 |
}; |
202 |
}; |
|
|
203 |
private ToolBar viewToolBar; |
| 169 |
|
204 |
|
| 170 |
public BasicStackPresentation(CTabFolder control, IStackPresentationSite stackSite) { |
205 |
public BasicStackPresentation(CTabFolder control, IStackPresentationSite stackSite) { |
| 171 |
super(stackSite); |
206 |
super(stackSite); |
| 172 |
tabFolder = control; |
207 |
tabFolder = control; |
| 173 |
|
208 |
|
|
|
209 |
layout = new TabFolderLayout(tabFolder); |
| 210 |
|
| 211 |
viewToolBar = new ToolBar(control.getParent(), SWT.HORIZONTAL |
| 212 |
| SWT.FLAT | SWT.WRAP); |
| 213 |
|
| 214 |
ToolItem pullDownButton = new ToolItem(viewToolBar, SWT.PUSH); |
| 215 |
// Image img = WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_VIEW_MENU); |
| 216 |
Image hoverImage = |
| 217 |
WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_VIEW_MENU_HOVER); |
| 218 |
pullDownButton.setDisabledImage(hoverImage); // TODO: comment this out? |
| 219 |
// PR#1GE56QT - Avoid creation of unnecessary image. |
| 220 |
pullDownButton.setImage(hoverImage); |
| 221 |
// pullDownButton.setHotImage(hoverImage); |
| 222 |
pullDownButton.setToolTipText(WorkbenchMessages.getString("Menu")); //$NON-NLS-1$ |
| 223 |
pullDownButton.addSelectionListener(new SelectionAdapter() { |
| 224 |
public void widgetSelected(SelectionEvent e) { |
| 225 |
showViewMenu(); |
| 226 |
} |
| 227 |
}); |
| 228 |
|
| 174 |
// listener to switch between visible tabItems |
229 |
// listener to switch between visible tabItems |
| 175 |
tabFolder.addListener(SWT.Selection, selectionListener); |
230 |
tabFolder.addListener(SWT.Selection, selectionListener); |
| 176 |
|
231 |
|
|
Lines 204-210
Link Here
|
| 204 |
} |
259 |
} |
| 205 |
} |
260 |
} |
| 206 |
}); |
261 |
}); |
| 207 |
|
262 |
|
|
|
263 |
viewToolBar.setVisible(true); |
| 264 |
//viewToolBar.moveAbove(null); |
| 265 |
|
| 266 |
// Insert a bogus composite into the top-right of the tab folder. We do this to keep |
| 267 |
// track of where to draw the toolbars. |
| 268 |
//toolbarProxy = new Composite(tabFolder, SWT.NONE); |
| 269 |
|
| 270 |
//tabFolder.setTopRight(toolbarProxy); |
| 271 |
|
| 272 |
//titleLabel = new Label(control.getParent(), SWT.NONE); |
| 273 |
|
| 274 |
ITheme currentTheme = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme(); |
| 275 |
ColorRegistry colorRegistry = currentTheme.getColorRegistry(); |
| 276 |
Color endCol = colorRegistry.get(IWorkbenchThemeConstants.INACTIVE_TAB_BG_END); |
| 277 |
|
| 278 |
setBackgroundColors(colorRegistry.get(IWorkbenchThemeConstants.INACTIVE_TAB_BG_START), |
| 279 |
endCol, endCol); |
| 280 |
|
| 281 |
tabFolder.setTabHeight(24); |
| 282 |
} |
| 283 |
|
| 284 |
/** |
| 285 |
* |
| 286 |
*/ |
| 287 |
protected void showViewMenu() { |
| 288 |
IPartMenu menu = getPartMenu(); |
| 289 |
|
| 290 |
if (menu != null) { |
| 291 |
Rectangle bounds = DragUtil.getDisplayBounds(viewToolBar); |
| 292 |
menu.showMenu(new Point(bounds.x, bounds.y + bounds.height)); |
| 293 |
} |
| 208 |
} |
294 |
} |
| 209 |
|
295 |
|
| 210 |
/** |
296 |
/** |
|
Lines 268-274
Link Here
|
| 268 |
|
354 |
|
| 269 |
CTabItem tab = getTab(part); |
355 |
CTabItem tab = getTab(part); |
| 270 |
initTab(tab, part); |
356 |
initTab(tab, part); |
| 271 |
if(property == IPresentablePart.PROP_BUSY){ |
357 |
switch (property) { |
|
|
358 |
case IPresentablePart.PROP_BUSY: |
| 272 |
FontRegistry registry = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().getFontRegistry(); |
359 |
FontRegistry registry = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().getFontRegistry(); |
| 273 |
if(part.isBusy()) |
360 |
if(part.isBusy()) |
| 274 |
tab.setFont(registry.getItalic(IWorkbenchThemeConstants.TAB_TEXT_FONT)); |
361 |
tab.setFont(registry.getItalic(IWorkbenchThemeConstants.TAB_TEXT_FONT)); |
|
Lines 277-284
Link Here
|
| 277 |
tab.setFont(registry.get(IWorkbenchThemeConstants.TAB_TEXT_FONT)); |
364 |
tab.setFont(registry.get(IWorkbenchThemeConstants.TAB_TEXT_FONT)); |
| 278 |
else |
365 |
else |
| 279 |
tab.setFont(registry.getBold(IWorkbenchThemeConstants.TAB_TEXT_FONT)); |
366 |
tab.setFont(registry.getBold(IWorkbenchThemeConstants.TAB_TEXT_FONT)); |
| 280 |
} |
367 |
} |
| 281 |
|
368 |
break; |
|
|
369 |
case IPresentablePart.PROP_TOOLBAR: |
| 370 |
setControlSize(); |
| 371 |
break; |
| 282 |
} |
372 |
} |
| 283 |
} |
373 |
} |
| 284 |
|
374 |
|
|
Lines 306-313
Link Here
|
| 306 |
} |
396 |
} |
| 307 |
|
397 |
|
| 308 |
public void drawGradient(Color fgColor, Color [] bgColors, int [] percentages, boolean vertical) { |
398 |
public void drawGradient(Color fgColor, Color [] bgColors, int [] percentages, boolean vertical) { |
|
|
399 |
Display display = tabFolder.getDisplay(); |
| 400 |
//Color c = display.getSystemColor(SWT.COLOR_BLUE); |
| 401 |
|
| 402 |
//fgColor = c; |
| 403 |
// tabFolder.setBackground(new Color[]{display.getSystemColor(SWT.COLOR_DARK_BLUE), |
| 404 |
// display.getSystemColor(SWT.COLOR_BLUE), |
| 405 |
// display.getSystemColor(SWT.COLOR_WHITE), |
| 406 |
// display.getSystemColor(SWT.COLOR_WHITE)}, |
| 407 |
// new int[] {25, 50, 100}); |
| 408 |
|
| 409 |
//tabFolder.setBackground(display.getSystemColor(SWT.COLOR_DARK_BLUE)); |
| 410 |
|
| 309 |
tabFolder.setSelectionForeground(fgColor); |
411 |
tabFolder.setSelectionForeground(fgColor); |
| 310 |
tabFolder.setSelectionBackground(bgColors, percentages, vertical); |
412 |
tabFolder.setSelectionBackground(bgColors, percentages, vertical); |
| 311 |
} |
413 |
} |
| 312 |
|
414 |
|
| 313 |
public boolean isActive() { |
415 |
public boolean isActive() { |
|
Lines 317-347
Link Here
|
| 317 |
/** |
419 |
/** |
| 318 |
* Set the size of a page in the folder. |
420 |
* Set the size of a page in the folder. |
| 319 |
*/ |
421 |
*/ |
| 320 |
private void setControlSize() { |
422 |
protected void setControlSize() { |
|
|
423 |
// Set up the top-right controls |
| 424 |
List topRight = new ArrayList(2); |
| 425 |
|
| 426 |
Control toolbar = getCurrentToolbar(); |
| 427 |
|
| 428 |
if (toolbar != null) { |
| 429 |
topRight.add(toolbar); |
| 430 |
} |
| 431 |
|
| 432 |
IPartMenu partMenu = getPartMenu(); |
| 433 |
|
| 434 |
if (partMenu != null) { |
| 435 |
viewToolBar.moveAbove(null); |
| 436 |
topRight.add(viewToolBar); |
| 437 |
viewToolBar.setVisible(true); |
| 438 |
} else { |
| 439 |
viewToolBar.setVisible(false); |
| 440 |
} |
| 441 |
|
| 442 |
Control[] controls = (Control[])topRight.toArray(new Control[topRight.size()]); |
| 443 |
|
| 444 |
layout.setTopRight(controls); |
| 445 |
|
| 321 |
if (current == null || tabFolder == null) |
446 |
if (current == null || tabFolder == null) |
| 322 |
return; |
447 |
return; |
| 323 |
// Rectangle bounds; |
448 |
|
| 324 |
// @issue as above, the mere presence of a theme should not change the behaviour |
449 |
layout.layout(); |
| 325 |
// if ((mapTabToPart.size() > 1) |
450 |
|
| 326 |
// || ((tabThemeDescriptor != null) && (mapTabToPart.size() >= 1))) |
451 |
current.setBounds(layout.getClientBounds()); |
| 327 |
// bounds = calculatePageBounds(tabFolder); |
452 |
|
| 328 |
// else |
453 |
updateTrimColours(); |
| 329 |
// bounds = tabFolder.getBounds(); |
454 |
} |
| 330 |
current.setBounds(calculatePageBounds(tabFolder)); |
455 |
|
| 331 |
//current.moveAbove(tabFolder); |
456 |
protected IPartMenu getPartMenu() { |
| 332 |
} |
457 |
IPresentablePart part = getCurrentPart(); |
| 333 |
|
458 |
if (part == null) { |
| 334 |
public static Rectangle calculatePageBounds(CTabFolder folder) { |
459 |
return null; |
| 335 |
if (folder == null) |
460 |
} |
| 336 |
return new Rectangle(0, 0, 0, 0); |
461 |
|
| 337 |
Rectangle bounds = folder.getBounds(); |
462 |
return part.getMenu(); |
| 338 |
Rectangle offset = folder.getClientArea(); |
463 |
} |
| 339 |
bounds.x += offset.x; |
464 |
|
| 340 |
bounds.y += offset.y; |
465 |
/** |
| 341 |
bounds.width = offset.width; |
466 |
* Update the colours of the trim widgets based on whether they are |
| 342 |
bounds.height = offset.height; |
467 |
* currently in the title bar or below it. |
| 343 |
return bounds; |
468 |
*/ |
| 344 |
} |
469 |
protected void updateTrimColours() { |
|
|
470 |
Color background = isTrimOnTop() ? backgroundGradientEnd : this.background ; |
| 471 |
|
| 472 |
Control[] trim = layout.getTopRight(); |
| 473 |
|
| 474 |
for (int idx = 0; idx < trim.length; idx++) { |
| 475 |
Control next = trim[idx]; |
| 476 |
|
| 477 |
Color nextCol = next.getBackground(); |
| 478 |
|
| 479 |
if (nextCol != background) { |
| 480 |
next.setBackground(background); |
| 481 |
} |
| 482 |
} |
| 483 |
|
| 484 |
updateBackgroundColors(); |
| 485 |
} |
| 486 |
|
| 487 |
protected boolean isTrimOnTop() { |
| 488 |
return layout.isTrimOnTop(); |
| 489 |
} |
| 490 |
|
| 491 |
// protected Control[] getTopRight() { |
| 492 |
// return layout.getTopRight(); |
| 493 |
// } |
| 345 |
|
494 |
|
| 346 |
/* (non-Javadoc) |
495 |
/* (non-Javadoc) |
| 347 |
* @see org.eclipse.ui.internal.skins.Presentation#dispose() |
496 |
* @see org.eclipse.ui.internal.skins.Presentation#dispose() |
|
Lines 355-360
Link Here
|
| 355 |
|
504 |
|
| 356 |
tabFolder.dispose(); |
505 |
tabFolder.dispose(); |
| 357 |
tabFolder = null; |
506 |
tabFolder = null; |
|
|
507 |
|
| 508 |
viewToolBar.dispose(); |
| 358 |
} |
509 |
} |
| 359 |
|
510 |
|
| 360 |
/* (non-Javadoc) |
511 |
/* (non-Javadoc) |
|
Lines 446-457
Link Here
|
| 446 |
} |
597 |
} |
| 447 |
} |
598 |
} |
| 448 |
|
599 |
|
|
|
600 |
public IPresentablePart getCurrentPart() { |
| 601 |
return current; |
| 602 |
} |
| 603 |
|
| 604 |
// protected void setTopRight(List topRight) { |
| 605 |
// layout.setTopRight(topRight); |
| 606 |
// setControlSize(); |
| 607 |
// } |
| 608 |
|
| 449 |
/* (non-Javadoc) |
609 |
/* (non-Javadoc) |
| 450 |
* @see org.eclipse.ui.internal.skins.Presentation#setBounds(org.eclipse.swt.graphics.Rectangle) |
610 |
* @see org.eclipse.ui.internal.skins.Presentation#setBounds(org.eclipse.swt.graphics.Rectangle) |
| 451 |
*/ |
611 |
*/ |
| 452 |
public void setBounds(Rectangle bounds) { |
612 |
public void setBounds(Rectangle bounds) { |
| 453 |
tabFolder.setBounds(bounds); |
613 |
tabFolder.setBounds(bounds); |
| 454 |
setControlSize(); |
614 |
setControlSize(); |
|
|
615 |
viewToolBar.moveAbove(getControl()); |
| 455 |
} |
616 |
} |
| 456 |
|
617 |
|
| 457 |
/* (non-Javadoc) |
618 |
/* (non-Javadoc) |
|
Lines 469-474
Link Here
|
| 469 |
current.setVisible(isVisible); |
630 |
current.setVisible(isVisible); |
| 470 |
} |
631 |
} |
| 471 |
tabFolder.setVisible(isVisible); |
632 |
tabFolder.setVisible(isVisible); |
|
|
633 |
viewToolBar.setVisible(isVisible); |
| 472 |
} |
634 |
} |
| 473 |
|
635 |
|
| 474 |
/* (non-Javadoc) |
636 |
/* (non-Javadoc) |
|
Lines 508-514
Link Here
|
| 508 |
* @see org.eclipse.ui.internal.skins.StackPresentation#dragOver(org.eclipse.swt.widgets.Control, org.eclipse.swt.graphics.Point) |
670 |
* @see org.eclipse.ui.internal.skins.StackPresentation#dragOver(org.eclipse.swt.widgets.Control, org.eclipse.swt.graphics.Point) |
| 509 |
*/ |
671 |
*/ |
| 510 |
public StackDropResult dragOver(Control currentControl, Point location) { |
672 |
public StackDropResult dragOver(Control currentControl, Point location) { |
| 511 |
|
|
|
| 512 |
// Determine which tab we're currently dragging over |
673 |
// Determine which tab we're currently dragging over |
| 513 |
Point localPos = tabFolder.toControl(location); |
674 |
Point localPos = tabFolder.toControl(location); |
| 514 |
final CTabItem tabUnderPointer = tabFolder.getItem(localPos); |
675 |
final CTabItem tabUnderPointer = tabFolder.getItem(localPos); |
|
Lines 521-525
Link Here
|
| 521 |
|
682 |
|
| 522 |
return new StackDropResult(Geometry.toDisplay(tabFolder, tabUnderPointer.getBounds()), |
683 |
return new StackDropResult(Geometry.toDisplay(tabFolder, tabUnderPointer.getBounds()), |
| 523 |
tabFolder.indexOf(tabUnderPointer)); |
684 |
tabFolder.indexOf(tabUnderPointer)); |
|
|
685 |
} |
| 686 |
|
| 687 |
public int getGradientPercentage() { |
| 688 |
Rectangle clientBounds = getTabFolder().getBounds(); |
| 689 |
|
| 690 |
int percentage = clientBounds.width == 0 ? 100 : Math.min(100, |
| 691 |
100 * getTopTrimStart() / clientBounds.width); |
| 692 |
|
| 693 |
if (percentage < 0) { |
| 694 |
percentage = 0; |
| 695 |
} |
| 696 |
|
| 697 |
return percentage; |
| 698 |
} |
| 699 |
|
| 700 |
protected Control getCurrentToolbar() { |
| 701 |
IPresentablePart part = getCurrentPart(); |
| 702 |
if (part == null) { |
| 703 |
return null; |
| 704 |
} |
| 705 |
|
| 706 |
return part.getToolBar(); |
| 707 |
} |
| 708 |
|
| 709 |
protected void setBackgroundColors(Color gradientStart, Color gradientEnd, Color background) { |
| 710 |
backgroundGradientStart = gradientStart; |
| 711 |
backgroundGradientEnd = gradientEnd; |
| 712 |
this.background = background; |
| 713 |
updateBackgroundColors(); |
| 714 |
|
| 715 |
updateTrimColours(); |
| 716 |
} |
| 717 |
|
| 718 |
protected void updateBackgroundColors() { |
| 719 |
Color [] c = new Color[3]; |
| 720 |
c[0] = backgroundGradientStart; |
| 721 |
c[1] = backgroundGradientEnd; |
| 722 |
c[2] = c[1]; |
| 723 |
|
| 724 |
int[] percents = new int[] {getGradientPercentage(), 100}; |
| 725 |
|
| 726 |
getTabFolder().setBackground(c, percents, false); |
| 727 |
getTabFolder().setBackground(background); |
| 728 |
} |
| 729 |
|
| 730 |
/* (non-Javadoc) |
| 731 |
* @see org.eclipse.ui.presentations.StackPresentation#showSystemMenu() |
| 732 |
*/ |
| 733 |
public void showSystemMenu() { |
| 734 |
IPresentablePart part = getCurrentPart(); |
| 735 |
if (part != null) { |
| 736 |
Rectangle bounds = DragUtil.getDisplayBounds(tabFolder); |
| 737 |
|
| 738 |
int idx = tabFolder.getSelectionIndex(); |
| 739 |
if (idx > -1) { |
| 740 |
CTabItem item = tabFolder.getItem(idx); |
| 741 |
Rectangle itemBounds = item.getBounds(); |
| 742 |
|
| 743 |
bounds.x += itemBounds.x; |
| 744 |
bounds.y += itemBounds.y; |
| 745 |
} |
| 746 |
|
| 747 |
Point location = new Point(bounds.x, bounds.y + tabFolder.getTabHeight()); |
| 748 |
showPaneMenu(part, location); |
| 749 |
} |
| 524 |
} |
750 |
} |
| 525 |
} |
751 |
} |