Added inheritance to plugin dialogs

svn: r824
This commit is contained in:
Don Allingham 2002-03-09 00:14:45 +00:00
parent 67376646d1
commit 2781bba5d2
4 changed files with 150 additions and 397 deletions

View File

@ -86,20 +86,21 @@ STATUS = "s"
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# ReportPlugins interface class # PluginDialog interface class
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class ReportPlugins: class PluginDialog:
"""Displays the dialog box that allows the user to select the """Displays the dialog box that allows the user to select the
report that is desired.""" report that is desired."""
def __init__(self,db,active): def __init__(self,db,active,list,msg):
"""Display the dialog box, and build up the list of available """Display the dialog box, and build up the list of available
reports. This is used to build the selection tree on the left reports. This is used to build the selection tree on the left
hand side of the dailog box.""" hand side of the dailog box."""
self.db = db self.db = db
self.active = active self.active = active
self.update = None
self.dialog = libglade.GladeXML(const.pluginsFile,"report") self.dialog = libglade.GladeXML(const.pluginsFile,"report")
self.dialog.signal_autoconnect({ self.dialog.signal_autoconnect({
@ -109,42 +110,103 @@ class ReportPlugins:
}) })
tree = self.dialog.get_widget("tree") tree = self.dialog.get_widget("tree")
self.top = self.dialog.get_widget("report")
self.img = self.dialog.get_widget("image")
self.description = self.dialog.get_widget("description")
self.status = self.dialog.get_widget("report_status")
self.label = self.dialog.get_widget("report_label")
self.title = self.dialog.get_widget("title")
self.run_tool = None self.run_tool = None
build_tree(tree,_reports,self.on_node_selected) self.build_tree(tree,list)
self.title.set_text(msg)
self.top.set_title("%s - GRAMPS" % msg)
def on_apply_clicked(self,obj): def on_apply_clicked(self,obj):
"""Execute the selected report""" """Execute the selected report"""
Utils.destroy_passed_object(obj) Utils.destroy_passed_object(obj)
if self.run_tool: if self.run_tool:
self.run_tool(self.db,self.active) if self.update:
self.run_tool(self.db,self.active,self.update)
else:
self.run_tool(self.db,self.active)
def on_node_selected(self,obj): def on_node_selected(self,obj):
"""Updates the informational display on the right hand side of """Updates the informational display on the right hand side of
the dialog box with the description of the selected report""" the dialog box with the description of the selected report"""
doc = obj.get_data(DOCSTRING) (task,cat,title,doc,xpm,status) = obj.get_data(TASK)
xpm = obj.get_data(IMAGE)
status = ": %s" % obj.get_data(STATUS)
title = obj.get_data(TITLE)
img = self.dialog.get_widget("image")
self.dialog.get_widget("description").set_text(doc)
self.dialog.get_widget("report_status").set_text(status)
self.dialog.get_widget("report_label").show()
i,m = gtk.create_pixmap_from_xpm_d(gtk.GtkWindow(),None,xpm) i,m = gtk.create_pixmap_from_xpm_d(gtk.GtkWindow(),None,xpm)
img.set(i,m) self.description.set_text(doc)
self.status.set_text(": %s" % status)
self.label.show()
self.img.set(i,m)
self.title.set_text(title)
self.dialog.get_widget("title").set_text(title) self.dialog.get_widget("title").set_text(title)
self.run_tool = obj.get_data(TASK) self.run_tool = task
def build_tree(self,tree,list):
"""Populates a GtkTree with each menu item assocated with a entry
in the lists. The list must consist of a tuples with the following
format:
(task_to_call, category of report, report name, description, image, status)
Items in the same category are grouped under the same submen. The
task_to_call is bound to the 'select' callback of the menu entry."""
# build the tree items and group together based on the category name
item_hash = {}
for report in list:
item = gtk.GtkTreeItem(report[2])
item.connect("select",self.on_node_selected)
item.set_data(TASK,report)
if item_hash.has_key(report[1]):
item_hash[report[1]].append(item)
else:
item_hash[report[1]] = [item]
# add a submenu for each category, and populate it with the GtkTreeItems
# that are associated with it.
key_list = item_hash.keys()
key_list.sort()
for key in key_list:
top_item = gtk.GtkTreeItem(key)
top_item.show()
tree.append(top_item)
subtree = gtk.GtkTree()
subtree.show()
top_item.set_subtree(subtree)
subtree.show()
for item in item_hash[key]:
item.show()
subtree.append(item)
#-------------------------------------------------------------------------
#
# ReportPlugins interface class
#
#-------------------------------------------------------------------------
class ReportPlugins(PluginDialog):
"""Displays the dialog box that allows the user to select the
report that is desired."""
def __init__(self,db,active):
"""Display the dialog box, and build up the list of available
reports. This is used to build the selection tree on the left
hand side of the dailog box."""
PluginDialog.__init__(self,db,active,_reports,_("Report Selection"))
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# ToolPlugins interface class # ToolPlugins interface class
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class ToolPlugins: class ToolPlugins(PluginDialog):
"""Displays the dialog box that allows the user to select the tool """Displays the dialog box that allows the user to select the tool
that is desired.""" that is desired."""
@ -153,39 +215,8 @@ class ToolPlugins:
reports. This is used to build the selection tree on the left reports. This is used to build the selection tree on the left
hand side of the dailog box.""" hand side of the dailog box."""
self.db = db PluginDialog.__init__(self,db,active,_tools,_("Tool Selection"))
self.active = active
self.update = update self.update = update
self.dialog = libglade.GladeXML(const.pluginsFile,"pluginsel")
self.dialog.signal_autoconnect({
"on_apply_clicked" : self.on_apply_clicked,
"on_ok_clicked" : self.on_apply_clicked,
"destroy_passed_object" : Utils.destroy_passed_object
})
tree = self.dialog.get_widget("tree")
self.run_tool = None
build_tree(tree,_tools,self.on_node_selected)
def on_apply_clicked(self,obj):
"""Execute the selected tool."""
Utils.destroy_passed_object(obj)
if self.run_tool:
self.run_tool(self.db,self.active,self.update)
def on_node_selected(self,obj):
"""Updates the informational display on the right hand side of
the dialog box with the description of the selected tool."""
doc = obj.get_data(DOCSTRING)
title = obj.get_data(TITLE)
self.dialog.get_widget("description").set_text(doc)
self.dialog.get_widget("title").set_text(title)
self.run_tool = obj.get_data(TASK)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -198,7 +229,7 @@ class PluginStatus:
def __init__(self): def __init__(self):
import cStringIO import cStringIO
self.glade = libglade.GladeXML(const.plugfile,"plugstat") self.glade = libglade.GladeXML(const.pluginsFile,"plugstat")
self.top = self.glade.get_widget("plugstat") self.top = self.glade.get_widget("plugstat")
window = self.glade.get_widget("text") window = self.glade.get_widget("text")
@ -219,52 +250,6 @@ class PluginStatus:
self.top.run_and_close() self.top.run_and_close()
#-------------------------------------------------------------------------
#
# build_tree
#
#-------------------------------------------------------------------------
def build_tree(tree,list,task):
"""Populates a GtkTree with each menu item assocated with a entry
in the lists. The list must consist of a tuples with the following
format:
(task_to_call, category of report, report name, description, image, status)
Items in the same category are grouped under the same submen. The
task_to_call is bound to the 'select' callback of the menu entry."""
# build the tree items and group together based on the category name
item_hash = {}
for report in list:
item = gtk.GtkTreeItem(report[2])
item.connect("select",task)
item.set_data(TASK,report[0])
item.set_data(TITLE,report[2])
item.set_data(DOCSTRING,report[3])
item.set_data(IMAGE,report[4])
item.set_data(STATUS,report[5])
if item_hash.has_key(report[1]):
item_hash[report[1]].append(item)
else:
item_hash[report[1]] = [item]
# add a submenu for each category, and populate it with the GtkTreeItems
# that are associated with it.
key_list = item_hash.keys()
key_list.sort()
for key in key_list:
top_item = gtk.GtkTreeItem(key)
top_item.show()
tree.append(top_item)
subtree = gtk.GtkTree()
subtree.show()
top_item.set_subtree(subtree)
subtree.show()
for item in item_hash[key]:
item.show()
subtree.append(item)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -73,7 +73,6 @@ srcselFile = "%s/srcsel.glade" % rootDir
findFile = "%s/find.glade" % rootDir findFile = "%s/find.glade" % rootDir
mergeFile = "%s/mergedata.glade" % rootDir mergeFile = "%s/mergedata.glade" % rootDir
traceFile = "%s/trace.glade" % rootDir traceFile = "%s/trace.glade" % rootDir
plugfile = "%s/plugstat.glade" % rootDir
pluginsDir = "%s/plugins" % rootDir pluginsDir = "%s/plugins" % rootDir
docgenDir = "%s/docgen" % rootDir docgenDir = "%s/docgen" % rootDir
filtersDir = "%s/filters" % rootDir filtersDir = "%s/filters" % rootDir

View File

@ -12,222 +12,6 @@
<gettext_support>True</gettext_support> <gettext_support>True</gettext_support>
</project> </project>
<widget>
<class>GnomeDialog</class>
<name>pluginsel</name>
<title>Tool Selection - GRAMPS</title>
<type>GTK_WINDOW_DIALOG</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>vbox33</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>hbuttonbox20</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>button101</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_ok_clicked</handler>
<object>pluginsel</object>
<last_modification_time>Sun, 11 Mar 2001 22:54:53 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>button102</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_apply_clicked</handler>
<object>pluginsel</object>
<last_modification_time>Sun, 11 Mar 2001 22:54:34 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>button103</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>pluginsel</object>
<last_modification_time>Sun, 11 Mar 2001 22:54:19 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget>
</widget>
<widget>
<class>GtkHPaned</class>
<name>hpaned1</name>
<handle_size>10</handle_size>
<gutter_size>6</gutter_size>
<position>0</position>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkTree</class>
<name>tree</name>
<border_width>5</border_width>
<width>250</width>
<height>300</height>
<selection_mode>GTK_SELECTION_SINGLE</selection_mode>
<view_mode>GTK_TREE_VIEW_ITEM</view_mode>
<view_line>True</view_line>
<child>
<shrink>False</shrink>
<resize>True</resize>
</child>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox34</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<shrink>True</shrink>
<resize>True</resize>
</child>
<widget>
<class>GtkHBox</class>
<name>hbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>20</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkPixmap</class>
<name>image</name>
<filename>gramps.xpm</filename>
<xalign>0</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<build_insensitive>True</build_insensitive>
<child>
<padding>10</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>title</name>
<label>Tool Selection</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0</xalign>
<yalign>0.5</yalign>
<xpad>10</xpad>
<ypad>10</ypad>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator18</name>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>pluginTitle</name>
<label></label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>10</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>description</name>
<width>300</width>
<label>Select a tool from those available on the left.</label>
<justify>GTK_JUSTIFY_LEFT</justify>
<wrap>True</wrap>
<xalign>0</xalign>
<yalign>0</yalign>
<xpad>10</xpad>
<ypad>20</ypad>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
</widget>
</widget>
</widget>
</widget>
<widget> <widget>
<class>GnomeDialog</class> <class>GnomeDialog</class>
<name>report</name> <name>report</name>
@ -491,4 +275,71 @@
</widget> </widget>
</widget> </widget>
<widget>
<class>GnomeDialog</class>
<name>plugstat</name>
<title>Plugin Status - GRAMPS</title>
<type>GTK_WINDOW_DIALOG</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>vbox37</name>
<width>450</width>
<height>350</height>
<homogeneous>False</homogeneous>
<spacing>8</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>hbuttonbox22</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>button107</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<stock_button>GNOME_STOCK_BUTTON_CLOSE</stock_button>
</widget>
</widget>
<widget>
<class>GnomeLess</class>
<name>text</name>
<width>450</width>
<height>350</height>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
</widget>
</widget>
</GTK-Interface> </GTK-Interface>

View File

@ -1,82 +0,0 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>Project1</name>
<program_name>project1</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory>pixmaps</pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GnomeDialog</class>
<name>plugstat</name>
<title>Plugin Status - GRAMPS</title>
<type>GTK_WINDOW_DIALOG</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>dialog-vbox1</name>
<width>450</width>
<height>350</height>
<homogeneous>False</homogeneous>
<spacing>8</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>dialog-action_area1</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>button3</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<stock_button>GNOME_STOCK_BUTTON_CLOSE</stock_button>
</widget>
</widget>
<widget>
<class>GnomeLess</class>
<name>text</name>
<width>450</width>
<height>350</height>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
</widget>
</widget>
</GTK-Interface>