* 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:
		| @@ -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 | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user