package com.javafun.timetracking.ui.view; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; 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.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import com.javafun.timetracking.ui.resources.ResourceMessages; /** * View with a tree viewer. This class is contributed through the plugin.xml. */ public class SettinsNavigationView extends ViewPart { private enum TREE_MENU { NONE(""), //$NON-NLS-1$ ADMINISTRATION(ResourceMessages.getString("NavigationView.Administration")), //$NON-NLS-1$ USERS(ResourceMessages.getString("NavigationView.Users")), //$NON-NLS-1$ ROLES(ResourceMessages.getString("NavigationView.Roles")), //$NON-NLS-1$ PERMISSIONS(ResourceMessages.getString("NavigationView.Permissions")), //$NON-NLS-1$ STATUS(ResourceMessages.getString("NavigationView.Status")), //$NON-NLS-1$ CONNECTIONS(ResourceMessages.getString("NavigationView.Connections")); //$NON-NLS-1$ private String _value; private TREE_MENU(final String value) { _value = value; } public String getValue() { return _value; } } public static final String ID = "com.javafun.core.navigationView"; //$NON-NLS-1$ private TreeViewer viewer; class TreeObject { private final String _name; private TreeParent _parent; private TREE_MENU _menu; public TreeObject(final TREE_MENU menu) { _name = menu.getValue(); _menu = menu; } public String getName() { return _name; } public void setParent(final TreeParent parent) { _parent = parent; } public TreeParent getParent() { return _parent; } public String toString() { return getName(); } public TREE_MENU getMenu() { return _menu; } public void setData(final TREE_MENU menu) { _menu = menu; } } class TreeParent extends TreeObject { private final ArrayList<TreeObject> _children; public TreeParent(final TREE_MENU name) { super(name); _children = new ArrayList<TreeObject>(); } public void addChild(final TreeObject child) { _children.add(child); child.setParent(this); } public void removeChild(final TreeObject child) { _children.remove(child); child.setParent(null); } public TreeObject[] getChildren() { return _children.toArray(new TreeObject[_children.size()]); } public boolean hasChildren() { return _children.size() > 0; } } class ViewContentProvider implements IStructuredContentProvider, ITreeContentProvider { public void inputChanged(final Viewer v, final Object oldInput, final Object newInput) { } public void dispose() { } public Object[] getElements(final Object parent) { return getChildren(parent); } public Object getParent(final Object child) { if (child instanceof TreeObject) { return ((TreeObject) child).getParent(); } return null; } public Object[] getChildren(final Object parent) { if (parent instanceof TreeParent) { return ((TreeParent) parent).getChildren(); } return new Object[0]; } public boolean hasChildren(final Object parent) { if (parent instanceof TreeParent) return ((TreeParent) parent).hasChildren(); return false; } } class ViewLabelProvider extends LabelProvider { public String getText(final Object obj) { return obj.toString(); } public Image getImage(final Object obj) { String imageKey = ISharedImages.IMG_OBJ_ELEMENT; if (obj instanceof TreeParent) imageKey = ISharedImages.IMG_OBJ_FOLDER; return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey); } } /** * We will set up a dummy model to initialize tree heararchy. In real code, * you will connect to a real model and expose its hierarchy. */ private TreeObject createMenu() { TreeParent administration = new TreeParent(TREE_MENU.ADMINISTRATION); TreeObject users = new TreeObject(TREE_MENU.USERS); TreeObject roles = new TreeObject(TREE_MENU.ROLES); TreeObject permissions = new TreeObject(TREE_MENU.PERMISSIONS); administration.addChild(users); administration.addChild(permissions); administration.addChild(roles); TreeParent statistics = new TreeParent(TREE_MENU.STATUS); TreeObject connections = new TreeObject(TREE_MENU.CONNECTIONS); statistics.addChild(connections); TreeParent root = new TreeParent(TREE_MENU.NONE); root.addChild(administration); root.addChild(statistics); return root; } /** * This is a callback that will allow us to create the viewer and initialize * it. */ public void createPartControl(final Composite parent) { viewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); viewer.setInput(createMenu()); viewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(final DoubleClickEvent event) { StructuredSelection selection = (StructuredSelection) viewer.getSelection(); for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object obj = it.next(); if (obj instanceof TreeObject) { TREE_MENU menu = ((TreeObject) obj).getMenu(); switch (menu) { case USERS: break; case ROLES: break; case PERMISSIONS: break; case STATUS: break; case CONNECTIONS: break; default: break; } } } selection.isEmpty(); } }); } /** * Passing the focus request to the viewer's control. */ public void setFocus() { viewer.getControl().setFocus(); } }