在Eclipse/RCP中定位工具栏

5
我正在开发一个小型的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个回答

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

请问为什么在Linux上无法运行?我没有看到任何平台相关的魔法。(我不使用Linux,只是好奇。:)) - Peter Bagyinszki

4

你们为什么想要编写代码呢?你可以使用menuContributions扩展点和修剪栏的locationURI。locationURIs可在MenuUtil类中获得。


你是对的。但是没有可能使用locationURI定义菜单贡献是右对齐的,对吧? - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接