在Eclipse / RCP中定位工具栏

时间:2011-01-21 13:57:38

标签: java eclipse eclipse-plugin swt eclipse-rcp

我正在处理我的小型RCP应用程序,该应用程序需要一个自定义透视切换器来控制用户可以访问的视图。所以我在这里,尝试添加一个带有几个按钮的工具栏来切换视角。

我认为控制这些东西的最佳方法是在ApplicationActionBarAdvisor中添加第二个工具栏,它会调用我的操作/命令来切换视角。

所以假设我在fillCoolBar方法中创建了第二个ToolBarContributionItem,它看起来像这样:

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);        
}

任何想法如何对齐工具栏以使其位于窗口的右侧?我很想把这个职位硬编码。

此致 迈克尔

2 个答案:

答案 0 :(得分:4)

我遇到了类似的问题:我希望左侧有一个标准工具栏,左侧有一个搜索文本和按钮。我发现不是真正的解决方案。我所做的是我覆盖ToolBarContributionItem中的fill方法,以便更改CoolBarManager的布局。这不是一个好的解决方案,它适用于Windows(在这种情况下就足够了),但不适用于Linux,但它可能会有所帮助:

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);
}

答案 1 :(得分:4)

为什么你们要为此编码?您可以将menuContributions扩展点与修剪条的locationURI一起使用。 locationURI在MenuUtil类

中可用