将SWT Widget添加到eclipse插件的视图中

时间:2012-12-25 04:41:44

标签: java eclipse eclipse-rcp eclipse-plugin

鉴于以下操作栏,我希望能够向其添加任何其他SWT窗口小部件(例如标签)。鉴于actual API,我不知道这是如何可能的,因为它只允许添加IAction对象。

just an ordinary one, but I decided to upload an image to better articulate what I am talking about

2 个答案:

答案 0 :(得分:2)

这是不可能的(我认为它很好,否则不会有来自不同来源的插件的一致外观。)

备选方案:

  • 仅当视图处于活动状态时,操作栏才可见。然后还可以看到视图内容区域,您可以在其中放置任意数量的小部件。因此,您可以在顶部添加该标签,类似于“搜索”视图在顶部显示当前搜索字词的方式。
  • 您可以修改视图本身的名称(您在上面的标签中看到的内容)。但如果经常发生这种情况,则不建议这样做,因为这会导致标签栏中标签的重新布局令人恼火。
  • 如果您想在该标签中显示某种状态信息,也许您可​​以使用带复选框或单选按钮的下拉按钮来执行此操作。例如。例如搜索视图中的搜索历史记录或控制台视图中的活动控制台选择下拉列表。

答案 1 :(得分:1)

您可以通过常规API向IActionBars添加其他控件。下面是显示如何实现此目的的代码。我修改了由新的“Plug-in Project”向导创建的标准视图示例:

...
public void createPartControl(Composite parent) {
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setLabelProvider(new ViewLabelProvider());
    viewer.setSorter(new NameSorter());
    viewer.setInput(getViewSite());
    makeActions();
    hookContextMenu();
    hookDoubleClickAction();
    contributeToActionBars();
}

private void hookContextMenu() {
    MenuManager menuMgr = new MenuManager("#PopupMenu");
    menuMgr.setRemoveAllWhenShown(true);
    menuMgr.addMenuListener(new IMenuListener() {
        public void menuAboutToShow(IMenuManager manager) {
            SampleView.this.fillContextMenu(manager);
        }
    });
    Menu menu = menuMgr.createContextMenu(viewer.getControl());
    viewer.getControl().setMenu(menu);
    getSite().registerContextMenu(menuMgr, viewer);
}

private void contributeToActionBars() {
    IActionBars bars = getViewSite().getActionBars();
    fillLocalPullDown(bars.getMenuManager());
    fillLocalToolBar(bars.getToolBarManager());
}

private void fillLocalPullDown(IMenuManager manager) {
    manager.add(action1);
    manager.add(new Separator());
    manager.add(action2);
}

private void fillContextMenu(IMenuManager manager) {
    manager.add(action1);
    manager.add(action2);
    // Other plug-ins can contribute there actions here
    manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}

private void fillLocalToolBar(IToolBarManager manager) {
    manager.add(action1);
    manager.add(action2);
    manager.add(new LabelContributionItem());
    manager.add(new ComboContributionItem());
}

private class LabelContributionItem extends ControlContribution {
    public LabelContributionItem() {
        super("someLabelId");
    }

    @Override
    protected Control createControl(Composite parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setText("Hello");
        return label;
    }
}

private class ComboContributionItem extends ControlContribution {
    public ComboContributionItem() {
        super("someComboId");
    }

    @Override
    protected Control createControl(Composite parent) {
        Combo combo = new Combo(parent, SWT.NONE);
        return combo;
    }
}
...

希望这有帮助。