2007-10-22 Douglas S. Blank <dblank@cs.brynmawr.edu>

* src/ReportBase/_MenuOptions.py: Refactored options, GEPS #005



svn: r9231
This commit is contained in:
Doug Blank 2007-10-22 04:21:14 +00:00
parent 84b7fd8f7d
commit 4ad174fc44
2 changed files with 150 additions and 147 deletions

View File

@ -1,3 +1,6 @@
2007-10-22 Douglas S. Blank <dblank@cs.brynmawr.edu>
* src/ReportBase/_MenuOptions.py: Refactored options, GEPS #005
2007-10-21 Douglas S. Blank <dblank@cs.brynmawr.edu>
* src/plugins/Calendar.py: select first/last marriage for maiden name

View File

@ -119,6 +119,19 @@ class Option:
@return: nothing
"""
self.__help_str = help
def add_dialog_category(self, dialog, category):
"""
Add the GUI object to the dialog on the appropriate tab.
"""
dialog.add_frame_option(category, self.get_label(), self.gobj)
def add_tooltip(self, tooltip):
"""
Add the option's help to the GUI object.
"""
tooltip.set_tip(self.gobj, self.get_help())
#-------------------------------------------------------------------------
#
@ -140,6 +153,20 @@ class StringOption(Option):
@return: nothing
"""
Option.__init__(self,label,value)
def make_gui_obj(self, dialog):
"""
Add a StringOption (single line text) to the dialog.
"""
value = self.get_value()
self.gobj = gtk.Entry()
self.gobj.set_text(value)
def parse(self):
"""
Parse the string option (single line text).
"""
return self.gobj.get_text()
#-------------------------------------------------------------------------
#
@ -187,6 +214,22 @@ class NumberOption(Option):
"""
return self.__max
def make_gui_obj(self, dialog):
"""
Add a NumberOption to the dialog.
"""
value = self.get_value()
adj = gtk.Adjustment(1,self.get_min(),self.get_max(),1)
self.gobj = gtk.SpinButton(adj)
self.gobj.set_value(value)
def parse(self):
"""
Parse the object and return.
"""
return int(self.gobj.get_value_as_int())
#-------------------------------------------------------------------------
#
# TextOption class
@ -207,6 +250,32 @@ class TextOption(Option):
@return: nothing
"""
Option.__init__(self,label,value)
def make_gui_obj(self, dialog):
"""
Add a TextOption to the dialog.
"""
value = self.get_value()
self.gobj = gtk.TextView()
self.gobj.get_buffer().set_text("\n".join(value))
self.gobj.set_editable(1)
swin = gtk.ScrolledWindow()
swin.set_shadow_type(gtk.SHADOW_IN)
swin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
swin.add(self.gobj)
# Required for tooltip
self.gobj.add_events(gtk.gdk.ENTER_NOTIFY_MASK)
self.gobj.add_events(gtk.gdk.LEAVE_NOTIFY_MASK)
def parse(self):
"""
Parse the text option (multi-line text).
"""
b = self.gobj.get_buffer()
text_val = unicode( b.get_text( b.get_start_iter(),
b.get_end_iter(),
False) )
return text_val.split('\n')
#-------------------------------------------------------------------------
#
@ -229,6 +298,20 @@ class BooleanOption(Option):
"""
Option.__init__(self,label,value)
def make_gui_obj(self, dialog):
"""
Add a BooleanOption to the dialog.
"""
value = self.get_value()
self.gobj = gtk.CheckButton(self.get_label())
self.gobj.set_active(value)
def parse(self):
"""
Parse the object and return.
"""
return self.gobj.get_active()
#-------------------------------------------------------------------------
#
# EnumeratedListOption class
@ -274,6 +357,30 @@ class EnumeratedListOption(Option):
"""
return self.__items
def make_gui_obj(self, dialog):
"""
Add an EnumeratedListOption to the dialog.
"""
v = self.get_value()
active_index = 0
current_index = 0
self.gobj = gtk.combo_box_new_text()
for (value,description) in self.get_items():
self.gobj.append_text(description)
if value == v:
active_index = current_index
current_index += 1
self.gobj.set_active( active_index )
def parse(self):
"""
Parse the EnumeratedListOption and return.
"""
index = self.gobj.get_active()
items = self.get_items()
value = items[index]
return value
#-------------------------------------------------------------------------
#
# FilterListOption class
@ -334,6 +441,29 @@ class FilterListOption(Option):
"""
return self.__filters
def make_gui_obj(self, dialog):
"""
Add an FilterListOption to the dialog.
"""
self.gobj = gtk.combo_box_new_text()
for filter in self.get_items():
if filter in ["person"]:
filter_list = ReportUtils.get_person_filters(dialog.person,False)
for filter in filter_list:
self.gobj.append_text(filter.get_name())
self.add_filter(filter)
# FIXME: set proper default
self.gobj.set_active(0)
def parse(self):
"""
Parse the object and return.
"""
index = self.gobj.get_active()
items = self.get_filters()
filter = items[index]
return filter
#-------------------------------------------------------------------------
#
# Menu class
@ -463,13 +593,11 @@ class MenuOptions(ReportOptions):
def set_new_options(self):
self.options_dict = {}
self.options_help = {}
self.add_menu_options(self.menu)
for name in self.menu.get_all_option_names():
option = self.menu.get_option_by_name(name)
self.options_dict[name] = option.get_value()
self.options_help[name] = option.get_help()
self.options_dict[name] = option.get_help()
def add_menu_options(self,menu):
"""
@ -482,161 +610,33 @@ class MenuOptions(ReportOptions):
raise NotImplementedError
def add_user_options(self,dialog):
self.gui = {}
"""
Generic method to add user options to the gui.
"""
self.tooltips = gtk.Tooltips()
for category in self.menu.get_categories():
for name in self.menu.get_option_names(category):
option = self.menu.get_option(category,name)
otype = option.__class__
if otype == NumberOption:
self.__add_number_option(category,name,option,dialog)
elif otype == TextOption:
self.__add_text_option(category,name,option,dialog)
elif otype == StringOption:
self.__add_string_option(category,name,option,dialog)
elif otype == BooleanOption:
self.__add_boolean_option(category,name,option,dialog)
elif otype == EnumeratedListOption:
self.__add_enumerated_list_option(category,name,option,
dialog)
elif otype == FilterListOption:
self.__add_filter_list_option(category,name,option,
dialog)
else:
raise NotImplementedError
option.make_gui_obj(dialog)
option.add_dialog_category(dialog, category)
option.add_tooltip(self.tooltips)
def parse_user_options(self,dialog):
"""
Generic method to parse the user options and cache result in options_dict.
"""
for name in self.menu.get_all_option_names():
option = self.menu.get_option_by_name(name)
otype = option.__class__
if otype == NumberOption:
self.__parse_number_option(name,option)
elif otype == TextOption:
self.__parse_text_option(name,option)
elif otype == StringOption:
self.__parse_string_option(name,option)
elif otype == BooleanOption:
self.__parse_boolean_option(name,option)
elif otype == EnumeratedListOption:
self.__parse_enumerated_list_option(name,option)
elif otype == FilterListOption:
self.__parse_filter_list_option(name,option)
else:
raise NotImplementedError
def __add_number_option(self,category,name,option,dialog):
"""
Add a NumberOption to the dialog.
"""
adj = gtk.Adjustment(1,option.get_min(),option.get_max(),1)
self.gui[name] = gtk.SpinButton(adj)
self.gui[name].set_value(self.options_dict[name])
dialog.add_frame_option(category,option.get_label(),self.gui[name])
self.tooltips.set_tip(self.gui[name],option.get_help())
def __parse_number_option(self,name,option):
self.options_dict[name] = int(self.gui[name].get_value_as_int())
def __add_text_option(self,category,name,option,dialog):
"""
Add a TextOption to the dialog.
"""
self.gui[name] = gtk.TextView()
self.gui[name].get_buffer().set_text("\n".join(self.options_dict[name]))
self.gui[name].set_editable(1)
swin = gtk.ScrolledWindow()
swin.set_shadow_type(gtk.SHADOW_IN)
swin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
swin.add(self.gui[name])
dialog.add_frame_option(category,option.get_label(),swin)
# Required for tooltip
self.gui[name].add_events(gtk.gdk.ENTER_NOTIFY_MASK)
self.gui[name].add_events(gtk.gdk.LEAVE_NOTIFY_MASK)
self.tooltips.set_tip(self.gui[name],option.get_help())
def __add_string_option(self,category,name,option,dialog):
"""
Add a StringOption (single line text) to the dialog.
"""
self.gui[name] = gtk.Entry()
self.gui[name].set_text(self.options_dict[name])
dialog.add_frame_option(category,option.get_label(),self.gui[name])
self.tooltips.set_tip(self.gui[name],option.get_help())
self.options_dict[name] = self.menu.get_option_by_name(name).parse()
def __parse_text_option(self,name,option):
def get_option_names(self):
"""
Parse the text option (multi-line text).
Return all names of options.
"""
b = self.gui[name].get_buffer()
text_val = unicode( b.get_text( b.get_start_iter(),
b.get_end_iter(),
False) )
self.options_dict[name] = text_val.split('\n')
def __parse_string_option(self,name,option):
"""
Parse the string option (single line text).
"""
self.options_dict[name] = self.gui[name].get_text()
return self.menu.get_all_option_names()
def __add_boolean_option(self,category,name,option,dialog):
def get_user_value(self, name):
"""
Add a BooleanOption to the dialog.
Get and parse the users choice.
"""
self.gui[name] = gtk.CheckButton(option.get_label())
self.gui[name].set_active(self.options_dict[name])
dialog.add_frame_option(category,"",self.gui[name])
self.tooltips.set_tip(self.gui[name],option.get_help())
def __parse_boolean_option(self,name,option):
self.options_dict[name] = self.gui[name].get_active()
def __add_enumerated_list_option(self,category,name,option,dialog):
"""
Add an EnumeratedListOption to the dialog.
"""
active_index = 0
current_index = 0
self.gui[name] = gtk.combo_box_new_text()
for (value,description) in option.get_items():
self.gui[name].append_text(description)
if value == self.options_dict[name]:
active_index = current_index
current_index += 1
self.gui[name].set_active( active_index )
dialog.add_frame_option(category,option.get_label(),self.gui[name])
self.tooltips.set_tip(self.gui[name],option.get_help())
return self.menu.get_option_by_name(name).parse()
def __add_filter_list_option(self,category,name,option,dialog):
"""
Add an FilterListOption to the dialog.
"""
self.gui[name] = gtk.combo_box_new_text()
for filter in option.get_items():
if filter in ["person"]:
filter_list = ReportUtils.get_person_filters(dialog.person,False)
for filter in filter_list:
self.gui[name].append_text(filter.get_name())
option.add_filter(filter)
self.gui[name].set_active(0)
dialog.add_frame_option(category,option.get_label(),self.gui[name])
self.tooltips.set_tip(self.gui[name],option.get_help())
def __parse_enumerated_list_option(self,name,option):
index = self.gui[name].get_active()
items = option.get_items()
value = items[index]
self.options_dict[name] = value
def __parse_filter_list_option(self,name,option):
index = self.gui[name].get_active()
items = option.get_filters()
filter = items[index]
self.options_dict[name] = filter