Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-ui-dev] Workbench editor cycling

Quick recap: I'm writing a view for editor management which includes the 
ability to navigate forward and backward through the editor activation 
history. A few weeks ago I mentioned that a method I was using on 
WorkbenchPage wasn't API, but that it should be considered for API because it 
could be useful to others. For some reason (Sorry, Nick, I still don't 
understand), the response to this request was to delete the existing method. 
I was encouraged to reproduce the deleted functionality in my view. 

Unfortunately, I haven't been able to do this since my view doesn't have 
access to the internals of the workbench page's activation list.

The public method cycleEditors(boolean forward) on WorkbenchPage that I was 
using to cycle editors just activated the editor returned from the 
cycleEditors method on the ActivationList (private inner class in the 
WorkbenchPage). This method reads:

EditorPart cycleEditors(boolean forward) {
  ArrayList editors = getEditors();
  if (editors.size() >= 2) {
    if (forward) {
      // move the topmost editor to the bottom
      IEditorPart top = (IEditorPart) editors.get(editors.size()-1);
      parts.remove(top);
      parts.add(0, top);
      // get the next editor and move it on top of any views
      IEditorPart next = (IEditorPart) editors.get(editors.size()-2);
      setActive(next);
      return next;
    } else {
      // move the bottom-most editor to the top
      IEditorPart prev = (IEditorPart) editors.get(0);
      setActive(prev);
      return prev;
    }
  }
  return null;
}

The WorkbenchPage still provides a public method getSortedEditors() that 
returns the same editors as the getEditors() call above. So I can reproduce 
the part activation code. However, I can't copy the code in the "if 
(forward)" case that moves the top editor to the bottom of the "parts" 
collection.

Unless I'm mistaken (and I very well could be), the most I can do is:
public void cycleEditors(boolean forward) {
  WorkbenchPage page= (WorkbenchPage)getPage();
  IEditorPart[] editors= page.getSortedEditors();
  if (editors.length >= 2) {
    if (forward) {
    // move the topmost editor to the bottom
    page.activate(editors[editors.length-2]);
    } else {
      // move the bottom-most editor to the top
      page.activate(editors[0]);
    }
  }
}

This code isn't enough, however, as it doesn't make the necessary updates to 
the state of the page's activation list.

The simplest fix is to return the old cycleEditors() to the WorkbenchPage. 
Short of this, is there anything I can do to get the functionality that was 
removed?

Thanks,
- Jared

On Tuesday 26 March 2002 01:31 pm, you wrote:
> Jared,
>
> WorkbenchPage.cycleEditors(boolean) was stale code, left over from when
> Ctrl+F6 cycled the editors (a la MDI) rather than bringing up the editor
> switcher.
> I have deleted it (sorry).
>
> We currently have no plans to expose the activation history as API,
> although if you're working in the UI component, you can get it using the
> non-API method WorkbenchPage.getSortedEditors().
>
> Nick
>
>
> Jared Burns <jared-eclipse@xxxxxxxxx>
> Sent by: platform-ui-dev-admin@xxxxxxxxxxx
> 03/22/02 10:37 PM
> Please respond to platform-ui-dev
>
>
>         To:     platform-ui-dev@xxxxxxxxxxx
>         cc:
>         Subject:        [platform-ui-dev] Workbench editor cycling
>
>
> WorkbenchPage includes a method cycleEditors(boolean forward) that cycles
> through a history of editors (forward or backward) that is maintained in
> the
> page. I'd originally implemented my own mechanism for the EditorView I'm
> working on (http://dev.eclipse.org/bugs/show_bug.cgi?id=10941). Now that
> I've found this mechanism, of course, I'd rather throw out my duplicate
> work.
>
> Is there any plan to promote this method to API on IWorkbenchPage? Since
> I'm
> working in the UI component, I *could* just cast the page to the
> implementation type, but I'd prefer to use the interface.
>
> Thanks,
> - Jared
> _______________________________________________
> platform-ui-dev mailing list
> platform-ui-dev@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/platform-ui-dev
>
>
>
> _______________________________________________
> platform-ui-dev mailing list
> platform-ui-dev@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/platform-ui-dev


Back to the top