GMF之Shapes實例Part7:過濾右擊菜單

前邊有至少兩篇文章講了添加右擊菜單,一種是算是純粹的用代碼添加,另一種是藉助擴展點。藉助擴展點的方法雖然比較簡單,可是不夠靈活,好比你想讓某一菜單項在知足必定條件時才顯示,或者想構造動態的菜單,那麼就必須使用代碼添加的方法了,並在構造菜單時作一個判斷,知足條件才把這個菜單加上去。eclipse

如今看看咱們的菜單,會發現老是有一些系統默認項,看上去不大清爽,以下圖:ide

其實到如今只有兩個菜單項是咱們想要的:Delete From Model以及Change Image,其餘的顯示在那顯得不少餘,也很不美觀。函數

GMF中菜單項的管理是在DiagramEditorContextMenuProvider類,咱們在這個類中添加如下代碼:ui

// 過濾不須要的上下文菜單
public IContributionItem[] getItems() {
    IContributionItem[] items = super.getItems();
    filterSystemPopMenu(items);
    return items;
}

 這個方法先得到全部的右擊菜單項,而後使用filterSystemPopMenu(items);方法過濾菜單以後返回過濾以後的菜單項。code

filterSystemPopMenu(items);代碼以下:ip

// 過濾菜單項
void filterSystemPopMenu(IContributionItem[] items) {
    for (int i = 0; i < items.length; i++) {
        String itemId = items[i].getId();
        if (itemId != null&& itemId.equalsIgnoreCase(ActionIds.ACTION_DELETE_FROM_MODEL)) {
            items[i].setVisible(true);
        } else if (itemId != null&& itemId.equalsIgnoreCase("org.eclipse.myTest.shapes.diagram.edit.actions.ChangeImageAction")){
            items[i].setVisible(true);
        } else {
            items[i].setVisible(false);
        }
    }
}

 把buildContextMenu方法中的run()函數改爲以下:rem

public void run() {
    menu.removeAll();
    menu.add(deleteAction);
}

代碼完成,運行截圖以下:get

要注意的是,設置了過濾菜單,之後每添加一個菜單都要在filterSystemPopMenu(items);方法中加一個else if語句,使得新的增長的菜單顯示。it

相關文章
相關標籤/搜索