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

Last change on this file since 4 was 4, checked in by boris, 19 years ago
  • modelica projects view refreshes on resource changes
File size: 4.4 KB
RevLine 
[2]1package org.modelica.mdt;
2
3import org.eclipse.core.resources.IContainer;
4import org.eclipse.core.resources.IFolder;
5import org.eclipse.core.resources.IProject;
6import org.eclipse.core.resources.IResource;
[4]7import org.eclipse.core.resources.IResourceChangeEvent;
8import org.eclipse.core.resources.IResourceChangeListener;
9import org.eclipse.core.resources.IWorkspace;
[2]10import org.eclipse.core.resources.ResourcesPlugin;
11import org.eclipse.core.runtime.CoreException;
12import org.eclipse.jface.action.IMenuListener;
13import org.eclipse.jface.action.IMenuManager;
14import org.eclipse.jface.action.MenuManager;
15import org.eclipse.jface.action.Separator;
16import org.eclipse.jface.viewers.ITreeContentProvider;
17import org.eclipse.jface.viewers.TreeViewer;
18import org.eclipse.jface.viewers.Viewer;
19import org.eclipse.swt.SWT;
20import org.eclipse.swt.widgets.Composite;
21import org.eclipse.swt.widgets.Menu;
22import org.eclipse.ui.IWorkbenchActionConstants;
23import org.eclipse.ui.model.WorkbenchLabelProvider;
24import org.eclipse.ui.part.DrillDownAdapter;
25import org.eclipse.ui.part.ViewPart;
26
27public class ProjectsView extends ViewPart
28{
29    private TreeViewer viewer;
30    private DrillDownAdapter drillDownAdapter;
[4]31    private IResourceChangeListener resourceListener;
[2]32
[4]33
34    public class ProjectsLabelProvider extends WorkbenchLabelProvider
35    {
36
37    }
38
[2]39    public class ProjectsTreeContentProvider implements ITreeContentProvider
40    {
41
42        public Object[] getElements(Object inputElement)
[4]43        {
[2]44            return getChildren(inputElement);
45        }
46       
47        public void dispose()
48        {
49        }
50
51        public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
52        {
53        }
54
55        public Object[] getChildren(Object parent)
56        {
57            if (parent instanceof IContainer)
58            {
59                try
60                {
61                    return ((IContainer)parent).members();
62                }
63                catch (CoreException e)
64                {
65                    //TODO should we do something here ?
66                    e.printStackTrace();
67                }
68            }
69            else if (parent instanceof IResource)
70            {
71               
72            }
73            return null;
74        }
75
76        public Object getParent(Object element)
77        {
78            return null;
79        }
80
81        public boolean hasChildren(Object element)
82        {
83            if (element instanceof IProject)
84            {
85                return ((IProject)element).isOpen();
86            }
87            else if (element instanceof IFolder)
88            {
89                return true;
90            }
91            return false;
92        }
93
94
95    }
96
97    @Override
98    public void createPartControl(Composite parent)
99    {
[4]100        IWorkspace workspace = ResourcesPlugin.getWorkspace();
[2]101        viewer =
102            new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
103
104        viewer.setContentProvider(new ProjectsTreeContentProvider());
[4]105        viewer.setLabelProvider(new ProjectsLabelProvider());
106        viewer.setInput(workspace.getRoot());
107
[2]108        drillDownAdapter = new DrillDownAdapter(viewer);
109       
110        hookContextMenu();
[4]111       
112        resourceListener = new IResourceChangeListener()
113        {
114            public void resourceChanged(IResourceChangeEvent event)
115            {
116                if (event.getType() != IResourceChangeEvent.POST_CHANGE)
117                {
118                     return;
119                }
120
121                //TODO this must be made more selective
122                // a list of objects (tree-nodes) need to be made
123                // from resource delta and posted to UI thread
124                // se http://www.eclipse.org/articles/Article-Resource-deltas/resource-deltas.html
125                getViewSite().getShell().getDisplay().asyncExec(new Runnable()
126                {
127                     public void run()
128                     {
129                         viewer.refresh(true);
130                     }
131                });
132            }
133        };
134        workspace.addResourceChangeListener(resourceListener);
[2]135    }
136
137    @Override
138    public void setFocus()
139    {
140        viewer.getTree().setFocus();
141    }
142   
[4]143    private void hookContextMenu()
144    {
[2]145        MenuManager menuMgr = new MenuManager("#PopupMenu");
146        menuMgr.setRemoveAllWhenShown(true);
[4]147        menuMgr.addMenuListener(new IMenuListener()
148        {
149            public void menuAboutToShow(IMenuManager manager)
150            {
[2]151                ProjectsView.this.fillContextMenu(manager);
152            }
153        });
154        Menu menu = menuMgr.createContextMenu(viewer.getControl());
155        viewer.getControl().setMenu(menu);
156        getSite().registerContextMenu(menuMgr, viewer);
157    }
158
159    private void fillContextMenu(IMenuManager manager) 
160    {
161        manager.add(new Separator());
162        drillDownAdapter.addNavigationActions(manager);
163        // Other plug-ins can contribute there actions here
164        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
165    }
166
[4]167    @Override
168    public void dispose()
169    {
170        super.dispose();
171        ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceListener);
172    }
173
[2]174}
Note: See TracBrowser for help on using the repository browser.