From 68b8d8b46958d1cd1341c6dce9477c8fd65e3615 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Thu, 21 May 2020 17:16:14 +0200 Subject: [PATCH] Rewritten about dialog --- nw/__init__.py | 1 + nw/config.py | 2 +- nw/constants/constants.py | 1 - nw/gui/dialogs/about.py | 167 +++++++++++++++++++++++++++++++++++++- nw/gui/mainmenu.py | 48 ----------- 5 files changed, 167 insertions(+), 52 deletions(-) diff --git a/nw/__init__.py b/nw/__init__.py index 9020b85c..d64437fe 100644 --- a/nw/__init__.py +++ b/nw/__init__.py @@ -47,6 +47,7 @@ __maintainer__ = "Veronica Berglyd Olsen" __email__ = "code@vkbo.net" __status__ = "Pre-Release" __url__ = "https://github.com/vkbo/novelWriter" +__domain__ = "novelwriter.io" __docurl__ = "https://novelwriter.readthedocs.io" __credits__ = [ "Veronica Berglyd Olsen (developer)", diff --git a/nw/config.py b/nw/config.py index 4723858f..5acf8774 100644 --- a/nw/config.py +++ b/nw/config.py @@ -233,7 +233,7 @@ class Config: self.graphPath = path.join(self.assetPath,"graphics") self.dictPath = path.join(self.assetPath,"dict") self.iconPath = path.join(self.assetPath,"icons") - self.appIcon = path.join(self.iconPath, nwFiles.APP_ICON) + self.appIcon = path.join(self.iconPath, "novelwriter.svg") logger.verbose("App path: %s" % self.appPath) logger.verbose("Home path: %s" % self.homePath) diff --git a/nw/constants/constants.py b/nw/constants/constants.py index 96a97bc1..09622650 100644 --- a/nw/constants/constants.py +++ b/nw/constants/constants.py @@ -36,7 +36,6 @@ class nwConst(): class nwFiles(): - APP_ICON = "novelWriter.svg" PROJ_FILE = "nwProject.nwx" PROJ_DICT = "wordlist.txt" PROJ_LOCK = "nwProject.lock" diff --git a/nw/gui/dialogs/about.py b/nw/gui/dialogs/about.py index 9e253981..f71f6e4c 100644 --- a/nw/gui/dialogs/about.py +++ b/nw/gui/dialogs/about.py @@ -28,9 +28,13 @@ import logging import nw +from os import path +from datetime import datetime + from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( - QDialog, QHBoxLayout, QVBoxLayout, QDialogButtonBox + QDialog, QHBoxLayout, QVBoxLayout, QDialogButtonBox, QTabWidget, + QTextBrowser, QLabel ) logger = logging.getLogger(__name__) @@ -42,11 +46,52 @@ class GuiAbout(QDialog): logger.debug("Initialising GuiAbout ...") - self.mainConf = nw.CONFIG + self.mainConf = nw.CONFIG + self.theParent = theParent self.outerBox = QVBoxLayout() self.innerBox = QHBoxLayout() + self.innerBox.setSpacing(16) + self.setWindowTitle("About %s" % nw.__package__) + self.setMinimumWidth(700) + self.setMinimumHeight(600) + + self.guiDeco = self.theParent.theTheme.loadDecoration("nwicon", (96, 96)) + self.lblName = QLabel("%s" % nw.__package__) + self.lblVers = QLabel("v%s" % nw.__version__) + self.lblDate = QLabel(datetime.strptime(nw.__date__, "%Y-%m-%d").strftime("%x")) + + self.leftBox = QVBoxLayout() + self.leftBox.setSpacing(4) + self.leftBox.addWidget(self.guiDeco, 0, Qt.AlignCenter) + self.leftBox.addWidget(self.lblName, 0, Qt.AlignCenter) + self.leftBox.addWidget(self.lblVers, 0, Qt.AlignCenter) + self.leftBox.addWidget(self.lblDate, 0, Qt.AlignCenter) + self.leftBox.addStretch(1) + self.innerBox.addLayout(self.leftBox) + + # Pages + self.pageAbout = QTextBrowser() + self.pageAbout.setOpenExternalLinks(True) + self.pageAbout.document().setDocumentMargin(16) + + # self.pageCredit = QTextBrowser() + # self.pageCredit.setOpenExternalLinks(True) + # self.pageCredit.document().setDocumentMargin(16) + + self.pageLicense = QTextBrowser() + self.pageLicense.setOpenExternalLinks(True) + self.pageLicense.document().setDocumentMargin(16) + + # Main Tab Area + self.tabBox = QTabWidget() + self.tabBox.addTab(self.pageAbout, "About") + # self.tabBox.addTab(self.pageCredit, "Credit") + self.tabBox.addTab(self.pageLicense, "License") + self.innerBox.addWidget(self.tabBox) + + # OK Button self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self._doClose) @@ -54,6 +99,10 @@ class GuiAbout(QDialog): self.outerBox.addWidget(self.buttonBox) self.setLayout(self.outerBox) + self._setStyleSheet() + self._fillAboutPage() + self._fillLicensePage() + logger.debug("GuiAbout initialisation complete") return @@ -62,6 +111,120 @@ class GuiAbout(QDialog): # Internal Functions ## + def _fillAboutPage(self): + """Generate the content for the About page. + """ + listPrefix = " • " + aboutMsg = ( + "
{copyright:s}.
" + "Website: {domain:s}
" + "{name:s} is a markdown-like text editor designed for organising and writing " + "novels. It is written in Python 3 with a Qt5 GUI, using PyQt5.
" + "{name:s} is free software: you can redistribute it and/or modify it under the " + "terms of the GNU General Public License as published by the Free Software Foundation, " + "either version 3 of the License, or (at your option) any later version.
" + "{name:s} 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 License tab for the full text, or visit the GNU website at " + "GPL v3.0 for more details.
" + "{credits:s}
" + ).format( + name = nw.__package__, + copyright = nw.__copyright__, + website = nw.__url__, + domain = nw.__domain__, + credits = ""
+ "Author: {author:s}
"
+ "Credit: {credit:s}
"
+ "License: {license:s}"
+ "
"
+ "Author: {author:s}
"
+ "Credit: {credit:s}
"
+ "License: {license:s}"
+ "
"
+ "Author: {author:s}
"
+ "Credit: {credit:s}
"
+ "License: {license:s}"
+ "
Version {version:s}, released {date:s}.
" - # "{copyright:s}.
" - # "{name:s} is a markdown-like text editor designed for organising " - # "and writing novels. It is written in Python 3 with a Qt5 GUI, " - # "using PyQt5.
" - # "{name:s} is free software: you can redistribute it and/or " - # "modify it under the terms of the GNU General Public License as " - # "published by the Free Software Foundation, either version 3 of the " - # "License, or (at your option) any later version.
" - # "{name:s} 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 " - # "GPL v3.0 " - # "License for more details.
" - # "Website: {website:s}
" - # "{credits:s}
" - # ).format( - # name = nw.__package__, - # version = nw.__version__, - # date = nw.__date__, - # copyright = nw.__copyright__, - # website = nw.__url__, - # credits = ""
- # if theTheme.themeCredit != "":
- # aboutMsg += "%s\"%s\" by %s
" % (
- # listPrefix, theTheme.themeName, theTheme.themeCredit
- # )
- # if theIcons.themeCredit != "":
- # aboutMsg += "%s\"%s\" by %s
" % (
- # listPrefix, theIcons.themeName, theIcons.themeCredit
- # )
- # if theTheme.syntaxCredit != "":
- # aboutMsg += "%s\"%s\" by %s
" % (
- # listPrefix, theTheme.syntaxName, theTheme.syntaxCredit
- # )
- # aboutMsg += "