Itens mudança do menu de programação do Eclipse Plugin
-
05-07-2019 - |
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.
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.