Add Help -> About dialog window

Add "Help -> About" menu entry that invokes an "About" dialog window
for Manuskript.

Show details such as logo, version, website, copyright, license, and
software versions in use (Python, PyQT, and Qt).
This commit is contained in:
Curtis Gedak 2017-09-28 13:36:06 -06:00
parent 5d462d6a47
commit 6d607e8804
7 changed files with 387 additions and 9 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -18,6 +18,7 @@ from manuskript.models.plotModel import plotModel
from manuskript.models.worldModel import worldModel
from manuskript.settingsWindow import settingsWindow
from manuskript.ui import style
from manuskript.ui.about import aboutDialog
from manuskript.ui.collapsibleDockWidgets import collapsibleDockWidgets
from manuskript.ui.exporters.exporter import exporterDialog
from manuskript.ui.helpLabel import helpLabel
@ -107,6 +108,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.actCloseProject.triggered.connect(self.closeProject)
self.actQuit.triggered.connect(self.close)
self.actToolFrequency.triggered.connect(self.frequencyAnalyzer)
self.actAbout.triggered.connect(self.about)
self.generateViewMenu()
self.actModeGroup = QActionGroup(self)
@ -798,6 +800,19 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.tblDebugPlots.selectionModel().currentIndex().row(),
Plot.steps.value)))
###############################################################################
# HELP
###############################################################################
def about(self):
self.dialog = aboutDialog(mw=self)
self.dialog.setFixedSize(self.dialog.size())
self.dialog.show()
# Center about dialog
r = self.dialog.geometry()
r2 = self.geometry()
self.dialog.move(r2.center() - r.center())
###############################################################################
# GENERAL AKA UNSORTED
###############################################################################

48
manuskript/ui/about.py Normal file
View file

@ -0,0 +1,48 @@
# --!-- coding: utf8 --!--
from PyQt5.Qt import PYQT_VERSION_STR
from PyQt5.QtCore import QT_VERSION_STR
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtWidgets import QWidget
from platform import python_version
from manuskript.functions import appPath
from manuskript.ui import about
from manuskript.ui.about_ui import Ui_about
from manuskript.version import getVersion
class aboutDialog(QWidget, Ui_about):
def __init__(self, parent=None, mw=None):
QWidget.__init__(self, parent)
self.setupUi(self)
self.populateFields()
self.buttonBox.accepted.connect(self.accept)
def populateFields(self):
# Fill in all the fields in the About dialog
iconPic = appPath("icons/Manuskript/icon-64px.png")
self.setWindowIcon(QIcon(iconPic))
logoPic = QPixmap(appPath("icons/Manuskript/logo-400x104.png"))
self.labelLogo.setPixmap(logoPic)
self.labelManuskriptVersion.setText(self.tr("Version") + " " + getVersion())
self.labelWebsite.setText(
"<a href=\"http://www.theologeek.ch/manuskript/\">" \
+ "http://www.theologeek.ch/manuskript/" \
+ "</a>" )
self.labelWebsite.setOpenExternalLinks(True)
self.labelLicense.setText( \
"<a href=\"https://www.gnu.org/licenses/gpl-3.0.en.html\">" \
+ self.tr("GNU General Public License Version 3") \
+ "</a>" )
self.labelLicense.setOpenExternalLinks(True)
self.labelPythonVersion.setText(self.tr("Python") + " " + python_version())
self.labelPyQtVersion.setText(self.tr("PyQt") + " " + PYQT_VERSION_STR)
self.labelQtVersion.setText(self.tr("Qt") + " " + QT_VERSION_STR)
def accept(self):
self.close()

86
manuskript/ui/about_ui.py Normal file
View file

@ -0,0 +1,86 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'manuskript/ui/about_ui.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_about(object):
def setupUi(self, about):
about.setObjectName("about")
about.setWindowModality(QtCore.Qt.ApplicationModal)
about.resize(445, 370)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("../../icons/Manuskript/icon-64px.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
about.setWindowIcon(icon)
self.buttonBox = QtWidgets.QDialogButtonBox(about)
self.buttonBox.setGeometry(QtCore.QRect(20, 320, 391, 30))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.labelLogo = QtWidgets.QLabel(about)
self.labelLogo.setGeometry(QtCore.QRect(30, 20, 381, 111))
self.labelLogo.setText("")
self.labelLogo.setPixmap(QtGui.QPixmap("../../icons/Manuskript/logo-400x104.png"))
self.labelLogo.setObjectName("labelLogo")
self.labelCopyright = QtWidgets.QLabel(about)
self.labelCopyright.setGeometry(QtCore.QRect(70, 180, 361, 21))
self.labelCopyright.setText("Copyright © 2015-2017 Olivier Keshavjee")
self.labelCopyright.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.labelCopyright.setObjectName("labelCopyright")
self.labelLicense = QtWidgets.QLabel(about)
self.labelLicense.setGeometry(QtCore.QRect(70, 200, 361, 20))
self.labelLicense.setText("GNU General Public License Version 3")
self.labelLicense.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.labelLicense.setObjectName("labelLicense")
self.labelManuskriptVersion = QtWidgets.QLabel(about)
self.labelManuskriptVersion.setGeometry(QtCore.QRect(130, 130, 301, 20))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.labelManuskriptVersion.setFont(font)
self.labelManuskriptVersion.setText("Version")
self.labelManuskriptVersion.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.labelManuskriptVersion.setObjectName("labelManuskriptVersion")
self.labelSoftwareHeading = QtWidgets.QLabel(about)
self.labelSoftwareHeading.setGeometry(QtCore.QRect(40, 240, 391, 20))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.labelSoftwareHeading.setFont(font)
self.labelSoftwareHeading.setText("Software Versions in Use:")
self.labelSoftwareHeading.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.labelSoftwareHeading.setObjectName("labelSoftwareHeading")
self.labelPythonVersion = QtWidgets.QLabel(about)
self.labelPythonVersion.setGeometry(QtCore.QRect(70, 270, 361, 18))
self.labelPythonVersion.setText("Python Version")
self.labelPythonVersion.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.labelPythonVersion.setObjectName("labelPythonVersion")
self.labelQtVersion = QtWidgets.QLabel(about)
self.labelQtVersion.setGeometry(QtCore.QRect(70, 310, 361, 18))
self.labelQtVersion.setText("Qt Version")
self.labelQtVersion.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.labelQtVersion.setObjectName("labelQtVersion")
self.labelPyQtVersion = QtWidgets.QLabel(about)
self.labelPyQtVersion.setGeometry(QtCore.QRect(70, 290, 361, 18))
self.labelPyQtVersion.setText("PyQt Version")
self.labelPyQtVersion.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.labelPyQtVersion.setObjectName("labelPyQtVersion")
self.labelWebsite = QtWidgets.QLabel(about)
self.labelWebsite.setGeometry(QtCore.QRect(130, 150, 301, 20))
self.labelWebsite.setText("http://www.theologeek.ch/manuskript/")
self.labelWebsite.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.labelWebsite.setObjectName("labelWebsite")
self.retranslateUi(about)
self.buttonBox.accepted.connect(about.accept)
QtCore.QMetaObject.connectSlotsByName(about)
def retranslateUi(self, about):
_translate = QtCore.QCoreApplication.translate
about.setWindowTitle(_translate("about", "About Manuskript"))
self.labelLogo.setToolTip(_translate("about", "Manuskript"))

218
manuskript/ui/about_ui.ui Normal file
View file

@ -0,0 +1,218 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>about</class>
<widget class="QDialog" name="about">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>445</width>
<height>370</height>
</rect>
</property>
<property name="windowTitle">
<string>About Manuskript</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>../../icons/Manuskript/icon-64px.png</normaloff>../../icons/Manuskript/icon-64px.png</iconset>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>20</x>
<y>320</y>
<width>391</width>
<height>30</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QLabel" name="labelLogo">
<property name="geometry">
<rect>
<x>30</x>
<y>20</y>
<width>381</width>
<height>111</height>
</rect>
</property>
<property name="toolTip">
<string>Manuskript</string>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../../icons/Manuskript/logo-400x104.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="labelCopyright">
<property name="geometry">
<rect>
<x>70</x>
<y>180</y>
<width>361</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string notr="true">Copyright © 2015-2017 Olivier Keshavjee</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
<widget class="QLabel" name="labelLicense">
<property name="geometry">
<rect>
<x>70</x>
<y>200</y>
<width>361</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string notr="true">GNU General Public License Version 3</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
<widget class="QLabel" name="labelManuskriptVersion">
<property name="geometry">
<rect>
<x>130</x>
<y>130</y>
<width>301</width>
<height>20</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string notr="true">Version</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
<widget class="QLabel" name="labelSoftwareHeading">
<property name="geometry">
<rect>
<x>40</x>
<y>240</y>
<width>391</width>
<height>20</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string notr="true">Software Versions in Use:</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
<widget class="QLabel" name="labelPythonVersion">
<property name="geometry">
<rect>
<x>70</x>
<y>270</y>
<width>361</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string notr="true">Python Version</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
<widget class="QLabel" name="labelQtVersion">
<property name="geometry">
<rect>
<x>70</x>
<y>310</y>
<width>361</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string notr="true">Qt Version</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
<widget class="QLabel" name="labelPyQtVersion">
<property name="geometry">
<rect>
<x>70</x>
<y>290</y>
<width>361</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string notr="true">PyQt Version</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
<widget class="QLabel" name="labelWebsite">
<property name="geometry">
<rect>
<x>130</x>
<y>150</y>
<width>301</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string notr="true">http://www.theologeek.ch/manuskript/</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>about</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'manuskript/ui/mainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.4.2
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!
@ -1016,7 +1016,7 @@ class Ui_MainWindow(object):
self.horizontalLayout_2.addWidget(self.stack)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 20))
self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 30))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
@ -1159,6 +1159,8 @@ class Ui_MainWindow(object):
self.actCompile.setObjectName("actCompile")
self.actToolFrequency = QtWidgets.QAction(MainWindow)
self.actToolFrequency.setObjectName("actToolFrequency")
self.actAbout = QtWidgets.QAction(MainWindow)
self.actAbout.setObjectName("actAbout")
self.menuFile.addAction(self.actOpen)
self.menuFile.addAction(self.menuRecents.menuAction())
self.menuFile.addAction(self.actSave)
@ -1169,6 +1171,7 @@ class Ui_MainWindow(object):
self.menuFile.addSeparator()
self.menuFile.addAction(self.actQuit)
self.menuHelp.addAction(self.actShowHelp)
self.menuHelp.addAction(self.actAbout)
self.menuTools.addAction(self.actSpellcheck)
self.menuTools.addAction(self.actToolFrequency)
self.menuEdit.addAction(self.actLabels)
@ -1323,6 +1326,8 @@ class Ui_MainWindow(object):
self.actCompile.setText(_translate("MainWindow", "Co&mpile"))
self.actCompile.setShortcut(_translate("MainWindow", "F6"))
self.actToolFrequency.setText(_translate("MainWindow", "&Frequency Analyzer"))
self.actAbout.setText(_translate("MainWindow", "&About"))
self.actAbout.setToolTip(_translate("MainWindow", "About Manuskript"))
from manuskript.ui.cheatSheet import cheatSheet
from manuskript.ui.editors.mainEditor import mainEditor

View file

@ -1557,8 +1557,7 @@
</property>
<property name="icon">
<iconset theme="emblem-favorite">
<normaloff/>
</iconset>
<normaloff>.</normaloff>.</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -2045,7 +2044,7 @@
<x>0</x>
<y>0</y>
<width>1112</width>
<height>20</height>
<height>30</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@ -2058,8 +2057,7 @@
</property>
<property name="icon">
<iconset theme="folder-recent">
<normaloff/>
</iconset>
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
<addaction name="actOpen"/>
@ -2077,6 +2075,7 @@
<string>&amp;Help</string>
</property>
<addaction name="actShowHelp"/>
<addaction name="actAbout"/>
</widget>
<widget class="QMenu" name="menuTools">
<property name="title">
@ -2385,8 +2384,7 @@ QListView::item:hover {
<action name="actCloseProject">
<property name="icon">
<iconset theme="window-close">
<normaloff/>
</iconset>
<normaloff>.</normaloff>.</iconset>
</property>
<property name="text">
<string>&amp;Close project</string>
@ -2405,6 +2403,14 @@ QListView::item:hover {
<string>&amp;Frequency Analyzer</string>
</property>
</action>
<action name="actAbout">
<property name="text">
<string>&amp;About</string>
</property>
<property name="toolTip">
<string>About Manuskript</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>