I do not know how to change the IPageLayout layout IPageLayout in Eclipse 3.x. However, in Eclipse 4.2, the application model can change dynamically at runtime.
So, if you plan to port your application to Eclipse 4, this solution might be an option. To keep the source application and user interface code unavailable, this solution will be
- make full use of the compatibility level of Eclipse 4 to create an application model from an RCP application based on Eclipse 3. There is no need to create an application model or change the application user interface code.
- Reorder the editor after the application is active. This is done by creating the addon class in a separate plugin.
- make it easy to upgrade to more functional features of Eclipse 4 in the future: if you decide to create your own application model, you can simply disconnect the add-on plugin.
I started with the regular RCP Mail Eclipse 3 template and changed the perspective to recreate the problem. This is the Perspective class that I used in my test application:
import org.eclipse.ui.IPageLayout; import org.eclipse.ui.IPerspectiveFactory; public class Perspective implements IPerspectiveFactory { public static final String ID = "wag.perspective"; public void createInitialLayout(IPageLayout layout) { String editorArea = layout.getEditorArea(); layout.setEditorAreaVisible(true); layout.addStandaloneView(AView.ID, false, IPageLayout.LEFT, 0.25f, editorArea); layout.addStandaloneView(BView.ID, false, IPageLayout.LEFT, 0.25f, editorArea); layout.getViewLayout(AView.ID).setCloseable(false); layout.getViewLayout(BView.ID).setCloseable(false); } }
Basically, he creates the scenario you described: the arrangement of three columns, where one leaf acts on all three parts, and the other on only two.
Then I moved on to porting the application and changing the application model.
Porting an RCP Application to Eclipse 3 in Eclipse 4
Online tutorials are available for this process. I found Eclipse 4.1: Run your 3.x RCP in 4.1 and Eclipse 4 and the compatibility level is a tutorial to be very useful.
I recommend including org.eclipse.e4.tools.emf.liveeditor and its necessary plugins depending on your product. With a live editor, you can take a look at the application model created by the compatibility level.
As soon as the application starts, these wings will still behave the same. Open the live editor in the application window and take a look at your model.

You can see that the PartSashContainer containing the placeholder for AView contains another PartSashContainer . Moving the sash between AView and this container will update the rest of the layout tree by moving the sash between the BView , and the editor does not affect other parts of the layout.
Now you can drag the placeholder for AView to the container where the BView and editor are located. This would instantly create the effect you desire: the flaps would only affect their direct neighbors. But these changes will be saved in only one workspace of the work environment. Something else is needed to change the layout structure.
Change application model at runtime
Since I did not want to touch the source code, if possible, I created another plugin to contribute to the Application Model.
Create a plug-in project without Activator without using a template.
Add Addon class: select New-> Other-> Eclipse 4-> Classes-> New Addon Class
Add Model Fragment : select New-> Other-Eclipse 4-> Model-> New Model Fragment. Open the created fragment.e4xmi file and add Model Fragment . For the item ID, put org.eclipse.e4.legacy.ide.application (this is the standard identifier for legacy applications) and for Featurename addons . Add Addon to Model Fragment . Enter the identifier and set the Class URI to your addon class.
Now add your fragment.e4xmi to your org.eclipse.e4.workbench.model extension point:
<extension id="id1" point="org.eclipse.e4.workbench.model"> <fragment uri="fragment.e4xmi"> </fragment> </extension>
Add your plugin for input depending on your application product. When you start your application and look at the model using the live editor, you should see your Addon specified in the model.
Now we can implement Addon . This is the code of my Addon class:
package wag.contribution.addons; import java.util.ArrayList; import java.util.Arrays; import java.util.List; 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.model.application.MApplication; 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.MPlaceholder; import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; public class LayoutSorter { @Inject private IEventBroker broker; private EventHandler handler;
(Note that the code above is a bit hacked because it really only works for this particular problem.)
After rebooting, the application should now behave in its own way. Take a look at the application model to see your changes.
It should be remembered that local changes are saved in the working time area in the .metadata\.plugins\org.eclipse.e4.workbench\workbench.xmi file if saving is enabled, therefore this file must be deleted to recreate an immutable model for testing.