首页 > 其他分享 >RCP添加一个编辑器视图

RCP添加一个编辑器视图

时间:2022-11-11 10:48:35浏览次数:37  
标签:RCP eclipse 视图 编辑器 ui org import public

RCP提供专门的编辑器视图,里面内置了很多编辑器的专用用户,如果修改后,视图中名称显示命名,提示已修改要进行保存。

1、plugin.xml中添加视图view扩展点,和org.eclipse.ui.editors扩展点

 

2、添加以下3个编辑器相关的类

 A、JSEditor

package myviewrcp2.editors;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart;

public class JSEditor extends EditorPart{

	//对应plugin.xml指定的id
	public static final String ID = "myviewrcp2.editors.JSEditor";
	private Text text;
	//编辑器中的内容是否被修改的标志
	private boolean bDity = false;
	
	public JSEditor() {
		super();
	}
	
	//编辑器关闭时,保存编辑器内容时所调用的方法
	@Override
	public void doSave(IProgressMonitor monitor) {
		// TODO Auto-generated method stub
		try {
			monitor.beginTask("保存文件....", 100);
			for(int i= 0;i<10 && monitor.isCanceled();i++) {
				Thread.sleep(500);
				monitor.worked(10);
				double d = (i + 1)/10d;
				monitor.subTask("已完成"+d * 100 + "%");//显示任务状态
			}
			monitor.done();
			if(monitor.isCanceled()) {
				throw new InterruptedException("取消保存");
			}
		}catch(InterruptedException e) {
			e.printStackTrace();
		}
	}

	//另存为调用的方法
	@Override
	public void doSaveAs() {
		// TODO Auto-generated method stub
		
	}

	//初始化编辑器
	@Override
	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
		// TODO Auto-generated method stub
		this.setSite(site);//设置site
		this.setInput(input);//设置输入的IEditorInput 对象
		this.setPartName(input.getName()); //设置编辑器上方显示的名称
	}

	//判断是否被修改过
	@Override
	public boolean isDirty() {
		// TODO Auto-generated method stub
		return bDity;
	}

	//是否允许保存
	@Override
	public boolean isSaveAsAllowed() {
		// TODO Auto-generated method stub
		return true;
	}

	//创建编辑器中的控件
	@Override
	public void createPartControl(Composite parent) {
		// TODO Auto-generated method stub
		text = new Text(parent,SWT.NONE);
		//当文本框修改时,设定内容被修改过
		text.addModifyListener(new ModifyListener() {
			
			@Override
			public void modifyText(ModifyEvent arg0) {
				// TODO Auto-generated method stub
				if(!isDirty()) {
					setDirty(true); //设置修改
					//更改编辑器的状态
					firePropertyChange(IEditorPart.PROP_DIRTY);
				}
			}
		});
	}

	//设置焦点
	@Override
	public void setFocus() {
		// TODO Auto-generated method stub
		text.setFocus();
	}
	
	public void setDirty(boolean b) {
		bDity = b;
	}

}

 B、JsEditorContributor

package myviewrcp2.editors;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.EditorActionBarContributor;

public class JsEditorContributor extends EditorActionBarContributor{
	private Action action1;
	private Action action2;
	public JsEditorContributor() {
		super();
		makeActions();

	}
	public void makeActions() {
		action1 = new Action() {
			public void run() {
				
			}
		};
		action1.setText("Action 1");
		action1.setToolTipText("Action 1 tooltip");
		//action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_DEF_VIEW));
		
		action2 = new Action() {
			public void run() {
				
			}
		};
		action2.setText("Action 2");
		action2.setToolTipText("Action 2 tooltip");
		//action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_WARN_TSK));
	}
	
	//创建菜单
	@Override
	public void contributeToMenu(IMenuManager menuManager) {
		MenuManager editMenu = new MenuManager("编辑器菜单");
		editMenu.add(action1);
		editMenu.add(action2);
		menuManager.add(editMenu);
	}
	
	//覆盖父类的方法,创建工具栏
	@Override
	public void contributeToToolBar(IToolBarManager toolBarManager) {
		toolBarManager.add(action1);
		toolBarManager.add(action2);
	}
}

  C、JsEditorInput

package myviewrcp2.editors;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;

public class JsEditorInput implements IEditorInput{

	//输入字符
	private String input;
	
	public JsEditorInput(String input) {
		this.input = input;
	}
	
	//返回与该输入相关的类的对象
	@Override
	public <T> T getAdapter(Class<T> arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	//是否将编辑器保存在最近访问记录中
	@Override
	public boolean exists() {
		// TODO Auto-generated method stub
		return true;
	}

	//输入内容的图标
	@Override
	public ImageDescriptor getImageDescriptor() {
		// TODO Auto-generated method stub
		return null;
	}

	//输入信息的名称
	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return input;
	}

	//是否可以持久化该编辑器
	@Override
	public IPersistableElement getPersistable() {
		// TODO Auto-generated method stub
		return null;
	}

	//设置编辑器标签中显示提示信息
	@Override
	public String getToolTipText() {
		// TODO Auto-generated method stub
		return input;
	}
	
}

3、添加了一个打开编辑器的视图类OpenEditorView

package myviewrcp2.views;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.ViewPart;

import myviewrcp2.editors.JSEditor;
import myviewrcp2.editors.JsEditorInput;

public class OpenEditorView extends ViewPart{

	public static final String ID = "myviewrcp2.views.OpenEditorView";
	public List list;
	
	public OpenEditorView() {
		super();
	}
	@Override
	public void createPartControl(Composite parent) {
		// TODO Auto-generated method stub
		list = new List(parent,SWT.NONE);
		list.add("Editor");
		list.add("MutiPage Editor");
		list.add("Form Editor");
		list.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				String select = list.getSelection()[0];
				//获得当前激活IWorkbenchPage对象
				IWorkbenchPage page = getViewSite().getWorkbenchWindow().getActivePage();
				if(select.equals("Editor")) { //如果选中“Editor”项
					//创建输入的内容对象
					JsEditorInput editor = new JsEditorInput(select);
					try {
						//打开该编辑器
						page.openEditor(editor, JSEditor.ID);
					}catch(PartInitException ee) {
						ee.printStackTrace();
					}
				}
			}
		});
	}

	@Override
	public void setFocus() {
		// TODO Auto-generated method stub
		list.setFocus();
	}

}

4、修改透视图显示

5、效果

 

标签:RCP,eclipse,视图,编辑器,ui,org,import,public
From: https://www.cnblogs.com/wwssgg/p/16879765.html

相关文章

  • Vue3后台系统做一个富文本编辑器
    前言:富文本编辑器的插件网上有很多,有些需要二次开发,有些有框架的限制,也有些稳定性差。我这边开发中由于领导催的紧,所以为了提高一下自己的效率决定使用wangEditor,这个编辑......
  • RCP如何将视图的右键进行隐藏显示
    1、相关代码MyActionpackagemyviewrcp2;importorg.eclipse.core.runtime.Assert;importorg.eclipse.jface.action.Action;importorg.eclipse.jface.viewers.ISel......
  • RCP给视图添加工具菜单和右键菜单
    1、代码privatevoidmakeActions(){action1=newAction(){publicvoidrun(){showMessage("Action1executed");......
  • 拓端tecdat|R语言代写用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参
    在最近的一篇文章中,我描述了一个Metropolis-in-Gibbs采样器,用于估计贝叶斯逻辑回归模型的参数。 这篇文章就此问题进行了研究,以展示Rcpp如何帮助克服这一瓶颈。 TLDR:只需......
  • Open Cascade 多视图-多个3D视图
    ​1.简介本文介绍OCC如何实现多窗口视图以及单个窗口的多视图功能。OpenCascade7.7.0Beta中引入一个新功能:新增口来创建视图的子视图,改进对多视图的支持,以此达到在......
  • RCP中视图和视图之间如何共享信息?
    1、在plugin.xml里面建多一个视图2、新建AnotherView视图代码packagemyviewrcp2;importorg.eclipse.swt.SWT;importorg.eclipse.swt.widgets.Composite;import......
  • 操作系统实验:Shell脚本编程与Vim编辑器
    SHANGHAIUNIVERSITY操作系统(一)实验报告组号第4组学号姓名20120889实验序号实验六日期2022年9月10日一、实验目的与要求实验目的:掌握v......
  • 【ArcPy】空间相交求面积和
    应用实例,求每宗地涉及开发边界的面积等。实现思路(主干,非完整代码),谨供参考,不懂勿扰。1#coding=gbk2importarcpy3#importnumpy4importsys5fromarcpy......
  • C语言里的几个拷贝函数memcpy、memset、strcpy、strncpy
    #include<string.h>1. src和dest所指内存区域不能重叠,函数返回指向dest的指针。memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度void*memc......
  • MySQL的视图(二十二)
    勿以恶小而为之,勿以善小而不为--------------------------刘备上一章简单介绍了MySQL合并查询结果(二十一),如果没有看过,​​请观看上一章​​一.视图一.一视图的出现......