Source code for retype.ui.about_dialog

from qt import (QDialog, Qt, QTabWidget, QWidget, QVBoxLayout, QHBoxLayout,
                QLabel, QTextBrowser)

from retype.resource_handler import getIcon
from retype.constants import (RETYPE_VERSION_STR, RETYPE_REPOSITORY_URL,
                              ACKNOWLEDGEMENTS, RETYPE_BUILDDATE_DESC)


[docs]class AboutDialog(QDialog):
[docs] def __init__(self, commands_info, prompt, books, parent=None): QDialog.__init__(self, parent, Qt.WindowType.WindowCloseButtonHint) self.commands_info = commands_info self.prompt = prompt self.books = books self.setWindowTitle("About retype") self.setModal(True) self.pages = {} self.pages['About'] = AboutPage() self.pages['Acknowledgements'] = self.acknowledgementsPage() self.pages['Console commands'] = self.consoleCommandsPage() self.pages['You'] = self.youPage() self.tab_widget = QTabWidget() for label, page in self.pages.items(): self.tab_widget.addTab(page, label) lyt = QVBoxLayout(self) lyt.addWidget(self.tab_widget)
[docs] def acknowledgementsPage(self): return ReadOnlyTextWidget(format_page_details(ACKNOWLEDGEMENTS))
[docs] def consoleCommandsPage(self): commands = {} for cmd in self.commands_info.values(): aliases = [f'<tt>{self.prompt}{alias}</tt>' for alias in cmd['aliases']] args_str = cmd['args'] or '' aliases_str = ' / '.join(aliases) aliases_str += ' ' if args_str != '' else '' aliases_str += args_str commands[aliases_str] = cmd['desc'] return ReadOnlyTextWidget(format_page_details(commands))
[docs] def youPage(self): books_in_progress = 0 books_completed = 0 for book in self.books.values(): if book.progress is not None: books_in_progress += 1 if book.progress == 100: books_completed += 1 you = {'# of books': str(len(self.books)), '# of books in progress': str(books_in_progress), '# of books completed': str(books_completed)} return ReadOnlyTextWidget(format_page_details(you))
[docs] def setActivePage(self, title): page = self.pages.get(title) if page: self.tab_widget.setCurrentWidget(page)
[docs]class AboutPage(QWidget):
[docs] def __init__(self, parent=None): QWidget.__init__(self, parent) lyt = QVBoxLayout(self) def makel(text=""): label = QLabel(text) label.setAlignment(Qt.AlignmentFlag.AlignCenter) lyt.addWidget(label) return label img_l = makel() img_l.setPixmap(getIcon('retype').pixmap(400)) makel(f"Version {RETYPE_VERSION_STR}") if (RETYPE_BUILDDATE_DESC != ''): makel(RETYPE_BUILDDATE_DESC) rep_l = makel( f'<a href="{RETYPE_REPOSITORY_URL}">GitHub repository</a>') rep_l.setOpenExternalLinks(True)
[docs]class ReadOnlyTextWidget(QWidget):
[docs] def __init__(self, text="", parent=None): QWidget.__init__(self, parent) box = QTextBrowser() box.setText(text) box.setOpenExternalLinks(True) lyt = QHBoxLayout(self) lyt.addWidget(box) lyt.setSpacing(0) lyt.setContentsMargins(0, 0, 0, 0)
[docs]def format_page_details(details_dict): def plus_newline(s, amount=1): for i in range(0, amount): s += '<br/>' return s s = '' for item, details in details_dict.items(): s += item s += "<blockquote>" i = 0 if isinstance(details, dict): for title, info in details.items(): if i > 0: s = plus_newline(s) i += 1 s += f'{title}: ' if title == 'Web': s += f'<a href="{info}">{info}</a>' else: s += info else: s += details s += "</blockquote>" return s