12 try: |
12 try: |
13 basestring # __IGNORE_WARNING__ |
13 basestring # __IGNORE_WARNING__ |
14 except NameError: |
14 except NameError: |
15 basestring = str |
15 basestring = str |
16 |
16 |
17 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl |
17 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QTimer |
18 from PyQt5.QtGui import QCursor |
18 from PyQt5.QtGui import QCursor |
19 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, \ |
19 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, \ |
20 QComboBox, QSizePolicy, QLineEdit, QTextEdit, QToolTip, QToolButton, \ |
20 QComboBox, QSizePolicy, QLineEdit, QTextEdit, QToolTip, QToolButton, \ |
21 QActionGroup, QMenu |
21 QActionGroup, QMenu |
22 |
22 |
208 self.__shuttingDown = False |
208 self.__shuttingDown = False |
209 self.__startingUp = True |
209 self.__startingUp = True |
210 |
210 |
211 self.__lastDocumentation = None |
211 self.__lastDocumentation = None |
212 self.__requestingEditor = None |
212 self.__requestingEditor = None |
|
213 |
|
214 self.__unregisterTimer = QTimer(self) |
|
215 self.__unregisterTimer.setInterval(30000) # 30 seconds |
|
216 self.__unregisterTimer.setSingleShot(True) |
|
217 self.__unregisterTimer.timeout.connect(self.__unregisterTimerTimeout) |
|
218 self.__mostRecentlyUnregisteredProvider = None |
213 |
219 |
214 def __setupUi(self): |
220 def __setupUi(self): |
215 """ |
221 """ |
216 Private method to generate the UI layout. |
222 Private method to generate the UI layout. |
217 """ |
223 """ |
340 |
346 |
341 self.__providers[providerName] = (provider, supported) |
347 self.__providers[providerName] = (provider, supported) |
342 self.providerComboBox.addItem(providerDisplay, providerName) |
348 self.providerComboBox.addItem(providerDisplay, providerName) |
343 |
349 |
344 self.providerAdded.emit() |
350 self.providerAdded.emit() |
|
351 |
|
352 if self.__unregisterTimer.isActive(): |
|
353 if providerName == self.__mostRecentlyUnregisteredProvider: |
|
354 # this is assumed to be a plug-in reload |
|
355 self.__unregisterTimer.stop() |
|
356 self.__mostRecentlyUnregisteredProvider = None |
|
357 self.__selectProvider(providerName) |
345 |
358 |
346 def unregisterProvider(self, providerName): |
359 def unregisterProvider(self, providerName): |
347 """ |
360 """ |
348 Public method register a source docu provider. |
361 Public method register a source docu provider. |
349 |
362 |
351 @type str |
364 @type str |
352 """ |
365 """ |
353 if providerName in self.__providers: |
366 if providerName in self.__providers: |
354 if providerName == self.__selectedProvider: |
367 if providerName == self.__selectedProvider: |
355 self.providerComboBox.setCurrentIndex(0) |
368 self.providerComboBox.setCurrentIndex(0) |
|
369 |
|
370 # in case this is just a temporary unregistration (< 30s) |
|
371 # e.g. when the plug-in is re-installed or updated |
|
372 self.__mostRecentlyUnregisteredProvider = providerName |
|
373 self.__unregisterTimer.start() |
356 |
374 |
357 del self.__providers[providerName] |
375 del self.__providers[providerName] |
358 index = self.providerComboBox.findData(providerName) |
376 index = self.providerComboBox.findData(providerName) |
359 self.providerComboBox.removeItem(index) |
377 self.providerComboBox.removeItem(index) |
360 |
378 |
361 self.providerRemoved.emit() |
379 self.providerRemoved.emit() |
|
380 |
|
381 @pyqtSlot() |
|
382 def __unregisterTimerTimeout(self): |
|
383 """ |
|
384 Private slot handling the timeout signal of the unregister timer. |
|
385 """ |
|
386 self.__mostRecentlyUnregisteredProvider = None |
362 |
387 |
363 def isSupportedLanguage(self, language): |
388 def isSupportedLanguage(self, language): |
364 """ |
389 """ |
365 Public method to check, if the given language is supported by the |
390 Public method to check, if the given language is supported by the |
366 selected provider. |
391 selected provider. |
579 showMarkdown = Preferences.getDocuViewer("ShowInfoAsRichText") |
604 showMarkdown = Preferences.getDocuViewer("ShowInfoAsRichText") |
580 if showMarkdown != self.__showMarkdown: |
605 if showMarkdown != self.__showMarkdown: |
581 self.__showTextViewer(showMarkdown) |
606 self.__showTextViewer(showMarkdown) |
582 |
607 |
583 provider = Preferences.getDocuViewer("Provider") |
608 provider = Preferences.getDocuViewer("Provider") |
|
609 self.__selectProvider(provider) |
|
610 |
|
611 def __selectProvider(self, provider): |
|
612 """ |
|
613 Private method to select a provider programmatically. |
|
614 |
|
615 @param provider name of the provider to be selected |
|
616 @type str |
|
617 """ |
584 if provider != self.__selectedProvider: |
618 if provider != self.__selectedProvider: |
585 index = self.providerComboBox.findData(provider) |
619 index = self.providerComboBox.findData(provider) |
586 if index < 0: |
620 if index < 0: |
587 index = 0 |
621 index = 0 |
588 self.providerComboBox.setCurrentIndex(index) |
622 self.providerComboBox.setCurrentIndex(index) |