UI/CodeDocumentationViewer.py

changeset 6266
c7bc0e516cd6
parent 6048
82ad8ec9548c
child 6372
ae44c83fccab
--- a/UI/CodeDocumentationViewer.py	Sat Apr 21 18:02:04 2018 +0200
+++ b/UI/CodeDocumentationViewer.py	Sun Apr 22 14:01:39 2018 +0200
@@ -14,7 +14,7 @@
 except NameError:
     basestring = str
 
-from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl
+from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QTimer
 from PyQt5.QtGui import QCursor
 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, \
     QComboBox, QSizePolicy, QLineEdit, QTextEdit, QToolTip, QToolButton, \
@@ -210,6 +210,12 @@
         
         self.__lastDocumentation = None
         self.__requestingEditor = None
+        
+        self.__unregisterTimer = QTimer(self)
+        self.__unregisterTimer.setInterval(30000)   # 30 seconds
+        self.__unregisterTimer.setSingleShot(True)
+        self.__unregisterTimer.timeout.connect(self.__unregisterTimerTimeout)
+        self.__mostRecentlyUnregisteredProvider = None
     
     def __setupUi(self):
         """
@@ -342,6 +348,13 @@
         self.providerComboBox.addItem(providerDisplay, providerName)
         
         self.providerAdded.emit()
+        
+        if self.__unregisterTimer.isActive():
+            if providerName == self.__mostRecentlyUnregisteredProvider:
+                # this is assumed to be a plug-in reload
+                self.__unregisterTimer.stop()
+                self.__mostRecentlyUnregisteredProvider = None
+                self.__selectProvider(providerName)
     
     def unregisterProvider(self, providerName):
         """
@@ -353,6 +366,11 @@
         if providerName in self.__providers:
             if providerName == self.__selectedProvider:
                 self.providerComboBox.setCurrentIndex(0)
+                
+                # in case this is just a temporary unregistration (< 30s)
+                # e.g. when the plug-in is re-installed or updated
+                self.__mostRecentlyUnregisteredProvider = providerName
+                self.__unregisterTimer.start()
             
             del self.__providers[providerName]
             index = self.providerComboBox.findData(providerName)
@@ -360,6 +378,13 @@
             
             self.providerRemoved.emit()
     
+    @pyqtSlot()
+    def __unregisterTimerTimeout(self):
+        """
+        Private slot handling the timeout signal of the unregister timer.
+        """
+        self.__mostRecentlyUnregisteredProvider = None
+    
     def isSupportedLanguage(self, language):
         """
         Public method to check, if the given language is supported by the
@@ -581,6 +606,15 @@
             self.__showTextViewer(showMarkdown)
         
         provider = Preferences.getDocuViewer("Provider")
+        self.__selectProvider(provider)
+    
+    def __selectProvider(self, provider):
+        """
+        Private method to select a provider programmatically.
+        
+        @param provider name of the provider to be selected
+        @type str
+        """
         if provider != self.__selectedProvider:
             index = self.providerComboBox.findData(provider)
             if index < 0:

eric ide

mercurial