Changeset 482 for trunk/org.modelica.mdt.ui/src/org/modelica/mdt/ui/ModelicaElementContentProvider.java
- Timestamp:
- 11/26/06 01:01:05 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/org.modelica.mdt.ui/src/org/modelica/mdt/ui/ModelicaElementContentProvider.java
r466 r482 49 49 import org.eclipse.core.resources.IProject; 50 50 import org.eclipse.core.resources.IResource; 51 import org.eclipse.core.resources.IWorkspaceRoot; 51 52 import org.eclipse.core.runtime.CoreException; 52 53 import org.eclipse.jface.viewers.ITreeContentProvider; … … 55 56 import org.eclipse.swt.widgets.Control; 56 57 import org.modelica.mdt.core.IModelicaElementChange; 57 import org.modelica.mdt.core.IModelicaElementChangeListener;58 58 import org.modelica.mdt.core.IModelicaProject; 59 59 import org.modelica.mdt.core.IModelicaRoot; … … 65 65 import org.eclipse.jface.util.Assert; 66 66 import org.modelica.mdt.core.IModelicaElement; 67 import org.modelica.mdt.core.IModelicaElementChangeListener; 68 import org.modelica.mdt.ui.ModelicaElementChangeListener; 69 70 import com.sun.org.apache.bcel.internal.generic.StoreInstruction; 67 71 68 72 /** … … 70 74 * whith TreeViewer:s to keep things simple. If you want to use it for 71 75 * other viewers some addditional hacking is required on this class. 72 * 76 * 77 * @author Adrian Pop [adrpo@ida.liu.se, http://www.ida.liu.se] 73 78 * @author Elmir Jagudin 74 79 */ 75 public class ModelicaElementContentProvider 76 implements ITreeContentProvider, IModelicaElementChangeListener 80 public class ModelicaElementContentProvider extends ModelicaElementChangeListener implements ITreeContentProvider 77 81 { 78 private TreeViewer viewer;79 82 80 83 public ModelicaElementContentProvider() 81 84 { 82 /* we are interested in changes to modelica elements tree */ 83 ModelicaCore.getModelicaRoot().addModelicaElementChangeListener(this); 85 84 86 } 85 87 … … 89 91 { 90 92 return ((IModelicaRoot)inputElement).getProjects(); 91 } 93 } 94 if (inputElement instanceof IWorkspaceRoot) 95 { 96 return ((IWorkspaceRoot)inputElement).getProjects(); 97 } 98 92 99 93 100 ErrorManager.logBug(UIPlugin.getSymbolicName(), … … 101 108 } 102 109 103 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) 104 { 105 this.viewer = (TreeViewer)viewer; 110 public void inputChanged(Viewer fViewer, Object oldInput, Object newInput) 111 { 112 /* we are interested in changes to modelica elements tree */ 113 setViewer(fViewer); 114 // TODO! see about oldInput! 115 ModelicaCore.getModelicaRoot().addModelicaElementChangeListener(this); 106 116 } 107 117 … … 112 122 try 113 123 { 114 return ((IContainer)parent).members(); 124 IResource[] files = ((IContainer)parent).members(); 125 // sort so package.mo is the first!!!! 126 int i = 0; 127 for (i=0; i < files.length; i++) 128 { 129 //System.out.print(" " + files[i].getName()); 130 if (files[i].getName().equals("package.mo")) 131 break; 132 } 133 // we know here that package.mo has index i 134 IResource[] sortedFiles = null; 135 if (i > 0 && i < files.length) 136 { 137 sortedFiles = new IResource[files.length]; 138 sortedFiles[0] = files[i]; 139 int j = 1; 140 while (j < files.length) 141 { 142 if (j != i) 143 sortedFiles[j] = files[j]; 144 else 145 sortedFiles[j] = files[0]; 146 j++; 147 } 148 } 149 else // no package.mo, don't bother! 150 sortedFiles = files; 151 152 return sortedFiles; 115 153 } 116 154 catch (CoreException e) … … 172 210 try 173 211 { 174 return ((IParent)parent).getChildren().toArray(); 212 Collection<? extends IModelicaElement> childs = ((IParent)parent).getChildren(); 213 214 Object[] sortedFiles = new Object[childs.size()]; 215 IModelicaElement pkg = null; 216 217 for (IModelicaElement e : childs) 218 { 219 if (e.getElementName().equals("package.mo")) 220 pkg = e; 221 } 222 223 if (pkg != null) 224 { 225 sortedFiles[0] = pkg; 226 int j = 1; 227 for (IModelicaElement e : childs) 228 { 229 if (e.equals(pkg)) continue; 230 else { 231 sortedFiles[j] = e; 232 j++; 233 } 234 } 235 } 236 else // no package.mo, don't bother! 237 { 238 int j = 0; 239 for (IModelicaElement e : childs) 240 { 241 sortedFiles[j] = e; 242 j++; 243 } 244 } 245 246 return sortedFiles; 175 247 } 176 248 catch (CompilerException e) … … 236 308 return false; 237 309 } 238 239 /* 240 * IModelicaElementChangeListener interface method 241 */ 242 public void elementsChanged(final Collection<IModelicaElementChange> changes) 243 { 244 Control ctrl = viewer.getControl(); 245 246 if (ctrl == null || ctrl.isDisposed()) 247 { 248 return; 249 } 250 251 if (ctrl.getDisplay().getThread() == Thread.currentThread()) 252 { 253 handleChanges(changes); 254 } 255 else 256 { 257 ctrl.getDisplay().asyncExec(new Runnable() 258 { 259 public void run() 260 { 261 /* Abort if this happens after disposes */ 262 Control ctrl = viewer.getControl(); 263 if (ctrl == null || ctrl.isDisposed()) 264 { 265 return; 266 } 267 handleChanges(changes); 268 } 269 }); 270 } 271 } 272 273 protected void handleChanges(Collection<IModelicaElementChange> changes) 274 { 275 for (IModelicaElementChange change : changes) 276 { 277 Assert.isNotNull(change); 278 if (change == null) continue; 279 Object element = change.getElement(); 280 Assert.isNotNull(element); 281 if (element == null) continue; 282 switch (change.getChangeType()) 283 { 284 case ADDED: 285 viewer.add(change.getParent(), element); 286 break; 287 case MODIFIED: 288 viewer.update(element, null); 289 break; 290 case REMOVED: 291 viewer.remove(element); 292 break; 293 case OPENED: 294 case CLOSED: 295 viewer.refresh(element); 296 break; 297 } 298 } 299 } 310 300 311 }
Note: See TracChangeset
for help on using the changeset viewer.