blipblop/blipblop/ui/help.py

81 lines
2.9 KiB
Python

from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QFrame, QHBoxLayout
from PyQt5.QtWidgets import QPushButton, QSizePolicy, QTextBrowser, QVBoxLayout, QWidget
from PyQt5.QtCore import QSettings, QUrl, Qt
import blipblop.constants as cnst
class HelpDialog(QDialog):
def __init__(self, parent=None) -> None:
super().__init__(parent=parent)
self._settings = QSettings()
width = int(self._settings.value("help/width", 640))
height = int(self._settings.value("help/height", 480))
x = int(self._settings.value("help/pos_x", 100))
y = int(self._settings.value("help/pos_y", 100))
self.setModal(True)
self.setMinimumSize(640, 480)
self.resize(width, height)
self.move(x, y)
self.finished.connect(self.on_finished)
self.help = HelpBrowser()
self.help._edit.historyChanged.connect(self._on_history_changed)
self.back_btn = QPushButton(QIcon(":/icons/docs_back"), "back")
self.back_btn.setEnabled(False)
self.back_btn.clicked.connect(self.help._edit.backward)
self.home_btn = QPushButton(QIcon(":/icons/docs_home"), "home")
self.home_btn.clicked.connect(self.help._edit.home)
self.fwd_btn = QPushButton(QIcon(":/icons/docs_forward"), "forward")
self.fwd_btn.setLayoutDirection(Qt.RightToLeft)
self.fwd_btn.setEnabled(False)
self.fwd_btn.clicked.connect(self.help._edit.forward)
empty = QWidget()
empty.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
hbox = QHBoxLayout()
hbox.addWidget(self.back_btn)
hbox.addWidget(self.home_btn)
hbox.addWidget(self.fwd_btn)
hbox.addWidget(empty)
bbox = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok)
bbox.accepted.connect(self.accept)
layout = QVBoxLayout()
layout.addLayout(hbox)
layout.addWidget(self.help)
layout.addWidget(bbox)
self.setLayout(layout)
def _on_history_changed(self):
self.back_btn.setEnabled(self.help._edit.isBackwardAvailable())
self.fwd_btn.setEnabled(self.help._edit.isForwardAvailable())
def on_finished(self):
self._settings.setValue("help/width", self.width())
self._settings.setValue("help/height", self.height())
self._settings.setValue("help/pos_x", self.x())
self._settings.setValue("help/pos_y", self.y())
class HelpBrowser(QWidget):
def __init__(self, parent=None) -> None:
super().__init__(parent=parent)
self.setLayout(QVBoxLayout())
doc_url = QUrl.fromLocalFile(cnst.DOCS_ROOT_FILE)
self._edit = QTextBrowser()
self._edit.setOpenLinks(True)
self._edit.setOpenExternalLinks(True)
self._edit.setSource(doc_url)
self._edit.setEnabled(True)
self._edit.setFrameShape(QFrame.NoFrame)
self.layout().addWidget(self._edit)