rcp 視圖中的菜單

 

/** 導航菜單視圖 */

public class NavView extends ViewPart {

         /** 導航的樹對象 */

         private TreeViewer viewer;

         /** 可以爲樹添加返回導航操作對象 */

         private DrillDownAdapter drillDownAdapter;

         /** 摺疊樹操作 */

         private Action collapseAction;

         /** 展開樹操作 */

         private Action expandAction;

         /** 雙擊樹結點時操作 */

         private Action doubleClickAction;

         /** 該視圖的ID */

         public static final String ID = "superCRM.views.NavView";

         /** 樹結點類 */

class TreeObject implements IAdaptable {

                   private String name;

                   private String key;

                   private TreeParent parent;

                   public TreeObject(String name, String key) {

                            this.name = name;

                            this.key = key;

                   }

                   public String getName() {

                            return name;

                   }

                   public void setParent(TreeParent parent) {

                            this.parent = parent;

                   }

                   public TreeParent getParent() {

                            return parent;

                   }

                   public String toString() {

                            return getName();

                   }

                   public Object getAdapter(Class key) {

                            return null;

                   }

                   public String getKey() {

                            return key;

                   }

                   public void setKey(String key) {

                            this.key = key;

                   }

         }

/** 樹的父結點類 */

         class TreeParent extends TreeObject {

                   private ArrayList children;

 

                   public TreeParent(String name) {

                            super(name, "__Parent");

                            children = new ArrayList();

                   }

 

                   public void addChild(TreeObject child) {

                            children.add(child);

                            child.setParent(this);

                   }

 

                   public void removeChild(TreeObject child) {

                            children.remove(child);

                            child.setParent(null);

                   }

 

                   public TreeObject[] getChildren() {

                            return (TreeObject[]) children.toArray(new TreeObject[children.size()]);

                   }

 

                   public boolean hasChildren() {

                            return children.size() > 0;

                   }

         }

/** 樹的內容器 */

         class ViewContentProvider implements IStructuredContentProvider, ITreeContentProvider {

                   private TreeParent invisibleRoot;

                   public void inputChanged(Viewer v, Object oldInput, Object newInput) {}

                   public void dispose() {}

                   public Object[] getElements(Object parent) {

                            if (parent.equals(getViewSite())) {

                                     if (invisibleRoot == null)

                                               initialize();

                                     return getChildren(invisibleRoot);

                            }

                            return getChildren(parent);

                   }

                   public Object getParent(Object child) {

                            if (child instanceof TreeObject) {

                                     return ((TreeObject) child).getParent();

                            }

                            return null;

                   }

                   public Object[] getChildren(Object parent) {

                            if (parent instanceof TreeParent) {

                                     return ((TreeParent) parent).getChildren();

                            }

                            return new Object[0];

                   }

                   public boolean hasChildren(Object parent) {

                            if (parent instanceof TreeParent)

                                     return ((TreeParent) parent).hasChildren();

                            return false;

                   }

                   /** 初始化樹中的數據 */

                   private void initialize() {

                            TreeObject c1 = new TreeObject("客戶列表", "CUSTOMER_LIST");

                            TreeObject c2 = new TreeObject("添加客戶", "CUSTOMER_ADD");

                            TreeParent t1 = new TreeParent("客戶管理");

                            t1.addChild(c1);

                            t1.addChild(c2);

                            TreeObject l1 = new TreeObject("聯繫人列表", "CONTACT_LIST");

                            TreeObject l2 = new TreeObject("添加聯繫人", "CONTACT_ADD");

                            TreeParent t2 = new TreeParent("聯繫人管理");

                            t2.addChild(l1);

                            t2.addChild(l2);

                            TreeObject p2 = new TreeObject("首選項設置", "PREF");

                            TreeParent t3 = new TreeParent("管理設置");

                            t3.addChild(p2);

                            invisibleRoot = new TreeParent("");

                            invisibleRoot.addChild(t1);

                            invisibleRoot.addChild(t2);

                            invisibleRoot.addChild(t3);

                   }

         }

         /** 樹的內容器 顯示文件夾圖片*/

         class ViewLabelProvider extends LabelProvider {

                   public String getText(Object obj) {

                            return obj.toString();

                   }

                   public Image getImage(Object obj) {

                            String imageKey = ISharedImages.IMG_OBJ_ELEMENT;

                            if (obj instanceof TreeParent)

                                     imageKey = ISharedImages.IMG_OBJ_FOLDER;

                            return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);

                   }

         }

         /** 構造方法 */

         public NavView() {}

 

         public void createPartControl(Composite parent) {

                   /** 創建樹 */

                   viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

                   /** 初始化樹 */

                   drillDownAdapter = new DrillDownAdapter(viewer);

                   viewer.setContentProvider(new ViewContentProvider());

                   viewer.setLabelProvider(new ViewLabelProvider());

                   viewer.setInput(getViewSite());

                   /** 創建樹中所使用操作對象 */

                   makeActions();

                   /** 添加上下文菜單 */

                   hookContextMenu();

                   /** 添加雙擊事件 */

                   hookDoubleClickAction();

                   /** 添加到操作條中 */

                   contributeToActionBars();

         }

         /** 添加上下文菜單 */

         private void hookContextMenu() {

                   MenuManager menuMgr = new MenuManager("#PopupMenu");

                   menuMgr.setRemoveAllWhenShown(true);

                   menuMgr.addMenuListener(new IMenuListener() {

                            public void menuAboutToShow(IMenuManager manager) {

                                     NavView.this.fillContextMenu(manager);

                            }

                   });

                   Menu menu = menuMgr.createContextMenu(viewer.getControl());

                   viewer.getControl().setMenu(menu);

                   getSite().registerContextMenu(menuMgr, viewer);

         }

         /** 添加到操作條中 */

         private void contributeToActionBars() {

                   IActionBars bars = getViewSite().getActionBars();

                   fillLocalPullDown(bars.getMenuManager());

                   fillLocalToolBar(bars.getToolBarManager());

         }

         /** 添加下拉菜單項 */

         private void fillLocalPullDown(IMenuManager manager) {

                   manager.add(collapseAction);

                   manager.add(new Separator());

                   manager.add(expandAction);

         }

 

         /** 添加上下文菜單項 */

         private void fillContextMenu(IMenuManager manager) {

                   manager.add(collapseAction);

                   manager.add(expandAction);

                   manager.add(new Separator());

                   drillDownAdapter.addNavigationActions(manager);

                   manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));

         }

         /** 添加工具欄工具按鈕 */

         private void fillLocalToolBar(IToolBarManager manager) {

                   manager.add(collapseAction);

                   manager.add(expandAction);

                   manager.add(new Separator());

                   drillDownAdapter.addNavigationActions(manager);

         }

         /** 創建視圖所使用的操作對象 */

         private void makeActions() {

                   /** 展開全部按鈕 */

                   collapseAction = new Action() {

                            public void run() {

                                     viewer.collapseAll();

                            }

                   };

                   collapseAction.setText("摺疊全部");

                   collapseAction.setToolTipText("摺疊全部");

                   collapseAction.setImageDescriptor(SuperCRMPlugin.getImageDescriptor("icons/collapse.gif"));

                   /** 摺疊全部按鈕 */

                   expandAction = new Action() {

                            public void run() {

                                     viewer.expandAll();

                            }

                   };

                   expandAction.setText("展開全部");

                   expandAction.setToolTipText("展開全部");

                   expandAction.setImageDescriptor(SuperCRMPlugin.getImageDescriptor("icons/expand.gif"));

                   /** 雙擊操作 */

                   doubleClickAction = new Action() {

                            public void run() {

                                     /** 獲得當前選中的樹節點 */

                                     ISelection selection = viewer.getSelection();

                                     Object obj = ((IStructuredSelection) selection).getFirstElement();

                                     /** 如果選中的爲TreeParent對象,則返回 */

                                     if (obj instanceof TreeParent)

                                               return;

                                     /** 如果選中的爲子節點,則根據key值打開相應的操作 */

                                     TreeObject object = (TreeObject) obj;

                                     if (object.getKey().equals("CUSTOMER_LIST")) {

                                               ActionManager.createShowViewAction(getSite().getWorkbenchWindow(), CustomerSummaryView.ID).run();

                                     } else if (object.getKey().equals("CUSTOMER_ADD")) {

                                               ActionManager.createNewCustomerAction(getSite().getWorkbenchWindow()).run();

                                     } else if (object.getKey().equals("CONTACT_LIST")) {

                                               ActionManager.createShowViewAction(getSite().getWorkbenchWindow(), ContactSummaryView.ID).run();

                                     } else if (object.getKey().equals("CONTACT_ADD")) {

                                               ActionManager.createNewContactAction(getSite().getWorkbenchWindow()).run();

                                     } else if (object.getKey().equals("PREF")) {

                                               ActionFactory.PREFERENCES.create(getSite().getWorkbenchWindow()).run();

                                     }

                            }

                   };

         }

         /** 雙擊樹事件 */

         private void hookDoubleClickAction() {

                   viewer.addDoubleClickListener(new IDoubleClickListener() {

                            public void doubleClick(DoubleClickEvent event) {

                                     doubleClickAction.run();

                            }

                   });

         }

 

         public void setFocus() {

                   viewer.getControl().setFocus();

         }

}

 

發佈了49 篇原創文章 · 獲贊 7 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章