posts - 20, comments - 16, trackbacks - 0, articles - 0

          獲取某個視圖的id的方法總結。

          Posted on 2008-01-08 10:27 Raul Gong 閱讀(1896) 評論(0)  編輯  收藏 所屬分類: eclipse
          在制作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。
          主站蜘蛛池模板: 泸西县| 兰考县| 温宿县| 邵阳市| 建昌县| 灵璧县| 拉孜县| 彭州市| 宜黄县| 荔波县| 民丰县| 库尔勒市| 庆云县| 永顺县| 临沂市| 高唐县| 蒙城县| 漾濞| 加查县| 郁南县| 双江| 双峰县| 长垣县| 平泉县| 敦煌市| 绥江县| 扶余县| 仲巴县| 甘南县| 彭阳县| 兴业县| 南宫市| 瑞丽市| 杭锦旗| 宾川县| 申扎县| 襄垣县| 塔河县| 深圳市| 三门峡市| 剑阁县|