import os from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QFrame, QHBoxLayout, QPushButton, QSizePolicy, QTextBrowser, QVBoxLayout, QWidget from PyQt5.QtCore import QUrl, QSettings import nixview.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(500, 750) 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.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)