1
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3
# This file is in the public domain
6
"""this dialog adjusts values in the preferences dictionary
9
in module preferences: defaults[key] has a value
10
self.builder.get_object(key) is a suitable widget to adjust value
11
widget_methods[key] provides method names for the widget
12
each widget calls set_preference(...) when it has adjusted value
17
logger = logging.getLogger('mythremote_lib')
19
from . helpers import get_builder, show_uri, get_help_uri
20
from . preferences import preferences
22
class PreferencesDialog(gtk.Dialog):
23
__gtype_name__ = "PreferencesDialog"
26
"""Special static method that's automatically called by Python when
27
constructing a new instance of this class.
29
Returns a fully instantiated PreferencesDialog object.
31
builder = get_builder('PreferencesMythremoteDialog')
32
new_object = builder.get_object("preferences_mythremote_dialog")
33
new_object.finish_initializing(builder)
36
def finish_initializing(self, builder):
37
"""Called while initializing this instance in __new__
39
finish_initalizing should be called after parsing the ui definition
40
and creating a PreferencesDialog object with it in order to
41
finish initializing the start of the new PerferencesMythremoteDialog
44
Put your initialization code in here and leave __init__ undefined.
47
# Get a reference to the builder and set up the signals.
48
self.builder = builder
49
self.ui = builder.get_ui(self, True)
51
# code for other initialization actions should be added here
52
self.widget_methods = []
54
def set_widgets_from_preferences(self):
55
''' these widgets show values in the preferences dictionary '''
56
for key in preferences.keys():
57
self.set_widget_from_preference(key)
59
def set_widget_from_preference(self, key):
60
'''set widget value from item in preferences'''
62
value = preferences.get(key)
63
widget = self.builder.get_object(key)
65
# this preference is not adjustable by this dialog
66
# for example: window and dialog geometries
67
logger.debug('no widget for preference: %s' % key)
70
logger.debug('set_widget_from_preference: %s' % key)
72
write_method_name = self.widget_methods[key][1]
74
logger.warn('%s not in widget_methods' % key)
78
method = getattr(widget, write_method_name)
79
except AttributeError:
80
logger.warn("""'%s' does not have a '%s' method.
81
Please edit 'widget_methods' in %s"""
82
% (key, write_method_name, self.__gtype_name__))
86
widget.connect(self.widget_methods[key][2], self.set_preference)
88
logger.warn("""'%s' unknown signal name '%s'
89
Please edit 'widget_methods' in %s"""
90
% (key, self.widget_methods[key][2], self.__gtype_name__))
94
def get_key_for_widget(self, widget):
96
for key_try in preferences.keys():
97
obj = self.builder.get_object(key_try)
102
def set_preference(self, widget, data=None):
103
'''set a preference from a widget'''
104
key = self.get_key_for_widget(widget)
106
logger.warn('''This widget will not write to a preference.
107
The preference must already exist so add this widget's name
108
to default_preferences in your main function''')
111
# set_widget_from_preference is called first
112
# so no KeyError test is needed here
113
read_method_name = self.widget_methods[key][0]
116
read_method = getattr(widget, read_method_name)
117
except AttributeError:
118
logger.warn("""'%s' does not have a '%s' method.
119
Please edit 'widget_methods' in %s"""
120
% (key, read_method_name, self.__gtype_name__))
124
logger.debug('set_preference: %s = %s' % (key, str(value)))
125
preferences[key] = value
127
def on_btn_close_clicked(self, widget, data=None):
130
def on_btn_help_clicked(self, widget, data=None):
131
show_uri(self, "ghelp:%s" % get_help_uri('preferences'))