* src/EditSource.py: handle add/delete data item buttons. Make
sure that data items with empty keys are not saved. * src/gramps.glade: added add/delete buttons for Source Editor * src/gramps_main.py: remove key-release-event * src/RelLib.py: unicode conversions * src/GrampsDbBase.py: make sure we are sorting by unicode values svn: r3748
This commit is contained in:
parent
291ce80774
commit
9a278d058e
@ -1,3 +1,11 @@
|
||||
2004-11-24 Don Allingham <dallingham@users.sourceforge.net>
|
||||
* src/EditSource.py: handle add/delete data item buttons. Make
|
||||
sure that data items with empty keys are not saved.
|
||||
* src/gramps.glade: added add/delete buttons for Source Editor
|
||||
* src/gramps_main.py: remove key-release-event
|
||||
* src/RelLib.py: unicode conversions
|
||||
* src/GrampsDbBase.py: make sure we are sorting by unicode values
|
||||
|
||||
2004-11-23 Don Allingham <dallingham@users.sourceforge.net>
|
||||
* src/ReadGedcom.py: fix relative path filenames and build
|
||||
the thumbnail image
|
||||
|
@ -123,6 +123,8 @@ class EditSource:
|
||||
"on_sourceEditor_ok_clicked" : self.on_source_apply_clicked,
|
||||
"on_sourceEditor_cancel_clicked" : self.close,
|
||||
"on_sourceEditor_delete_event" : self.on_delete_event,
|
||||
"on_delete_data_clicked" : self.on_delete_data_clicked,
|
||||
"on_add_data_clicked" : self.on_add_data_clicked,
|
||||
})
|
||||
|
||||
if self.source.get_handle() == None:
|
||||
@ -131,6 +133,7 @@ class EditSource:
|
||||
|
||||
self.datalist = self.top_window.get_widget('datalist')
|
||||
colno = 0
|
||||
first = True
|
||||
for title in [ (_('Key'),0,175), (_('Value'),1,150)]:
|
||||
renderer = gtk.CellRendererText()
|
||||
renderer.set_property('editable',True)
|
||||
@ -142,14 +145,17 @@ class EditSource:
|
||||
column.set_min_width(title[2])
|
||||
column.set_sort_column_id(title[1])
|
||||
self.datalist.append_column(column)
|
||||
if first:
|
||||
first = False
|
||||
self.key_cell = renderer
|
||||
self.key_col = column
|
||||
|
||||
self.data_model = gtk.ListStore(str,str)
|
||||
self.datalist.set_model(self.data_model)
|
||||
dmap = self.source.get_data_map()
|
||||
for item in dmap.keys():
|
||||
self.data_model.append(row=[item,dmap[item]])
|
||||
self.data_model.append(row=['',''])
|
||||
|
||||
|
||||
if parent_window:
|
||||
self.top.set_transient_for(parent_window)
|
||||
|
||||
@ -158,12 +164,25 @@ class EditSource:
|
||||
self.top.set_transient_for(parent_window)
|
||||
self.add_itself_to_menu()
|
||||
self.top.show()
|
||||
self.data_sel = self.datalist.get_selection()
|
||||
|
||||
def on_add_data_clicked(self,widget):
|
||||
node = self.data_model.append(row=['',''])
|
||||
self.data_sel.select_iter(node)
|
||||
path = self.data_model.get_path(node)
|
||||
self.datalist.set_cursor_on_cell(path,
|
||||
focus_column=self.key_col,
|
||||
focus_cell=None,
|
||||
start_editing=True)
|
||||
|
||||
def on_delete_data_clicked(self,widget):
|
||||
(model,node) = self.data_sel.get_selected()
|
||||
if node:
|
||||
model.remove(node)
|
||||
|
||||
def edit_cb(self, cell, path, new_text, data):
|
||||
iter = self.data_model.get_iter(path)
|
||||
self.data_model.set_value(iter,data,new_text)
|
||||
if int(path)+1 == len(self.data_model):
|
||||
self.data_model.append(row=['',''])
|
||||
|
||||
def on_delete_event(self,obj,b):
|
||||
self.close_child_windows()
|
||||
@ -357,11 +376,12 @@ class EditSource:
|
||||
self.source.set_note_format(format)
|
||||
|
||||
new_map = {}
|
||||
for val in range(0,len(self.data_model)-1):
|
||||
for val in range(0,len(self.data_model)):
|
||||
node = self.data_model.get_iter(val)
|
||||
key = self.data_model.get_value(node,0)
|
||||
value = self.data_model.get_value(node,1)
|
||||
new_map[key] = value
|
||||
value = self.data_model.get_value(node,1)
|
||||
if key:
|
||||
new_map[unicode(key)] = unicode(value)
|
||||
if new_map != self.source.get_data_map():
|
||||
self.source.set_data_map(new_map)
|
||||
|
||||
|
@ -1004,8 +1004,8 @@ class GrampsDbBase:
|
||||
self.place_map.get(str(s))[2])
|
||||
|
||||
def _sortbysource(self,f,s):
|
||||
fp = self.source_map[str(f)][2]
|
||||
sp = self.source_map[str(s)][2]
|
||||
fp = unicode(self.source_map[str(f)][2])
|
||||
sp = unicode(self.source_map[str(s)][2])
|
||||
return locale.strcoll(fp,sp)
|
||||
|
||||
def _sortbymedia(self,f,s):
|
||||
|
@ -262,7 +262,7 @@ class Person(PrimaryObject,SourceNote):
|
||||
a form that it can use.
|
||||
"""
|
||||
return (self.handle, self.gramps_id, self.gender,
|
||||
self.primary_name, self.alternate_names, self.nickname,
|
||||
self.primary_name, self.alternate_names, unicode(self.nickname),
|
||||
self.death_handle, self.birth_handle, self.event_list,
|
||||
self.family_list, self.parent_family_list,
|
||||
self.media_list, self.address_list, self.attribute_list,
|
||||
@ -1195,8 +1195,9 @@ class Source(PrimaryObject):
|
||||
self.abbrev = ""
|
||||
|
||||
def serialize(self):
|
||||
return (self.handle, self.gramps_id, self.title, self.author,
|
||||
self.pubinfo, self.note, self.media_list, self.abbrev,
|
||||
return (self.handle, self.gramps_id, unicode(self.title),
|
||||
unicode(self.author), unicode(self.pubinfo),
|
||||
unicode(self.note), self.media_list, unicode(self.abbrev),
|
||||
self.change,self.datamap)
|
||||
|
||||
def unserialize(self,data):
|
||||
@ -1205,8 +1206,8 @@ class Source(PrimaryObject):
|
||||
back into the data in an Event structure.
|
||||
"""
|
||||
(self.handle, self.gramps_id, self.title, self.author,
|
||||
self.pubinfo, self.note, self.media_list, self.abbrev,
|
||||
self.change,self.datamap) = data
|
||||
self.pubinfo, self.note, self.media_list,
|
||||
self.abbrev, self.change, self.datamap) = data
|
||||
|
||||
def get_display_info(self):
|
||||
return [self.title,self.gramps_id,self.author,
|
||||
|
106
src/gramps.glade
106
src/gramps.glade
@ -5852,23 +5852,107 @@ Other</property>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkScrolledWindow" id="scrolledwindow83">
|
||||
<widget class="GtkHBox" id="hbox100">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="shadow_type">GTK_SHADOW_NONE</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">6</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="datalist">
|
||||
<widget class="GtkScrolledWindow" id="scrolledwindow83">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">True</property>
|
||||
<property name="rules_hint">True</property>
|
||||
<property name="reorderable">False</property>
|
||||
<property name="enable_search">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="shadow_type">GTK_SHADOW_NONE</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="datalist">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">True</property>
|
||||
<property name="rules_hint">True</property>
|
||||
<property name="reorderable">False</property>
|
||||
<property name="enable_search">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox89">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">6</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="button178">
|
||||
<property name="width_request">36</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Add a new media object to the database and place it in this gallery</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal name="clicked" handler="on_add_data_clicked" last_modification_time="Wed, 24 Nov 2004 16:59:34 GMT"/>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image2292">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
<property name="icon_size">4</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="button181">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Remove selected object from this gallery only</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal name="clicked" handler="on_delete_data_clicked" last_modification_time="Wed, 24 Nov 2004 16:59:58 GMT"/>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image2295">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-remove</property>
|
||||
<property name="icon_size">4</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
|
@ -354,7 +354,6 @@ class Gramps:
|
||||
"on_export_activate" : self.on_export_activate,
|
||||
"on_pedigree1_activate" : self.on_pedigree1_activate,
|
||||
"on_person_list1_activate" : self.on_person_list1_activate,
|
||||
"on_main_key_release_event" : self.on_main_key_release_event,
|
||||
"on_media_activate" : self.on_media_activate,
|
||||
"on_media_list_select_row" : self.media_view.on_select_row,
|
||||
"on_media_list_drag_data_get" : self.media_view.on_drag_data_get,
|
||||
@ -1646,14 +1645,6 @@ class Gramps:
|
||||
if self.active_person:
|
||||
task(self.db,self.active_person,self.tool_callback,self)
|
||||
|
||||
def on_main_key_release_event(self,obj,event):
|
||||
"""Respond to the insert and delete buttons in the person list"""
|
||||
pass
|
||||
#if event.keyval == GDK.Delete:
|
||||
# self.on_delete_person_clicked(obj)
|
||||
#elif event.keyval == GDK.Insert:
|
||||
# self.load_new_person(obj)
|
||||
|
||||
def open_example(self,obj):
|
||||
pass
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user