package org.craftyourmod.mineclipse.ui.views; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.craftyourmod.mineclipse.core.filemanager.FileManager; import org.craftyourmod.mineclipse.ui.Messages; import org.craftyourmod.mineclipse.ui.actions.AddElementAction; import org.craftyourmod.mineclipse.ui.actions.FileManagerPopupActionGroup; import org.craftyourmod.mineclipse.ui.actions.RemoveElementAction; import org.craftyourmod.mineclipse.ui.providers.FileManagerContentProvider; import org.craftyourmod.mineclipse.ui.providers.FileManagerLabelProvider; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.actions.ActionContext; import org.eclipse.ui.part.ViewPart; import org.eclipse.wb.swt.ResourceManager; public class FileManagerView extends ViewPart implements IMenuListener { public static final String ID = "org.craftyourmod.mineclipse.ui.views.FileManagerView"; //$NON-NLS-1$ private Action addElementAction; private RemoveElementAction remElementAction; private TreeSelection selection; private Action refreshViewAction; private TreeViewer treeViewer; private Menu fContextMenu; private FileManagerPopupActionGroup fActionSet; public FileManagerView() { setPartName(Messages.FileManager_PartName); setTitleToolTip(""); //$NON-NLS-1$ setTitleImage(ResourceManager.getPluginImage( "org.craftyourmod.mineclipse.ui", "icons/file_manager.png")); //$NON-NLS-1$ //$NON-NLS-2$ } /** * Create contents of the view part. * * @param parent */ @Override public void createPartControl(final Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridLayout gl_container = new GridLayout(1, false); gl_container.verticalSpacing = 0; gl_container.marginHeight = 0; gl_container.marginWidth = 0; container.setLayout(gl_container); treeViewer = new TreeViewer(container, SWT.BORDER); treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(final SelectionChangedEvent event) { setSelection((TreeSelection) event.getSelection()); } }); final Tree tree = treeViewer.getTree(); tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); treeViewer.setLabelProvider(new FileManagerLabelProvider()); /* * { TreeViewerColumn treeViewerColumn = new TreeViewerColumn( * treeViewer, SWT.NONE); TreeColumn trclmnName = * treeViewerColumn.getColumn(); trclmnName.setWidth(100); * trclmnName.setText(Messages.FileManagerView_trclmnName_text_1); * treeViewerColumn } * * { TreeViewerColumn treeViewerColumn = new TreeViewerColumn( * treeViewer, SWT.NONE); TreeColumn trclmnId = * treeViewerColumn.getColumn(); trclmnId.setWidth(100); * treeViewerColumn.setLabelProvider(new ColumnLabelProvider() { * * @Override public String getText(final Object element) { return * element instanceof BaseFile ? ((BaseFile) element) .getId() : ""; } * * @Override public Color getBackground(final Object element) { return * SWTResourceManager.getColor(21, 92, 17); } }); * trclmnId.setText(Messages.FileManagerView_trclmnId_text); } */ FileManager.INSTANCE.getSupport().addPropertyChangeListener( new PropertyChangeListener() { @Override public void propertyChange(final PropertyChangeEvent arg0) { Display.getDefault().syncExec(new Runnable() { @Override public void run() { treeViewer.refresh(); } }); } }); treeViewer.setContentProvider(new FileManagerContentProvider()); treeViewer.setLabelProvider(new FileManagerLabelProvider()); treeViewer.setInput("ROOT"); //$NON-NLS-1$ treeViewer.refresh(); createActions(); initializeToolBar(); initializeMenu(); initializePopup(); } /** * Create the actions. */ private void createActions() { remElementAction = new RemoveElementAction(this); addElementAction = new AddElementAction(this); { refreshViewAction = new Action(Messages.FileManagerView_action_text) { @Override public void run() { treeViewer.refresh(); } }; refreshViewAction.setImageDescriptor(ResourceManager .getPluginImageDescriptor("org.craftyourmod.mineclipse.ui", //$NON-NLS-1$ "icons/refresh_nav.gif")); //$NON-NLS-1$ } } /** * Initialize the toolbar. */ private void initializeToolBar() { IToolBarManager toolbarManager = getViewSite().getActionBars() .getToolBarManager(); toolbarManager.add(addElementAction); toolbarManager.add(remElementAction); toolbarManager.add(refreshViewAction); } /** * Initialize the menu. */ private void initializeMenu() { IMenuManager menuManager = getViewSite().getActionBars() .getMenuManager(); menuManager.add(addElementAction); menuManager.add(remElementAction); menuManager.add(refreshViewAction); } private void initializePopup() { MenuManager mgr = new MenuManager("#Popup");//$NON-NLS-1$ fActionSet = new FileManagerPopupActionGroup(this); /* * fActionSet .setContext(new ActionContext(getSelection())); */ // fActionSet.fillContextMenu(mgr); mgr.addMenuListener(this); fContextMenu = mgr.createContextMenu(treeViewer.getControl()); getSite().registerContextMenu(mgr, treeViewer); getSite().setSelectionProvider(treeViewer); treeViewer.getTree().setMenu(fContextMenu); } @Override public void setFocus() { // Set the focus } /** * @return the selection */ public TreeSelection getSelection() { return selection; } /** * @param selection * the selection to set */ public void setSelection(final TreeSelection selection) { this.selection = selection; } @Override public void menuAboutToShow(final IMenuManager manager) { fActionSet.setContext(new ActionContext(getSelection())); fActionSet.fillContextMenu(manager); fActionSet.setContext(null); } }