Did you know? DZone has great portals for Python, Cloud, NoSQL, and HTML5!

Dimitri has posted 2 posts at DZone. View Full User Profile

Programmatically split an editor area to show two editors side by side.

10.20.2008
Email
Views: 5412
  • submit to reddit

Last time a workmate of mine asked me if it is possible, to programmatically split the editor area of an eclipse RCP application.

We all know that if you have two editors opened in the workbench, you can drag one of the editors and drop it in one of the regions of the editor area (bottom, top, left or right) so that both editors are side by side.

I started to analyze the eclipse code and look for a public API that I can use to achieve this task. I didn’t find anything. My first idea was to simulate the Drag&Drop behavior, but it came out to be a very challenging task.

So I’ve decided to use some of the API calls, which the eclipse team discourages to use. And it works. I bundled my code into a plug-in. Maybe someone will find this useful.

Here is the most important part of the code:

/**
* Split the editor area if there is at least two editors in it.
*/
private void splitEditorArea() {
IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IWorkbenchPart part = workbenchPage.getActivePart();
PartPane partPane = ((PartSite) part.getSite()).getPane();
LayoutPart layoutPart = partPane.getPart();

IEditorReference[] editorReferences = workbenchPage.getEditorReferences();
// Do it only if we have more that one editor
if (editorReferences.length > 1) {
// Get PartPane that correspond to the active editor
PartPane currentEditorPartPane = ((PartSite) workbenchPage.getActiveEditor().getSite()).getPane();
EditorSashContainer editorSashContainer = null;
ILayoutContainer rootLayoutContainer = layoutPart.getContainer();
if (rootLayoutContainer instanceof LayoutPart) {
ILayoutContainer editorSashLayoutContainer = ((LayoutPart) rootLayoutContainer).getContainer();
if (editorSashLayoutContainer instanceof EditorSashContainer) {
editorSashContainer = ((EditorSashContainer) editorSashLayoutContainer);
}
}
/*
* Create a new part stack (i.e. a workbook) to home the
* currentEditorPartPane which hold the active editor
*/
PartStack newPart = createStack(editorSashContainer);
editorSashContainer.stack(currentEditorPartPane, newPart);
if (rootLayoutContainer instanceof LayoutPart) {
ILayoutContainer cont = ((LayoutPart) rootLayoutContainer).getContainer();
if (cont instanceof PartSashContainer) {
// "Split" the editor area by adding the new part
((PartSashContainer) cont).add(newPart);
}
}
}
}

/**
* A method to create a part stack container (a new workbook)
*
* @param editorSashContainer the <code>EditorSashContainer</code> to set for the returned <code>PartStack</code>
* @return a new part stack container
*/
private PartStack createStack(EditorSashContainer editorSashContainer) {
WorkbenchPage workbenchPage = (WorkbenchPage) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
EditorStack newWorkbook = EditorStack.newEditorWorkbook(editorSashContainer, workbenchPage);
return newWorkbook;
}

 

You can download the full eclipse plug-in code from my blog: http://swarmy.free.fr/wordpress/ 

0
Your rating: None
Published at DZone with permission of its author, Dimitri Missoh.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

narayan jai replied on Wed, 2009/09/23 - 7:06am

Hi, I m very new to eclipse. I run the above code.I m able to get a vertical spliter. can you post some solution regarding "how to split two editor horizontaly". ie.
| Editor 1 |
| Editor 2 |
Thanks in advance,

Alex InGermany replied on Mon, 2009/09/28 - 4:32am

To show one editor above another, you need a little change in the code

Line 33 :

((PartSashContainer) cont).add(newPart);

will be removed through the following line :

PartSashContainer c = (PartSashContainer)cont;
c.add(newPart, IPageLayout.BOTTOM, 0.50f, c.findBottomRight());

Vikas Roonwal replied on Mon, 2010/02/01 - 7:57am

I was able to get the split, but now all hot-keys present in the new editor workbook are messed up i.e. if I have the same hot-keys (example - ALT + g) in the new editor that I add to the split-pane and an earlier editor, pressing ALT+g while the focus is on one of the text fields of the new editor triggers the same action on the earlier edtior.

Are we supposed to re-order the  workbooks or editors?

Thanks and best regards,

~Vikas

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.