--- 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())