Add number filter and libreoffice settings.
This commit is contained in:
parent
f83fddf631
commit
4a2519e7ef
|
@ -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"><b>Email Address</b></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,6 +365,44 @@
|
|||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="can_focus">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"><b>Fax</b></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>
|
||||
|
@ -318,21 +410,6 @@
|
|||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button5">
|
||||
<property name="label" translatable="yes">Show Office Details</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
</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>
|
||||
|
|
|
@ -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."""
|
||||
|
@ -156,12 +159,20 @@ class MugshotWindow(Window):
|
|||
self.user_image.set_from_pixbuf(scaled)
|
||||
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()
|
||||
|
@ -328,7 +339,116 @@ class MugshotWindow(Window):
|
|||
self.home_phone = home_phone
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue