`

如何获取Eclipse里view的id

 
阅读更多

在制作eclipse插件的时候,时常需要对已经存在的视图做一些扩展,例如在project explorer中增加一个右键菜单,或者需要获取outline中当前选中项,等等。而这些操作的前提,是获取这些视图的id,然后通过获取视图的语句获取到视图,并进行下一步操作。

例如:如果是在view中:

IViewPart part = getViewSite().getPage().findView("org.eclipse.ui.views.ContentOutline");

如果是在action中:

IViewPart part = Plugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("org.eclipse.ui.views.ContentOutline");


可见获取到视图的id是很重要的。如何获取id呢,有很多方法,我觉得比较常用的是以下两种:

1.通过手动查找目标视图所在的插件的plugin.xml中对改视图的定义,获得视图id。

描述:我觉得这是最保险的办法,因为所有的视图都必定有一个plugin.xml定义,但是找到这个plugin.xml还是需要一些操作,可能会耗费一些时间。
步骤:
a.点击“工具栏”->“Search”->“Search”,或者热键“ctrl+h”。选“ Plugin Search”。
b.Search for 选"Extention Point",Limit to 选“References”,External Scope 选“Enabled Plug-ins only”。
c.下面的scope选“Worksapaces”。
d.上面的Search String框填入我们要搜索的插件的扩展点的名字,这里我们要找视图插件,所以填入:org.eclipse.ui.views
e.点击search以后,在底部Search视图内列出很多搜索结果,任意选中一个,双击,可以看到editor内打开了该plugin.xml,选中编辑器底部的Extentions,用图形化的方式来查看会更快捷。
f.可以看到该插件使用的扩展点已经以列表的形式列出,我们查找的org.eclipse.ui.views扩展点也已经选中,展开选中的扩展点,可以看到它实现了哪些view,点击某一个,可以在页面右边看到该视图的详细信息,第一项即是视图的id。

我们无法知道目标视图在搜索结果中的哪个plugin中,所以可能会耗费一些时间,建议在查看搜索结果时,通过对视图的分类分析,确定一个大概范围再进行查看。
同时,用这种方法也可以查找其他扩展点的实现插件。

2.通过代码直接读出该视图的id。

描述:通过这种方法,可以直接用鼠标点击某个你想知道的视图,控制台会打印出该视图的id和所属插件的id。
步骤:
a.通过插件向导新建一个插件,并使用Available Templates中的Plugin with a view模板,点finish。
b.对自动创建的SampleView代码进行修改,修改结果如下。其中主要步骤有三个:实现IPartListener2接口,编写isActivePart()方法,调用isActivePart()方法。

package com.raul.learn.sampleview.views;


import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.jface.action.*;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.*;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.SWT;

import com.raul.learn.sampleview.Activator;


/**
 * This sample class demonstrates how to plug-in a new
 * workbench view. The view shows data obtained from the
 * model. The sample creates a dummy model on the fly,
 * but a real implementation would connect to the model
 * available either in this or another plug-in (e.g. the workspace).
 * The view is connected to the model using a content provider.
 * <p>
 * The view uses a label provider to define how model
 * objects should be presented in the view. Each
 * view can present the same model objects using
 * different labels and icons, if needed. Alternatively,
 * a single label provider can be shared between views
 * in order to ensure that objects of the same type are
 * presented in the same way everywhere.
 * <p>
 
*/


public class SampleView extends ViewPart implements IPartListener2{
    private TableViewer viewer;
    private Action action1;
    private Action action2;
    private Action doubleClickAction;

    /*
     * The content provider class is responsible for
     * providing objects to the view. It can wrap
     * existing objects in adapters or simply return
     * objects as-is. These objects may be sensitive
     * to the current input of the view, or ignore
     * it and always show the same content 
     * (like Task List, for example).
     
*/

     
    class ViewContentProvider implements IStructuredContentProvider {
        public void inputChanged(Viewer v, Object oldInput, Object newInput) {
        }

        public void dispose() {
        }

        public Object[] getElements(Object parent) {
            return new String[] { "One", "Two", "Three" };
        }

    }

    class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
        public String getColumnText(Object obj, int index) {
            return getText(obj);
        }

        public Image getColumnImage(Object obj, int index) {
            return getImage(obj);
        }

        public Image getImage(Object obj) {
            return PlatformUI.getWorkbench().
                    getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
        }

    }

    class NameSorter extends ViewerSorter {
    }


    /**
     * The constructor.
     
*/

    public SampleView() {
        Activator.getDefault().getWorkbench().getActiveWorkbenchWindow()
        .getActivePage().addPartListener(this);

    }


    @Override
    public void dispose() {
        // TODO Auto-generated method stub
        Activator.getDefault().getWorkbench().getActiveWorkbenchWindow()
        .getActivePage().removePartListener(this);
        super.dispose();
    }

    
    /**
     * This is a callback that will allow us
     * to create the viewer and initialize it.
     
*/

    public void createPartControl(Composite parent) {
        viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
        viewer.setContentProvider(new ViewContentProvider());
        viewer.setLabelProvider(new ViewLabelProvider());
        viewer.setSorter(new NameSorter());
        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) {
                SampleView.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(action1);
        manager.add(new Separator());
        manager.add(action2);
    }


    private void fillContextMenu(IMenuManager manager) {
        manager.add(action1);
        manager.add(action2);
        // Other plug-ins can contribute there actions here
        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    
    private void fillLocalToolBar(IToolBarManager manager) {
        manager.add(action1);
        manager.add(action2);
    }


    private void makeActions() {
        action1 = new Action() {
            public void run() {
                showMessage("Action 1 executed");
            }

        }
;
        action1.setText("Action 1");
        action1.setToolTipText("Action 1 tooltip");
        action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
            getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
        
        action2 = new Action() {
            public void run() {
                showMessage("Action 2 executed");
            }

        }
;
        action2.setText("Action 2");
        action2.setToolTipText("Action 2 tooltip");
        action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
                getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
        doubleClickAction = new Action() {
            public void run() {
                ISelection selection = viewer.getSelection();
                Object obj = ((IStructuredSelection)selection).getFirstElement();
                showMessage("Double-click detected on "+obj.toString());
            }

        }
;
    }


    private void hookDoubleClickAction() {
        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                doubleClickAction.run();
            }

        }
);
    }

    private void showMessage(String message) {
        MessageDialog.openInformation(
            viewer.getControl().getShell(),
            "Sample View",
            message);
    }


    /**
     * Passing the focus request to the viewer's control.
     
*/

    public void setFocus() {
        viewer.getControl().setFocus();
    }


    @Override
    public void partActivated(IWorkbenchPartReference partRef) {
        // TODO Auto-generated method stub
        isActivePart();
    }


    @Override
    public void partBroughtToTop(IWorkbenchPartReference partRef) {
        // TODO Auto-generated method stub
        
    }


    @Override
    public void partClosed(IWorkbenchPartReference partRef) {
        // TODO Auto-generated method stub
        
    }


    @Override
    public void partDeactivated(IWorkbenchPartReference partRef) {
        // TODO Auto-generated method stub
        
    }


    @Override
    public void partHidden(IWorkbenchPartReference partRef) {
        // TODO Auto-generated method stub
        
    }


    @Override
    public void partInputChanged(IWorkbenchPartReference partRef) {
        // TODO Auto-generated method stub
        
    }


    @Override
    public void partOpened(IWorkbenchPartReference partRef) {
        // TODO Auto-generated method stub
        
    }


    @Override
    public void partVisible(IWorkbenchPartReference partRef) {
        // TODO Auto-generated method stub
        
    }

    
    private void isActivePart() {
        IWorkbenchPart part = getViewSite().getPage().getActivePart();
        //return part != null && part.equals(this);        
        System.out.println(part.getSite().getId());
        part.getSite().getPluginId();
    }

}


然后调插件,在运行环境中调出该视图,接着当你用鼠标点击你想知道的视图时,在开发环境中的控制台,就会打印出该视图的id以及所属插件的id。
分享到:
评论

相关推荐

    Eclipse plugin开发扩展点文档(3.0)[chm]

    allowMultiple - 这是一个标志,用来指示此视图是否允许使用 IWorkbenchPage.showView(String id, String secondaryId) 来创建多个实例。缺省值为 false。 &lt;!ELEMENT description (#PCDATA)&gt; 一个可选的子元素,...

    Hibernate_Tools_for_eclipse_HbmTool.rar

    Hibernate Tools for eclipse 创建Hibernate Console Configuration向导有Main、Option、Classpath、Mappings、Common五个选项卡,如果你在工程中已经引入了JDBC驱动则,直接点击Finish完成即可,以后在完成其他...

    Eclipse RCP详细教程

    3.应用程序里的插件ID 7 4.Actions的用法(菜单和工具栏) 7 4.1.概述 7 4.2.通过编码添加 8 4.3.由“扩展”方式向程序添加菜单和工具栏 11 5.添加组合键 19 5.1.概述 19 5.2.声明actions的组合键 19 6...

    eclipse主题修改

    eclipse资源插件eclipsecolorthemes.org 中的主题http://eclipsecolorthemes.org/?view=theme&id=32的优化 选择相似的代码时,背景颜色会变成灰色,经过修改之后用黄色代替

    Eclipse RCP Plugin 开发自学入门指南(CEC首发)

    5.3 向VIEW里添加ACTION ................................................................................................................ 52RCP/Plug-in开发自学教程 版权所有 转载请注明salever@126.com - ...

    Android_如何置底一个View(附_前置声明layout布局文件中的资源ID)

    Android_如何置底一个View(附_前置声明layout布局文件中的资源ID)

    myTranslate:一款eclipse的插件,用于翻译

    myTranslate 一款基于eclipse的插件,用于翻译。 有时候在看源码时会碰到一些生疏的单词,需要借助翻译软件来查看,但是复制来...在windows-&gt;show view -&gt;other 里找到myTranslate view.点击OK 四、使用快捷键 1、选

    Mac中Eclipse连不上Android手机的解决方法

    Windows下Eclipse可以连接Device里能显示设备名称,但是在Mac OS X下的Eclipse Device始终不能显示连接。 解决方法: 1.把Android手机开启调试模式,然后连接在我们的Mac OS上。 2.选择Mac的 关于本机-&gt;更多信息-&gt; ...

    Eclipse RCP Plug-in开发自学教程(Eclipse3.6)

    5.3 向VIEW里添加ACTION ................................................................................................................52 RCP/Plug-in 开发自学教程 salever@126.com - 4 - 6 编辑器 .........

    Android自定义View实现跟随手指移动的小兔子

    本文实例为大家分享了Android自定义View实现跟随手指移动的小兔子,供大家参考,具体内容如下 自定义的View实现跟随手指的小兔子 按前面的例子新创建一个project,再在project中新创建一个module 将需要的背景图和...

    Android实验5-事件处理答案.doc

    一、实验名称:实验5 事件处理 二、实验日期: 三、实验目的: 基于监听的事件处理 基于回调的事件处理 四、实验用的仪器和材料:Windows+Eclipse+jdk+sdk+adt 五、实验的步骤和方法: 实验一:基于监听的事件处理...

    Android View Animations

    .playOn(findViewById(R.id.edit_area)); Effects Attension Flash, Pulse, RubberBand, Shake, Swing, Wobble, Bounce, Tada, StandUp, Wave Special Hinge, RollIn, RollOut,Landing,TakingOff,DropOut ...

    SSH+EASY-UI的账务管理系统

    CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `goodsavgview` AS select count(1) AS `goodsquality`,avg(`b`.`price`) AS `price`,`a`.`id` AS `id`,`a`.`name` AS `name` ...

    Android计算器实验框架.doc

    } public void butOnClick(View v){ int id = v.getId(); String str = editText1.getText().toString().trim(); switch (id) { case R.id.button1: editText1.setText(str + "7"); break; case R.id.button2: ...

    android自定义view实现推箱子小游戏

    自定义view: package com.jisai.materialdesigndemo.tuixiangzhi; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; ...

    Android 将 android view 的位置设为右下角的解决方法

    默认情况下,我们在eclipse中拖动控件到editor中,控件的位置将位于整个屏幕的左上角。可以使用 android:layout_gravity、android:gravity和android:width三个属性值,实现控件的九宫格定位。  Xml代码 代码如下:...

    Android代码-AndroidCharts

    LineView lineView = (LineView)findViewById(R.id.line_view); lineView.setDrawDotLine(false); //optional lineView.setShowPopup(LineView.SHOW_POPUPS_MAXMIN_ONLY); //optional LineView.

    Android移动开发实验6.doc

    " "(2)在MainActivity的onCreat()方法中,获取布局文件中添加的按钮,并" "为其设置单击事件监听器,实现启动另一个Activity功能; " "(3)创建详细页面Activity布局文件,名称为activity_detail.xml,在该" ...

    Android应用开发I实验指导书.doc

    setOnItemSelectedListener(new " "OnItemSelectedListener() { " "@Override " "public void onItemSelected(AdapterView&lt;?&gt; parent, View view, " "int position, " "long id) { " "tv。setText("您选择...

    Flex课程学习(附带源码)

    2、flexBuilder基于eclipse的IDE集成Design、debug动态help 4j:ant脚本 3、flex framework visual components Manager classes RPC/Messaging/Data Service c Utilities 4、MxML &lt;WebService id="ws" wsdl=...

Global site tag (gtag.js) - Google Analytics