UI/CodeDocumentationViewer.py

changeset 5905
f31960634997
parent 5900
cd90bfdc1247
child 5908
4d08fb83a844
diff -r 2ff6078532c0 -r f31960634997 UI/CodeDocumentationViewer.py
--- a/UI/CodeDocumentationViewer.py	Sun Oct 15 17:21:51 2017 +0200
+++ b/UI/CodeDocumentationViewer.py	Sun Oct 15 19:40:26 2017 +0200
@@ -35,6 +35,8 @@
         super(CodeDocumentationViewer, self).__init__(parent)
         self.setupUi(self)
         
+        self.searchWidget.attachTextEdit(self.contents)
+        
         self.__ui = parent
         
         self.__providers = {}
@@ -44,26 +46,34 @@
         self.__shuttingDown = False
         self.__startingUp = True
         
+        self.__lastDocumentation = None
+        
+        self.__showMarkdown = Preferences.getDocuViewer("ShowInfoAsMarkdown")
+        
         self.__noDocumentationString = self.tr("No documentation available")
         self.__disabledString = self.tr(
             "No source code documentation provider has been registered or"
             " this function has been disabled.")
         
         self.providerComboBox.addItem(self.tr("<disabled>"), "disabled")
+        
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.contents.setFontFamily(font.family())
+        self.contents.setFontPointSize(font.pointSize())
     
     def finalizeSetup(self):
         """
         Public method to finalize the setup of the documentation viewer.
         """
         self.__startingUp = False
-        provider = Preferences.Prefs.settings.value(
-            "CodeDocumentationViewer/Provider", "disabled")
+        provider = Preferences.getDocuViewer("Provider")
         if provider in self.__providers:
             index = self.providerComboBox.findData(provider)
         else:
             index = 0
         self.providerComboBox.setCurrentIndex(index)
     
+    # TODO: document this hook in the plug-in document
     def registerProvider(self, providerName, providerDisplay, provider):
         """
         Public method register a source docu provider.
@@ -84,6 +94,7 @@
         self.__providers[providerName] = provider
         self.providerComboBox.addItem(providerDisplay, providerName)
     
+    # TODO: document this hook in the plug-in document
     def unregisterProvider(self, providerName):
         """
         Public method register a source docu provider.
@@ -106,10 +117,18 @@
         @param editor reference to the editor to request code docu for
         @type Editor
         """
+        line, index = editor.getCursorPosition()
+        word = editor.getWord(line, index)
+        if not word:
+            # try again one index before
+            word = editor.getWord(line,  index - 1)
+        self.objectLineEdit.setText(word)
+        
         if self.__selectedProvider != self.__disabledProvider:
             self.contents.clear()
             self.__providers[self.__selectedProvider](editor)
     
+    # TODO: document this hook in the plug-in document
     def documentationReady(self, documentationInfo):
         """
         Public method to provide the documentation info to the viewer.
@@ -128,27 +147,42 @@
         """
         self.__ui.activateCodeDocumentationViewer(switchFocus=False)
         
+        self.__lastDocumentation = documentationInfo
+        
         if not documentationInfo:
             fullText = self.__noDocumentationString
         elif isinstance(documentationInfo, str):
             fullText = documentationInfo
         elif isinstance(documentationInfo, dict):
+            # format the text with markdown syntax
             name = documentationInfo["name"]
             if name:
-                title = "".join(["=" * len(name), "\n", name, "\n",
+                title = "".join([name, "\n",
                                  "=" * len(name), "\n\n"])
             else:
                 title = ""
 
             if documentationInfo["argspec"]:
-                definition = self.tr("Definition: {0}{1}\n").format(
-                    name, documentationInfo["argspec"])
+                if self.__showMarkdown:
+                    definition = self.tr("**Definition**: {0}{1}\n",
+                                         "string with markdown syntax").format(
+                        name, documentationInfo["argspec"])
+                else:
+                    definition = self.tr("Definition: {0}{1}\n",
+                                         "string as plain text").format(
+                        name, documentationInfo["argspec"])
             else:
                 definition = ''
 
             if documentationInfo["note"]:
-                note = self.tr("Info: {0}\n\n----\n\n").format(
-                    documentationInfo["note"])
+                if self.__showMarkdown:
+                    note = self.tr("**Info**: _{0}_\n\n----\n\n",
+                                   "string with markdown syntax").format(
+                        documentationInfo["note"])
+                else:
+                    note = self.tr("Info: {0}\n\n----\n\n",
+                                   "string as plain text").format(
+                        documentationInfo["note"])
             else:
                 note = ""
 
@@ -170,8 +204,7 @@
             if provider == self.__disabledProvider:
                 self.documentationReady(self.__disabledString)
             elif provider in self.__providers:
-                Preferences.Prefs.settings.setValue(
-                    "CodeDocumentationViewer/Provider", provider)
+                Preferences.setDocuViewer("Provider", provider)
             self.__selectedProvider = provider
     
     def shutdown(self):
@@ -179,5 +212,24 @@
         Public method to perform shutdown actions.
         """
         self.__shuttingDown = True
-        Preferences.Prefs.settings.setValue(
-            "CodeDocumentationViewer/Provider", self.__selectedProvider)
+        Preferences.setDocuViewer("Provider", self.__selectedProvider)
+    
+    def preferencesChanged(self):
+        """
+        Public slot to handle a change of preferences.
+        """
+        showMarkdown = Preferences.getDocuViewer("ShowInfoAsMarkdown")
+        if showMarkdown != self.__showMarkdown:
+            self.__showMarkdown = showMarkdown
+            self.documentationReady(self.__lastDocumentation)
+        
+        provider = Preferences.getDocuViewer("Provider")
+        if provider != self.__selectedProvider:
+            index = self.providerComboBox.findData(provider)
+            if index < 0:
+                index = 0
+            self.providerComboBox.setCurrentIndex(index)
+        
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.contents.setFontFamily(font.family())
+        self.contents.setFontPointSize(font.pointSize())

eric ide

mercurial