Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 179786 Details for
Bug 317849
A SashForm replacement
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Uber patch containing both the other patches
patch(317849-2) (text/plain), 63.70 KB, created by
Eric Moffatt
on 2010-09-28 16:18:01 EDT
(
hide
)
Description:
Uber patch containing both the other patches
Filename:
MIME Type:
Creator:
Eric Moffatt
Created:
2010-09-28 16:18:01 EDT
Size:
63.70 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.e4.ui.tests >Index: src/org/eclipse/e4/ui/tests/workbench/MPartSashContainerTest.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MPartSashContainerTest.java,v >retrieving revision 1.5 >diff -u -r1.5 MPartSashContainerTest.java >--- src/org/eclipse/e4/ui/tests/workbench/MPartSashContainerTest.java 4 Jun 2010 20:22:21 -0000 1.5 >+++ src/org/eclipse/e4/ui/tests/workbench/MPartSashContainerTest.java 28 Sep 2010 20:16:54 -0000 >@@ -23,8 +23,6 @@ > import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer; > import org.eclipse.e4.ui.model.application.ui.basic.MWindow; > import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicFactoryImpl; >-import org.eclipse.swt.SWT; >-import org.eclipse.swt.custom.SashForm; > > public class MPartSashContainerTest extends TestCase { > protected IEclipseContext appContext; >@@ -75,18 +73,5 @@ > > Object widget = partSashContainer.getWidget(); > assertNotNull(widget); >- assertTrue(widget instanceof SashForm); >- >- SashForm sashForm = (SashForm) widget; >- assertEquals(SWT.HORIZONTAL, sashForm.getOrientation()); >- >- partSashContainer.setHorizontal(false); >- assertEquals(SWT.VERTICAL, sashForm.getOrientation()); >- >- partSashContainer.setHorizontal(true); >- assertEquals(SWT.HORIZONTAL, sashForm.getOrientation()); >- >- partSashContainer.setHorizontal(true); >- assertEquals(SWT.HORIZONTAL, sashForm.getOrientation()); > } > } >Index: src/org/eclipse/e4/ui/tests/workbench/MSashTest.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MSashTest.java,v >retrieving revision 1.16 >diff -u -r1.16 MSashTest.java >--- src/org/eclipse/e4/ui/tests/workbench/MSashTest.java 4 Jun 2010 20:22:21 -0000 1.16 >+++ src/org/eclipse/e4/ui/tests/workbench/MSashTest.java 28 Sep 2010 20:16:54 -0000 >@@ -23,8 +23,6 @@ > import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer; > import org.eclipse.e4.ui.model.application.ui.basic.MWindow; > import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicFactoryImpl; >-import org.eclipse.swt.custom.SashForm; >-import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Shell; > import org.eclipse.swt.widgets.Widget; > >@@ -122,50 +120,6 @@ > assertTrue("Part1 data is not an integer", cdVal1 != -1); > > assertTrue("Values should be equal", cdVal0 == cdVal1); >- >- testWeights(sash, 50, 50); >- } >- >- private void testWeights(MPartSashContainer sf, double w1, double w2) { >- double baseRatio = w1 / w2; >- >- MPart part0 = (MPart) sf.getChildren().get(0); >- MPart part1 = (MPart) sf.getChildren().get(1); >- >- int cdVal0 = -1; >- try { >- cdVal0 = Integer.parseInt(part0.getContainerData()); >- } catch (NumberFormatException e) { >- } >- assertTrue("Part0 data is not an integer", cdVal0 != -1); >- >- int cdVal1 = -1; >- try { >- cdVal1 = Integer.parseInt(part1.getContainerData()); >- } catch (NumberFormatException e) { >- } >- assertTrue("Part1 data is not an integer", cdVal1 != -1); >- >- // test the model >- checkRatio("MSashForm", cdVal0, cdVal1, baseRatio); >- >- // test the SashForm >- SashForm sfw = (SashForm) sf.getWidget(); >- int[] sfwWghts = sfw.getWeights(); >- checkRatio("SWT SashForm", sfwWghts[0], sfwWghts[1], baseRatio); >- >- // Test the controls (assume vertical for now) >- Composite c1 = (Composite) sfw.getChildren()[0]; >- Composite c2 = (Composite) sfw.getChildren()[1]; >- checkRatio("Control Bounds", c1.getSize().y, c2.getSize().y, baseRatio); >- } >- >- private void checkRatio(String label, int num, int div, double baseRatio) { >- double ratio = (double) num / (double) div; >- >- double TOLERANCE = 0.1; >- boolean withinTolerance = Math.abs(ratio - baseRatio) < TOLERANCE; >- assertTrue("Ratio mismatch on" + label + "weights", withinTolerance); > } > > private MWindow createSashWithNViews(int n) { >#P org.eclipse.e4.ui.workbench >Index: src/org/eclipse/e4/ui/internal/workbench/ModelServiceImpl.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ModelServiceImpl.java,v >retrieving revision 1.18 >diff -u -r1.18 ModelServiceImpl.java >--- src/org/eclipse/e4/ui/internal/workbench/ModelServiceImpl.java 15 Sep 2010 18:12:55 -0000 1.18 >+++ src/org/eclipse/e4/ui/internal/workbench/ModelServiceImpl.java 28 Sep 2010 20:16:55 -0000 >@@ -24,6 +24,7 @@ > import org.eclipse.e4.ui.model.application.ui.MUIElement; > import org.eclipse.e4.ui.model.application.ui.SideValue; > import org.eclipse.e4.ui.model.application.ui.advanced.MAdvancedFactory; >+import org.eclipse.e4.ui.model.application.ui.advanced.MArea; > import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; > import org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack; > import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder; >@@ -358,8 +359,10 @@ > } > > // Set up the container data before adding the new sash to the model >- toInsert.setContainerData(Integer.toString(ratio)); >- relTo.setContainerData(Integer.toString(100 - ratio)); >+ // To raise the granularity assume 100% == 10,000 >+ int adjustedPct = ratio * 100; >+ toInsert.setContainerData(Integer.toString(adjustedPct)); >+ relTo.setContainerData(Integer.toString(10000 - adjustedPct)); > > // add the new sash at the same location > curParent.getChildren().add(index, newSash); >@@ -380,9 +383,9 @@ > > // Ensure the ratio is sane > if (ratio == 0) >- ratio = 10; >- if (ratio > 100) >- ratio = 90; >+ ratio = 1000; >+ if (ratio > 10000) >+ ratio = 9000; > > // determine insertion order > boolean newFirst = where == ABOVE || where == LEFT_OF; >@@ -396,7 +399,7 @@ > insertRoot = insertRoot.getParent(); > } > >- if (insertRoot instanceof MWindow) { >+ if (insertRoot instanceof MWindow || insertRoot instanceof MArea) { > // OK, we're certainly going to need a new sash > MPartSashContainer newSash = BasicFactoryImpl.eINSTANCE.createPartSashContainer(); > newSash.setHorizontal(where == LEFT_OF || where == RIGHT_OF); >@@ -475,11 +478,7 @@ > > MWindow window = getTopLevelWindowFor(persp); > IPresentationEngine renderingEngine = persp.getContext().get(IPresentationEngine.class); >- Object foo = renderingEngine.createGui(newWindow, window.getWidget(), >- persp.getContext()); >- if (foo != null) { >- // System.out.println(foo.toString()); >- } >+ renderingEngine.createGui(newWindow, window.getWidget(), persp.getContext()); > } else if (curParent instanceof MWindow) { > ((MWindow) curParent).getWindows().add(newWindow); > } >#P org.eclipse.e4.ui.workbench.addons.swt >Index: src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent.java,v >retrieving revision 1.9 >diff -u -r1.9 SplitDropAgent.java >--- src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent.java 24 Jul 2010 21:51:32 -0000 1.9 >+++ src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent.java 28 Sep 2010 20:16:56 -0000 >@@ -139,6 +139,13 @@ > > modelService.insert((MPartSashContainerElement) toInsert, > (MPartSashContainerElement) relTo, where, 50); >+ >+ MUIElement tmp = relTo; >+ while (!(tmp.getWidget() instanceof Control)) >+ tmp = tmp.getParent(); >+ Control theCtrl = (Control) tmp.getWidget(); >+ theCtrl.getParent().layout(true, true); >+ > return true; > } > >Index: src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java,v >retrieving revision 1.7 >diff -u -r1.7 StackDropAgent.java >--- src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java 21 Jul 2010 21:57:30 -0000 1.7 >+++ src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java 28 Sep 2010 20:16:56 -0000 >@@ -13,6 +13,7 @@ > > import java.util.List; > import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer; >+import org.eclipse.e4.ui.model.application.ui.MElementContainer; > import org.eclipse.e4.ui.model.application.ui.MUIElement; > import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; > import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder; >@@ -25,6 +26,7 @@ > import org.eclipse.e4.ui.workbench.modeling.EModelService; > import org.eclipse.swt.graphics.Point; > import org.eclipse.swt.graphics.Rectangle; >+import org.eclipse.swt.widgets.Control; > > /** > * >@@ -88,7 +90,30 @@ > } > > if (dragElement.getParent() != null) { >- dragElement.getParent().getChildren().remove(dragElement); >+ MElementContainer<MUIElement> dragParent = dragElement.getParent(); >+ >+ // If this was the last child in the stack it will go away so >+ // grab back its 'weight' if it's in the same sash container >+ int curCount = dragParent.getChildren().size(); >+ if ((Object) dragParent instanceof MPartStack && curCount == 1 >+ && dragParent.getParent() == dropStack.getParent()) { >+ int dpWeight = -1; >+ try { >+ dpWeight = Integer.parseInt(dragParent.getContainerData()); >+ } catch (NumberFormatException e) { >+ } >+ if (dpWeight != -1) { >+ int dropWeight = 0; >+ try { >+ dropWeight = Integer.parseInt(dropStack.getContainerData()); >+ } catch (NumberFormatException e) { >+ } >+ dropWeight += dpWeight; >+ dropStack.setContainerData(Integer.toString(dropWeight)); >+ } >+ } >+ >+ dragParent.getChildren().remove(dragElement); > } > > if (info.itemIndex == -1) { >@@ -121,6 +146,11 @@ > } > } > >+ if (dragElement.getWidget() instanceof Control) { >+ Control ctrl = (Control) dragElement.getWidget(); >+ ctrl.getShell().layout(); >+ } >+ > return true; > } > >Index: src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddon.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddon.java,v >retrieving revision 1.13 >diff -u -r1.13 MinMaxAddon.java >--- src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddon.java 26 Jul 2010 16:54:41 -0000 1.13 >+++ src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddon.java 28 Sep 2010 20:16:56 -0000 >@@ -20,8 +20,10 @@ > import org.eclipse.e4.core.services.events.IEventBroker; > import org.eclipse.e4.ui.model.application.ui.MUIElement; > import org.eclipse.e4.ui.model.application.ui.SideValue; >+import org.eclipse.e4.ui.model.application.ui.advanced.MArea; > import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; > import org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack; >+import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder; > import org.eclipse.e4.ui.model.application.ui.basic.MPartStack; > import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar; > import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow; >@@ -40,7 +42,6 @@ > import org.eclipse.swt.graphics.Rectangle; > import org.eclipse.swt.widgets.Control; > import org.eclipse.swt.widgets.Shell; >-import org.eclipse.swt.widgets.Widget; > import org.eclipse.ui.IPageLayout; > import org.osgi.service.event.Event; > import org.osgi.service.event.EventHandler; >@@ -70,7 +71,39 @@ > private EventHandler ctfListener = new EventHandler() { > public void handleEvent(Event event) { > final MUIElement changedElement = (MUIElement) event.getProperty(EventTags.ELEMENT); >- Widget widget = (Widget) event.getProperty(EventTags.NEW_VALUE); >+ Object widget = event.getProperty(EventTags.NEW_VALUE); >+ if (changedElement instanceof MArea && widget instanceof CTabFolder) { >+ final CTabFolder ctf = (CTabFolder) widget; >+ ctf.addCTabFolder2Listener(new CTabFolder2Adapter() { >+ public void maximize(CTabFolderEvent event) { >+ MWindow window = modelService.getTopLevelWindowFor(changedElement); >+ MPerspective curPersp = modelService.getActivePerspective(window); >+ curPersp.getTags().add("EAMaximized"); //$NON-NLS-1$ >+ } >+ >+ public void restore(CTabFolderEvent event) { >+ MWindow window = modelService.getTopLevelWindowFor(changedElement); >+ MPerspective curPersp = modelService.getActivePerspective(window); >+ curPersp.getTags().remove("EAMaximized"); //$NON-NLS-1$ >+ } >+ }); >+ ctf.addMouseListener(new MouseListener() { >+ public void mouseUp(MouseEvent e) { >+ } >+ >+ public void mouseDown(MouseEvent e) { >+ } >+ >+ public void mouseDoubleClick(MouseEvent e) { >+ MWindow window = modelService.getTopLevelWindowFor(changedElement); >+ MPerspective curPersp = modelService.getActivePerspective(window); >+ if (curPersp.getTags().contains(EA_MAXIMIZED)) >+ curPersp.getTags().remove(EA_MAXIMIZED); >+ else >+ curPersp.getTags().add(EA_MAXIMIZED); >+ } >+ }); >+ } > if (changedElement instanceof MPartStack && widget instanceof CTabFolder > && changedElement.getElementId() != null) { > final CTabFolder folder = (CTabFolder) widget; >@@ -86,21 +119,6 @@ > } > }); > } else { >- folder.setMaximizeVisible(true); >- folder.addCTabFolder2Listener(new CTabFolder2Adapter() { >- public void maximize(CTabFolderEvent event) { >- MWindow window = modelService.getTopLevelWindowFor(changedElement); >- MPerspective curPersp = modelService.getActivePerspective(window); >- curPersp.getTags().add(EA_MAXIMIZED); >- } >- >- public void restore(CTabFolderEvent event) { >- MWindow window = modelService.getTopLevelWindowFor(changedElement); >- MPerspective curPersp = modelService.getActivePerspective(window); >- curPersp.getTags().remove(EA_MAXIMIZED); >- } >- }); >- > folder.addMouseListener(new MouseListener() { > public void mouseUp(MouseEvent e) { > } >@@ -131,10 +149,11 @@ > MPerspectiveStack ps = (MPerspectiveStack) changedElement; > final MPerspective curPersp = ps.getSelectedElement(); > if (curPersp != null) { >- MWindow win = modelService.getTopLevelWindowFor(curPersp); >- MPartStack eStack = getEditorStack(win); >- CTabFolder ctf = (CTabFolder) eStack.getWidget(); >- if (ctf != null) { >+ // Find the editor 'area' >+ MPlaceholder eaPlaceholder = (MPlaceholder) modelService.find( >+ IPageLayout.ID_EDITOR_AREA, curPersp); >+ if (eaPlaceholder.getRef().getWidget() instanceof CTabFolder) { >+ CTabFolder ctf = (CTabFolder) eaPlaceholder.getRef().getWidget(); > // Set the CTF state > boolean isMax = curPersp.getTags().contains(EA_MAXIMIZED); > ctf.setMaximized(isMax); >@@ -172,7 +191,7 @@ > } else if (EA_MAXIMIZED.equals(tag)) { > MPerspective persp = (MPerspective) changedElement; > MWindow win = modelService.getTopLevelWindowFor(persp); >- maximizeEA(getEditorStack(win)); >+ maximizeEA(getSharedAreaRef(win)); > } > } else if (UIEvents.EventTypes.REMOVE.equals(eventType)) { > if (MINIMIZED.equals(oldVal)) { >@@ -180,7 +199,7 @@ > } else if (EA_MAXIMIZED.equals(oldVal)) { > MPerspective persp = (MPerspective) changedElement; > MWindow win = modelService.getTopLevelWindowFor(persp); >- unmaximizeEA(getEditorStack(win)); >+ unmaximizeEA(getSharedAreaRef(win)); > } > } > } >@@ -208,7 +227,6 @@ > if (UIEvents.EventTypes.REMOVE.equals(eventType)) { > MUIElement removed = (MUIElement) event.getProperty(UIEvents.EventTags.OLD_VALUE); > String perspectiveId = removed.getElementId(); >- // System.out.println("Perspective Removed: " + removed.getElementId()); > MWindow window = modelService.getTopLevelWindowFor(changedElement); > MTrimBar bar = modelService.getTrim((MTrimmedWindow) window, SideValue.TOP); > >@@ -251,12 +269,9 @@ > * @param win > * @return > */ >- protected MPartStack getEditorStack(MWindow win) { >+ protected MPlaceholder getSharedAreaRef(MWindow win) { > MUIElement ea = modelService.find(IPageLayout.ID_EDITOR_AREA, win); >- List<MPartStack> eStacks = modelService.findElements(ea, null, MPartStack.class, null); >- if (eStacks.size() == 0) >- return null; >- return eStacks.get(0); >+ return (MPlaceholder) ((ea instanceof MPlaceholder) ? ea : null); > } > > @PreDestroy >@@ -354,11 +369,10 @@ > } > } > >- void maximizeEA(MPartStack stack) { >- MWindow win = modelService.getTopLevelWindowFor(stack); >+ void maximizeEA(MPlaceholder sharedAreaRef) { >+ MWindow win = modelService.getTopLevelWindowFor(sharedAreaRef); > MPerspective persp = modelService.getActivePerspective(win); >- MUIElement toSearch = persp != null ? persp : win; >- List<MPartStack> stacks = modelService.findElements(toSearch, null, MPartStack.class, null); >+ List<MPartStack> stacks = modelService.findElements(persp, null, MPartStack.class, null); > for (MPartStack theStack : stacks) { > if (!theStack.getTags().contains("EditorStack") && theStack.getWidget() != null > && !theStack.getTags().contains(MINIMIZED)) { >@@ -370,15 +384,19 @@ > // Remember that the EA is max'd in this perspective > persp.getTags().add(EA_MAXIMIZED); > >- CTabFolder ctf = (CTabFolder) stack.getWidget(); >- ctf.setMaximized(true); >+ // Find the editor 'area' >+ MPlaceholder eaPlaceholder = (MPlaceholder) modelService.find(IPageLayout.ID_EDITOR_AREA, >+ persp); >+ if (eaPlaceholder.getRef().getWidget() instanceof CTabFolder) { >+ CTabFolder ctf = (CTabFolder) eaPlaceholder.getRef().getWidget(); >+ ctf.setMaximized(true); >+ } > } > >- void unmaximizeEA(MPartStack stack) { >- MWindow win = modelService.getTopLevelWindowFor(stack); >+ void unmaximizeEA(MPlaceholder sharedAreaRef) { >+ MWindow win = modelService.getTopLevelWindowFor(sharedAreaRef); > MPerspective persp = modelService.getActivePerspective(win); >- MUIElement toSearch = persp != null ? persp : win; >- List<MPartStack> stacks = modelService.findElements(toSearch, null, MPartStack.class, null); >+ List<MPartStack> stacks = modelService.findElements(persp, null, MPartStack.class, null); > for (MPartStack theStack : stacks) { > if (!theStack.getTags().contains("EditorStack") && theStack.getWidget() != null > && theStack.getTags().contains(MINIMIZED) >@@ -391,8 +409,13 @@ > // Forget that the EA is max'd in this perspective for this window > persp.getTags().remove(EA_MAXIMIZED); > >- CTabFolder ctf = (CTabFolder) stack.getWidget(); >- ctf.setMaximized(false); >+ // Find the editor 'area' >+ MPlaceholder eaPlaceholder = (MPlaceholder) modelService.find(IPageLayout.ID_EDITOR_AREA, >+ persp); >+ if (eaPlaceholder.getRef().getWidget() instanceof CTabFolder) { >+ CTabFolder ctf = (CTabFolder) eaPlaceholder.getRef().getWidget(); >+ ctf.setMaximized(false); >+ } > } > > /** >#P org.eclipse.e4.ui.workbench.renderers.swt >Index: src/org/eclipse/e4/ui/workbench/renderers/swt/AreaRenderer.java >=================================================================== >RCS file: src/org/eclipse/e4/ui/workbench/renderers/swt/AreaRenderer.java >diff -N src/org/eclipse/e4/ui/workbench/renderers/swt/AreaRenderer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/e4/ui/workbench/renderers/swt/AreaRenderer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,147 @@ >+/******************************************************************************* >+ * Copyright (c) 2009, 2010 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.e4.ui.workbench.renderers.swt; >+ >+import javax.annotation.PostConstruct; >+import javax.annotation.PreDestroy; >+import javax.inject.Inject; >+import org.eclipse.e4.core.services.events.IEventBroker; >+import org.eclipse.e4.core.services.log.Logger; >+import org.eclipse.e4.ui.model.application.ui.MElementContainer; >+import org.eclipse.e4.ui.model.application.ui.MUIElement; >+import org.eclipse.e4.ui.model.application.ui.advanced.MArea; >+import org.eclipse.e4.ui.widgets.CTabFolder; >+import org.eclipse.e4.ui.widgets.CTabItem; >+import org.eclipse.e4.ui.workbench.UIEvents; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.widgets.Composite; >+import org.osgi.service.event.Event; >+import org.osgi.service.event.EventHandler; >+ >+/** >+ * Create a contribute part. >+ */ >+public class AreaRenderer extends SWTPartRenderer { >+ >+ @Inject >+ Logger logger; >+ @Inject >+ IEventBroker eventBroker; >+ >+ private EventHandler itemUpdater = new EventHandler() { >+ public void handleEvent(Event event) { >+ // Ensure that this event is for a MArea >+ if (!(event.getProperty(UIEvents.EventTags.ELEMENT) instanceof MArea)) >+ return; >+ >+ MArea areaModel = (MArea) event >+ .getProperty(UIEvents.EventTags.ELEMENT); >+ CTabFolder ctf = (CTabFolder) areaModel.getWidget(); >+ CTabItem areaItem = ctf.getItem(0); >+ >+ // No widget == nothing to update >+ if (areaItem == null) >+ return; >+ >+ String attName = (String) event >+ .getProperty(UIEvents.EventTags.ATTNAME); >+ if (UIEvents.UILabel.LABEL.equals(attName)) { >+ areaItem.setText(areaModel.getLabel()); >+ } else if (UIEvents.UILabel.ICONURI.equals(attName)) { >+ areaItem.setImage(getImage(areaModel)); >+ } else if (UIEvents.UILabel.TOOLTIP.equals(attName)) { >+ areaItem.setToolTipText(areaModel.getTooltip()); >+ } >+ } >+ }; >+ >+ @PostConstruct >+ void init() { >+ eventBroker.subscribe(UIEvents.buildTopic(UIEvents.UILabel.TOPIC), >+ itemUpdater); >+ } >+ >+ @PreDestroy >+ void contextDisposed() { >+ eventBroker.unsubscribe(itemUpdater); >+ } >+ >+ public Object createWidget(final MUIElement element, Object parent) { >+ if (!(element instanceof MArea) || !(parent instanceof Composite)) >+ return null; >+ >+ MArea areaModel = (MArea) element; >+ Composite parentComp = (Composite) parent; >+ >+ CTabFolder ctf = new CTabFolder(parentComp, SWT.BORDER | SWT.SINGLE); >+ ctf.setMaximizeVisible(true); >+ ctf.setMinimizeVisible(true); >+ CTabItem cti = new CTabItem(ctf, SWT.NONE); >+ if (areaModel.getLabel() != null) >+ cti.setText(areaModel.getLabel()); >+ if (areaModel.getTooltip() != null) >+ cti.setToolTipText(areaModel.getTooltip()); >+ if (areaModel.getIconURI() != null) >+ cti.setImage(getImage(areaModel)); >+ >+ Composite areaComp = new Composite(ctf, SWT.NONE); >+ SashLayout sl = new SashLayout(areaComp, null); >+ areaComp.setLayout(sl); >+ cti.setControl(areaComp); >+ >+ ctf.setSelection(cti); >+ >+ return ctf; >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see >+ * org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer#childRendered >+ * (org.eclipse.e4.ui.model.application.ui.MElementContainer, >+ * org.eclipse.e4.ui.model.application.ui.MUIElement) >+ */ >+ @Override >+ public void childRendered(MElementContainer<MUIElement> parentElement, >+ MUIElement element) { >+ if (!(parentElement.getWidget() instanceof CTabFolder)) >+ return; >+ >+ super.childRendered(parentElement, element); >+ >+ // Reset the 'root' element to the new child (last one in wins) >+ CTabFolder ctf = (CTabFolder) parentElement.getWidget(); >+ Composite layoutComp = (Composite) ctf.getItem(0).getControl(); >+ SashLayout sl = (SashLayout) layoutComp.getLayout(); >+ sl.setRootElemenr(element); >+ layoutComp.layout(true, true); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see >+ * org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer#getUIContainer >+ * (org.eclipse.e4.ui.model.application.ui.MUIElement) >+ */ >+ @Override >+ public Object getUIContainer(MUIElement element) { >+ MUIElement parentElement = element.getParent(); >+ >+ if (!(parentElement instanceof MArea) >+ || !(parentElement.getWidget() instanceof CTabFolder)) >+ return null; >+ >+ CTabFolder ctf = (CTabFolder) parentElement.getWidget(); >+ return ctf.getItem(0).getControl(); >+ } >+} >Index: src/org/eclipse/e4/ui/workbench/renderers/swt/ElementReferenceRenderer.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ElementReferenceRenderer.java,v >retrieving revision 1.3 >diff -u -r1.3 ElementReferenceRenderer.java >--- src/org/eclipse/e4/ui/workbench/renderers/swt/ElementReferenceRenderer.java 14 Sep 2010 17:49:42 -0000 1.3 >+++ src/org/eclipse/e4/ui/workbench/renderers/swt/ElementReferenceRenderer.java 28 Sep 2010 20:16:57 -0000 >@@ -78,8 +78,6 @@ > IEclipseContext context = ((MContext) ref).getContext(); > IEclipseContext newParentContext = getContext(ph); > if (context.getParent() != newParentContext) { >- // System.out.println("Update Context: " + context.toString() //$NON-NLS-1$ >- // + " new parent: " + newParentContext.toString()); //$NON-NLS-1$ > context.setParent(newParentContext); > } > } >Index: src/org/eclipse/e4/ui/workbench/renderers/swt/LazyStackRenderer.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/LazyStackRenderer.java,v >retrieving revision 1.16 >diff -u -r1.16 LazyStackRenderer.java >--- src/org/eclipse/e4/ui/workbench/renderers/swt/LazyStackRenderer.java 14 Sep 2010 17:49:42 -0000 1.16 >+++ src/org/eclipse/e4/ui/workbench/renderers/swt/LazyStackRenderer.java 28 Sep 2010 20:16:57 -0000 >@@ -287,8 +287,6 @@ > IEclipseContext newParentContext = modelService > .getContainingContext(element); > if (context.getParent() != newParentContext) { >- // System.out.println("Update Context: " + context.toString() //$NON-NLS-1$ >- // + " new parent: " + newParentContext.toString()); //$NON-NLS-1$ > context.setParent(newParentContext); > } > } >Index: src/org/eclipse/e4/ui/workbench/renderers/swt/PerspectiveRenderer.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/PerspectiveRenderer.java,v >retrieving revision 1.3 >diff -u -r1.3 PerspectiveRenderer.java >--- src/org/eclipse/e4/ui/workbench/renderers/swt/PerspectiveRenderer.java 5 Jul 2010 20:19:25 -0000 1.3 >+++ src/org/eclipse/e4/ui/workbench/renderers/swt/PerspectiveRenderer.java 28 Sep 2010 20:16:57 -0000 >@@ -18,7 +18,6 @@ > import org.eclipse.e4.ui.workbench.IPresentationEngine; > import org.eclipse.emf.ecore.impl.EObjectImpl; > import org.eclipse.swt.SWT; >-import org.eclipse.swt.layout.FillLayout; > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Shell; > import org.eclipse.swt.widgets.Widget; >@@ -38,10 +37,10 @@ > return null; > > Composite perspArea = new Composite((Composite) parent, SWT.NONE); >+ perspArea.setLayout(new SashLayout(perspArea, null)); > IStylingEngine stylingEngine = (IStylingEngine) getContext(element) > .get(IStylingEngine.SERVICE_NAME); > stylingEngine.setClassname(perspArea, "perspectiveLayout"); //$NON-NLS-1$ >- perspArea.setLayout(new FillLayout()); > > return perspArea; > } >@@ -72,6 +71,25 @@ > * (non-Javadoc) > * > * @see >+ * org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer#childRendered >+ * (org.eclipse.e4.ui.model.application.ui.MElementContainer, >+ * org.eclipse.e4.ui.model.application.ui.MUIElement) >+ */ >+ @Override >+ public void childRendered(MElementContainer<MUIElement> parentElement, >+ MUIElement element) { >+ // TODO Auto-generated method stub >+ super.childRendered(parentElement, element); >+ >+ Composite comp = (Composite) parentElement.getWidget(); >+ SashLayout sl = (SashLayout) comp.getLayout(); >+ sl.setRootElemenr(element); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see > * org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer#getUIContainer > * (org.eclipse.e4.ui.model.application.ui.MUIElement) > */ >Index: src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java,v >retrieving revision 1.6 >diff -u -r1.6 SWTPartRenderer.java >--- src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java 16 Jul 2010 14:05:40 -0000 1.6 >+++ src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java 28 Sep 2010 20:16:57 -0000 >@@ -87,23 +87,27 @@ > public void bindWidget(MUIElement me, Object widget) { > // Create a bi-directional link between the widget and the model > me.setWidget(widget); >- ((Widget) widget).setData(OWNING_ME, me); > > // Remember which renderer created this widget > me.setRenderer(this); > >- // Set up the CSS Styling parameters; id & class >- setCSSInfo(me, widget); >+ if (widget instanceof Widget) { >+ ((Widget) widget).setData(OWNING_ME, me); > >- // Ensure that disposed widgets are unbound form the model >- Widget swtWidget = (Widget) widget; >- swtWidget.addDisposeListener(new DisposeListener() { >- public void widgetDisposed(DisposeEvent e) { >- MUIElement element = (MUIElement) e.widget.getData(OWNING_ME); >- if (element != null) >- unbindWidget(element); >- } >- }); >+ // Set up the CSS Styling parameters; id & class >+ setCSSInfo(me, widget); >+ >+ // Ensure that disposed widgets are unbound form the model >+ Widget swtWidget = (Widget) widget; >+ swtWidget.addDisposeListener(new DisposeListener() { >+ public void widgetDisposed(DisposeEvent e) { >+ MUIElement element = (MUIElement) e.widget >+ .getData(OWNING_ME); >+ if (element != null) >+ unbindWidget(element); >+ } >+ }); >+ } > } > > public Object unbindWidget(MUIElement me) { >@@ -125,17 +129,19 @@ > } > > public void disposeWidget(MUIElement element) { >- Widget curWidget = (Widget) element.getWidget(); >+ if (element.getWidget() instanceof Widget) { >+ Widget curWidget = (Widget) element.getWidget(); > >- if (curWidget != null && !curWidget.isDisposed()) { >- unbindWidget(element); >- curWidget.dispose(); >+ if (curWidget != null && !curWidget.isDisposed()) { >+ unbindWidget(element); >+ curWidget.dispose(); >+ } > } > element.setWidget(null); > } > > public void hookControllerLogic(final MUIElement me) { >- Widget widget = (Widget) me.getWidget(); >+ Object widget = me.getWidget(); > > // add an accessibility listener (not sure if this is in the wrong place > // (factory?) >Index: src/org/eclipse/e4/ui/workbench/renderers/swt/SashLayout.java >=================================================================== >RCS file: src/org/eclipse/e4/ui/workbench/renderers/swt/SashLayout.java >diff -N src/org/eclipse/e4/ui/workbench/renderers/swt/SashLayout.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/e4/ui/workbench/renderers/swt/SashLayout.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,328 @@ >+package org.eclipse.e4.ui.workbench.renderers.swt; >+ >+import java.util.ArrayList; >+import java.util.List; >+import org.eclipse.e4.ui.model.application.ui.MGenericTile; >+import org.eclipse.e4.ui.model.application.ui.MUIElement; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.events.MouseEvent; >+import org.eclipse.swt.events.MouseListener; >+import org.eclipse.swt.events.MouseMoveListener; >+import org.eclipse.swt.events.MouseTrackListener; >+import org.eclipse.swt.events.PaintEvent; >+import org.eclipse.swt.events.PaintListener; >+import org.eclipse.swt.graphics.Point; >+import org.eclipse.swt.graphics.Rectangle; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Control; >+import org.eclipse.swt.widgets.Layout; >+import org.eclipse.swt.widgets.Shell; >+ >+public class SashLayout extends Layout { >+ >+ int marginLeft = 2; >+ int marginRight = 2; >+ int marginTop = 2; >+ int marginBottom = 2; >+ int sashWidth = 5; >+ >+ MUIElement root; >+ private Composite host; >+ >+ class SashRect { >+ Rectangle rect; >+ MGenericTile<?> container; >+ MUIElement left; >+ MUIElement right; >+ >+ public SashRect(Rectangle rect, MGenericTile<?> container, >+ MUIElement left, MUIElement right) { >+ this.container = container; >+ this.rect = rect; >+ this.left = left; >+ this.right = right; >+ } >+ } >+ >+ List<SashRect> sashes = new ArrayList<SashRect>(); >+ >+ boolean draggingSashes = false; >+ List<SashRect> sashesToDrag; >+ >+ public SashLayout(final Composite host, MUIElement root) { >+ this.root = root; >+ this.host = host; >+ >+ host.addMouseTrackListener(new MouseTrackListener() { >+ public void mouseHover(MouseEvent e) { >+ } >+ >+ public void mouseExit(MouseEvent e) { >+ host.setCursor(null); >+ } >+ >+ public void mouseEnter(MouseEvent e) { >+ } >+ }); >+ >+ host.addMouseMoveListener(new MouseMoveListener() { >+ public void mouseMove(MouseEvent e) { >+ if (!draggingSashes) { >+ // Set the cursor feedback >+ List<SashRect> sashList = getSashRects(e.x, e.y); >+ if (sashList.size() == 0) { >+ host.setCursor(host.getDisplay().getSystemCursor( >+ SWT.CURSOR_ARROW)); >+ } else if (sashList.size() == 1) { >+ if (sashList.get(0).container.isHorizontal()) >+ host.setCursor(host.getDisplay().getSystemCursor( >+ SWT.CURSOR_SIZEWE)); >+ else >+ host.setCursor(host.getDisplay().getSystemCursor( >+ SWT.CURSOR_SIZENS)); >+ } else { >+ host.setCursor(host.getDisplay().getSystemCursor( >+ SWT.CURSOR_SIZEALL)); >+ } >+ } else { >+ adjustWeights(sashesToDrag, e.x, e.y); >+ host.layout(); >+ host.update(); >+ } >+ } >+ }); >+ >+ host.addMouseListener(new MouseListener() { >+ public void mouseUp(MouseEvent e) { >+ host.setCapture(false); >+ draggingSashes = false; >+ } >+ >+ public void mouseDown(MouseEvent e) { >+ if (e.button != 1) >+ return; >+ >+ sashesToDrag = getSashRects(e.x, e.y); >+ if (sashesToDrag.size() > 0) { >+ draggingSashes = true; >+ host.setCapture(true); >+ } >+ } >+ >+ public void mouseDoubleClick(MouseEvent e) { >+ } >+ }); >+ >+ host.addPaintListener(new PaintListener() { >+ public void paintControl(PaintEvent e) { >+ // for (SashRect sr : sashes) { >+ // Color color; >+ // if (sr.container.isHorizontal()) >+ // color = e.display.getSystemColor(SWT.COLOR_MAGENTA); >+ // else >+ // color = e.display.getSystemColor(SWT.COLOR_CYAN); >+ // e.gc.setForeground(color); >+ // e.gc.setBackground(color); >+ // e.gc.fillRectangle(sr.rect); >+ // } >+ } >+ }); >+ } >+ >+ public void setRootElemenr(MUIElement newRoot) { >+ root = newRoot; >+ host.layout(null, SWT.DEFER); >+ } >+ >+ @Override >+ protected void layout(Composite composite, boolean flushCache) { >+ if (root == null) >+ return; >+ >+ Rectangle bounds = composite.getBounds(); >+ if (composite instanceof Shell) >+ bounds = ((Shell) composite).getClientArea(); >+ else { >+ bounds.x = 0; >+ bounds.y = 0; >+ } >+ >+ bounds.width -= (marginLeft + marginRight); >+ bounds.height -= (marginTop + marginBottom); >+ bounds.x += marginLeft; >+ bounds.y += marginTop; >+ >+ sashes.clear(); >+ tileSubNodes(bounds, root); >+ composite.getDisplay().update(); >+ } >+ >+ protected void adjustWeights(List<SashRect> sashes, int curX, int curY) { >+ for (SashRect sr : sashes) { >+ int totalWeight = getWeight(sr.left) + getWeight(sr.right); >+ int tenPctTotal = totalWeight / 10; >+ >+ Rectangle leftRect = getRectangle(sr.left); >+ Rectangle rightRect = getRectangle(sr.right); >+ int leftWeight; >+ int rightWeight; >+ >+ if (sr.container.isHorizontal()) { >+ double left = leftRect.x; >+ double right = rightRect.x + rightRect.width; >+ double pct = (curX - left) / (right - left); >+ leftWeight = (int) ((totalWeight * pct) + 0.5); >+ if (leftWeight < tenPctTotal) >+ leftWeight = tenPctTotal; >+ if (leftWeight > (totalWeight - tenPctTotal)) >+ leftWeight = totalWeight - tenPctTotal; >+ rightWeight = totalWeight - leftWeight; >+ } else { >+ double top = leftRect.y; >+ double bottom = rightRect.y + rightRect.height; >+ double pct = (curY - top) / (bottom - top); >+ leftWeight = (int) ((totalWeight * pct) + 0.5); >+ if (leftWeight < tenPctTotal) >+ leftWeight = tenPctTotal; >+ if (leftWeight > (totalWeight - tenPctTotal)) >+ leftWeight = totalWeight - tenPctTotal; >+ rightWeight = totalWeight - leftWeight; >+ } >+ >+ setWeight(sr.left, leftWeight); >+ setWeight(sr.right, rightWeight); >+ } >+ } >+ >+ private void setWeight(MUIElement element, int weight) { >+ element.setContainerData(Integer.toString(weight)); >+ } >+ >+ private Rectangle getRectangle(MUIElement element) { >+ if (element instanceof MGenericTile<?>) >+ return (Rectangle) element.getWidget(); >+ else if (element.getWidget() instanceof Control) >+ return ((Control) (element.getWidget())).getBounds(); >+ return null; >+ } >+ >+ protected List<SashRect> getSashRects(int x, int y) { >+ List<SashRect> srs = new ArrayList<SashRect>(); >+ boolean inSash = false; >+ for (SashRect sr : sashes) { >+ if (sr.rect.contains(x, y)) >+ inSash = true; >+ } >+ if (!inSash) >+ return srs; >+ >+ Rectangle target = new Rectangle(x - 5, y - 5, 10, 10); >+ for (SashRect sr : sashes) { >+ if (sr.rect.intersects(target)) >+ srs.add(sr); >+ } >+ return srs; >+ } >+ >+ @Override >+ protected Point computeSize(Composite composite, int wHint, int hHint, >+ boolean flushCache) { >+ return new Point(600, 400); >+ } >+ >+ private int totalWeight(MGenericTile<?> node) { >+ int total = 0; >+ for (MUIElement subNode : node.getChildren()) { >+ if (subNode.isToBeRendered() && subNode.isVisible()) >+ total += getWeight(subNode); >+ } >+ return total; >+ } >+ >+ private void tileSubNodes(Rectangle bounds, MUIElement node) { >+ setRectangle(node, bounds); >+ >+ if (!(node instanceof MGenericTile<?>)) >+ return; >+ >+ MGenericTile<?> sashContainer = (MGenericTile<?>) node; >+ List<MUIElement> visibleChildren = getVisibleChildren(sashContainer); >+ int childCount = visibleChildren.size(); >+ >+ // How many pixels do we have? >+ int availableWidth = sashContainer.isHorizontal() ? bounds.width >+ : bounds.height; >+ >+ // Subtract off the room for the sashes >+ availableWidth -= ((childCount - 1) * sashWidth); >+ >+ // Get the total of the weights >+ double totalWeight = totalWeight(sashContainer); >+ int tilePos = sashContainer.isHorizontal() ? bounds.x : bounds.y; >+ >+ MUIElement prev = null; >+ for (MUIElement subNode : visibleChildren) { >+ // Add a 'sash' between this node and the 'prev' >+ if (prev != null) { >+ Rectangle sashRect = sashContainer.isHorizontal() ? new Rectangle( >+ tilePos, bounds.y, sashWidth, bounds.height) >+ : new Rectangle(bounds.x, tilePos, bounds.width, >+ sashWidth); >+ sashes.add(new SashRect(sashRect, sashContainer, prev, subNode)); >+ host.redraw(sashRect.x, sashRect.y, sashRect.width, >+ sashRect.height, false); >+ tilePos += sashWidth; >+ } >+ >+ // Calc the new size as a %'age of the total >+ double ratio = getWeight(subNode) / totalWeight; >+ int newSize = (int) ((availableWidth * ratio) + 0.5); >+ >+ Rectangle subBounds = sashContainer.isHorizontal() ? new Rectangle( >+ tilePos, bounds.y, newSize, bounds.height) : new Rectangle( >+ bounds.x, tilePos, bounds.width, newSize); >+ tilePos += newSize; >+ >+ tileSubNodes(subBounds, subNode); >+ prev = subNode; >+ } >+ } >+ >+ /** >+ * @param node >+ * @param bounds >+ */ >+ private void setRectangle(MUIElement node, Rectangle bounds) { >+ if (node.getWidget() instanceof Control) >+ ((Control) (node.getWidget())).setBounds(bounds); >+ else if (node instanceof MGenericTile<?>) { >+ Rectangle newRect = new Rectangle(bounds.x, bounds.y, bounds.width, >+ bounds.height); >+ node.setWidget(newRect); >+ } >+ } >+ >+ private List<MUIElement> getVisibleChildren(MGenericTile<?> sashContainer) { >+ List<MUIElement> visKids = new ArrayList<MUIElement>(); >+ for (MUIElement child : sashContainer.getChildren()) { >+ if (child.isToBeRendered() && child.isVisible()) >+ visKids.add(child); >+ } >+ return visKids; >+ } >+ >+ private static int getWeight(MUIElement element) { >+ String info = element.getContainerData(); >+ if (info == null || info.length() == 0) { >+ element.setContainerData(Integer.toString(100)); >+ info = element.getContainerData(); >+ } >+ >+ try { >+ int value = Integer.parseInt(info); >+ return value; >+ } catch (NumberFormatException e) { >+ return 500; >+ } >+ } >+} >Index: src/org/eclipse/e4/ui/workbench/renderers/swt/SashRenderer.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SashRenderer.java,v >retrieving revision 1.2 >diff -u -r1.2 SashRenderer.java >--- src/org/eclipse/e4/ui/workbench/renderers/swt/SashRenderer.java 14 Sep 2010 18:08:38 -0000 1.2 >+++ src/org/eclipse/e4/ui/workbench/renderers/swt/SashRenderer.java 28 Sep 2010 20:16:58 -0000 >@@ -10,160 +10,39 @@ > *******************************************************************************/ > package org.eclipse.e4.ui.workbench.renderers.swt; > >-import java.util.ArrayList; >-import java.util.HashMap; >-import java.util.List; >-import java.util.Map; > import javax.annotation.PostConstruct; > import javax.annotation.PreDestroy; > import javax.inject.Inject; > import org.eclipse.e4.core.services.events.IEventBroker; >+import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer; > import org.eclipse.e4.ui.model.application.ui.MElementContainer; > import org.eclipse.e4.ui.model.application.ui.MUIElement; >+import org.eclipse.e4.ui.model.application.ui.advanced.MArea; > import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer; > import org.eclipse.e4.ui.workbench.UIEvents; > import org.eclipse.swt.SWT; > import org.eclipse.swt.custom.SashForm; >-import org.eclipse.swt.events.ControlEvent; >-import org.eclipse.swt.events.ControlListener; >-import org.eclipse.swt.events.DisposeEvent; >-import org.eclipse.swt.events.DisposeListener; >-import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.graphics.Rectangle; > import org.eclipse.swt.widgets.Control; >-import org.eclipse.swt.widgets.Widget; > import org.osgi.service.event.Event; > import org.osgi.service.event.EventHandler; > > public class SashRenderer extends SWTPartRenderer { > >- private ControlListener resizeListener = new ControlListener() { >- public void controlMoved(ControlEvent e) { >- } >- >- public void controlResized(ControlEvent e) { >- Control ctrl = (Control) e.widget; >- if (ctrl.isDisposed() || !(ctrl.getParent() instanceof SashForm)) >- return; >- >- SashForm sf = (SashForm) ctrl.getParent(); >- if (weightsChanged(sf)) { >- // Cache the new values >- weightsMap.put(sf, sf.getWeights()); >- addSashToUpdate(sf); >- } >- } >- >- // determine if the weights in the SashForm have actually changed >- private boolean weightsChanged(SashForm sf) { >- int[] oldW = (int[]) weightsMap.get(sf); >- int[] newW = sf.getWeights(); >- if (oldW == null || oldW.length != newW.length) >- return true; >- for (int j = 0; j < oldW.length; j++) { >- if (oldW[j] != newW[j]) >- return true; >- } >- return false; >- } >- }; >- >- private class SashUpdateJob implements Runnable { >- public List<SashForm> sashesToUpdate = new ArrayList<SashForm>(); >- >- public void run() { >- clearSashUpdate(); >- while (!sashesToUpdate.isEmpty()) { >- SashForm sf = sashesToUpdate.remove(0); >- if (sf.isDisposed()) >- continue; >- >- // prevent recursive updating >- ignoreWeightUpdates = true; >- synchModelToSash(sf); >- ignoreWeightUpdates = false; >- } >- } >- } >- >- private void addSashToUpdate(SashForm sf) { >- MElementContainer<MUIElement> psc = (MElementContainer<MUIElement>) sf >- .getData(OWNING_ME); >- if (modelUpdateJob != null >- && modelUpdateJob.sashModelsToUpdate.contains(psc)) { >- return; >- } >- if (sashUpdateJob == null) { >- sashUpdateJob = new SashUpdateJob(); >- sashUpdateJob.sashesToUpdate.add(sf); >- sf.getDisplay().asyncExec(sashUpdateJob); >- } else { >- if (!sashUpdateJob.sashesToUpdate.contains(sf)) >- sashUpdateJob.sashesToUpdate.add(sf); >- } >- } >- >- private class ModelUpdateJob implements Runnable { >- public List<MElementContainer<MUIElement>> sashModelsToUpdate = new ArrayList<MElementContainer<MUIElement>>(); >- >- public void run() { >- clearModelUpdate(); >- while (!sashModelsToUpdate.isEmpty()) { >- MElementContainer<MUIElement> psc = sashModelsToUpdate >- .remove(0); >- >- // prevent recursive updating >- ignoreWeightUpdates = true; >- synchSashToModel(psc); >- ignoreWeightUpdates = false; >- } >- } >- } >- >- private void addModelToUpdate(MElementContainer<MUIElement> pscModel) { >- Control sf = (Control) pscModel.getWidget(); >- if (sf == null || sf.isDisposed()) >- return; >- >- if (modelUpdateJob == null) { >- modelUpdateJob = new ModelUpdateJob(); >- modelUpdateJob.sashModelsToUpdate.add(pscModel); >- sf.getDisplay().asyncExec(modelUpdateJob); >- } else { >- if (!modelUpdateJob.sashModelsToUpdate.contains(pscModel)) >- modelUpdateJob.sashModelsToUpdate.add(pscModel); >- } >- } >- > @Inject > private IEventBroker eventBroker; > > private static final int UNDEFINED_WEIGHT = -1; > private static final int DEFAULT_WEIGHT = 100; > >- private Map weightsMap = new HashMap(); >- > private EventHandler sashOrientationHandler; > private EventHandler sashWeightHandler; >- >- ModelUpdateJob modelUpdateJob; >- SashUpdateJob sashUpdateJob; >- >- protected boolean ignoreWeightUpdates = false; >- > private EventHandler visibilityHandler; > > public SashRenderer() { > super(); > } > >- void clearModelUpdate() { >- modelUpdateJob = null; >- } >- >- void clearSashUpdate() { >- sashUpdateJob = null; >- } >- > @PostConstruct > void postConstruct() { > sashOrientationHandler = new EventHandler() { >@@ -191,9 +70,6 @@ > > sashWeightHandler = new EventHandler() { > public void handleEvent(Event event) { >- if (ignoreWeightUpdates) >- return; >- > // Ensure that this event is for a MPartSashContainer > MUIElement element = (MUIElement) event > .getProperty(UIEvents.EventTags.ELEMENT); >@@ -205,7 +81,7 @@ > MElementContainer<MUIElement> pscModel = (MElementContainer<MUIElement>) parent; > if (UIEvents.UIElement.CONTAINERDATA.equals(event > .getProperty(UIEvents.EventTags.ATTNAME))) { >- addModelToUpdate(pscModel); >+ forceLayout(pscModel); > } > } > }; >@@ -223,8 +99,9 @@ > MElementContainer<MUIElement> pscModel = (MElementContainer<MUIElement>) parent; > if (UIEvents.UIElement.VISIBLE.equals(event > .getProperty(UIEvents.EventTags.ATTNAME))) { >- if (element.isVisible()) >- addModelToUpdate(pscModel); >+ if (element.isVisible()) { >+ forceLayout(pscModel); >+ } > } > } > }; >@@ -233,6 +110,17 @@ > UIEvents.UIElement.VISIBLE), visibilityHandler); > } > >+ /** >+ * @param pscModel >+ */ >+ protected void forceLayout(MElementContainer<MUIElement> pscModel) { >+ // layout the containing Composite >+ while (!(pscModel.getWidget() instanceof Control)) >+ pscModel = pscModel.getParent(); >+ Control ctrl = (Control) pscModel.getWidget(); >+ ctrl.getParent().layout(true, true); >+ } >+ > @PreDestroy > void preDestroy() { > eventBroker.unsubscribe(sashOrientationHandler); >@@ -240,21 +128,9 @@ > eventBroker.unsubscribe(visibilityHandler); > } > >- public Widget createWidget(MUIElement element, Object parent) { >- if (!(element instanceof MPartSashContainer) >- || !(parent instanceof Composite)) >- return null; >- >- Widget parentWidget = (Widget) parent; >- >- MPartSashContainer psc = (MPartSashContainer) element; >- int orientation = psc.isHorizontal() ? SWT.HORIZONTAL : SWT.VERTICAL; >- SashForm newSash = new SashForm((Composite) parentWidget, SWT.SMOOTH >- | orientation); >- bindWidget(element, newSash); >- newSash.setVisible(true); >- >- return newSash; >+ public Object createWidget(MUIElement element, Object parent) { >+ Rectangle newRect = new Rectangle(0, 0, 0, 0); >+ return newRect; > } > > /* >@@ -278,27 +154,32 @@ > if (weight == UNDEFINED_WEIGHT) { > element.setContainerData(Integer.toString(DEFAULT_WEIGHT)); > } >+ } > >- // Ensure the Z-order of the contained controls matches the model order >- final MElementContainer<MUIElement> psc = parentElement; >- for (MUIElement part : psc.getChildren()) { >- Control partCtrl = (Control) part.getWidget(); >- if (partCtrl != null) { >- partCtrl.moveBelow(null); >- } >+ /* >+ * (non-Javadoc) >+ * >+ * @see >+ * org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer#getUIContainer >+ * (org.eclipse.e4.ui.model.application.ui.MUIElement) >+ */ >+ @Override >+ public Object getUIContainer(MUIElement element) { >+ // OK, find the first parent that is *not* a sash container >+ MUIElement parentElement = element.getParent(); >+ MUIElement prevParent = null; >+ while (parentElement instanceof MPartSashContainer >+ && !(parentElement instanceof MArea)) { >+ prevParent = parentElement; >+ parentElement = parentElement.getParent(); >+ } >+ >+ if (parentElement.getRenderer() instanceof AbstractPartRenderer) { >+ AbstractPartRenderer renderer = (AbstractPartRenderer) parentElement >+ .getRenderer(); >+ return renderer.getUIContainer(prevParent); > } >- >- // Set up the size listeners >- Control newCtrl = (Control) element.getWidget(); >- newCtrl.addControlListener(resizeListener); >- newCtrl.addDisposeListener(new DisposeListener() { >- public void widgetDisposed(DisposeEvent e) { >- ((Control) e.widget).removeControlListener(resizeListener); >- } >- }); >- >- // synch this sash after the dust settles >- addModelToUpdate(psc); >+ return null; > } > > /* >@@ -314,25 +195,6 @@ > MUIElement child) { > super.hideChild(parentElement, child); > >- // synch this sash after the dust settles >- addModelToUpdate(parentElement); >- } >- >- public void postProcess(MUIElement element) { >- if (!(element instanceof MPartSashContainer)) >- return; >- >- MElementContainer<MUIElement> psc = (MElementContainer<MUIElement>) element; >- final SashForm sashForm = (SashForm) psc.getWidget(); >- >- synchSashToModel(psc); >- >- // Clean up the cache entry on dispose >- sashForm.addDisposeListener(new DisposeListener() { >- public void widgetDisposed(DisposeEvent e) { >- weightsMap.remove(e.widget); >- } >- }); > } > > /** >@@ -353,96 +215,4 @@ > return UNDEFINED_WEIGHT; > } > } >- >- private static int[] getModelWeights(MElementContainer<MUIElement> psc) { >- int count = 0; >- for (MUIElement element : psc.getChildren()) { >- if (element.getWidget() != null && element.isVisible()) >- count++; >- } >- >- int[] modelWeights = new int[count]; >- int index = 0; >- for (MUIElement element : psc.getChildren()) { >- if (element.getWidget() != null && element.isVisible()) >- modelWeights[index++] = getWeight(element); >- } >- return modelWeights; >- } >- >- private static MUIElement[] getModelElements(SashForm sf) { >- Object me = sf.getData(OWNING_ME); >- if (!(me instanceof MPartSashContainer)) >- return null; >- >- MPartSashContainer psc = (MPartSashContainer) me; >- List<MUIElement> modelElements = new ArrayList<MUIElement>(); >- for (MUIElement element : psc.getChildren()) { >- if (element.getWidget() != null && element.isVisible()) >- modelElements.add(element); >- } >- >- return modelElements.toArray(new MUIElement[modelElements.size()]); >- } >- >- /** >- * @param psc >- */ >- private void synchSashToModel(MElementContainer<MUIElement> psc) { >- if (!(psc.getWidget() instanceof SashForm)) >- return; >- >- SashForm sf = (SashForm) psc.getWidget(); >- if (sf.isDisposed()) >- return; >- >- int[] curWeights = sf.getWeights(); >- assert (curWeights.length > 0); >- int[] newWeights = getModelWeights(psc); >- >- // Put the new weights in the map first >- if (newWeights.length > 0) >- sf.setWeights(newWeights); >- sf.layout(); >- weightsMap.put(sf, newWeights); >- curWeights = sf.getWeights(); >- } >- >- /** >- * @param psc >- */ >- private void synchModelToSash(SashForm sf) { >- // Calculate the total amount of 'containerData' weights for the visible >- // components >- MUIElement[] elements = SashRenderer.getModelElements(sf); >- if (elements.length <= 1) >- return; >- >- int totalModelWeight = 0; >- for (MUIElement element : elements) { >- totalModelWeight += getWeight(element); >- } >- >- int[] w = sf.getWeights(); >- int totalSashWeight = 0; >- for (int weight : w) { >- totalSashWeight += weight; >- } >- >- // Ensure that the new containerData weights add up to what they used to >- double ratio = (double) totalModelWeight / totalSashWeight; >- int totalAdded = 0; >- for (int i = 0; i < w.length; i++) { >- int newWeight = (int) (w[i] * ratio); >- >- // The last element will use up all the leftover 'weight' to avoid >- // roundoff errors >- if (i == (w.length - 1)) >- newWeight = totalModelWeight - totalAdded; >- elements[i].setContainerData(Integer.toString(newWeight)); >- totalAdded += newWeight; >- } >- // System.out >- // .println("Model Weights changed: " + totalModelWeight + " " + totalAdded); //$NON-NLS-1$//$NON-NLS-2$ >- } > } >Index: src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java,v >retrieving revision 1.6 >diff -u -r1.6 WBWRenderer.java >--- src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java 21 Jul 2010 15:56:11 -0000 1.6 >+++ src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java 28 Sep 2010 20:16:58 -0000 >@@ -498,6 +498,14 @@ > public Object getUIContainer(MUIElement element) { > Composite shellComp = (Composite) element.getParent().getWidget(); > TrimmedPartLayout tpl = (TrimmedPartLayout) shellComp.getLayout(); >+ Composite ca = tpl.clientArea; >+ >+ // Apply the new SashLayout to the client area >+ if (!(ca.getLayout() instanceof SashLayout)) { >+ SashLayout sl = new SashLayout(ca, null); >+ ca.setLayout(sl); >+ } >+ > return tpl.clientArea; > } > >@@ -505,6 +513,27 @@ > * (non-Javadoc) > * > * @see >+ * org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer#childRendered >+ * (org.eclipse.e4.ui.model.application.ui.MElementContainer, >+ * org.eclipse.e4.ui.model.application.ui.MUIElement) >+ */ >+ @Override >+ public void childRendered(MElementContainer<MUIElement> parentElement, >+ MUIElement element) { >+ // TODO Auto-generated method stub >+ super.childRendered(parentElement, element); >+ >+ // Reset the 'root' element to the new child (last one in wins) >+ Composite shellComp = (Composite) element.getParent().getWidget(); >+ TrimmedPartLayout tpl = (TrimmedPartLayout) shellComp.getLayout(); >+ SashLayout sl = (SashLayout) tpl.clientArea.getLayout(); >+ sl.setRootElemenr(element); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see > * org.eclipse.e4.ui.workbench.renderers.PartFactory#postProcess(org.eclipse > * .e4.ui.model.application.MPart) > */ >Index: src/org/eclipse/e4/ui/workbench/renderers/swt/WorkbenchRendererFactory.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WorkbenchRendererFactory.java,v >retrieving revision 1.2 >diff -u -r1.2 WorkbenchRendererFactory.java >--- src/org/eclipse/e4/ui/workbench/renderers/swt/WorkbenchRendererFactory.java 28 Jun 2010 20:06:04 -0000 1.2 >+++ src/org/eclipse/e4/ui/workbench/renderers/swt/WorkbenchRendererFactory.java 28 Sep 2010 20:16:58 -0000 >@@ -5,6 +5,7 @@ > import org.eclipse.e4.core.contexts.IEclipseContext; > import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer; > import org.eclipse.e4.ui.model.application.ui.MUIElement; >+import org.eclipse.e4.ui.model.application.ui.advanced.MArea; > import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; > import org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack; > import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder; >@@ -28,6 +29,7 @@ > > public class WorkbenchRendererFactory implements IRendererFactory { > >+ private AreaRenderer areaRenderer; > private MenuRenderer menuRenderer; > private HandledMenuItemRenderer handledMenuItemRenderer; > private ToolBarRenderer toolbarRenderer; >@@ -50,7 +52,13 @@ > private RenderedToolBarRenderer renderedToolbarRenderer; > > public AbstractPartRenderer getRenderer(MUIElement uiElement, Object parent) { >- if (uiElement instanceof MPart) { >+ if (uiElement instanceof MArea) { >+ if (areaRenderer == null) { >+ areaRenderer = new AreaRenderer(); >+ initRenderer(areaRenderer); >+ } >+ return areaRenderer; >+ } else if (uiElement instanceof MPart) { > if (contributedPartRenderer == null) { > contributedPartRenderer = new ContributedPartRenderer(); > initRenderer(contributedPartRenderer); >#P org.eclipse.e4.ui.workbench.swt >Index: src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.ui/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java,v >retrieving revision 1.42 >diff -u -r1.42 PartRenderingEngine.java >--- src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java 31 Aug 2010 18:53:06 -0000 1.42 >+++ src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java 28 Sep 2010 20:17:00 -0000 >@@ -185,7 +185,7 @@ > boolean renderIt = !isStack || hasWidget || isSelected; > if (renderIt) { > // NOTE: createGui will call 'childAdded' if successful >- Widget w = (Widget) createGui(added); >+ Object w = createGui(added); > if (w instanceof Control && !(w instanceof Shell)) { > fixZOrder(added); > ((Control) w).getShell().layout( >@@ -378,6 +378,15 @@ > ctrl.setParent((Composite) parentWidget); > } > } >+ >+ // Now that we have a widget let the parent (if any) know >+ if (element.getParent() instanceof MUIElement) { >+ MElementContainer<MUIElement> parentElement = element >+ .getParent(); >+ AbstractPartRenderer parentRenderer = getRendererFor(parentElement); >+ if (parentRenderer != null) >+ parentRenderer.childRendered(parentElement, element); >+ } > return element.getWidget(); > } > >#P org.eclipse.ui.workbench >Index: Eclipse UI/org/eclipse/ui/internal/e4/compatibility/ModeledPageLayout.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.compatibility/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/ModeledPageLayout.java,v >retrieving revision 1.29 >diff -u -r1.29 ModeledPageLayout.java >--- Eclipse UI/org/eclipse/ui/internal/e4/compatibility/ModeledPageLayout.java 24 Sep 2010 21:03:46 -0000 1.29 >+++ Eclipse UI/org/eclipse/ui/internal/e4/compatibility/ModeledPageLayout.java 28 Sep 2010 20:17:00 -0000 >@@ -18,6 +18,7 @@ > import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor; > import org.eclipse.e4.ui.model.application.ui.MElementContainer; > import org.eclipse.e4.ui.model.application.ui.MUIElement; >+import org.eclipse.e4.ui.model.application.ui.advanced.MArea; > import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; > import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder; > import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedFactoryImpl; >@@ -91,34 +92,34 @@ > > this.createReferences = createReferences; > >- MPartSashContainer esc = null; >+ MArea sharedArea = null; > List<MUIElement> sharedElements = window.getSharedElements(); > for (MUIElement element : sharedElements) { > if (element.getElementId().equals(getEditorArea())) { >- esc = (MPartSashContainer) element; >+ sharedArea = (MArea) element; > break; > } > } > >- if (esc == null) { >- esc = BasicFactoryImpl.eINSTANCE.createPartSashContainer(); >+ if (sharedArea == null) { >+ sharedArea = AdvancedFactoryImpl.eINSTANCE.createArea(); >+ sharedArea.setLabel("Editor Area"); //$NON-NLS-1$ >+ > editorStack = BasicFactoryImpl.eINSTANCE.createPartStack(); > // temporary HACK for bug 303982 > editorStack.getTags().add("newtablook"); //$NON-NLS-1$ > editorStack.getTags().add("org.eclipse.e4.primaryDataStack"); //$NON-NLS-1$ > editorStack.getTags().add("EditorStack"); //$NON-NLS-1$ > editorStack.setElementId("org.eclipse.e4.primaryDataStack"); //$NON-NLS-1$ >- esc.getChildren().add(editorStack); >- esc.setElementId(getEditorArea()); >+ sharedArea.getChildren().add(editorStack); >+ sharedArea.setElementId(getEditorArea()); > >- window.getSharedElements().add(esc); >+ window.getSharedElements().add(sharedArea); > } > > MPlaceholder eaRef = AdvancedFactoryImpl.eINSTANCE.createPlaceholder(); > eaRef.setElementId(getEditorArea()); >- eaRef.setRef(esc); >- >- // editorArea.setName("Editor Area"); >+ eaRef.setRef(sharedArea); > > perspModel.getChildren().add(eaRef); > >@@ -439,28 +440,28 @@ > psc.getChildren().add((MPartSashContainerElement) toInsert); > psc.getChildren().add((MPartSashContainerElement) relTo); > toInsert.setContainerData("" + ratio); //$NON-NLS-1$ >- relTo.setContainerData("" + (100 - ratio)); //$NON-NLS-1$ >+ relTo.setContainerData("" + (10000 - ratio)); //$NON-NLS-1$ > psc.setHorizontal(true); > break; > case SWT.RIGHT: > psc.getChildren().add((MPartSashContainerElement) relTo); > psc.getChildren().add((MPartSashContainerElement) toInsert); > relTo.setContainerData("" + ratio); //$NON-NLS-1$ >- toInsert.setContainerData("" + (100 - ratio)); //$NON-NLS-1$ >+ toInsert.setContainerData("" + (10000 - ratio)); //$NON-NLS-1$ > psc.setHorizontal(true); > break; > case SWT.TOP: > psc.getChildren().add((MPartSashContainerElement) toInsert); > psc.getChildren().add((MPartSashContainerElement) relTo); > toInsert.setContainerData("" + ratio); //$NON-NLS-1$ >- relTo.setContainerData("" + (100 - ratio)); //$NON-NLS-1$ >+ relTo.setContainerData("" + (10000 - ratio)); //$NON-NLS-1$ > psc.setHorizontal(false); > break; > case SWT.BOTTOM: > psc.getChildren().add((MPartSashContainerElement) relTo); > psc.getChildren().add((MPartSashContainerElement) toInsert); > relTo.setContainerData("" + ratio); //$NON-NLS-1$ >- toInsert.setContainerData("" + (100 - ratio)); //$NON-NLS-1$ >+ toInsert.setContainerData("" + (10000 - ratio)); //$NON-NLS-1$ > psc.setHorizontal(false); > break; > } >@@ -510,7 +511,7 @@ > > public static void insert(MUIElement toInsert, MUIElement relTo, > int swtSide, float ratio) { >- int pct = (int) (ratio * 100); >+ int pct = (int) (ratio * 10000); > insert(toInsert, relTo, swtSide, pct); > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 317849
:
172629
|
176553
|
179782
|
179783
| 179786 |
179870