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:
hploetz 2007-06-08 02:57:39 +00:00
parent d1d2698111
commit e1cd80acf8
2 changed files with 186 additions and 131 deletions

View File

@ -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("<","&lt;") 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] )

View File

@ -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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;ERIKSSON&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;ANNA MARIA&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;1969-08-06&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;F&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;1994-06-23&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;P&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;L898902C&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;tt&gt;&lt;span size=&quot;x-large&quot;&gt;&lt;b&gt;P&amp;lt;UTOERIKSSON&amp;lt;&amp;lt;ANNA&amp;lt;MARIA&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/b&gt;&lt;/span&gt;&lt;/tt&gt;</property>
<property name="label" translatable="yes">&lt;tt&gt;&lt;span size=&quot;x-large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;&lt;/tt&gt;</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">&lt;tt&gt;&lt;span size=&quot;x-large&quot;&gt;&lt;b&gt;L898902C&amp;lt;3UTO6908061F9406236ZE184226B&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;14&lt;/b&gt;&lt;/span&gt;&lt;/tt&gt;</property>
<property name="label" translatable="yes">&lt;tt&gt;&lt;span size=&quot;x-large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;&lt;/tt&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;Utopia&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;UTO&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;Utopia&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;UTO&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;</property>
<property name="label" translatable="yes">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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">&lt;span size=&quot;large&quot;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/span&gt;</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>