rcp 视图中的菜单

10 篇文章 0 订阅

 

/** 导航菜单视图 */

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();

         }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值