Pergunta

Eu gostaria de ser capaz de remover completamente os itens do menu durante a inicialização do meu aplicativo eclipse plugin. O que eu quero fazer é ser capaz de adicionar esses itens do menu mais tarde, dependendo lógica de negócios baseados fora das ações do usuário. Existe uma maneira de fazer isso? Eu olhei usando contribuições, mas eu sinto que não vai ser exatamente o que eu quero.

Se pode fazer o que eu preciso fazer, como faço para ir sobre como usá-los? Agradecemos antecipadamente por qualquer ajuda.

Foi útil?

Solução

Você pode obter o Menu do MenuManager e modifique as contribuições. Este trecho mostra como acessar o gestor de menu e remover um item nomeado.

Você precisa manter o controle dos itens removidos e os índices de itens para restaurá-los. O único problema é que o método indexOf não é visível. Adicionando este trecho de um tipo no mesmo pacote como MenuManager e adicioná-lo a um fragmento é uma forma redonda isso.

IWorkbenchWindow window = Workbench.getInstance().getActiveWorkbenchWindow()

if(window instanceof WorkbenchWindow) {
    MenuManager menuManager = ((WorkbenchWindow)window).getMenuManager();

    //TODO you may need to remove items from the coolbar as well
    ICoolBarManager coolBarManager = null;

    if(((WorkbenchWindow) window).getCoolBarVisible()) {
        coolBarManager = ((WorkbenchWindow)window).getCoolBarManager2();
    }

    Menu menu = menuManager.getMenu();

    //you'll need to find the id for the item
    String itemId = "menuId";
    IContributionItem item = menuManager.find(itemId);

    // remember position, TODO this is protected
    int controlIdx = menu.indexOf(mySaveAction.getId());

    if (item != null) {
        // clean old one
        menuManager.remove(item);

        // refresh menu gui
        menuManager.update();
    }
}

Outras dicas

Há uma série de maneiras de controlar a visibilidade do menu ou da barra de ferramentas itens em um aplicativo RCP.

Se você tem controle sobre o plug-in que contribui o item (s) em questão, em seguida, a maneira mais fácil é, geralmente, para usar a expressão visibleWhen associado ao ponto de extensão menus. Se você tem algum estado interno que pretende verificar, então você pode usar o elemento test da expressão juntamente com uma propertyTester.

Uma alternativa é usar atividades. Estes podem controlar muitas outras coisas de sua aplicação, pensou que você pode precisar de voltar a implementar algumas das built-in caixas de diálogo. Ver esta entrada blog "Usando atividades para gerenciamento de usuário" para alguns detalhes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top