Added an About box.

master
Pacman Ghost 5 years ago
parent c76dea3ab3
commit 6d075744f7
  1. 10
      _freeze.py
  2. 53
      vasl_templates/about.py
  3. 2
      vasl_templates/main.py
  4. 7
      vasl_templates/main_window.py
  5. 132
      vasl_templates/ui/about.ui

@ -7,6 +7,7 @@ import shutil
import tempfile
import time
import datetime
import json
import getopt
from PyInstaller.__main__ import run as run_pyinstaller
@ -118,6 +119,7 @@ def ignore_files( dname, fnames ): #pylint: disable=redefined-outer-name
shutil.copy( "LICENSE.txt", dist_dir )
shutil.copytree( "vasl_templates/webapp/data", os.path.join(dist_dir,"data") )
shutil.copytree( "vasl_templates/webapp/config", os.path.join(dist_dir,"config"), ignore=ignore_files )
# copy the examples
dname = os.path.join( dist_dir, "examples" )
os.makedirs( dname )
@ -125,6 +127,14 @@ fnames = [ f for f in os.listdir("examples") if os.path.splitext(f)[1] in (".jso
for f in fnames:
shutil.copy( os.path.join("examples",f), dname )
# set the build info
build_info = {
"timestamp": int( time.time() ),
}
dname = os.path.join( dist_dir, "config" )
with open( os.path.join(dname,"build-info.json"), "w" ) as fp:
json.dump( build_info, fp )
# create the release archive
os.chdir( dist_dir )
print()

@ -0,0 +1,53 @@
"""Implement the "about" dialog."""
import os
import json
import time
from PyQt5 import uic
from PyQt5.QtWidgets import QDialog
from vasl_templates.webapp.config.constants import APP_NAME, APP_VERSION, BASE_DIR
# ---------------------------------------------------------------------
class AboutDialog( QDialog ):
"""Show the about box."""
def __init__( self, parent ) :
# initialize
super().__init__( parent=parent )
# initialize the UI
base_dir = os.path.split( __file__ )[0]
dname = os.path.join( base_dir, "ui/about.ui" )
uic.loadUi( dname, self )
self.setFixedSize( self.size() )
self.close_button.clicked.connect( self.on_close )
# get the build info
dname = os.path.join( BASE_DIR, "config" )
fname = os.path.join( dname, "build-info.json" )
if os.path.isfile( fname ):
build_info = json.load( open( fname, "r" ) )
else:
build_info = None
# load the dialog
self.app_name.setText( "{} ({})".format( APP_NAME, APP_VERSION ) )
self.license.setText( "Licensed under the GNU Affero General Public License (v3)." )
if build_info:
timestamp = build_info[ "timestamp" ]
self.build_info.setText( "Built {}.".format(
time.strftime( "%d %B %Y %H:%S", time.localtime( timestamp ) ) # nb: "-d" doesn't work on Windows :-/
) )
else:
self.build_info.setText( "" )
self.home_url.setText(
"Get the source code and releases from <a href='http://github.com/pacman-ghost/vasl-templates'>Github</a>."
)
def on_close( self ):
"""Close the dialog."""
self.close()

@ -48,7 +48,7 @@ def qtMessageHandler( msg_type, context, msg ):# pylint: disable=unused-argument
@click.option( "--remote-debugging", help="Chrome DevTools port number." )
@click.option( "--debug", help="Debug config file." )
def main( template_pack, default_scenario, remote_debugging, debug ):
"""Main entry point for the application."""
"""Manage HTML labels in a VASL scenario."""
try:
return _do_main( template_pack, default_scenario, remote_debugging, debug )
except Exception as ex: #pylint: disable=broad-except

@ -73,6 +73,7 @@ class MainWindow( QWidget ):
action.triggered.connect( handler )
file_menu.addAction( action )
add_action( "&Settings", self.on_settings )
add_action( "&About", self.on_about )
add_action( "E&xit", self.on_exit )
# set the window geometry
@ -200,6 +201,12 @@ class MainWindow( QWidget ):
dlg = ServerSettingsDialog( self )
dlg.exec_()
def on_about( self ):
"""Menu action handler."""
from vasl_templates.about import AboutDialog #pylint: disable=cyclic-import
dlg = AboutDialog( self )
dlg.exec_()
@pyqtSlot()
@catch_exceptions( caption="SLOT EXCEPTION" )
def on_app_loaded( self ):

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>428</width>
<height>142</height>
</rect>
</property>
<property name="windowTitle">
<string>About</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="app_name">
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>*** APP NAME ***</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="build_info">
<property name="text">
<string>*** BUILD INFO ***</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="home_url">
<property name="text">
<string>*** HOME URL ***</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="license">
<property name="text">
<string>Licensed under the GNU Affero General Public License (v3).</string>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>309</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="close_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Close</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
Loading…
Cancel
Save