2011-01-21 28 views
5

Estaba trabajando en mi pequeña aplicación RCP, que necesita un conmutador de perspectiva personalizado para controlar a qué vistas puede acceder el usuario. Así que aquí estoy, tratando de agregar una barra de herramientas con un par de botones para cambiar las perspectivas.Posicionamiento de barras de herramientas en Eclipse/RCP

Pensé que la mejor manera de tener cierto control sobre las cosas sería agregar una segunda barra de herramientas en ApplicationActionBarAdvisor que llamaría a mis acciones/comandos para cambiar las perspectivas.

Así que digamos que creo un segundo ToolBarContributionItem en el método fillCoolBar, lo que se vería así:

protected void fillCoolBar(ICoolBarManager coolBar) { 
    IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); 
    ToolBarContributionItem mainBar = new ToolBarContributionItem(toolbar, "main"); 
    coolBar.add(mainBar); 

    toolbar.add(openViewAction); 
    toolbar.add(newConnectionAction); 

    //Custom perspective switcher bar 
    IToolBarManager perspectives = new ToolBarManager(SWT.FLAT | SWT.RIGHT); 
    ToolBarContributionItem perspectiveBar = new ToolBarContributionItem(perspectives, "perspectives"); 
    coolBar.add(perspectiveBar);   
} 

Alguna idea de cómo puedo alinear la barra de herramientas por lo que sería en el lado derecho de la ventana? Me encantaría tener esta posición codificada.

Saludos, Michael

Respuesta

4

yo tuvimos un problema similar: Yo quería tener una barra de herramientas estándar en el lado izquierdo y un texto de búsqueda y el botón de la izquierda. No encontré realmente una solución. Lo que he hecho es que anulo el método de relleno en ToolBarContributionItem para que se modifique el diseño de CoolBarManager. Esto no es una buena solución, funciona en Windows (que era suficiente en este caso), pero no en Linux, pero tal vez ayuda a:

protected void fillCoolBar(ICoolBarManager coolBar) { 
    coolBar.setLockLayout(true); 

    IToolBarManager mainToolBar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); 
    coolBar.add(new ToolBarContributionItem(mainToolBar, "main"));  
    fillMainToolBar(mainToolBar); 

    IToolBarManager searchToolBar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); 
    ToolBarContributionItem searchBarItem = new ToolBarContributionItem(
      searchToolBar, "search") { 
     @Override 
     public void fill(CoolBar coolBar, int index) { 
      super.fill(coolBar, index); 
      // change the layout of the cool-bar to have the search 
      // controls on the right side 
      GridLayout coolBarLayout = new GridLayout(2, false); 
      coolBarLayout.marginHeight = 0; 
      coolBarLayout.marginWidth = 0; 
      coolBarLayout.horizontalSpacing = 20; 
      coolBarLayout.verticalSpacing = 0; 
      coolBarLayout.marginLeft = 10; 
      coolBar.setLayout(coolBarLayout); 
      GridData mainGridData = new GridData(SWT.LEFT, SWT.CENTER, true, 
        false); 
      GridData searchGridData = new GridData(SWT.RIGHT, SWT.CENTER, 
        false, false); 
      coolBar.getItem(0).getControl().setLayoutData(mainGridData); 
      coolBar.getItem(1).getControl().setLayoutData(searchGridData); 
     } 
    }; 
    coolBar.add(searchBarItem); 
    searchToolBar.add(new SearchTextControl()); 
    searchToolBar.add(searchAction); 
} 
+0

¿Puede explicar por qué no funciona en Linux? No veo ninguna magia dependiente de la plataforma aquí. (No uso linux, solo tengo curiosidad :) :) –

4

Por qué quieren ustedes que el código de esto? Puede usar el punto de extensión menuContributions con la URL de ubicación de las barras de recorte. Los URL de ubicación están disponibles en la clase de MenuUtil

+0

Tienes razón. Pero no hay posibilidad de definir que la contribución del menú esté alineada correctamente con el URL de ubicación, ¿verdad? – Michael

Cuestiones relacionadas