Load the AslCard's from the database and show them in the UI.

master
Pacman Ghost 7 years ago
parent 84c21d992e
commit 39b558204a
  1. 34
      asl_cards/db.py
  2. 3
      globals.py
  3. 15
      main.py
  4. 43
      main_window.py

@ -1,5 +1,6 @@
import sys
import os
from collections import defaultdict
from sqlalchemy import sql , orm , create_engine
from sqlalchemy import Column , ForeignKey , String , Integer , Binary
@ -63,7 +64,7 @@ def open_database( fname ) :
conn_string = "sqlite:///{}".format( fname )
global db_engine
db_engine = create_engine( conn_string , convert_unicode=True )
#db_engine.echo = True
#db_engine.echo = True
# initialize our session
global db_session
@ -89,8 +90,37 @@ def add_cards( cards ) :
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def load_cards() :
"""Load the cards from the database."""
# load the raw rows
query = db_session.query( AslCard )
cards = list( query.all() )
card_index = defaultdict( lambda: defaultdict(list) )
# generate the card index
for card in cards :
d = card_index[ card.nationality ]
tag = card.tag.lower()
if tag.startswith( "ordnance" ) :
tag_type = "ordnance"
elif tag.startswith( "vehicle" ) :
tag_type = "vehicle"
else :
raise RuntimeError( "Unknown tag type ({}) for AslCard: {}".format( tag , card ) )
d[ tag_type ].append( card )
return card_index
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def dump_cards( cards ) :
"""Dump the card index."""
for nationality in cards :
for tag_type in cards[nationality] :
print( "{} ({}):".format( nationality , tag_type ) )
for card in cards[nationality][tag_type] :
print( "- {}".format( card ) )
def dump_database() :
"""Dump the database."""
"""Dump the raw database rows."""
# dump the ASL cards
query = db_session.query( AslCard )
for card in query.all() :

@ -5,3 +5,6 @@ app_name = None
# application settings
app_settings = None
debug_settings = None
# AslCard table
card = {} # { nationality: { "ordnance|vehicle": [ AslCard's ] } }

@ -9,6 +9,7 @@ from PyQt5.QtWidgets import QApplication
from constants import *
import globals
import asl_cards.db as db
# ---------------------------------------------------------------------
@ -27,10 +28,13 @@ def do_main( args ) :
# parse the command-line arguments
settings_fname = None
opts , args = getopt.getopt( args[1:] , "c:h?" , ["config=","help"] )
db_fname = None
opts , args = getopt.getopt( args[1:] , "c:d:h?" , ["config=","db=","help"] )
for opt,val in opts :
if opt in ["-c","--config"] :
settings_fname = val
elif opt in ["-d","--db"] :
db_fname = val
elif opt in ["-h","--help","-?"] :
print_help()
else :
@ -43,12 +47,21 @@ def do_main( args ) :
if sys.platform != "win32" :
settings_fname = "." + settings_fname
settings_fname = os.path.join( QDir.homePath() , settings_fname )
if not db_fname :
# try to locate the database
db_fname = os.path.join( globals.base_dir , globals.app_name+".db" )
if not os.path.isfile( db_fname ) :
raise RuntimeError( "Can't find database: {}".format( db_fname ) )
# load our settings
globals.app_settings = QSettings( settings_fname , QSettings.IniFormat )
fname = os.path.join( os.path.split(settings_fname)[0] , "debug.ini" )
globals.debug_settings = QSettings( fname , QSettings.IniFormat )
# open the database
db.open_database( db_fname )
globals.cards = db.load_cards()
# do main processing
app = QApplication( sys.argv )
import main_window

@ -2,15 +2,42 @@ import sys
import os
from PyQt5.QtCore import Qt , QPoint , QSize
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QMainWindow , QVBoxLayout , QHBoxLayout , QWidget , QTabWidget , QLabel
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtGui import QIcon
from PyQt5.QtGui import QPainter , QPixmap , QIcon , QBrush
import asl_cards.db as db
from constants import *
import globals
# ---------------------------------------------------------------------
class AslCardWidget( QWidget ) :
def __init__( self , card ) :
# initialize
super().__init__()
self.card = card
self.pixmap = QPixmap()
self.pixmap.loadFromData( card.card_image.image_data )
def paintEvent( self , evt ) :
qp = QPainter()
qp.begin( self )
qp_size = evt.rect().size()
# draw the AslCard image
qp.setRenderHint( QPainter.Antialiasing )
pixmap_size = self.pixmap.size()
pixmap_size.scale( qp_size , Qt.KeepAspectRatio )
pixmap = self.pixmap.scaled( pixmap_size , Qt.KeepAspectRatio , Qt.SmoothTransformation )
qp.drawPixmap(
(qp_size.width()-pixmap_size.width())/2 , (qp_size.height()-pixmap_size.height())/2 ,
pixmap
)
qp.end()
# ---------------------------------------------------------------------
class MainWindow( QMainWindow ) :
def __init__( self ) :
@ -21,6 +48,18 @@ class MainWindow( QMainWindow ) :
# load the window settings
self.resize( globals.app_settings.value( MAINWINDOW_SIZE , QSize(500,300) ) )
self.move( globals.app_settings.value( MAINWINDOW_POSITION , QPoint(200,200) ) )
# initialize the window controls
self.tab_widget = QTabWidget( self )
self.tab_widget.setTabsClosable( True )
self.tab_widgets = []
for i in range(0,3) : # FIXME!
card = globals.cards["Chinese"]["ordnance"][ i ]
w = AslCardWidget( card )
self.tab_widget.addTab( w , card.name )
self.tab_widgets.append( w )
self.setCentralWidget( self.tab_widget )
def closeEvent( self , evt ) :
"""Handle window close."""

Loading…
Cancel
Save