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

Last change on this file since 105 was 105, checked in by boris, 19 years ago
  • elements in projects view made double-clickable
File size: 3.9 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.TreeViewer;
15
16import org.eclipse.swt.SWT;
17import org.eclipse.swt.widgets.Composite;
18import org.eclipse.swt.widgets.Menu;
19import org.eclipse.ui.IWorkbenchActionConstants;
20import org.eclipse.ui.model.WorkbenchLabelProvider;
21import org.eclipse.ui.part.DrillDownAdapter;
22import org.eclipse.ui.part.ViewPart;
23import org.modelica.mdt.MdtPlugin;
24import org.modelica.mdt.core.ModelicaCore;
25
26public class ProjectsView extends ViewPart
27{
28    /* key widgets' tags for abbot */
29    public static final String TREE_TAG = "treeParentTag";
30
31    private TreeViewer viewer;
32    private DrillDownAdapter drillDownAdapter;
33    private IResourceChangeListener resourceListener;
34    private ProjectsViewDoubleClickAction doubleClickAction;
35
36
37    @Override
38    public void createPartControl(Composite parent)
39    {
40
41        IWorkspace workspace = ResourcesPlugin.getWorkspace();
42        viewer =
43            new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
44
45        viewer.setContentProvider(new ModelicaElementContentProvider());
46        viewer.setLabelProvider(new WorkbenchLabelProvider());
47        viewer.setInput(ModelicaCore.getModelicaRoot());
48
49        MdtPlugin.tag(viewer.getTree(), TREE_TAG);
50        drillDownAdapter = new DrillDownAdapter(viewer);
51       
52        makeActions();
53        hookDoubleClickAction();
54        hookContextMenu();
55       
56        resourceListener = new IResourceChangeListener()
57        {
58            public void resourceChanged(IResourceChangeEvent event)
59            {
60                if (event.getType() != IResourceChangeEvent.POST_CHANGE)
61                {
62                     return;
63                }
64
65                //TODO this must be made more selective
66                // a list of objects (tree-nodes) need to be made
67                // from resource delta and posted to UI thread
68                // se http://www.eclipse.org/articles/Article-Resource-deltas/resource-deltas.html
69                getViewSite().getShell().getDisplay().asyncExec(new Runnable()
70                {
71                     public void run()
72                     {
73                         viewer.refresh(true);
74                     }
75                });
76            }
77        };
78        workspace.addResourceChangeListener(resourceListener);
79    }
80
81    @Override
82    public void setFocus()
83    {
84        viewer.getTree().setFocus();
85    }
86   
87    private void hookContextMenu()
88    {
89        MenuManager menuMgr = new MenuManager("#PopupMenu");
90        menuMgr.setRemoveAllWhenShown(true);
91        menuMgr.addMenuListener(new IMenuListener()
92        {
93            public void menuAboutToShow(IMenuManager manager)
94            {
95                ProjectsView.this.fillContextMenu(manager);
96            }
97        });
98        Menu menu = menuMgr.createContextMenu(viewer.getControl());
99        viewer.getControl().setMenu(menu);
100        getSite().registerContextMenu(menuMgr, viewer);
101        getSite().setSelectionProvider(viewer);
102    }
103   
104    private void makeActions() 
105    {
106        doubleClickAction = new ProjectsViewDoubleClickAction(viewer); 
107    }
108
109    private void hookDoubleClickAction() 
110    {
111        viewer.addDoubleClickListener(new IDoubleClickListener() 
112        {
113            public void doubleClick(DoubleClickEvent event) 
114            {
115                doubleClickAction.run();
116            }
117        });
118    }
119   
120    private void fillContextMenu(IMenuManager manager) 
121    {
122        manager.add(new Separator());
123        drillDownAdapter.addNavigationActions(manager);
124        // Other plug-ins can contribute there actions here
125        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
126    }
127
128    @Override
129    public void dispose()
130    {
131        super.dispose();
132
133        ResourcesPlugin.getWorkspace().
134            removeResourceChangeListener(resourceListener);
135    }
136
137}
Note: See TracBrowser for help on using the repository browser.