source: trunk/org.modelica.mdt/src/org/modelica/mdt/ui/ProjectsView.java @ 129

Last change on this file since 129 was 129, checked in by boris, 19 years ago
  • added delete action to project view
File size: 6.1 KB
Line 
1package org.modelica.mdt.ui;
2
3import org.eclipse.core.resources.IResourceChangeEvent;
4import org.eclipse.core.resources.IResourceChangeListener;
5import org.eclipse.core.resources.IWorkspace;
6import org.eclipse.core.resources.ResourcesPlugin;
7
8import org.eclipse.jface.action.IMenuListener;
9import org.eclipse.jface.action.IMenuManager;
10import org.eclipse.jface.action.MenuManager;
11import org.eclipse.jface.action.Separator;
12import org.eclipse.jface.viewers.DoubleClickEvent;
13import org.eclipse.jface.viewers.IDoubleClickListener;
14import org.eclipse.jface.viewers.IStructuredSelection;
15import org.eclipse.jface.viewers.TreeViewer;
16
17import org.eclipse.swt.SWT;
18import org.eclipse.swt.events.KeyAdapter;
19import org.eclipse.swt.events.KeyEvent;
20import org.eclipse.swt.widgets.Composite;
21import org.eclipse.swt.widgets.Menu;
22import org.eclipse.swt.widgets.Shell;
23import org.eclipse.ui.ISharedImages;
24import org.eclipse.ui.IWorkbenchActionConstants;
25import org.eclipse.ui.IWorkbenchPartSite;
26import org.eclipse.ui.PlatformUI;
27import org.eclipse.ui.actions.DeleteResourceAction;
28import org.eclipse.ui.model.WorkbenchLabelProvider;
29import org.eclipse.ui.part.DrillDownAdapter;
30import org.eclipse.ui.part.ViewPart;
31import org.modelica.mdt.MdtPlugin;
32import org.modelica.mdt.core.ModelicaCore;
33
34public class ProjectsView extends ViewPart
35{
36    /* key widgets' tags for abbot */
37    public static final String TREE_TAG = "treeParentTag";
38
39    private TreeViewer viewer;
40    private DrillDownAdapter drillDownAdapter;
41    private IResourceChangeListener resourceListener;
42    private ProjectsViewDoubleClickAction doubleClickAction;
43    private DeleteResourceAction deleteAction;
44
45    @Override
46    public void createPartControl(Composite parent)
47    {
48        /* create tree viewer */
49        IWorkspace workspace = ResourcesPlugin.getWorkspace();
50        viewer =
51            new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
52
53        viewer.setContentProvider(new ModelicaElementContentProvider());
54        viewer.setLabelProvider(new WorkbenchLabelProvider());
55        viewer.setInput(ModelicaCore.getModelicaRoot());
56        MdtPlugin.tag(viewer.getTree(), TREE_TAG);
57
58        drillDownAdapter = new DrillDownAdapter(viewer);
59       
60        MenuManager menuMgr= new MenuManager("#PopupMenu"); //$NON-NLS-1$
61        menuMgr.setRemoveAllWhenShown(true);
62        menuMgr.addMenuListener(new IMenuListener()
63        {
64            public void menuAboutToShow(IMenuManager manager)
65            {
66                ProjectsView.this.fillContextMenu(manager);
67            }
68        });
69
70        Menu contextMenu = menuMgr.createContextMenu(viewer.getTree());
71        viewer.getTree().setMenu(contextMenu);
72       
73        // Register viewer with site. This must be done before making the actions.
74        IWorkbenchPartSite site= getSite();
75        site.registerContextMenu(menuMgr, viewer);
76        site.setSelectionProvider(viewer);
77       
78        makeActions(); // call before registering for selection changes
79       
80        hookDoubleClickAction();
81       
82        resourceListener = new IResourceChangeListener()
83        {
84            public void resourceChanged(IResourceChangeEvent event)
85            {
86                if (event.getType() != IResourceChangeEvent.POST_CHANGE)
87                {
88                     return;
89                }
90
91                //TODO this must be made more selective
92                // a list of objects (tree-nodes) need to be made
93                // from resource delta and posted to UI thread
94                // se http://www.eclipse.org/articles/Article-Resource-deltas/resource-deltas.html
95                getViewSite().getShell().getDisplay().asyncExec(new Runnable()
96                {
97                     public void run()
98                     {
99                         viewer.refresh(true);
100                     }
101                });
102            }
103        };
104       
105        viewer.getTree().addKeyListener(new KeyAdapter()
106        {
107            @Override
108            public void keyPressed(KeyEvent e) 
109            {
110                ProjectsView.this.handleKeyPressed(e);
111            }
112           
113        });
114        workspace.addResourceChangeListener(resourceListener);
115    }
116
117    protected void handleKeyPressed(KeyEvent e) 
118    {
119        switch(e.character)
120        {
121        case SWT.DEL:
122            deleteAction.selectionChanged((IStructuredSelection) viewer.getSelection());
123            deleteAction.run();
124            break;
125        }
126    }
127
128    @Override
129    public void setFocus()
130    {
131        viewer.getTree().setFocus();
132    }
133   
134   
135    private void makeActions() 
136    {
137        doubleClickAction = new ProjectsViewDoubleClickAction(viewer);
138       
139        Shell shell = getSite().getShell();
140        ISharedImages images = PlatformUI.getWorkbench().getSharedImages();
141//      clipboard = new Clipboard(shell.getDisplay());
142//
143//      pasteAction = new PasteAction(shell, clipboard);
144//      pasteAction.setDisabledImageDescriptor(images
145//              .getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED));
146//      pasteAction.setImageDescriptor(images
147//                  .getImageDescriptor(ISharedImages.IMG_TOOL_PASTE));
148
149//      copyAction = new CopyAction(shell, clipboard, pasteAction);
150//      copyAction.setDisabledImageDescriptor(images
151//                  .getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED));
152//      copyAction.setImageDescriptor(images
153//                  .getImageDescriptor(ISharedImages.IMG_TOOL_COPY));
154//
155//      moveAction = new ResourceNavigatorMoveAction(shell, treeViewer);
156//      renameAction = new ResourceNavigatorRenameAction(shell, treeViewer);
157
158        deleteAction = new DeleteResourceAction(shell);
159        deleteAction.setDisabledImageDescriptor(images
160                .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE_DISABLED));
161        deleteAction.setImageDescriptor(images
162                .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
163
164    }
165
166    private void hookDoubleClickAction() 
167    {
168        viewer.addDoubleClickListener(new IDoubleClickListener() 
169        {
170            public void doubleClick(DoubleClickEvent event) 
171            {
172                doubleClickAction.run();
173            }
174        });
175    }
176   
177    private void fillContextMenu(IMenuManager manager) 
178    {
179        manager.add(deleteAction);
180        deleteAction.selectionChanged((IStructuredSelection) viewer.getSelection());
181        manager.add(new Separator());
182        drillDownAdapter.addNavigationActions(manager);
183        // Other plug-ins can contribute there actions here
184        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
185    }
186
187    @Override
188    public void dispose()
189    {
190        super.dispose();
191
192        ResourcesPlugin.getWorkspace().
193            removeResourceChangeListener(resourceListener);
194    }
195
196}
Note: See TracBrowser for help on using the repository browser.