Как обновить раскрывающийся список выпадающей кнопки на панели инструментов Eclipse?

Я динамически добавил раскрывающийся список к раскрывающейся кнопке на панели инструментов Eclipse, следуя инструкциям: Программное добавление параметров к раскрывающейся кнопке в eclipse

Теперь мне нужно обновить выпадающий список. Моя идея состоит в том, чтобы удалить старый список, а затем добавить новый список в раскрывающуюся кнопку. Я пробовал методы: removeContributionFactory (фабрика AbstractContributionFactory) и dispose() IMenuService, но ни один из них не работает. Может ли кто-нибудь дать мне несколько советов о том, как достичь цели?

Вот код, который я использовал:

(1) в классе A я вызываю метод, чтобы добавить раскрывающийся список к раскрывающейся кнопке (команда)

Class A {
 public static ContextSwitchContributionFactory contextFactory = 
  new ContextSwitchContributionFactory("menu:"+"SwitchContext", null);
 public static IMenuService menuService =
  (IMenuService)PlatformUI.getWorkbench().getService(IMenuService.class);

 ...
 method A () {
 ...
 ContextSwitchContributionFactory.updateContextMenu(menuService, contextFactory, "SwitchContext");
 ...
 }

(2) определение ContextSwitchContributionFactory:

public class ContextSwitchContributionFactory extends
AbstractContributionFactory {
  private ContextData contextData = new ContextData();
  private ContextsCollector contextList; 
}

static public void updateContextMenu (IMenuService service, final AbstractContributionFactory       factory, final String menuId) {

  service.dispose();
  service.addContributionFactory(factory); 
} 


public ContextSwitchContributionFactory(String location, String namespace) {
  super(location, namespace);
  // this is to read the file and update the data for creating the drop down list   
  contextData.readContextsFile();
  contextList = contextData.getContextsCollector();
} 

@Override
public void createContributionItems(IServiceLocator serviceLocator,
  IContributionRoot additions) {

Set<IContext> cxtset = contextList.getContextList();
Iterator<IContext> iterator = cxtset.iterator();

while (iterator.hasNext()) {

  IContext context = iterator.next();
  CommandContributionItemParameter menuitem = new CommandContributionItemParameter(
      serviceLocator, null, 
      "coms.sample.command.context",
      CommandContributionItem.STYLE_PUSH);    

  menuitem.label = context.getName();
  menuitem.visibleEnabled = true;

  if (context.isSelected()) {
     ImageDescriptor image = MechanicPlugin.getImageDescriptor("icons/ticking_icon.png");
     menuitem.icon = image;
  }

  additions.addContributionItem(new CommandContributionItem(menuitem), null);
  } 
 }
}

(3) в методе C класса C я хочу обновить раскрывающийся список:

class C {
...
method C {
...
  // A.menuService.dispose(); (doesn't work)
  // remove the old one
  A.menuService.removeContributionFactory(A.contextFactory);
  // create a new one 
  A.contextFactory = 
    new ContextSwitchContributionFactory("menu:"+"SwitchContext", null);
  // after executing this statement, the old drop down list is still there, and the new one is             added after the old list.
  A.menuService.addContributionFactory(A.contextFactory);
  ContextSwitchContributionFactory.updateContextMenu(menuService, contextFactory,      "SwitchContext");
..

person chygo    schedule 23.09.2014    source источник
comment
кто знает как обновить?   -  person chygo    schedule 23.09.2014
comment
поместите код, который вы пробовали с   -  person Chandrayya G K    schedule 24.09.2014
comment
Привет, я добавил код, который я использовал   -  person chygo    schedule 24.09.2014


Ответы (1)


Я думаю, что нашел ответ, метод, который я использовал, для природы выпадающий список не может быть обновлен. Чтобы добавить раскрывающийся список, который можно обновить, следует использовать динамические элементы: Статические и динамические выпадающие меню

person chygo    schedule 24.09.2014