GUI working
git-svn-id: svn+ssh://localhost/home/henryk/svn/cyberflex-shell/trunk@226 f711b948-2313-0410-aaa9-d29f33439f0b
This commit is contained in:
parent
d1d2698111
commit
e1cd80acf8
|
@ -6,6 +6,7 @@ class PassportGUI:
|
|||
def __init__(self):
|
||||
"Create and show main window."
|
||||
self.passport = None
|
||||
self.format_strings = {}
|
||||
self.main_window_xml = gtk.glade.XML(self.GLADE_FILE, "main")
|
||||
self.main_window = self.main_window_xml.get_widget("main")
|
||||
|
||||
|
@ -13,5 +14,59 @@ class PassportGUI:
|
|||
gtk.gdk.threads_init()
|
||||
gtk.main()
|
||||
|
||||
def lookup_country(passport, contents):
|
||||
return passport.COUNTRY_CODES.get( contents[0], ("Unknown Code", ) )
|
||||
|
||||
def split_name(passport, contents):
|
||||
return (contents[0][0], " ".join(contents[0][1:]))
|
||||
|
||||
def parse_date(passport, contents):
|
||||
year, month, day = int(contents[0][0:2]), int(contents[0][2:4]), int(contents[0][4:6])
|
||||
if year < 30: # Yeah, two-digit years for the win!
|
||||
year = 2000 + year
|
||||
else:
|
||||
year = 1900 + year
|
||||
|
||||
return ("%04i-%02i-%02i" % (year, month, day), )
|
||||
|
||||
def format_mrz(passport, contents):
|
||||
mrz = contents[0]
|
||||
if contents[1] is not None:
|
||||
mrz = contents[1]
|
||||
|
||||
return [e.replace("<","<") for e in mrz]
|
||||
|
||||
s = lambda a,b: (str(b[0]),)
|
||||
PROPERTY_TRANSFORMATIONS = [
|
||||
# This code implies an m:n relation from passport object properties to
|
||||
# displayed fields. This is a sequence of ( (passport_field, ...) transform_callable, (destination_field, ...))
|
||||
# transform_callable will be called with a reference to the passport and a list of the values of (passport_field, ...)
|
||||
# and must return len( (destination_field, ...) ) values wich will then be displayed in the corresponding
|
||||
# destination fields.
|
||||
|
||||
( ("type",), s, ("type",)),
|
||||
( ("issuer",), s, ("issuer",)),
|
||||
( ("issuer",), lookup_country, ("issuer_clear1", "issuer_clear2")),
|
||||
( ("name",), split_name, ("surname", "firstname")),
|
||||
( ("document_no",), s, ("document_no",)),
|
||||
( ("nationality",), s, ("nationality",)),
|
||||
( ("nationality",), lookup_country, ("nationality_clear1", "nationality_clear2")),
|
||||
( ("date_of_birth",), parse_date, ("dob",)),
|
||||
( ("sex",), s, ("sex",)),
|
||||
( ("expiration_date",), parse_date, ("doe",)),
|
||||
( ("optional",), s, ("optional",)),
|
||||
( ("given_mrz", "dg1_mrz"), format_mrz, ("mrz1", "mrz2") ),
|
||||
]
|
||||
del s
|
||||
|
||||
def set_passport(self, passport):
|
||||
self.passport = passport
|
||||
|
||||
for sources, transform, destinations in self.PROPERTY_TRANSFORMATIONS:
|
||||
values = [getattr(passport, src) for src in sources]
|
||||
transformed = transform(passport, values)
|
||||
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.format_strings[dst] % transformed[index] )
|
||||
|
|
|
@ -29,64 +29,6 @@
|
|||
<property name="row_spacing">0</property>
|
||||
<property name="column_spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">
|
||||
Surname</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">6</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">
|
||||
Name</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">6</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label5">
|
||||
<property name="visible">True</property>
|
||||
|
@ -203,69 +145,11 @@ Optional Data</property>
|
|||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="surname">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>ERIKSSON</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">6</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">39</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>ANNA MARIA</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">6</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">39</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="dob">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>1969-08-06</b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -294,7 +178,7 @@ Optional Data</property>
|
|||
<widget class="GtkLabel" id="sex">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>F</b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -323,7 +207,7 @@ Optional Data</property>
|
|||
<widget class="GtkLabel" id="doe">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>1994-06-23</b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -352,7 +236,7 @@ Optional Data</property>
|
|||
<widget class="GtkLabel" id="optional">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b></b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -381,7 +265,7 @@ Optional Data</property>
|
|||
<widget class="GtkLabel" id="type">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>P</b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -435,10 +319,10 @@ Optional Data</property>
|
|||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="documentno">
|
||||
<widget class="GtkLabel" id="document_no">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>L898902C</b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -467,7 +351,7 @@ Optional Data</property>
|
|||
<widget class="GtkLabel" id="mrz1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><tt><span size="x-large"><b>P&lt;UTOERIKSSON&lt;&lt;ANNA&lt;MARIA&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</b></span></tt></property>
|
||||
<property name="label" translatable="yes"><tt><span size="x-large"><b>%s</b></span></tt></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -495,7 +379,7 @@ Optional Data</property>
|
|||
<widget class="GtkLabel" id="mrz2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><tt><span size="x-large"><b>L898902C&lt;3UTO6908061F9406236ZE184226B&lt;&lt;&lt;&lt;&lt;14</b></span></tt></property>
|
||||
<property name="label" translatable="yes"><tt><span size="x-large"><b>%s</b></span></tt></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -720,7 +604,7 @@ Issuing State or Organisation</property>
|
|||
<widget class="GtkLabel" id="issuer_clear1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>Utopia</b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -749,7 +633,7 @@ Issuing State or Organisation</property>
|
|||
<widget class="GtkLabel" id="issuer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>UTO</b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -778,7 +662,7 @@ Issuing State or Organisation</property>
|
|||
<widget class="GtkLabel" id="nationality_clear1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>Utopia</b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -807,7 +691,7 @@ Issuing State or Organisation</property>
|
|||
<widget class="GtkLabel" id="nationality">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>UTO</b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -836,7 +720,7 @@ Issuing State or Organisation</property>
|
|||
<widget class="GtkLabel" id="issuer_clear2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b></b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -894,7 +778,7 @@ Nationality</property>
|
|||
<widget class="GtkLabel" id="nationality_clear2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b></b></span></property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -918,6 +802,122 @@ Nationality</property>
|
|||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">
|
||||
First Name(s)</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">6</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="firstname">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">6</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">39</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">
|
||||
Last Name</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">6</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="surname">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><span size="large"><b>%s</b></span></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">6</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">39</property>
|
||||
<property name="single_line_mode">True</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
|
Loading…
Reference in New Issue