Eclipse工具插件开发之ContainerSelectionDialog资源对话框只显示当前选中项目

来源:互联网 发布:linux中重启oracle 编辑:程序博客网 时间:2024/06/05 20:41

    做插件开发得时候碰到了这个需求,要求只显示工作空间中当前选中的项目,当时弄了好久没啥办法,网上搜了好久也没有想要的,怎么办了?只有自己想办法了,一开始是想办法控制给它的值,发现不行,最后只能进行反编译,然后自己改源码咯

      

private void handleBrowse(Text selectTest) {String project = containerText.getText().replace("/","").trim();ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(),                                                       ResourcesPlugin.getWorkspace().getRoot(),                                                        false,                                                       "Select new file container");dialog.setProjectName(project);if (dialog.open() == ContainerSelectionDialog.OK) {Object[] result = dialog.getResult();if (result.length == 1) {String sour=containerText.getText();selectTest.setText(((Path) result[0]).toString().substring(sour.length()+1).replace("/", "."));}}}
这是对它基础调用,ContainerSelectionDialog对它翻译之后会在类开头看到一个ContainerSelectionGroup类的声明,这个类里面才是封装ContainerSelectionDialog里面的树状菜单,然后继续反编译,ContainerSelectionGroup类反编译之后找到createTreeViewer方法,在这个方法最后一行有一个this.treeViewer.setInput(
ResourcesPlugin.getWorkspace()<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">);代码,这就是传值到树状菜单了,然后把这个改掉,我改成的是IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();hide(root); this.treeViewer.setInput(root); 先获取项目空间所有项目,然后把当前选中得项目名传过来遍历对比,不是当前项目就全部隐藏掉</span><pre name="code" class="java">private void hide(IWorkspaceRoot root){try {iproject =root.getProjects();if(iproject==null || iproject.length==0){      return;}for (int i = 0; i < iproject.length; i++) {   if(!projectName.equals(iproject[i].getName())){   iproject[i].setHidden(true);           }}} catch (Exception e) {e.printStackTrace();}}
最后在设值,显示出来之后再把值还原回去,需要在ContainerSelectionDialog类里面createDialogArea方法中设置<pre name="code" class="java">public void show(){try {if(iproject==null || iproject.length==0){      return;}for (int i = 0; i < iproject.length; i++) {     iproject[i].setHidden(false);}} catch (Exception e) {e.printStackTrace();}}  
<span style="white-space:pre"></span>然后就搞定了


0 0
原创粉丝点击