diff --git a/gramps/src/Config.py b/gramps/src/Config.py
index fa319b06c..3c4018cba 100644
--- a/gramps/src/Config.py
+++ b/gramps/src/Config.py
@@ -34,6 +34,7 @@ import PaperMenu
# GTK/Gnome modules
#
#-------------------------------------------------------------------------
+import GTK
import gtk
import libglade
from gnome.config import get_string, get_bool, get_int, set_string, sync, set_bool, set_int
@@ -87,21 +88,23 @@ _name_format_list = [
(_("Surname, Firstname"), utils.phonebook_name),
]
-
-notemap = {
- _("Database") : 1,
- _("Find") : 3,
- _("Revision Control") : 2,
- _("Tool and Status Bars") : 4,
- _("Display") : 5,
- _("List Colors") : 6,
- _("Dates and Calendars") : 7,
- _("Researcher Information") : 8,
- _("Report Preferences") : 9,
- _("Media Objects") : 10,
- _("GRAMPS internal IDs") : 11,
- _("Other") : 12,
- }
+panellist = [
+ (_("Database"),
+ [( _("General"), 1),
+ ( _("Dates and Calendars"), 7),
+ ( _("Media Objects"), 10),
+ ( _("GRAMPS internal IDs"), 11),
+ ( _("Revision Control"),2)]),
+ (_("Display"),
+ [( _("General"), 5),
+ ( _("Tool and Status Bars"), 4),
+ ( _("List Colors"), 6)]),
+ (_("Usage"),
+ [( _("Find"), 3),
+ ( _("Report Preferences"), 9),
+ ( _("Researcher Information"), 8),
+ ( _("Data Guessing"), 12)]),
+ ]
#-------------------------------------------------------------------------
@@ -453,7 +456,103 @@ def save_config_color(name,color):
set_int("/gramps/color/" + name + ".g",color[1])
set_int("/gramps/color/" + name + ".b",color[2])
+#-------------------------------------------------------------------------
+#
+#
+#
+#-------------------------------------------------------------------------
+def get_config_text(panel,key):
+ return get_string("/gramps/%s/%s" % (panel,key))
+
+def get_config_bool(panel,key):
+ return get_bool("/gramps/%s/%s" % (panel,key))
+
+def get_config_int(panel,key):
+ return get_int("/gramps/%s/%s" % (panel,key))
+
+ext_items = []
+
+class ConfigWidget:
+ def __init__(self,panel,key,label,default):
+ self.p = panel
+ self.k = key
+ self.l = label
+ self.w = None
+ self.d = default
+ self.tag = "/gramps/%s/%s" % (panel,key)
+
+ def set(self):
+ pass
+
+class ConfigEntry(ConfigWidget):
+
+ def get_widgets(self):
+ l = gtk.GtkLabel(self.l)
+ l.show()
+ self.w = gtk.GtkEntry()
+ self.w.show()
+
+ val = get_string(self.tag)
+ if val == None:
+ self.w.set_text(self.d)
+ else:
+ self.w.set_text(val)
+ return [l,self.w]
+
+ def set(self):
+ val = self.w.get_text()
+ set_string(self.tag,val)
+
+class ConfigInt(ConfigWidget):
+
+ def get_widgets(self):
+ l = gtk.GtkLabel(self.l)
+ l.show()
+ self.w = gtk.GtkSpinButton(digits=0)
+ self.w.show()
+
+ val = get_int(self.tag)
+ if val == None:
+ self.w.set_value(int(self.d))
+ else:
+ self.w.set_value(val)
+ return [l,self.w]
+
+ def set(self):
+ val = self.w.get_value_as_int()
+ set_int(self.tag,val)
+
+class ConfigCheckbox(ConfigWidget):
+
+ def get_widgets(self):
+ self.w = gtk.GtkCheckButton(self.l)
+ self.w.show()
+ val = get_bool(self.tag)
+ if val == None:
+ self.w.set_active(self.d)
+ else:
+ self.w.set_active(val)
+ return [self.w]
+
+ def set(self):
+ val = self.w.get_active()
+ set_bool(self.tag,val)
+
+def add_text(category,panel,frame,config_tag,label,default):
+ ext_items.append(category,panel,frame,ConfigEntry(panel,config_tag,label,default))
+
+def add_int(category,panel,frame,config_tag,label,default):
+ ext_items.append(category,panel,frame,ConfigInt(panel,config_tag,label,default))
+
+def add_checkbox(category,panel,frame,config_tag,label,default):
+ ext_items.append(category,panel,frame,ConfigCheckbox(panel,config_tag,label,default))
+
+#-------------------------------------------------------------------------
+#
+#
+#
+#-------------------------------------------------------------------------
class GrampsPreferences:
def __init__(self,db):
self.db = db
@@ -474,23 +573,24 @@ class GrampsPreferences:
self.panel = self.top.get_widget("panel")
self.build_tree()
self.build()
+ self.build_ext()
self.apply.set_sensitive(0)
def build_tree(self):
- self.top_item = gtk.GtkTreeItem('GRAMPS')
- self.top_item.show()
- self.top_item.connect("select",self.select,0)
- self.tree.append(self.top_item)
- subtree = gtk.GtkTree()
- subtree.show()
- self.top_item.set_subtree(subtree)
- self.top_item.expand()
- for name in notemap.keys():
+ self.tree.show()
+ for (name,list) in panellist:
item = gtk.GtkTreeItem(name)
- item.expand()
- item.connect("select",self.select,notemap[name])
item.show()
- subtree.append(item)
+ item.connect("select",self.select,0)
+ self.tree.append(item)
+ subtree = gtk.GtkTree()
+ subtree.show()
+ item.set_subtree(subtree)
+ for (subname,tab) in list:
+ newitem = gtk.GtkTreeItem(subname)
+ newitem.show()
+ newitem.connect("select",self.select,tab)
+ subtree.append(newitem)
def build(self):
auto = self.top.get_widget("autoload")
@@ -678,6 +778,61 @@ class GrampsPreferences:
self.top.get_widget("repdir").gtk_entry().set_text(report_dir)
self.top.get_widget("htmldir").gtk_entry().set_text(web_dir)
+ def build_ext(self):
+ self.c = {}
+ self.ext_list = []
+ for (c,p,f,o) in ext_items:
+ self.ext_list.append(o)
+ if self.c.has_key(c):
+ if self.c[c][p].has_key(f):
+ self.c[c][p][f].append(o)
+ else:
+ self.c[c][p][f] = [o]
+ else:
+ self.c[c] = {}
+ self.c[c][p] = {}
+ self.c[c][p][f] = [o]
+
+ next_panel=13
+ for c in self.c.keys():
+ item = gtk.GtkTreeItem(c)
+ item.show()
+ item.expand()
+ item.connect('select',self.select,0)
+ self.tree.append(item)
+ subtree = gtk.GtkTree()
+ subtree.show()
+ item.set_subtree(subtree)
+ for panel in self.c[c].keys():
+ newitem = gtk.GtkTreeItem(panel)
+ newitem.show()
+ newitem.expand()
+ newitem.connect('select',self.select,next_panel)
+ next_panel = next_panel + 1
+ subtree.append(newitem)
+ box = gtk.GtkVBox()
+ box.show()
+ col = 0
+ panel_label = gtk.GtkLabel("")
+ panel_label.show()
+ self.panel.append_page(box,panel_label)
+ for frame in self.c[c][panel].keys():
+ pairs = self.c[c][panel][frame]
+ fr = gtk.GtkFrame(frame)
+ fr.show()
+ box.pack_start(fr,GTK.FALSE,GTK.FALSE)
+ table = gtk.GtkTable(len(pairs),2)
+ table.show()
+ fr.add(table)
+ for wobj in pairs:
+ w = wobj.get_widgets()
+ if len(w) == 2:
+ table.attach(w[0],0,1,col,col+1,GTK.FILL,GTK.SHRINK,5,5)
+ table.attach(w[1],1,2,col,col+1,GTK.FILL|GTK.EXPAND,GTK.SHRINK,5,5)
+ else:
+ table.attach(w[0],0,2,col,col+1,GTK.FILL|GTK.EXPAND,GTK.SHRINK,5,5)
+ col = col + 1
+
def select(self,obj,data):
self.panel.set_page(data)
@@ -890,6 +1045,9 @@ class GrampsPreferences:
self.db.set_oprefix(oprefix)
self.db.set_pprefix(pprefix)
+ for o in self.ext_list:
+ o.set()
+
# update the config file
sync()
@@ -966,4 +1124,3 @@ def druid_cancel_clicked(obj,a):
utils.destroy_passed_object(obj)
-
diff --git a/gramps/src/preferences.glade b/gramps/src/preferences.glade
index a4e3f4a52..adcc7105e 100644
--- a/gramps/src/preferences.glade
+++ b/gramps/src/preferences.glade
@@ -133,17 +133,25 @@
- GtkTree
- tree
- 10
- 175
- GTK_SELECTION_SINGLE
- GTK_TREE_VIEW_LINE
- True
+ GtkFrame
+ frame19
+ 180
+ 0
+ GTK_SHADOW_ETCHED_IN
False
- True
+ False
+
+
+ GtkTree
+ tree
+ 10
+ 175
+ GTK_SELECTION_SINGLE
+ GTK_TREE_VIEW_ITEM
+ True
+
@@ -228,6 +236,23 @@
True
+
+
+ GtkLabel
+ label86
+
+ GTK_JUSTIFY_RIGHT
+ True
+ 0.5
+ 0.5
+ 0
+ 0
+
+ 0
+ False
+ False
+
+
@@ -1691,7 +1716,7 @@
GTK_SHADOW_ETCHED_IN
0
- True
+ False
True
@@ -2464,7 +2489,7 @@ A4
0
GTK_SHADOW_ETCHED_IN
- 5
+ 0
False
True