# -*- coding: utf-8 -*-
# ###########################################################################
#
# This file is part of Taurus
#
# http://taurus-scada.org
#
# Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
#
# Taurus is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Taurus is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Taurus. If not, see <http://www.gnu.org/licenses/>.
#
# ###########################################################################
"""
This module provides a simple HTML help browser.
"""
from taurus.external.qt import Qt
from taurus.external.qt import QtHelp
class _HelpBrowser(Qt.QTextBrowser):
def __init__(self, help_engine=None, parent=None):
Qt.QTextBrowser.__init__(self, parent)
self.__help_engine = None
if help_engine:
self.setHelpEngine(help_engine)
def setHelpEngine(self, help_engine):
self.__help_engine = help_engine
content_widget = help_engine.contentWidget()
index_widget = help_engine.indexWidget()
content_widget.linkActivated.connect(self.setSource)
index_widget.linkActivated.connect(self.setSource)
def loadResource(self, type, url):
if url.scheme() == "qthelp":
if self.__help_engine:
return self.__help_engine.fileData(url)
return Qt.QTextBrowser.loadResource(self, type, url)
[docs]
class HelpPanel(Qt.QWidget):
"""
Simple widget to display application help system. Usage::
from taurus.external.qt import Qt
from taurus.qt.qtgui.help import HelpPanel
app = Qt.QApplication([])
help_panel = HelpPanel()
help_panel.setCollectionFile("help_file.qhc")
help_panel.show()
app.exec_()
"""
def __init__(self, collection_file=None, parent=None):
Qt.QWidget.__init__(self, parent)
layout = Qt.QVBoxLayout(self)
self.setLayout(layout)
self.__help_engine = None
if collection_file:
self.setCollectionFile(collection_file)
def __clear(self):
layout = self.layout()
while layout.count():
layout.takeAt(0)
self.__help_engine = None
[docs]
@Qt.Slot(str)
def setCollectionFile(self, collection_file):
"""
Displays the help from the specified collection file
:param collection_file: the collection file name (.qhc)
:type collection_file: str
"""
self.__clear()
if not collection_file:
return
help_engine = QtHelp.QHelpEngine(collection_file, self)
if not help_engine.setupData():
raise Exception("Help engine not available")
layout = self.layout()
self.__tab = tab = Qt.QTabWidget()
self.__help_engine = help_engine
content_widget = help_engine.contentWidget()
index_widget = help_engine.indexWidget()
tab.addTab(content_widget, "Contents")
tab.addTab(index_widget, "Index")
self.__help_browser = _HelpBrowser(help_engine, self)
splitter = Qt.QSplitter(Qt.Qt.Horizontal)
splitter.insertWidget(0, tab)
splitter.insertWidget(1, self.__help_browser)
layout.addWidget(splitter)
[docs]
def getCollectionFile(self):
"""
Returns the name of the current collection file or empty
string if no collection file is active
:return: the name of the current collection file
:rtype: str
"""
if self.__help_engine:
return self.__help_engine.collectionFile()
return ""
[docs]
def resetCollectionFile(self):
"""
Resets the collection file
"""
self.setCollectionFile("")
#: This property holds the current collection file name
#:
#: **Access functions:**
#:
#: * :meth:`HelpPanel.getCollectionFile`
#: * :meth:`HelpPanel.setCollectionFile`
#: * :meth:`HelpPanel.resetCollectionFile`
#:
collectionFile = Qt.Property(
"QString", getCollectionFile, setCollectionFile, resetCollectionFile
)
[docs]
@classmethod
def getQtDesignerPluginInfo(cls):
return {
"group": "Taurus Help",
"icon": Qt.QIcon.fromTheme("help"),
"module": "taurus.qt.qtgui.help",
"container": False,
}
def main():
import sys
app = Qt.QApplication([])
help_panel = HelpPanel()
if len(sys.argv) > 1:
help_panel.setCollectionFile(sys.argv[1])
help_panel.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()