lot of fixes about offsets
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / PHPContentOutlinePage.java
index bdc86d8..b091a43 100644 (file)
@@ -18,6 +18,8 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.TreeSet;
 
+import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
+import net.sourceforge.phpdt.internal.compiler.parser.OutlineableWithChildren;
 import net.sourceforge.phpdt.internal.compiler.parser.PHPOutlineInfo;
 import net.sourceforge.phpdt.internal.compiler.parser.PHPSegment;
 import net.sourceforge.phpdt.internal.compiler.parser.PHPSegmentWithChildren;
@@ -25,10 +27,7 @@ import net.sourceforge.phpdt.internal.ui.viewsupport.ImageDescriptorRegistry;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.text.BadPositionCategoryException;
-import org.eclipse.jface.text.DefaultPositionUpdater;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IPositionUpdater;
+import org.eclipse.jface.text.*;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
@@ -38,30 +37,29 @@ import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.texteditor.IDocumentProvider;
 import org.eclipse.ui.texteditor.ITextEditor;
-import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
-import test.PHPParserSuperclass;
+
 import test.PHPParserManager;
+import test.PHPParserSuperclass;
 
 /**
  * A content outline page which always represents the functions of the
  * connected PHPEditor.
  */
-public class PHPContentOutlinePage extends ContentOutlinePage {
+public class PHPContentOutlinePage extends AbstractContentOutlinePage {
   private static final String ERROR = "error"; //$NON-NLS-1$
   private static final String WARNING = "warning"; //$NON-NLS-1$
 
   protected static class SegmentComparator implements Comparator {
     public int compare(Object o1, Object o2) {
-      if (o1 instanceof PHPSegmentWithChildren && !(o2 instanceof PHPSegmentWithChildren)) {
+      if (o1 instanceof OutlineableWithChildren && !(o2 instanceof OutlineableWithChildren)) {
         return 1;
       }
-      if (o2 instanceof PHPSegmentWithChildren && !(o1 instanceof PHPSegmentWithChildren)) {
+      if (o2 instanceof OutlineableWithChildren && !(o1 instanceof OutlineableWithChildren)) {
         return -1;
       }
-      return ((PHPSegment) o1).toString().compareToIgnoreCase(((PHPSegment) o2).toString());
+      return ((Outlineable) o1).toString().compareToIgnoreCase(((Outlineable) o2).toString());
     }
   }
 
@@ -106,14 +104,13 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
       PHPOutlineInfo outlineInfo = parser.parseInfo(fInput, text);
       fVariables = outlineInfo.getVariables();
 
-      PHPSegmentWithChildren declarations = outlineInfo.getDeclarations();
-      PHPSegment temp;
+      OutlineableWithChildren declarations = outlineInfo.getDeclarations();
+      Outlineable temp;
       for (int i = 0; i < declarations.size(); i++) {
         temp = declarations.get(i);
         fContent.add(temp);
       }
       Collections.sort(fContent, new SegmentComparator());
-
     }
 
     /*
@@ -184,8 +181,8 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
      * @see ITreeContentProvider#hasChildren(Object)
      */
     public boolean hasChildren(Object element) {
-      if (element instanceof PHPSegmentWithChildren) {
-        return !((PHPSegmentWithChildren) element).getList().isEmpty();
+      if (element instanceof OutlineableWithChildren) {
+        return !((OutlineableWithChildren) element).getList().isEmpty();
       }
       return element == fInput;
     }
@@ -194,8 +191,8 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
      * @see ITreeContentProvider#getParent(Object)
      */
     public Object getParent(Object element) {
-      if (element instanceof PHPSegment) {
-        return ((PHPSegment) element).getParent();
+      if (element instanceof Outlineable) {
+        return ((Outlineable) element).getParent();
       }
       return null;
     }
@@ -206,8 +203,8 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
     public Object[] getChildren(Object element) {
       if (element == fInput)
         return fContent.toArray();
-      if (element instanceof PHPSegmentWithChildren)
-        return ((PHPSegmentWithChildren) element).getList().toArray();
+      if (element instanceof OutlineableWithChildren)
+        return ((OutlineableWithChildren) element).getList().toArray();
       return new Object[0];
     }
   };
@@ -225,26 +222,25 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
     * override.
     */
     public Image getImage(Object element) {
-      if (element instanceof PHPSegment) {
-        ImageDescriptor descriptor = ((PHPSegment) element).getImage();
+      if (element instanceof Outlineable) {
+        ImageDescriptor descriptor = ((Outlineable) element).getImage();
         return fRegistry.get(descriptor);
       }
       return null;
     }
   }
 
-  protected Object fInput;
   protected IDocumentProvider fDocumentProvider;
   protected ITextEditor fTextEditor;
   protected PHPEditor fEditor;
-  protected ContentProvider contentProvider;
+  protected ContentProvider fContentProvider;
 
   /**
    * Creates a content outline page using the given provider and the given editor.
    */
   public PHPContentOutlinePage(IDocumentProvider provider, ITextEditor editor) {
     super();
-    contentProvider = null;
+    fContentProvider = null;
     fDocumentProvider = provider;
     fTextEditor = editor;
     if (editor instanceof PHPEditor)
@@ -260,8 +256,8 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
 
     TreeViewer viewer = getTreeViewer();
 
-    contentProvider = new ContentProvider();
-    viewer.setContentProvider(contentProvider);
+    fContentProvider = new ContentProvider();
+    viewer.setContentProvider(fContentProvider);
     viewer.setLabelProvider(new OutlineLabelProvider());
 
     viewer.addSelectionChangedListener(this);
@@ -281,7 +277,7 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
     if (selection.isEmpty())
       fTextEditor.resetHighlightRange();
     else {
-      PHPSegment segment = (PHPSegment) ((IStructuredSelection) selection).getFirstElement();
+      Outlineable segment = (Outlineable) ((IStructuredSelection) selection).getFirstElement();
       int start = segment.getPosition().getOffset();
       int length = segment.getPosition().getLength();
       try {
@@ -291,35 +287,10 @@ public class PHPContentOutlinePage extends ContentOutlinePage {
       }
     }
   }
-
-  /**
-   * Sets the input of the outline page
-   */
-  public void setInput(Object input) {
-    fInput = input;
-    update();
-  }
-
-  /**
-   * Updates the outline page.
-   */
-  public void update() {
-    TreeViewer viewer = getTreeViewer();
-
-    if (viewer != null) {
-      Control control = viewer.getControl();
-      if (control != null && !control.isDisposed()) {
-        control.setRedraw(false);
-        viewer.setInput(fInput);
-        viewer.expandAll();
-        control.setRedraw(true);
-      }
-    }
-  }
   
   public Object[] getVariables() {
-    if (contentProvider != null) {
-      return contentProvider.getVariables();
+    if (fContentProvider != null) {
+      return fContentProvider.getVariables();
     }
     return null;
   }