Positioning Toolbars in Eclipse/RCP

早过忘川 提交于 2020-01-23 06:52:26

问题


I was working on my tiny RCP app, which needs a custom perspective switcher to control which views the user can access. So here I am, trying to add a toolbar with a couple of buttons to switch perspectives.

I figured the best way to have some control over the stuff would be to add a second toolbar in ApplicationActionBarAdvisor which would call my thee actions/commands to switch perspectives.

So let's say I create a second ToolBarContributionItem in the fillCoolBar method, which would look like this:

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

Any ideas how I can align the Toolbar so it would be on the right side of the window? I'd love to have this position hardcoded.

Regards, Michael


回答1:


I had a similar problem: I wanted to have a standard toolbar on the left side and a search text and button on the left. I found not really a solution. What I have done is that I override the fill-method in ToolBarContributionItem so that the layout of the CoolBarManager is changed. This is not a good solution, it works on Windows (which was enough in this case), but NOT on Linux, but it maybe helps:

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



回答2:


Why do you guys want to code for this? You can use the menuContributions extension point with the locationURI of the trim bars. The locationURIs are available in the MenuUtil class



来源:https://stackoverflow.com/questions/4759600/positioning-toolbars-in-eclipse-rcp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!