Ignore:
Timestamp:
11/26/06 01:01:05 (18 years ago)
Author:
adrpo
Message:

latest updates for 0.6.9

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/org.modelica.mdt.ui/src/org/modelica/mdt/ui/ModelicaElementContentProvider.java

    r466 r482  
    4949import org.eclipse.core.resources.IProject;
    5050import org.eclipse.core.resources.IResource;
     51import org.eclipse.core.resources.IWorkspaceRoot;
    5152import org.eclipse.core.runtime.CoreException;
    5253import org.eclipse.jface.viewers.ITreeContentProvider;
     
    5556import org.eclipse.swt.widgets.Control;
    5657import org.modelica.mdt.core.IModelicaElementChange;
    57 import org.modelica.mdt.core.IModelicaElementChangeListener;
    5858import org.modelica.mdt.core.IModelicaProject;
    5959import org.modelica.mdt.core.IModelicaRoot;
     
    6565import org.eclipse.jface.util.Assert;
    6666import org.modelica.mdt.core.IModelicaElement;
     67import org.modelica.mdt.core.IModelicaElementChangeListener;
     68import org.modelica.mdt.ui.ModelicaElementChangeListener;
     69
     70import com.sun.org.apache.bcel.internal.generic.StoreInstruction;
    6771
    6872/**
     
    7074 * whith TreeViewer:s to keep things simple. If you want to use it for
    7175 * 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]
    7378 * @author Elmir Jagudin
    7479 */
    75 public class ModelicaElementContentProvider
    76     implements ITreeContentProvider, IModelicaElementChangeListener
     80public class ModelicaElementContentProvider extends ModelicaElementChangeListener implements ITreeContentProvider
    7781{
    78     private TreeViewer viewer;
    7982   
    8083    public ModelicaElementContentProvider()
    8184    {
    82         /* we are interested in changes to modelica elements tree */
    83         ModelicaCore.getModelicaRoot().addModelicaElementChangeListener(this);
     85       
    8486    }
    8587   
     
    8991        {
    9092            return ((IModelicaRoot)inputElement).getProjects();
    91         }
     93        }       
     94        if (inputElement instanceof IWorkspaceRoot)
     95        {
     96            return ((IWorkspaceRoot)inputElement).getProjects();
     97        }       
     98       
    9299       
    93100        ErrorManager.logBug(UIPlugin.getSymbolicName(),
     
    101108    }
    102109
    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);
    106116    }
    107117
     
    112122            try
    113123            {
    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;
    115153            }
    116154            catch (CoreException e)
     
    172210            try
    173211            {
    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;
    175247            }
    176248            catch (CompilerException e)
     
    236308        return false;
    237309    }
    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   
    300311}
Note: See TracChangeset for help on using the changeset viewer.