mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-15 02:12:29 +12:00
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:
parent
5d462d6a47
commit
6d607e8804
BIN
icons/Manuskript/logo-400x104.png
Normal file
BIN
icons/Manuskript/logo-400x104.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
|
@ -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
48
manuskript/ui/about.py
Normal 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
86
manuskript/ui/about_ui.py
Normal 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
218
manuskript/ui/about_ui.ui
Normal 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>
|
|
@ -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
|
||||
|
|
|
@ -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>&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>&Close project</string>
|
||||
|
@ -2405,6 +2403,14 @@ QListView::item:hover {
|
|||
<string>&Frequency Analyzer</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actAbout">
|
||||
<property name="text">
|
||||
<string>&About</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>About Manuskript</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
|
Loading…
Reference in a new issue