package com.hundsun.ares.studio.ui;
import java.util.ArrayList;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
/**
* 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 TreeListView extends ViewPart {
private Tree tree;
private TreeViewer listViewer;
private Action doubleClickAction;
public static final String VIEW_ID = "com.rayootech.xdesktop.ui.views.TreeListView";
/*
* 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 TreeObject implements IAdaptable {
private String name;
private TreeParent parent;
public TreeObject(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setParent(TreeParent parent) {
this.parent = parent;
}
public TreeParent getParent() {
return parent;
}
public String toString() {
return getName();
}
public Object getAdapter(Class key) {
return null;
}
}
class TreeParent extends TreeObject {
private ArrayList children;
public TreeParent(String name) {
super(name);
children = new ArrayList();
}
public void addChild(TreeObject child) {
children.add(child);
child.setParent(this);
}
public void removeChild(TreeObject child) {
children.remove(child);
child.setParent(null);
}
public TreeObject[] getChildren() {
return (TreeObject[]) children.toArray(new TreeObject[children
.size()]);
}
public boolean hasChildren() {
return children.size() > 0;
}
}
class ViewContentProvider implements IStructuredContentProvider,
ITreeContentProvider {
private TreeParent invisibleRoot;
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object parent) {
if (parent.equals(getViewSite())) {
if (invisibleRoot == null)
initialize();
return getChildren(invisibleRoot);
}
return getChildren(parent);
}
public Object getParent(Object child) {
if (child instanceof TreeObject) {
return ((TreeObject) child).getParent();
}
return null;
}
public Object[] getChildren(Object parent) {
if (parent instanceof TreeParent) {
return ((TreeParent) parent).getChildren();
}
return new Object[0];
}
public boolean hasChildren(Object parent) {
if (parent instanceof TreeParent)
return ((TreeParent) parent).hasChildren();
return false;
}
/*
* We will set up a dummy model to initialize tree heararchy. In a real
* code, you will connect to a real model and expose its hierarchy.
*/
private void initialize() {
TreeParent root_one = new TreeParent("���Ž���");
TreeParent child_one = new TreeParent("�Ŷӵ�������");
TreeObject child_one_one = new TreeObject("���뵵��");
TreeObject child_one_two = new TreeObject("�ֹ�¼��Ԥ�㵵��");
TreeObject child_one_three = new TreeObject("�ֹ�¼����㵵��");
TreeObject child_one_four = new TreeObject("Ԥ�㵵������");
TreeObject child_one_five = new TreeObject("���㵵������");
TreeObject child_one_six = new TreeObject("���������");
root_one.addChild(child_one);
child_one.addChild(child_one_one);
child_one.addChild(child_one_two);
child_one.addChild(child_one_four);
child_one.addChild(child_one_three);
child_one.addChild(child_one_five);
child_one.addChild(child_one_six);
TreeParent child_two = new TreeParent("���˿����");
TreeObject child_two_one = new TreeObject("ϵͳ�տ�");
TreeObject child_two_two = new TreeObject("�ֹ�¼���տ�ƾ֤");
TreeObject child_two_three= new TreeObject("�����˿�����");
TreeObject child_two_four = new TreeObject("�ֹ�¼���˿�ƾ֤");
TreeObject child_two_five = new TreeObject("�˿��ƾ֤��ˣ�");
TreeObject child_two_six = new TreeObject("���˿���Чƾ֤��ѯ");
TreeObject child_two_seven = new TreeObject("�ͻ�Ԥ���˻�����");
TreeObject child_two_eight = new TreeObject("��Ʊ����");
root_one.addChild(child_two);
child_two.addChild(child_two_one);
child_two.addChild(child_two_two);
child_two.addChild(child_two_three);
child_two.addChild(child_two_four);
child_two.addChild(child_two_five);
child_two.addChild(child_two_six);
child_two.addChild(child_two_seven);
child_two.addChild(child_two_eight);
TreeParent child_three = new TreeParent("�������");
TreeObject child_three_one = new TreeObject("ϵͳ�������봦��");
TreeObject child_three_two = new TreeObject("�ֹ�¼�븶��ƾ֤");
TreeObject child_three_three = new TreeObject("�����ƾ֤��ˣ�");
TreeObject child_three_four = new TreeObject("����ƾ֤��ѯ");
TreeObject child_three_five = new TreeObject("��Ӧ��Ԥ���˻�����");
root_one.addChild(child_three);
child_three.addChild(child_three_one);
child_three.addChild(child_three_two);
child_three.addChild(child_three_four);
child_three.addChild(child_three_three);
child_three.addChild(child_three_five);
TreeParent child_four = new TreeParent("�Ƶ�������");
TreeObject child_four_one = new TreeObject("ϵͳ�Ƶ�����������");
TreeObject child_four_two = new TreeObject("�ֹ�¼��Ƶ����ƾ֤");
TreeObject child_four_three = new TreeObject("�Ƶ�����");
TreeObject child_four_four = new TreeObject("�Ƶ�����ѯ");
TreeObject child_four_five = new TreeObject("�Ƶ�����");
TreeObject child_four_six = new TreeObject("�Ƶ��˻�����");
root_one.addChild(child_four);
child_four.addChild(child_four_one);
child_four.addChild(child_four_two);
child_four.addChild(child_four_four);
child_four.addChild(child_four_three);
child_four.addChild(child_four_five);
child_four.addChild(child_four_six);
TreeParent child_five = new TreeParent("Ӧ��Ӧ��");
TreeObject child_five_one = new TreeObject("Ӧ�ղ�ѯ����������λ��");
TreeObject child_five_two = new TreeObject("Ӧ�ղ�ѯ�����Ŷӣ�");
TreeObject child_five_three = new TreeObject("Ӧ����ѯ����������λ��");
TreeObject child_five_four = new TreeObject("Ӧ����ѯ�����Ŷӣ�");
TreeObject child_five_five = new TreeObject("Ӧ��Ԥ��");
root_one.addChild(child_five);
child_five.addChild(child_five_one);
child_five.addChild(child_five_two);
child_five.addChild(child_five_four);
child_five.addChild(child_five_three);
child_five.addChild(child_five_five);
TreeObject child_six = new TreeObject("�������");
root_one.addChild(child_six);
TreeParent root_two = new TreeParent("ϵͳ����");
TreeParent parent_one = new TreeParent("������Ŀ");
TreeObject parent_one_one = new TreeObject("ϵͳ��λ�鿴");
TreeObject parent_one_two = new TreeObject("�����û�����");
TreeObject parent_one_three = new TreeObject("�����ɫ");
TreeObject parent_one_four = new TreeObject("Ȩ����");
TreeObject parent_one_five = new TreeObject("������");
root_two.addChild(parent_one);
parent_one.addChild(parent_one_one);
parent_one.addChild(parent_one_two);
parent_one.addChild(parent_one_three);
parent_one.addChild(parent_one_four);
parent_one.addChild(parent_one_five);
TreeParent parent_two = new TreeParent("������λ");
TreeObject parent_two_one = new TreeObject("��־����");
root_two.addChild(parent_two);
parent_two.addChild(parent_two_one);
TreeParent root_three = new TreeParent("��������");
TreeParent parent_three = new TreeParent("������Ϣ");
TreeObject parent_three_one = new TreeObject("�ɱ���Ŀ");
TreeObject parent_three_two = new TreeObject("·�߱�");
TreeObject parent_three_three = new TreeObject("·�߷���");
TreeObject parent_three_four = new TreeObject("���ʽ");
TreeObject parent_three_five = new TreeObject("������Ϣ");
root_three.addChild(parent_three);
parent_three.addChild(parent_three_one);
parent_three.addChild(parent_three_two);
parent_three.addChild(parent_three_three);
parent_three.addChild(parent_three_four);
parent_three.addChild(parent_three_five);
TreeParent parent_four = new TreeParent("������λ");
TreeObject parent_four_one = new TreeObject("�ͻ��������̣�������Ϣ����");
TreeObject parent_four_two = new TreeObject("�ͻ�������������");
TreeObject parent_four_three = new TreeObject("�ͻ�����/����");
TreeObject parent_four_four = new TreeObject("��Ӧ�̻�����Ϣ����");
TreeObject parent_four_five = new TreeObject("Ѻ�����");
root_three.addChild(parent_four);
parent_four.addChild(parent_four_one);
parent_four.addChild(parent_four_two);
parent_four.addChild(parent_four_three);
parent_four.addChild(parent_four_four);
parent_four.addChild(parent_four_five);
invisibleRoot = new TreeParent("");
invisibleRoot.addChild(root_one);
invisibleRoot.addChild(root_two);
invisibleRoot.addChild(root_three);
}
}
class ViewLabelProvider extends LabelProvider {
public String getText(Object obj) {
return obj.toString();
}
public Image getImage(Object obj) {
// ���ӽڵ�ͼƬ
String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
if (obj instanceof TreeParent)
// �Ÿ��ڵ�ͼƬ
imageKey = ISharedImages.IMG_OBJ_FOLDER;
return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
}
}
/**
* The constructor.
*/
public TreeListView() {
}
/**
* This is a callback that will allow us to create the viewer and initialize
* it.
*/
public void createPartControl(Composite parent) {
listViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
tree = listViewer.getTree();
//tree.setFont(SWTResourceManager.getFont("", 12, SWT.NONE));
listViewer.setContentProvider(new ViewContentProvider());
listViewer.setLabelProvider(new ViewLabelProvider());
listViewer.setInput(getViewSite());
makeActions();
hookDoubleClickAction();
initializeToolBar();
}
private void makeActions() {
doubleClickAction = new Action() {
public void run() {
ISelection selection = listViewer.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
// showMessage("Double-click detected on " + obj.toString());
if (!selection.isEmpty()) {
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IViewPart iv = null;
}
}
};
}
private void hookDoubleClickAction() {
listViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
doubleClickAction.run();
}
});
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
listViewer.getControl().setFocus();
}
private void initializeToolBar() {
IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
}
}