⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myactiongroup.java

📁 基于eclipse|rcp的浏览器,另完成加入了收藏夹功能
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * @author 陈勇 创建日期 2006-4-10
 *
 * 努力!
 */
package org.eclipse.rcp.browser;


import java.util.ArrayList;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.rcp.browser.MyInputDialog;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.actions.ActionGroup;



/**
 * @author Administrator
 * 
 * TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class MyActionGroup extends ActionGroup {
	private TreeViewer tv;

	private Display display;

	final ITreeEntry[] sourceObj = new ITreeEntry[1];// 暂存拖动源对象

	final static String path = "lib/WWWroot.xml";

	final Clipboard cb = new Clipboard(display);

	/**
	 * 
	 */
	public MyActionGroup(TreeViewer tv, Display display) {
		this.tv = tv;
		this.display = display;
	}

	public void fillContexMenu(IMenuManager mgr) {
		MenuManager menuManager = (MenuManager) mgr;
		menuManager.add(new OpenAction());
		menuManager.add(new ExpandAction());
		menuManager.add(new CollapseAction());
		menuManager.add(new Separator());
		menuManager.add(new CutTreeAction());
		menuManager.add(new PasteTreeAction());
		menuManager.add(new Separator());
		menuManager.add(new AddEntryAction());
		menuManager.add(new DelEntryAction());
		menuManager.add(new ModifyEntryAction());
		menuManager.add(new RefreshAction());
		menuManager.add(new Separator());
		menuManager.add(new HelpAction());
		Tree tree = tv.getTree();
		Menu menu = menuManager.createContextMenu(tree);
		System.out.println("有菜单:" + menu.getItemCount());
		tree.setMenu(menu);
	}

	private ITreeEntry getSelTreeEntry() {
		IStructuredSelection selection = (IStructuredSelection) tv
				.getSelection();
		ITreeEntry obj = (ITreeEntry) selection.getFirstElement();
		return obj;
	}

	private class OpenAction extends Action {
		public OpenAction() {
			setText("打开");
		}

		/*
		 * (非 Javadoc)
		 * 
		 * @see org.eclipse.jface.action.IAction#run()
		 */
		public void run() {
			// TODO 自动生成方法存根
			super.run();
			ITreeEntry obj = getSelTreeEntry();
			if (obj instanceof RootWjj) {
				tv.expandToLevel(obj, 1);
			} else if (obj instanceof WjjEntity) {
				tv.expandToLevel(obj, 1);
			} else if (obj instanceof WzEntity) {
				// 这里写打开browser的代码
				String secondaryId=((WzEntity)obj).getName();
				String URL=((WzEntity)obj).getPath();
				IWorkbenchPage page=BrowserPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage();					
				if(page!=null){
					try {		
//						page.bringToTop(view2);
						((BrowserView)page.showView(IBrowserConstants.BROWSER_VIEW_ID,secondaryId, IWorkbenchPage.VIEW_ACTIVATE)).getBrowser().setUrl(URL);
//						
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
	}

	private class RefreshAction extends Action {
		public RefreshAction() {
			setText("刷新");
		}

		/*
		 * (非 Javadoc)
		 * 
		 * @see org.eclipse.jface.action.IAction#run()
		 */
		public void run() {
			// TODO 自动生成方法存根
			super.run();
			tv.setInput(DataFactory.createTreeData());
			// tv.refresh();
		}
	}

	private class ExpandAction extends Action {
		public ExpandAction() {
			setText("全展开");
		}

		/*
		 * (非 Javadoc)
		 * 
		 * @see org.eclipse.jface.action.IAction#run()
		 */
		public void run() {
			// TODO 自动生成方法存根
			super.run();
			ITreeEntry obj = getSelTreeEntry();
			if (obj != null) {
				tv.expandAll();// 只展开一层
			}
		}
	}

	private class CollapseAction extends Action {
		public CollapseAction() {
			setText("收缩");
		}

		/*
		 * (非 Javadoc)
		 * 
		 * @see org.eclipse.jface.action.IAction#run()
		 */
		public void run() {
			// TODO 自动生成方法存根
			super.run();
			ITreeEntry obj = getSelTreeEntry();
			if (obj instanceof RootWjj) {
				tv.collapseToLevel(obj, 1);
			} else if (obj instanceof WjjEntity) {
				tv.collapseToLevel(obj, 1);
			} else if (obj instanceof WzEntity) {
				tv.collapseAll();
			}
		}
	}

	private class CutTreeAction extends Action {
		public CutTreeAction() {
			setText("剪切");
		}

		public void run() {
			super.run();
			ITreeEntry obj = getSelTreeEntry();
			if (obj instanceof RootWjj) {
				return;
			} else if (obj instanceof WjjEntity) {
				return;
			} else if (obj instanceof WzEntity) {				
				Object[] data = new Object[] { obj.getName() };
				Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
				cb.setContents(data, types);
				sourceObj[0] = obj;
				try {
					WzXml.delWzXML(path, ((WzEntity) obj).getName());
				} catch (Exception e) {
					// TODO 自动生成 catch 块
					MessageDialog.openError(null, "剪切错误", e.toString());
					return;
				}
				tv.remove(obj);				
			}
		}
	}

	private class PasteTreeAction extends Action {
		public PasteTreeAction() {
			setText("粘贴");
		}

		public void run() {
			super.run();
			ITreeEntry obj = getSelTreeEntry();
			
			if (obj instanceof RootWjj) {
				return;
			} else if (obj instanceof WjjEntity) {
				if (cb.getContents(TextTransfer.getInstance()) != null) {
					String str = (String) (cb.getContents(TextTransfer
							.getInstance()));
					WzEntity childObj = new WzEntity(str,
							((WzEntity) sourceObj[0]).getPath(),
							(WjjEntity) obj);
					try {
						WzXml.AddWzXML(path, obj.getName(), childObj);
					} catch (Exception e) {
						// TODO 自动生成 catch 块
						MessageDialog.openError(null, "剪切错误", e.toString());
						return;
					}					
					if(!obj.equals(sourceObj[0].getParent())){//除掉本身文件夹粘贴时产生两个相同的站点视图模型
					if (!new TreeViewerContentProvider().hasChildren(obj)) {//我以前写的解决“+”问题,在这里只能用我写的解决。陈刚写的不管。
	                        ArrayList list = new ArrayList();
	                        list.add(childObj);
	                        obj.setChildren(list);
	                }
					tv.setExpandedState(obj,true);
					tv.add(obj, childObj);
					}else{
						tv.setExpandedState(obj,true);
						tv.refresh(obj);
					}
					cb.clearContents();
				} else {
					return;
				}

			} else if (obj instanceof WzEntity) {
				if (cb.getContents(TextTransfer.getInstance()) != null) {
					String str = (String) (cb.getContents(TextTransfer
							.getInstance()));
					WzEntity childObj = new WzEntity(str,
							((WzEntity) sourceObj[0]).getPath(),
							(WjjEntity) obj.getParent());
					try {
						WzXml.AddWzXML(path, ((WjjEntity) obj.getParent())
								.getName(), childObj);
					} catch (Exception e) {
						// TODO 自动生成 catch 块
						MessageDialog.openError(null, "剪切错误", e.toString());
						return;
					}
					tv.add(obj.getParent(), childObj);							
					cb.clearContents();
					
				} else {
					return;
				}
			}
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -