插件开发的一个工具类PlatformUtils

      在RCP开发中常用的一些工具方法:

 

package com.unutrip.plugin.dev.commons;

import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
/**
 * 工作台的工具类
 * @author longgangbai
 *
 */
public class PlatformUtils {
 
 /**
  * 查找当前工作区
  * @return
  */
 public static IWorkbenchWindow getWorkbenchWindow(){
    return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 }
 /**
  * 查找当前页面
  * @return
  */
 public static IWorkbenchPage getIWorkbenchPage(){
  return  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();  
 }
 /**
  * 隐藏视图
  * @param viewID
  */
 public static void hideView(String viewID){
  IWorkbenchPage page =getIWorkbenchPage();  
  IViewReference f = page.findViewReference(viewID);  
  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(f); 
 }
 /**
  * 针对view,根据其ID获得引用
  * 打开视图
  * @param viewID
  */
 public static void showView(String viewID){
  IWorkbenchPage page = getIWorkbenchPage(); 
  try {
   if(page!=null)
   {
    page.showView(viewID);
   }
  } catch (PartInitException e) {
   e.printStackTrace();
  }
 }
 
 /**
  * 假设Editor具体的实现类为MyFileEditor,则 
  * 注意:这里根据指定的input(IEditorInput)得到Editor的引用(Editor已实现EditorPart) 
  * 之所以不能根据ID得到是因为一个ID对应一个Editor,而一个Editor一般对应几个input并以选项
  * 卡的形式来表现这几个input 
  * @param input
  */
 public static IEditorPart findEditor(IEditorInput input){
  IWorkbenchPage page = getIWorkbenchPage();  
  if(page!=null)
  {
   return page.findEditor(input);  
  }
  return null;
 }
 /**
  *  关闭当前页面
  * @param closeAll
  */
 public static void closePage(boolean closeAll){
  if(closeAll){
   PlatformUI.getWorkbench().close(); 
  }else{
   PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().close(); 
  }
 }
 /**
  * 
  */
 public static void hidePropertiesView() {
        hideView("org.eclipse.ui.views.PropertySheet");
    }
    /**
     * 
     * @param theViewId
     */
    public static void syncExecHideView(final String theViewId) {
        invokeOnDisplayThread(new Runnable() {
            public void run() {
                try {
                    IWorkbenchPage activePage = getIWorkbenchPage();
                    IViewPart iviewpart = activePage.findView(theViewId);
                    activePage.hideView(iviewpart);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
    }

    public static void invokeOnDisplayThread(Runnable runnable) {
        IWorkbench workbench = PlatformUI.getWorkbench();
        IWorkbenchWindow windows[] = workbench.getWorkbenchWindows();
        if (windows != null && windows.length > 0) {
            Display display = windows[0].getShell().getDisplay();
            display.syncExec(runnable);
        } else {
            runnable.run();
        }
    }

}

 

 

在eclipse中获得当前所有打开的editor实例列

EditorPart[] parts =  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditors();  IEditorReference[] parts = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences(); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值