Add number filter and libreoffice settings.

This commit is contained in:
Sean Davis 2013-07-14 08:18:36 -04:00
parent f83fddf631
commit 4a2519e7ef
2 changed files with 213 additions and 19 deletions

View File

@ -240,6 +240,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkFrame" id="frame4">
<property name="visible">True</property>
@ -258,6 +259,7 @@
<property name="invisible_char">•</property>
<property name="activates_default">True</property>
<property name="input_purpose">phone</property>
<signal name="changed" handler="filter_numbers" swapped="no"/>
</object>
</child>
</object>
@ -277,6 +279,56 @@
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">2</property>
<child>
<object class="GtkEntry" id="email">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">True</property>
<property name="input_purpose">email</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;b&gt;Email Address&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkFrame" id="frame5">
<property name="visible">True</property>
@ -294,7 +346,9 @@
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">True</property>
<property name="invisible_char_set">True</property>
<property name="input_purpose">phone</property>
<signal name="changed" handler="filter_numbers" swapped="no"/>
</object>
</child>
</object>
@ -311,28 +365,51 @@
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button5">
<property name="label" translatable="yes">Show Office Details</property>
<object class="GtkFrame" id="frame7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">2</property>
<child>
<object class="GtkEntry" id="fax">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">True</property>
<property name="input_purpose">phone</property>
<signal name="changed" handler="filter_numbers" swapped="no"/>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;b&gt;Fax&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">2</property>
</packing>
</child>
@ -350,9 +427,6 @@
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<object class="GtkButtonBox" id="buttonbox1">
<property name="visible">True</property>

View File

@ -91,6 +91,8 @@ class MugshotWindow(Window):
self.initials_entry = builder.get_object('initials')
self.office_phone_entry = builder.get_object('office_phone')
self.home_phone_entry = builder.get_object('home_phone')
self.email_entry = builder.get_object('email')
self.fax_entry = builder.get_object('fax')
# Stock photo browser
self.stock_browser = builder.get_object('stock_browser')
@ -98,6 +100,7 @@ class MugshotWindow(Window):
# Populate all of the widgets.
self.init_user_details()
print self.get_libreoffice_data()
def init_user_details(self):
"""Initialize the user details entries and variables."""
@ -157,12 +160,20 @@ class MugshotWindow(Window):
else:
self.user_image.set_from_icon_name('avatar-default', 128)
def filter_numbers(self, entry, *args):
"""Allow only numbers and + in phone entry fields."""
text = entry.get_text().strip()
entry.set_text(''.join([i for i in text if i in '+0123456789']))
def on_apply_button_clicked(self, widget):
"""When the window Apply button is clicked, commit any relevant
changes."""
if self.get_chfn_details_updated():
returns = self.save_chfn_details()
if self.get_libreoffice_details_updated():
self.set_libreoffice_data()
if self.updated_image:
self.save_image()
@ -329,6 +340,115 @@ class MugshotWindow(Window):
return_codes.append(child.exitstatus)
return return_codes
# = LibreOffice ========================================================== #
def get_libreoffice_details_updated(self):
"""Return True if LibreOffice settings need to be updated."""
# Return False if there is no preferences file.
prefs_file = os.path.expanduser('~/.config/libreoffice/4/user/registrymodifications.xcu')
if not os.path.isfile(prefs_file):
return False
# Compare the current entries to the existing LibreOffice data.
data = self.get_libreoffice_data()
if data['first_name'] != get_entry_value(self.first_name_entry):
return True
if data['last_name'] != get_entry_value(self.last_name_entry):
return True
if data['initials'] != get_entry_value(self.initials_entry):
return True
if data['email'] != get_entry_value(self.email_entry):
return True
if data['home_phone'] != get_entry_value(self.home_phone_entry):
return True
if data['office_phone'] != get_entry_value(self.office_phone_entry):
return True
if data['fax'] != get_entry_value(self.fax_entry):
return True
return False
def get_libreoffice_data(self):
"""Get each of the preferences from the LibreOffice registymodifications
preferences file.
Return a dict with the details."""
prefs_file = os.path.expanduser('~/.config/libreoffice/4/user/registrymodifications.xcu')
data = {'first_name': '', 'last_name': '', 'initials': '', 'email': '',
'home_phone': '', 'office_phone': '', 'fax': ''}
if os.path.isfile(prefs_file):
for line in open(prefs_file):
if "UserProfile/Data" in line:
value = line.split('<value>')[1].split('</value>')[0].strip()
# First Name
if 'name="givenname"' in line:
data['first_name'] = value
# Last Name
elif 'name="sn"' in line:
data['last_name'] = value
# Initials
elif 'name="initials"' in line:
data['initials'] = value
# Email
elif 'name="mail"' in line:
data['email'] = value
# Home Phone
elif 'name="homephone"' in line:
data['home_phone'] = value
# Office Phone
elif 'name="telephonenumber"' in line:
data['office_phone'] = value
# Fax Number
elif 'name="facsimiletelephonenumber"' in line:
data['fax'] = value
else:
pass
return data
def set_libreoffice_data(self):
"""Update the LibreOffice registymodifications preferences file."""
prefs_file = os.path.expanduser('~/.config/libreoffice/4/user/registrymodifications.xcu')
if os.path.isfile(prefs_file):
tmp_buffer = []
for line in open(prefs_file):
new = None
if "UserProfile/Data" in line:
new = line.split('<value>')[0]
# First Name
if 'name="givenname"' in line:
new = new + '<value>%s</value></prop></item>\n' % \
get_entry_value(self.first_name_entry)
# Last Name
elif 'name="sn"' in line:
new = new + '<value>%s</value></prop></item>\n' % \
get_entry_value(self.last_name_entry)
# Initials
elif 'name="initials"' in line:
new = new + '<value>%s</value></prop></item>\n' % \
get_entry_value(self.initials_entry)
# Email
elif 'name="mail"' in line:
new = new + '<value>%s</value></prop></item>\n' % \
get_entry_value(self.email_entry)
# Home Phone
elif 'name="homephone"' in line:
new = new + '<value>%s</value></prop></item>\n' % \
get_entry_value(self.home_phone_entry)
# Office Phone
elif 'name="telephonenumber"' in line:
new = new + '<value>%s</value></prop></item>\n' % \
get_entry_value(self.office_phone_entry)
# Fax Number
elif 'name="facsimiletelephonenumber"' in line:
new = new + '<value>%s</value></prop></item>\n' % \
get_entry_value(self.fax_entry)
else:
new = line
tmp_buffer.append(new)
else:
tmp_buffer.append(line)
open_prefs = open(prefs_file, 'w')
for line in tmp_buffer:
open_prefs.write(line)
open_prefs.close()
# = Stock Browser ======================================================== #
def on_image_from_stock_activate(self, widget):
"""When the 'Select image from stock' menu item is clicked, load and