refactory: added UI removed from core plugin.
[phpeclipse.git] / net.sourceforge.phpeclipse.ui / src / net / sourceforge / phpdt / internal / ui / text / java / hover / JavaInformationProvider.java
diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/text/java/hover/JavaInformationProvider.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/text/java/hover/JavaInformationProvider.java
new file mode 100644 (file)
index 0000000..a8f3a8e
--- /dev/null
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.ui.text.java.hover;
+
+import net.sourceforge.phpdt.internal.ui.text.JavaWordFinder;
+import net.sourceforge.phpdt.ui.text.java.hover.IJavaEditorTextHover;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.information.IInformationProvider;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IPerspectiveDescriptor;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+
+public class JavaInformationProvider implements IInformationProvider {
+
+       class EditorWatcher implements IPartListener {
+
+               /**
+                * @see IPartListener#partOpened(IWorkbenchPart)
+                */
+               public void partOpened(IWorkbenchPart part) {
+               }
+
+               /**
+                * @see IPartListener#partDeactivated(IWorkbenchPart)
+                */
+               public void partDeactivated(IWorkbenchPart part) {
+               }
+
+               /**
+                * @see IPartListener#partClosed(IWorkbenchPart)
+                */
+               public void partClosed(IWorkbenchPart part) {
+                       if (part == fEditor) {
+                               fEditor.getSite().getWorkbenchWindow().getPartService()
+                                               .removePartListener(fPartListener);
+                               fPartListener = null;
+                       }
+               }
+
+               /**
+                * @see IPartListener#partActivated(IWorkbenchPart)
+                */
+               public void partActivated(IWorkbenchPart part) {
+                       update();
+               }
+
+               public void partBroughtToTop(IWorkbenchPart part) {
+                       update();
+               }
+       }
+
+       protected IEditorPart fEditor;
+
+       protected IPartListener fPartListener;
+
+       protected String fCurrentPerspective;
+
+       protected IJavaEditorTextHover fImplementation;
+
+       public JavaInformationProvider(IEditorPart editor) {
+
+               fEditor = editor;
+
+               if (fEditor != null) {
+
+                       fPartListener = new EditorWatcher();
+                       IWorkbenchWindow window = fEditor.getSite().getWorkbenchWindow();
+                       window.getPartService().addPartListener(fPartListener);
+
+                       update();
+               }
+       }
+
+       protected void update() {
+
+               IWorkbenchWindow window = fEditor.getSite().getWorkbenchWindow();
+               IWorkbenchPage page = window.getActivePage();
+               if (page != null) {
+
+                       IPerspectiveDescriptor perspective = page.getPerspective();
+                       if (perspective != null) {
+                               String perspectiveId = perspective.getId();
+
+                               if (fCurrentPerspective == null
+                                               || fCurrentPerspective != perspectiveId) {
+                                       fCurrentPerspective = perspectiveId;
+
+                                       fImplementation = new JavaTypeHover();
+                                       fImplementation.setEditor(fEditor);
+                               }
+                       }
+               }
+       }
+
+       /*
+        * @see IInformationProvider#getSubject(ITextViewer, int)
+        */
+       public IRegion getSubject(ITextViewer textViewer, int offset) {
+
+               if (textViewer != null)
+                       return JavaWordFinder.findWord(textViewer.getDocument(), offset);
+
+               return null;
+       }
+
+       /*
+        * @see IInformationProvider#getInformation(ITextViewer, IRegion)
+        */
+       public String getInformation(ITextViewer textViewer, IRegion subject) {
+               if (fImplementation != null) {
+                       String s = fImplementation.getHoverInfo(textViewer, subject);
+                       if (s != null && s.trim().length() > 0)
+                               return s;
+               }
+
+               return null;
+       }
+}