2011-01-21 5 views
5

Я работал над своим крошечным RCP-приложением, которому нужен пользовательский переключатель перспективы, чтобы контролировать, какие взгляды пользователь может получить. Итак, вот я, пытаясь добавить панель инструментов с помощью нескольких кнопок для переключения перспектив.Позиционирование панелей инструментов в Eclipse/RCP

Я решил, что лучший способ иметь некоторый контроль над материалом - добавить вторую панель инструментов в ApplicationActionBarAdvisor, которая вызовет мои действия/команды для переключения перспектив.

Так скажем, я создаю второй ToolBarContributionItem в методе fillCoolBar, который будет выглядеть так:

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

Любые идеи, как я могу выровнять панель инструментов, так что будет на правой стороне окна? Я бы хотел, чтобы эта позиция была жестко закодирована.

С уважением, Майкл

ответ

4

У меня была аналогичная проблема: я хотел бы иметь стандартную панель инструментов на левой стороне и поиска текста и кнопку слева. Я не нашел решения. Что я сделал, так это то, что я переопределяю метод fill в методе ToolBarContributionItem, чтобы изменить расположение 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); 
} 
+0

Не могли бы вы объяснить, почему он не работает в Linux? Здесь я не вижу никакой зависимости от платформы. (Я не использую linux, мне просто интересно. :)) –

4

Почему вы, ребята, хотите, чтобы закодировать для этого? Вы можете использовать точку расширения menuContributions с позициейURI баров обрезки. LocationURI доступны в классе MenuUtil

+0

Вы правы. Но нет никакой возможности определить, что вкладка меню правильно выровнена с использованием locationURI, правильно? – Michael

Смежные вопросы