Enhance GUI, can now enter MRZ information and read new passport from GUI

git-svn-id: svn+ssh://localhost/home/henryk/svn/cyberflex-shell/trunk@251 f711b948-2313-0410-aaa9-d29f33439f0b
This commit is contained in:
hploetz 2007-11-14 14:04:32 +00:00
parent 55a0b4d4a2
commit 33b9f44354
3 changed files with 1364 additions and 932 deletions

View File

@ -1,5 +1,5 @@
import gtk,gtk.glade,gobject
import os, time, TLV_utils
import sys, os, time, TLV_utils, cards
class Converter:
SUPPORTS = ["jp2"]
@ -26,16 +26,28 @@ class PassportGUI:
self.now_showing = 0
self.main_window_xml = gtk.glade.XML(self.GLADE_FILE, "main")
self.main_window = self.main_window_xml.get_widget("main")
self.card_factory = None
signals = {
"on_exit_clicked": self.exit_clicked,
"on_clear_clicked": self.clear_clicked,
"on_open_clicked": self.open_clicked,
"on_main_delete_event": self.exit_clicked,
"on_main_destroy": gtk.main_quit,
"on_next_image_clicked": self.next_image,
"on_prev_image_clicked": self.prev_image,
"on_mrz_entry1_activate": self.mrz1_activate,
"on_mrz_entry2_activate": self.mrz2_activate,
}
self.main_window_xml.signal_autoconnect(signals)
def mrz1_activate(self, widget, event=None, data=None):
self.main_window_xml.get_widget("mrz_entry2").grab_focus()
def mrz2_activate(self, widget, event=None, data=None):
self.main_window_xml.get_widget("open").clicked()
self.main_window_xml.get_widget("mrz_entry1").grab_focus()
def exit_clicked(self, widget, event=None, data=None):
gtk.main_quit()
return True
@ -116,6 +128,50 @@ class PassportGUI:
self._set_images(data)
def clear_display(self):
for sources, transform, destinations in self.PROPERTY_TRANSFORMATIONS:
for index, dst in enumerate(destinations):
widget = self.main_window_xml.get_widget(dst)
if not self.format_strings.has_key(dst):
self.format_strings[dst] = widget.get_label()
widget.set_label( "" )
self._set_images([])
self.main_window_xml.get_widget("mrz_entry1").set_text("")
self.main_window_xml.get_widget("mrz_entry2").set_text("")
self.update_image_shown()
def clear_clicked(self, widget, event=None, data=None):
self.clear_display()
def open_clicked(self, widget, event=None, data=None):
mrz1 = self.main_window_xml.get_widget("mrz_entry1").get_text()
mrz2 = self.main_window_xml.get_widget("mrz_entry2").get_text()
mrz = [e.strip().upper().replace(";","<") for e in mrz1, mrz2]
self.clear_display()
self.main_window_xml.get_widget("mrz_entry1").set_text(mrz[0])
self.main_window_xml.get_widget("mrz_entry2").set_text(mrz[1])
if self.card_factory:
try:
card_object = self.card_factory.connect()
card = cards.new_card_object(card_object)
cards.generic_card.DEBUG = False
print >>sys.stderr, "Using %s" % card.DRIVER_NAME
p = cards.passport_application.Passport.from_card(card, mrz)
self.set_passport(p)
except KeyboardInterrupt,SystemExit: raise
except:
import traceback
traceback.print_exc()
def set_card_factory(self, c):
self.card_factory = c
def _set_images(self, data):
self.images = []
for type, image_data, description in data:
@ -153,8 +209,13 @@ class PassportGUI:
"description": description,
} )
if not self.format_strings.has_key("image"):
self.format_strings["image"] = self.main_window_xml.get_widget("image").get_stock()
if pixbuf is not None:
self.main_window_xml.get_widget("image").set_from_pixbuf(pixbuf)
else:
self.main_window_xml.get_widget("image").set_from_stock(*self.format_strings["image"])
self.main_window_xml.get_widget("prev_image").set_property("sensitive", self.now_showing > 0)
self.main_window_xml.get_widget("next_image").set_property("sensitive", self.now_showing < len(self.images)-1)

File diff suppressed because it is too large Load Diff

View File

@ -3,12 +3,13 @@
import utils, cards, TLV_utils, sys, binascii, time, traceback
OPTIONS = "GW:R:"
LONG_OPTIONS = ["no-gui", "write-files-basename", "read-files-basename"]
OPTIONS = "iGW:R:"
LONG_OPTIONS = ["interactive","no-gui", "write-files-basename", "read-files-basename"]
use_gui = True
write_files = None
read_files = None
start_interactive = False
if __name__ == "__main__":
c = utils.CommandLineArgumentHelper()
@ -18,12 +19,16 @@ if __name__ == "__main__":
for option, value in options:
if option in ("-G","--no-gui"):
use_gui = False
start_interactive = False
elif option in ("-W","--write-files-basename"):
write_files = value
elif option in ("-R","--read-files-basename"):
read_files = value
elif option in ("-i", "--interactive"):
start_interactive = True
use_gui = True
if read_files is None:
if read_files is None and not start_interactive:
card_object = c.connect()
card = cards.new_card_object(card_object)
cards.generic_card.DEBUG = False
@ -36,15 +41,21 @@ if __name__ == "__main__":
p = cards.passport_application.Passport.from_card(card, ["",arguments[0]])
else:
p = cards.passport_application.Passport.from_card(card)
else:
elif read_files is not None:
p = cards.passport_application.Passport.from_files(basename=read_files)
elif start_interactive:
p = None
if write_files is not None:
if write_files is not None and not start_interactive:
p.to_files(basename=write_files)
if use_gui:
import gui
g = gui.PassportGUI()
g.set_passport(p)
if p is not None:
g.set_passport(p)
else:
g.clear_display()
g.set_card_factory(c)
g.run()