* src/AddrEdit.py: remove already_exist check in favor of exception
* src/AttrEdit.py: remove already_exist check in favor of exception * src/DisplayState.py: remove already_exist variable * src/DisplayTabs.py: handle exception * src/EditEventRef.py: remove already_exist check in favor of exception * src/EditFamily.py: update to derive from EditPrimary * src/EditMedia.py: update to derive from EditPrimary * src/EditMediaRef.py: remove already_exist check in favor of exception * src/EditPerson.py: update to derive from EditPrimary * src/EditPlace.py: update to derive from EditPrimary * src/EditRepository.py:update to derive from EditPrimary * src/EditSource.py: update to derive from EditPrimary * src/EditSourceRef.py: remove already_exist check in favor of exception * src/Errors.py: new exception * src/EventEdit.py: update to derive from EditPrimary * src/EventView.py: catch exception of window already exists * src/FamilyList.py: catch exception of window already exists * src/FamilyView.py: catch exception of window already exists * src/GrampsWidgets.py: typos * src/NameEdit.py: remove already_exist check in favor of exception * src/PedView.py: catch exception of window already exists * src/PersonView.py: catch exception of window already exists * src/PlaceView.py: catch exception of window already exists * src/Plugins.py: catch exception of window already exists * src/UrlEdit.py: remove already_exist check in favor of exception * src/const.py.in: dynamically determine path * src/gramps.glade: name changes * src/gramps.py: set path svn: r6014
This commit is contained in:
		| @@ -1,3 +1,33 @@ | ||||
| 2006-02-28  Don Allingham  <don@gramps-project.org> | ||||
| 	* src/AddrEdit.py: remove already_exist check in favor of exception | ||||
| 	* src/AttrEdit.py: remove already_exist check in favor of exception | ||||
| 	* src/DisplayState.py: remove already_exist variable | ||||
| 	* src/DisplayTabs.py: handle exception | ||||
| 	* src/EditEventRef.py: remove already_exist check in favor of exception | ||||
| 	* src/EditFamily.py: update to derive from EditPrimary | ||||
| 	* src/EditMedia.py: update to derive from EditPrimary | ||||
| 	* src/EditMediaRef.py: remove already_exist check in favor of exception | ||||
| 	* src/EditPerson.py: update to derive from EditPrimary | ||||
| 	* src/EditPlace.py: update to derive from EditPrimary | ||||
| 	* src/EditRepository.py:update to derive from EditPrimary | ||||
| 	* src/EditSource.py: update to derive from EditPrimary | ||||
| 	* src/EditSourceRef.py: remove already_exist check in favor of exception | ||||
| 	* src/Errors.py: new exception | ||||
| 	* src/EventEdit.py: update to derive from EditPrimary | ||||
| 	* src/EventView.py: catch exception of window already exists | ||||
| 	* src/FamilyList.py: catch exception of window already exists | ||||
| 	* src/FamilyView.py: catch exception of window already exists | ||||
| 	* src/GrampsWidgets.py: typos | ||||
| 	* src/NameEdit.py: remove already_exist check in favor of exception | ||||
| 	* src/PedView.py: catch exception of window already exists | ||||
| 	* src/PersonView.py: catch exception of window already exists | ||||
| 	* src/PlaceView.py: catch exception of window already exists | ||||
| 	* src/Plugins.py: catch exception of window already exists | ||||
| 	* src/UrlEdit.py: remove already_exist check in favor of exception | ||||
| 	* src/const.py.in: dynamically determine path  | ||||
| 	* src/gramps.glade: name changes | ||||
| 	* src/gramps.py: set path | ||||
| 	 | ||||
| 2006-02-28  Alex Roitman  <shura@gramps-project.org> | ||||
| 	* src/plugins/WritePkg.py (PackageWriter.export): Add existing | ||||
| 	image filenames to the archive. | ||||
|   | ||||
| @@ -48,11 +48,7 @@ import GrampsDisplay | ||||
| import const | ||||
| import Utils | ||||
| import RelLib | ||||
| import Sources | ||||
| import DateEdit | ||||
| import DateHandler | ||||
| import DisplayState | ||||
| import Spell | ||||
|  | ||||
| from DisplayTabs import * | ||||
| from GrampsWidgets import * | ||||
| @@ -81,8 +77,6 @@ class AddressEditor(DisplayState.ManagedWindow): | ||||
|         self.addr = addr | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, addr) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         if not self.addr: | ||||
|             self.addr = RelLib.Address() | ||||
|   | ||||
| @@ -85,8 +85,6 @@ class AttributeEditor(DisplayState.ManagedWindow): | ||||
|         self.alist = data_list | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, attrib) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         if not attrib: | ||||
|             self.attrib = RelLib.Attribute() | ||||
|   | ||||
| @@ -100,10 +100,6 @@ class DateEdit: | ||||
|     """Class that associates a pixmap with a text widget, providing visual | ||||
|     feedback that indicates if the text widget contains a valid date""" | ||||
|  | ||||
|     good = gtk.gdk.pixbuf_new_from_file(const.good_xpm) | ||||
|     bad = gtk.gdk.pixbuf_new_from_file(const.bad_xpm) | ||||
|     caution = gtk.gdk.pixbuf_new_from_file(const.caution_xpm) | ||||
|      | ||||
|     def __init__(self,date_obj,text_obj,button_obj,parent_window=None): | ||||
|         """ | ||||
|         Creates a connection between the date_obj, text_obj and the pixmap_obj. | ||||
|   | ||||
| @@ -45,6 +45,7 @@ import GrampsKeys | ||||
| import NameDisplay | ||||
| import GrampsMime | ||||
| import const | ||||
| import Errors | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| @@ -453,9 +454,6 @@ class ManagedWindow: | ||||
|                                                     window_id, | ||||
|                                                     submenu_label, | ||||
|                                                     menu_label) | ||||
|                 if self.already_exist: | ||||
|                     return | ||||
|                  | ||||
|                 # Proceed with the class. | ||||
|                 ... | ||||
|                  | ||||
| @@ -466,9 +464,8 @@ class ManagedWindow: | ||||
|              | ||||
|         if uistate.gwm.get_item_from_id(window_key): | ||||
|             uistate.gwm.get_item_from_id(window_key).present() | ||||
|             self.already_exist = True | ||||
|             raise Errors.WindowActiveError('This window is already active') | ||||
|         else: | ||||
|             self.already_exist = False | ||||
|             self.window_id = window_key | ||||
|             self.submenu_label = submenu_label | ||||
|             self.menu_label = menu_label | ||||
|   | ||||
| @@ -54,6 +54,7 @@ import RelLib | ||||
| import Utils | ||||
| import ImgManip | ||||
| import Spell | ||||
| import Errors | ||||
|  | ||||
| from DdTargets import DdTargets | ||||
| from GrampsWidgets import SimpleButton | ||||
| @@ -593,8 +594,11 @@ class EventEmbedList(EmbeddedList): | ||||
|  | ||||
|     def add_button_clicked(self,obj): | ||||
|         from EditEventRef import EditEventRef | ||||
|         EditEventRef(self.dbstate,self.uistate,self.track, | ||||
|                      None, None, self.obj, self.event_added) | ||||
|         try: | ||||
|             EditEventRef(self.dbstate,self.uistate,self.track, | ||||
|                          None, None, self.obj, self.event_added) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def share_button_clicked(self,obj): | ||||
|         from EditEventRef import EditEventRef | ||||
| @@ -602,16 +606,22 @@ class EventEmbedList(EmbeddedList): | ||||
|  | ||||
|         sel = SelectEvent.SelectEvent(self.dbstate.db,"Event Select") | ||||
|         event = sel.run() | ||||
|         EditEventRef(self.dbstate,self.uistate,self.track, | ||||
|                      event, None, self.obj, self.event_added) | ||||
|         try: | ||||
|             EditEventRef(self.dbstate,self.uistate,self.track, | ||||
|                          event, None, self.obj, self.event_added) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def edit_button_clicked(self,obj): | ||||
|         ref = self.get_selected() | ||||
|         if ref: | ||||
|             from EditEventRef import EditEventRef | ||||
|             event = self.dbstate.db.get_event_from_handle(ref.ref) | ||||
|             EditEventRef(self.dbstate,self.uistate,self.track, | ||||
|                          event, ref, self.obj, self.event_updated) | ||||
|             try: | ||||
|                 EditEventRef(self.dbstate,self.uistate,self.track, | ||||
|                              event, ref, self.obj, self.event_updated) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def event_updated(self,value): | ||||
|         self.changed = True | ||||
| @@ -814,9 +824,12 @@ class AttrEmbedList(EmbeddedList): | ||||
|         import AttrEdit | ||||
|         pname = '' | ||||
|         attr_list = [] | ||||
|         AttrEdit.AttributeEditor( | ||||
|             self.dbstate, self.uistate, self.track, None, | ||||
|             pname, attr_list, self.add_callback) | ||||
|         try: | ||||
|             AttrEdit.AttributeEditor( | ||||
|                 self.dbstate, self.uistate, self.track, None, | ||||
|                 pname, attr_list, self.add_callback) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add_callback(self,name): | ||||
|         self.get_data().append(name) | ||||
| @@ -829,9 +842,12 @@ class AttrEmbedList(EmbeddedList): | ||||
|             import AttrEdit | ||||
|             pname = '' | ||||
|             attr_list = [] | ||||
|             AttrEdit.AttributeEditor( | ||||
|                 self.dbstate, self.uistate, self.track, attr, | ||||
|                 pname, attr_list, self.edit_callback) | ||||
|             try: | ||||
|                 AttrEdit.AttributeEditor( | ||||
|                     self.dbstate, self.uistate, self.track, attr, | ||||
|                     pname, attr_list, self.edit_callback) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def edit_callback(self,name): | ||||
|         self.changed = True | ||||
| @@ -867,8 +883,11 @@ class WebEmbedList(EmbeddedList): | ||||
|     def add_button_clicked(self,obj): | ||||
|         import UrlEdit | ||||
|         url = RelLib.Url() | ||||
|         UrlEdit.UrlEditor(self.dbstate, self.uistate, self.track, | ||||
|                           '', url, self.add_callback) | ||||
|         try: | ||||
|             UrlEdit.UrlEditor(self.dbstate, self.uistate, self.track, | ||||
|                               '', url, self.add_callback) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add_callback(self,url): | ||||
|         self.get_data().append(url) | ||||
| @@ -878,8 +897,11 @@ class WebEmbedList(EmbeddedList): | ||||
|         url = self.get_selected() | ||||
|         if url: | ||||
|             import UrlEdit | ||||
|             UrlEdit.UrlEditor(self.dbstate, self.uistate, self.track, | ||||
|                               '', url, self.edit_callback) | ||||
|             try: | ||||
|                 UrlEdit.UrlEditor(self.dbstate, self.uistate, self.track, | ||||
|                                   '', url, self.edit_callback) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def edit_callback(self,url): | ||||
|         self.rebuild() | ||||
| @@ -913,8 +935,11 @@ class NameEmbedList(EmbeddedList): | ||||
|     def add_button_clicked(self,obj): | ||||
|         import NameEdit | ||||
|         name = RelLib.Name() | ||||
|         NameEdit.NameEditor(self.dbstate, self.uistate, self.track, | ||||
|                             name, self.add_callback) | ||||
|         try: | ||||
|             NameEdit.NameEditor(self.dbstate, self.uistate, self.track, | ||||
|                                 name, self.add_callback) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add_callback(self,name): | ||||
|         self.get_data().append(name) | ||||
| @@ -924,8 +949,11 @@ class NameEmbedList(EmbeddedList): | ||||
|         name = self.get_selected() | ||||
|         if name: | ||||
|             import NameEdit | ||||
|             NameEdit.NameEditor(self.dbstate, self.uistate, self.track, | ||||
|                                 name, self.edit_callback) | ||||
|             try: | ||||
|                 NameEdit.NameEditor(self.dbstate, self.uistate, self.track, | ||||
|                                     name, self.edit_callback) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def edit_callback(self,name): | ||||
|         self.rebuild() | ||||
| @@ -962,8 +990,11 @@ class AddrEmbedList(EmbeddedList): | ||||
|     def add_button_clicked(self,obj): | ||||
|         import AddrEdit | ||||
|         addr = RelLib.Address() | ||||
|         AddrEdit.AddressEditor(self.dbstate, self.uistate, self.track, | ||||
|                                addr, self.add_callback) | ||||
|         try: | ||||
|             AddrEdit.AddressEditor(self.dbstate, self.uistate, self.track, | ||||
|                                    addr, self.add_callback) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add_callback(self,name): | ||||
|         self.get_data().append(name) | ||||
| @@ -973,8 +1004,11 @@ class AddrEmbedList(EmbeddedList): | ||||
|         addr = self.get_selected() | ||||
|         if addr: | ||||
|             import AddrEdit | ||||
|             AddrEdit.AddressEditor(self.dbstate, self.uistate, self.track, | ||||
|                                    addr, self.edit_callback) | ||||
|             try: | ||||
|                 AddrEdit.AddressEditor(self.dbstate, self.uistate, self.track, | ||||
|                                        addr, self.edit_callback) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def edit_callback(self,name): | ||||
|         self.rebuild() | ||||
| @@ -1011,8 +1045,11 @@ class LocationEmbedList(EmbeddedList): | ||||
|     def add_button_clicked(self,obj): | ||||
|         import LocEdit | ||||
|         loc = RelLib.Location() | ||||
|         LocEdit.LocationEditor(self.dbstate, self.uistate, self.track, | ||||
|                                loc, self.add_callback) | ||||
|         try: | ||||
|             LocEdit.LocationEditor(self.dbstate, self.uistate, self.track, | ||||
|                                    loc, self.add_callback) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add_callback(self,name): | ||||
|         self.get_data().append(name) | ||||
| @@ -1022,8 +1059,11 @@ class LocationEmbedList(EmbeddedList): | ||||
|         loc = self.get_selected() | ||||
|         if loc: | ||||
|             import LocEdit | ||||
|             LocEdit.LocationEditor(self.dbstate, self.uistate, self.track, | ||||
|                                    loc, self.edit_callback) | ||||
|             try: | ||||
|                 LocEdit.LocationEditor(self.dbstate, self.uistate, self.track, | ||||
|                                        loc, self.edit_callback) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def edit_callback(self,name): | ||||
|         self.rebuild() | ||||
| @@ -1213,8 +1253,11 @@ class GalleryTab(ButtonTab): | ||||
|          | ||||
|         sref = RelLib.MediaRef() | ||||
|         src = RelLib.MediaObject() | ||||
|         EditMediaRef(self.dbstate, self.uistate, self.track, | ||||
|                       src, sref, self.add_callback) | ||||
|         try: | ||||
|             EditMediaRef(self.dbstate, self.uistate, self.track, | ||||
|                          src, sref, self.add_callback) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add_callback(self,name): | ||||
|         self.get_data().append(name) | ||||
| @@ -1233,8 +1276,11 @@ class GalleryTab(ButtonTab): | ||||
|             from EditMediaRef import EditMediaRef | ||||
|  | ||||
|             obj = self.dbstate.db.get_object_from_handle(ref.get_reference_handle()) | ||||
|             EditMediaRef(self.dbstate, self.uistate, self.track, | ||||
|                          obj, ref, self.edit_callback) | ||||
|             try: | ||||
|                 EditMediaRef(self.dbstate, self.uistate, self.track, | ||||
|                              obj, ref, self.edit_callback) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def edit_callback(self, name): | ||||
|         self.changed = True | ||||
| @@ -1276,8 +1322,11 @@ class SourceEmbedList(EmbeddedList): | ||||
|          | ||||
|         sref = RelLib.SourceRef() | ||||
|         src = RelLib.Source() | ||||
|         EditSourceRef(self.dbstate, self.uistate, self.track, | ||||
|                       src, sref, self.add_callback) | ||||
|         try: | ||||
|             EditSourceRef(self.dbstate, self.uistate, self.track, | ||||
|                           src, sref, self.add_callback) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add_callback(self,obj): | ||||
|         self.get_data().append(obj) | ||||
| @@ -1290,8 +1339,11 @@ class SourceEmbedList(EmbeddedList): | ||||
|         sref = self.get_selected() | ||||
|         src = self.dbstate.db.get_source_from_handle(sref.ref) | ||||
|         if sref: | ||||
|             EditSourceRef(self.dbstate, self.uistate, self.track, | ||||
|                           src, sref, self.edit_callback) | ||||
|             try: | ||||
|                 EditSourceRef(self.dbstate, self.uistate, self.track, | ||||
|                               src, sref, self.edit_callback) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def edit_callback(self,name): | ||||
|         self.changed = True | ||||
| @@ -1333,8 +1385,11 @@ class RepoEmbedList(EmbeddedList): | ||||
|          | ||||
|         ref = RelLib.RepoRef() | ||||
|         repo = RelLib.Repository() | ||||
|         EditRepositoryRef( | ||||
|             self.dbstate, self.uistate, self.track, repo, ref, self.add_callback) | ||||
|         try: | ||||
|             EditRepositoryRef( | ||||
|                 self.dbstate, self.uistate, self.track, repo, ref, self.add_callback) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add_callback(self,value): | ||||
|         value[0].ref = value[1].handle | ||||
| @@ -1348,9 +1403,12 @@ class RepoEmbedList(EmbeddedList): | ||||
|         ref = self.get_selected() | ||||
|         if ref: | ||||
|             repo = self.dbstate.db.get_repository_from_handle(ref.ref) | ||||
|             EditRepositoryRef.EditRepositoryRef( | ||||
|                 self.dbstate, self.uistate, self.track, repo, | ||||
|                 ref, self.edit_callback) | ||||
|             try: | ||||
|                 EditRepositoryRef.EditRepositoryRef( | ||||
|                     self.dbstate, self.uistate, self.track, repo, | ||||
|                     ref, self.edit_callback) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def edit_callback(self,name): | ||||
|         self.changed = True | ||||
|   | ||||
| @@ -50,12 +50,9 @@ import const | ||||
| import Utils | ||||
| import AutoComp | ||||
| import RelLib | ||||
| from DateHandler import displayer as _dd | ||||
| import DateEdit | ||||
| import DisplayState | ||||
|  | ||||
| from QuestionDialog import WarningDialog, ErrorDialog | ||||
| from WindowUtils import GladeIf | ||||
| from DisplayTabs import * | ||||
| from GrampsWidgets import * | ||||
|  | ||||
| @@ -84,8 +81,6 @@ class EditEventRef(DisplayState.ManagedWindow): | ||||
|         self.event = event | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, event_ref) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         self.update = update | ||||
|  | ||||
| @@ -187,11 +182,12 @@ class EditEventRef(DisplayState.ManagedWindow): | ||||
|             dict(total_events), | ||||
|             RelLib.Event.CUSTOM) | ||||
|  | ||||
|         self.date_check = DateEdit.DateEdit( | ||||
|             self.event.get_date_object(), | ||||
|         self.date_check = MonitoredDate( | ||||
|             self.top.get_widget("eer_date"), | ||||
|             self.top.get_widget("eer_date_stat"), | ||||
|             self.window) | ||||
|             self.event.get_date_object(), | ||||
|             self.window, | ||||
|             self.db.readonly) | ||||
|  | ||||
|     def _connect_signals(self): | ||||
|         self.top.get_widget('ok').connect('clicked',self.ok_clicked) | ||||
|   | ||||
| @@ -26,8 +26,6 @@ | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| import cPickle as pickle | ||||
| import os | ||||
| import sys | ||||
| from gettext import gettext as _ | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| @@ -66,16 +64,14 @@ import gtk.glade | ||||
| import const | ||||
| import Utils | ||||
| import NameDisplay | ||||
| import DisplayState | ||||
| import EditPrimary | ||||
| import Spell | ||||
| import GrampsDisplay | ||||
| import RelLib | ||||
| import ReportUtils | ||||
| import AutoComp | ||||
| import GrampsWidgets | ||||
|  | ||||
| from DdTargets import DdTargets | ||||
| from WindowUtils import GladeIf | ||||
| from DisplayTabs import * | ||||
| from GrampsWidgets import * | ||||
| from ObjectSelector import PersonSelector,PersonFilterSpec | ||||
| @@ -204,40 +200,35 @@ class ChildEmbedList(EmbeddedList): | ||||
|         handle = self.get_selected() | ||||
|         if handle: | ||||
|             import EditPerson | ||||
|             person = self.dbstate.db.get_person_from_handle(handle) | ||||
|             EditPerson.EditPerson(self.dbstate,self.uistate,self.track,person) | ||||
|             try: | ||||
|                 person = self.dbstate.db.get_person_from_handle(handle) | ||||
|                 EditPerson.EditPerson(self.dbstate,self.uistate,self.track,person) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # EditFamily | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| class EditFamily(DisplayState.ManagedWindow): | ||||
| class EditFamily(EditPrimary.EditPrimary): | ||||
|  | ||||
|     def __init__(self,dbstate,uistate,track,family): | ||||
|         self.dbstate = dbstate | ||||
|         self.uistate = uistate | ||||
|         self.family  = family | ||||
|         EditPrimary.EditPrimary.__init__(self, dbstate, uistate, track, | ||||
|                                          family, dbstate.db.get_family_from_handle) | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, family) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|          | ||||
|  | ||||
|     def _local_init(self): | ||||
|         self.build_interface() | ||||
|         self.load_data() | ||||
|  | ||||
|         self.mname  = None | ||||
|         self.fname  = None | ||||
|  | ||||
|         self.signal_keys = [] | ||||
|         self.signal_keys.append(self.dbstate.db.connect('person-update', | ||||
|                                                         self.check_for_change)) | ||||
|         self.signal_keys.append(self.dbstate.db.connect('person-delete', | ||||
|                                                         self.check_for_change)) | ||||
|         self.signal_keys.append(self.dbstate.db.connect('person-rebuild', | ||||
|                                                         self.reload_people)) | ||||
|         self._add_db_signal('person-update', self.check_for_change) | ||||
|         self._add_db_signal('person-delete', self.check_for_change) | ||||
|         self._add_db_signal('person-rebuild', self.reload_people) | ||||
|          | ||||
|         self.show() | ||||
|         self.load_data() | ||||
|  | ||||
|     def check_for_change(self,handles): | ||||
|         for node in handles: | ||||
| @@ -246,27 +237,22 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|                 break; | ||||
|  | ||||
|     def reload_people(self): | ||||
|         fhandle = self.family.get_father_handle() | ||||
|         fhandle = self.obj.get_father_handle() | ||||
|         self.update_father(fhandle) | ||||
|  | ||||
|         mhandle = self.family.get_mother_handle() | ||||
|         mhandle = self.obj.get_mother_handle() | ||||
|         self.update_mother(mhandle) | ||||
|         self.child_list.rebuild() | ||||
|  | ||||
|     def build_menu_names(self,obj): | ||||
|         return ('Edit Family','Undefined Submenu') | ||||
|  | ||||
|     def build_window_key(self,obj): | ||||
|         if self.family.handle: | ||||
|             return id(self.family.handle) | ||||
|         else: | ||||
|             return id(self) | ||||
|  | ||||
|     def build_interface(self): | ||||
|  | ||||
|         self.top = gtk.glade.XML(const.gladeFile,"marriageEditor","gramps") | ||||
|         self.gladeif = GladeIf(self.top) | ||||
|         self.window = self.top.get_widget("marriageEditor") | ||||
|         self.top = gtk.glade.XML(const.gladeFile,"family_editor","gramps") | ||||
|  | ||||
|         self.define_top_level(self.top.get_widget("family_editor"), | ||||
|                               None,_('Family Editor')) | ||||
|  | ||||
|         self.fbirth = self.top.get_widget('fbirth') | ||||
|         self.fdeath = self.top.get_widget('fdeath') | ||||
| @@ -280,83 +266,79 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|         self.mbox   = self.top.get_widget('mbox') | ||||
|         self.fbox   = self.top.get_widget('fbox') | ||||
|  | ||||
|         self.ok     = self.top.get_widget('ok') | ||||
|         self.cancel = self.top.get_widget('cancel') | ||||
|  | ||||
|         self.vbox   = self.top.get_widget('vbox') | ||||
|         self.child_list = self.top.get_widget('child_list') | ||||
|  | ||||
|         self.notebook = gtk.Notebook() | ||||
|         self.notebook.show() | ||||
|         self.vbox.pack_start(self.notebook,True) | ||||
|     def _connect_signals(self): | ||||
|         self.define_ok_button(self.top.get_widget('ok'), self.save) | ||||
|         self.define_cancel_button(self.top.get_widget('cancel')) | ||||
|  | ||||
|         self._setup_monitored_values() | ||||
|  | ||||
|         self.cancel.connect('clicked', self.close_window) | ||||
|         self.ok.connect('clicked', self.apply_changes) | ||||
|  | ||||
|     def _setup_monitored_values(self): | ||||
|         self.private= GrampsWidgets.PrivacyButton(self.top.get_widget('private'), | ||||
|                                                   self.family) | ||||
|  | ||||
|         self.gid = GrampsWidgets.MonitoredEntry(self.top.get_widget('gid'), | ||||
|                                                 self.family.set_gramps_id, | ||||
|                                                 self.family.get_gramps_id) | ||||
|     def _setup_fields(self): | ||||
|          | ||||
|         self.data_type = GrampsWidgets.MonitoredType( | ||||
|             self.top.get_widget('marriage_type'), self.family.set_relationship, | ||||
|             self.family.get_relationship, dict(Utils.family_relations), | ||||
|         self.private= PrivacyButton( | ||||
|             self.top.get_widget('private'), | ||||
|             self.obj, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.gid = MonitoredEntry( | ||||
|             self.top.get_widget('gid'), | ||||
|             self.obj.set_gramps_id, | ||||
|             self.obj.get_gramps_id, | ||||
|             self.db.readonly) | ||||
|          | ||||
|         self.data_type = MonitoredType( | ||||
|             self.top.get_widget('marriage_type'), | ||||
|             self.obj.set_relationship, | ||||
|             self.obj.get_relationship, | ||||
|             dict(Utils.family_relations), | ||||
|             RelLib.Family.CUSTOM) | ||||
|  | ||||
|     def load_data(self): | ||||
|         fhandle = self.family.get_father_handle() | ||||
|         fhandle = self.obj.get_father_handle() | ||||
|         self.update_father(fhandle) | ||||
|  | ||||
|         mhandle = self.family.get_mother_handle() | ||||
|         mhandle = self.obj.get_mother_handle() | ||||
|         self.update_mother(mhandle) | ||||
|  | ||||
|         self.phandles = [mhandle, fhandle] + self.family.get_child_handle_list() | ||||
|         self.phandles = [mhandle, fhandle] + self.obj.get_child_handle_list() | ||||
|         self.phandles = [handle for handle in self.phandles if handle] | ||||
|  | ||||
|         self.mbutton.connect('clicked',self.mother_clicked) | ||||
|         self.fbutton.connect('clicked',self.father_clicked) | ||||
|  | ||||
|         self.child_list = ChildEmbedList(self.dbstate,self.uistate, | ||||
|                                          self.track, self.family) | ||||
|         self.event_list = EventEmbedList(self.dbstate,self.uistate, | ||||
|                                          self.track,self.family) | ||||
|         self.src_list = SourceEmbedList(self.dbstate,self.uistate, | ||||
|                                         self.track,self.family.source_list) | ||||
|         self.attr_list = AttrEmbedList(self.dbstate, self.uistate, self.track, | ||||
|                                        self.family.get_attribute_list()) | ||||
|         self.note_tab = NoteTab(self.dbstate, self.uistate, self.track, | ||||
|                                 self.family.get_note_object()) | ||||
|         self.gallery_tab = GalleryTab(self.dbstate, self.uistate, self.track, | ||||
|                                       self.family.get_media_list()) | ||||
|     def _create_tabbed_pages(self): | ||||
|  | ||||
|         self.notebook.insert_page(self.child_list) | ||||
|         self.notebook.set_tab_label(self.child_list, | ||||
|                                     self.child_list.get_tab_widget()) | ||||
|         notebook = gtk.Notebook() | ||||
|  | ||||
|         self.notebook.insert_page(self.event_list) | ||||
|         self.notebook.set_tab_label(self.event_list, | ||||
|                                     self.event_list.get_tab_widget()) | ||||
|         self.child_list = self._add_tab( | ||||
|             notebook, | ||||
|             ChildEmbedList(self.dbstate,self.uistate, self.track, self.obj)) | ||||
|          | ||||
|         self.event_list = self._add_tab( | ||||
|             notebook, | ||||
|             EventEmbedList(self.dbstate,self.uistate, self.track,self.obj)) | ||||
|              | ||||
|         self.src_list = self._add_tab( | ||||
|             notebook, | ||||
|             SourceEmbedList(self.dbstate,self.uistate, | ||||
|                             self.track,self.obj.source_list)) | ||||
|              | ||||
|         self.attr_list = self._add_tab( | ||||
|             notebook, | ||||
|             AttrEmbedList(self.dbstate, self.uistate, self.track, | ||||
|                           self.obj.get_attribute_list())) | ||||
|              | ||||
|         self.note_tab = self._add_tab( | ||||
|             notebook, | ||||
|             NoteTab(self.dbstate, self.uistate, self.track, | ||||
|                     self.obj.get_note_object())) | ||||
|              | ||||
|         self.gallery_tab = self._add_tab( | ||||
|             notebook, | ||||
|             GalleryTab(self.dbstate, self.uistate, self.track, | ||||
|                        self.obj.get_media_list())) | ||||
|  | ||||
|         self.notebook.insert_page(self.src_list) | ||||
|         self.notebook.set_tab_label(self.src_list, | ||||
|                                     self.src_list.get_tab_widget()) | ||||
|  | ||||
|         self.notebook.insert_page(self.attr_list) | ||||
|         self.notebook.set_tab_label(self.attr_list, | ||||
|                                     self.attr_list.get_tab_widget()) | ||||
|  | ||||
|         self.notebook.insert_page(self.note_tab) | ||||
|         self.notebook.set_tab_label(self.note_tab, | ||||
|                                     self.note_tab.get_tab_widget()) | ||||
|  | ||||
|         self.notebook.insert_page(self.gallery_tab) | ||||
|         self.notebook.set_tab_label(self.gallery_tab, | ||||
|                                     self.gallery_tab.get_tab_widget()) | ||||
|         notebook.show_all() | ||||
|         self.top.get_widget('vbox').pack_start(notebook,True) | ||||
|  | ||||
|     def update_father(self,handle): | ||||
|         self.load_parent(handle, self.fbox, self.fbirth, | ||||
| @@ -370,7 +352,7 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|         if obj.__class__ == RelLib.Person: | ||||
|             try: | ||||
|                 person = obj | ||||
|                 self.family.set_mother_handle(person.get_handle())  | ||||
|                 self.obj.set_mother_handle(person.get_handle())  | ||||
|                 self.update_mother(person.get_handle())                     | ||||
|             except: | ||||
|                 log.warn( | ||||
| @@ -388,21 +370,21 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|  | ||||
|              | ||||
|     def mother_clicked(self,obj): | ||||
|         handle = self.family.get_mother_handle() | ||||
|         handle = self.obj.get_mother_handle() | ||||
|         if handle: | ||||
|             self.family.set_mother_handle(None) | ||||
|             self.obj.set_mother_handle(None) | ||||
|             self.update_mother(None) | ||||
|         else: | ||||
|             filter_spec = PersonFilterSpec() | ||||
|             filter_spec.set_gender(RelLib.Person.FEMALE) | ||||
|              | ||||
|             child_birth_years = [] | ||||
|             for person_handle in self.family.get_child_handle_list(): | ||||
|                 person = self.dbstate.db.get_person_from_handle(person_handle) | ||||
|             for person_handle in self.obj.get_child_handle_list(): | ||||
|                 person = self.db.get_person_from_handle(person_handle) | ||||
|                 event_ref = person.get_birth_ref() | ||||
|                 event_handle = event_ref.ref | ||||
|                 if event_handle: | ||||
|                     event = self.dbstate.db.get_event_from_handle(event_handle) | ||||
|                     event = self.db.get_event_from_handle(event_handle) | ||||
|                     child_birth_years.append(event.get_date_object().get_year()) | ||||
|                      | ||||
|             if len(child_birth_years) > 0: | ||||
| @@ -419,7 +401,7 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|         if  obj.__class__ == RelLib.Person: | ||||
|             try: | ||||
|                 person = obj | ||||
|                 self.family.set_father_handle(person.get_handle())  | ||||
|                 self.obj.set_father_handle(person.get_handle())  | ||||
|                 self.update_father(person.get_handle())                     | ||||
|             except: | ||||
|                 log.warn("Failed to update father: \n" | ||||
| @@ -436,21 +418,21 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|         selector_window.close() | ||||
|  | ||||
|     def father_clicked(self,obj): | ||||
|         handle = self.family.get_father_handle() | ||||
|         handle = self.obj.get_father_handle() | ||||
|         if handle: | ||||
|             self.family.set_father_handle(None) | ||||
|             self.obj.set_father_handle(None) | ||||
|             self.update_father(None) | ||||
|         else: | ||||
|             filter_spec = PersonFilterSpec() | ||||
|             filter_spec.set_gender(RelLib.Person.MALE) | ||||
|  | ||||
|             child_birth_years = [] | ||||
|             for person_handle in self.family.get_child_handle_list(): | ||||
|                 person = self.dbstate.db.get_person_from_handle(person_handle) | ||||
|             for person_handle in self.obj.get_child_handle_list(): | ||||
|                 person = self.db.get_person_from_handle(person_handle) | ||||
|                 event_ref = person.get_birth_ref() | ||||
|                 event_handle = event_ref.ref | ||||
|                 if event_handle: | ||||
|                     event = self.dbstate.db.get_event_from_handle(event_handle) | ||||
|                     event = self.db.get_event_from_handle(event_handle) | ||||
|                     child_birth_years.append(event.get_date_object().get_year()) | ||||
|                      | ||||
|             if len(child_birth_years) > 0: | ||||
| @@ -465,9 +447,12 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|     def edit_person(self,obj,event,handle): | ||||
|         if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: | ||||
|             import EditPerson | ||||
|             person = self.dbstate.db.get_person_from_handle(handle) | ||||
|             EditPerson.EditPerson(self.dbstate, self.uistate, | ||||
|                                   self.track, person) | ||||
|             try: | ||||
|                 person = self.db.get_person_from_handle(handle) | ||||
|                 EditPerson.EditPerson(self.dbstate, self.uistate, | ||||
|                                       self.track, person) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def load_parent(self,handle,box,birth_obj,death_obj,btn_obj): | ||||
|  | ||||
| @@ -479,7 +464,7 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|         btn_obj.remove(btn_obj.get_children()[0]) | ||||
|          | ||||
|         if is_used: | ||||
|             db = self.dbstate.db | ||||
|             db = self.db | ||||
|             person = db.get_person_from_handle(handle) | ||||
|             name = "%s [%s]" % (NameDisplay.displayer.display(person), | ||||
|                                 person.gramps_id) | ||||
| @@ -492,9 +477,9 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|             del_image.set_from_stock(gtk.STOCK_REMOVE,gtk.ICON_SIZE_BUTTON) | ||||
|             btn_obj.add(del_image) | ||||
|  | ||||
|             box.pack_start(GrampsWidgets.LinkBox( | ||||
|                 GrampsWidgets.BasicLabel(name), | ||||
|                 GrampsWidgets.IconButton(self.edit_person,person.handle) | ||||
|             box.pack_start(LinkBox( | ||||
|                 BasicLabel(name), | ||||
|                 IconButton(self.edit_person,person.handle) | ||||
|                 )) | ||||
|         else: | ||||
|             name = "" | ||||
| @@ -512,54 +497,49 @@ class EditFamily(DisplayState.ManagedWindow): | ||||
|     def fix_parent_handles(self,orig_handle, new_handle, trans): | ||||
|         if orig_handle != new_handle: | ||||
|             if orig_handle: | ||||
|                 person = self.dbstate.db.get_person_from_handle(orig_handle) | ||||
|                 person.family_list.remove(self.family.handle) | ||||
|                 self.dbstate.db.commit_person(person,trans) | ||||
|                 person = self.db.get_person_from_handle(orig_handle) | ||||
|                 person.family_list.remove(self.obj.handle) | ||||
|                 self.db.commit_person(person,trans) | ||||
|             if new_handle: | ||||
|                 person = self.dbstate.db.get_person_from_handle(orig_handle) | ||||
|                 if self.family.handle not in self.person.family_list: | ||||
|                     person.family_list.append(self.family.handle) | ||||
|                 self.dbstate.db.commit_person(person,trans) | ||||
|                 person = self.db.get_person_from_handle(orig_handle) | ||||
|                 if self.obj.handle not in self.obj.family_list: | ||||
|                     person.family_list.append(self.obj.handle) | ||||
|                 self.db.commit_person(person,trans) | ||||
|  | ||||
|     def apply_changes(self,obj): | ||||
|         if self.family.handle: | ||||
|             original = self.dbstate.db.get_family_from_handle(self.family.handle) | ||||
|     def save(self,obj): | ||||
|         if self.obj.handle: | ||||
|             original = self.db.get_family_from_handle(self.obj.handle) | ||||
|         else: | ||||
|             original = None | ||||
|  | ||||
|         if not original: | ||||
|             trans = self.dbstate.db.transaction_begin() | ||||
|             self.dbstate.db.add_family(self.family,trans) | ||||
|             self.dbstate.db.transaction_commit(trans,_("Edit Family")) | ||||
|         elif cmp(original.serialize(),self.family.serialize()): | ||||
|             trans = self.db.transaction_begin() | ||||
|             self.db.add_family(self.obj,trans) | ||||
|             self.db.transaction_commit(trans,_("Edit Family")) | ||||
|         elif cmp(original.serialize(),self.obj.serialize()): | ||||
|  | ||||
|             trans = self.dbstate.db.transaction_begin() | ||||
|             trans = self.db.transaction_begin() | ||||
|  | ||||
|             self.fix_parent_handles(original.get_father_handle(), | ||||
|                                     self.family.get_father_handle(),trans) | ||||
|                                     self.obj.get_father_handle(),trans) | ||||
|             self.fix_parent_handles(original.get_mother_handle(), | ||||
|                                     self.family.get_mother_handle(),trans) | ||||
|                                     self.obj.get_mother_handle(),trans) | ||||
|  | ||||
|             orig_set = set(original.get_child_handle_list()) | ||||
|             new_set = set(self.family.get_child_handle_list()) | ||||
|             new_set = set(self.obj.get_child_handle_list()) | ||||
|  | ||||
|             # remove the family from children which have been removed | ||||
|             for handle in orig_set.difference(new_set): | ||||
|                 person = self.dbstate.db.get_person_from_handle(handle) | ||||
|                 person.remove_parent_family_handle(self.family.handle) | ||||
|                 self.dbstate.db.commit_person(person,trans) | ||||
|                 person = self.db.get_person_from_handle(handle) | ||||
|                 person.remove_parent_family_handle(self.obj.handle) | ||||
|                 self.db.commit_person(person,trans) | ||||
|              | ||||
|             # add the family from children which have been removed | ||||
|             for handle in new_set.difference(orig_set): | ||||
|                 person = self.dbstate.db.get_person_from_handle(handle) | ||||
|                 #person.remove_parent_family_handle(self.family.handle) | ||||
|                 #self.dbstate.db.commit_person(person,trans) | ||||
|                 person = self.db.get_person_from_handle(handle) | ||||
|                 #person.remove_parent_family_handle(self.obj.handle) | ||||
|                 #self.db.commit_person(person,trans) | ||||
|  | ||||
|             self.dbstate.db.commit_family(self.family,trans) | ||||
|             self.dbstate.db.transaction_commit(trans,_("Edit Family")) | ||||
|             self.db.commit_family(self.obj,trans) | ||||
|             self.db.transaction_commit(trans,_("Edit Family")) | ||||
|         self.close_window() | ||||
|  | ||||
|     def close_window(self,*obj): | ||||
|         for key in self.signal_keys: | ||||
|             self.dbstate.db.disconnect(key) | ||||
|         self.close() | ||||
|   | ||||
| @@ -46,174 +46,130 @@ import const | ||||
| import Utils | ||||
| import RelLib | ||||
| import GrampsMime | ||||
| import DateEdit | ||||
| import DateHandler | ||||
| import ImgManip | ||||
| import DisplayState | ||||
| import GrampsDisplay | ||||
| import EditPrimary | ||||
|  | ||||
| from GrampsWidgets import * | ||||
| from QuestionDialog import ErrorDialog | ||||
| from DdTargets import DdTargets | ||||
| from WindowUtils import GladeIf | ||||
| from DisplayTabs import * | ||||
|  | ||||
| _drag_targets = [ | ||||
|     ('STRING', 0, 0), | ||||
|     ('text/plain',0,0), | ||||
|     ('text/uri-list',0,2), | ||||
|     ('application/x-rootwin-drop',0,1)] | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # EditMedia | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| class EditMedia(DisplayState.ManagedWindow): | ||||
| class EditMedia(EditPrimary.EditPrimary): | ||||
|  | ||||
|     def __init__(self,state,uistate,track,obj): | ||||
|         self.dp = DateHandler.parser | ||||
|         self.dd = DateHandler.displayer | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, obj) | ||||
|         EditPrimary.EditPrimary.__init__(self, state, uistate, track, obj, | ||||
|                                          state.db.get_object_from_handle) | ||||
|  | ||||
|         if self.already_exist: | ||||
|             return | ||||
|     def _local_init(self): | ||||
|         assert(self.obj) | ||||
|         self.glade = gtk.glade.XML(const.gladeFile, | ||||
|                                    "change_global","gramps") | ||||
|         self.define_top_level(self.glade.get_widget('change_global'), | ||||
|                               self.glade.get_widget('title'),      | ||||
|                               _('Media Properties Editor')) | ||||
|  | ||||
|         self.state = state | ||||
|     def _connect_signals(self): | ||||
|         self.define_cancel_button(self.glade.get_widget('button91')) | ||||
|         self.define_ok_button(self.glade.get_widget('ok'),self.save) | ||||
|         self.define_help_button(self.glade.get_widget('button102'),'adv-media') | ||||
|  | ||||
|         self.pdmap = {} | ||||
|         self.obj = obj | ||||
|         self.lists_changed = 0 | ||||
|         self.db = self.state.db | ||||
|         self.idle = None | ||||
|         if obj: | ||||
|             self.date_object = RelLib.Date(self.obj.get_date_object()) | ||||
|             self.alist = self.obj.get_attribute_list()[:] | ||||
|             self.refs = 0 | ||||
|         else: | ||||
|             self.date_object = RelLib.Date() | ||||
|             self.alist = [] | ||||
|             self.refs = 1 | ||||
|     def _setup_fields(self): | ||||
|         self.date_field = MonitoredDate( | ||||
|             self.glade.get_widget('date'), | ||||
|             self.glade.get_widget("date_edit"), | ||||
|             self.obj.get_date_object(), | ||||
|             self.window, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.refmodel = None # this becomes the model for the references | ||||
|         self.descr_window = MonitoredEntry( | ||||
|             self.glade.get_widget("description"), | ||||
|             self.obj.set_description, | ||||
|             self.obj.get_description, | ||||
|             self.db.readonly) | ||||
|          | ||||
|         self.path = self.db.get_save_path() | ||||
|         self.change_dialog = gtk.glade.XML(const.gladeFile, | ||||
|                                            "change_global","gramps") | ||||
|         self.gladeif = GladeIf(self.change_dialog) | ||||
|         self.gid = MonitoredEntry( | ||||
|             self.glade.get_widget("gid"), | ||||
|             self.obj.set_gramps_id, | ||||
|             self.obj.get_gramps_id, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         mode = not self.db.readonly | ||||
|          | ||||
|         title = _('Media Properties Editor') | ||||
|  | ||||
|         self.window = self.change_dialog.get_widget('change_global') | ||||
|                              | ||||
|         self.date_entry = self.change_dialog.get_widget('date') | ||||
|         self.date_entry.set_editable(mode) | ||||
|          | ||||
|         if self.obj: | ||||
|             self.date_entry.set_text(self.dd.display(self.date_object)) | ||||
|          | ||||
|         Utils.set_titles(self.window, | ||||
|                          self.change_dialog.get_widget('title'),title) | ||||
|          | ||||
|         self.descr_window = self.change_dialog.get_widget("description") | ||||
|         self.descr_window.set_editable(mode) | ||||
|         self.descr_window.set_text(self.obj.get_description()) | ||||
|          | ||||
|         self.date_edit = self.change_dialog.get_widget("date_edit") | ||||
|         self.date_edit.set_sensitive(mode) | ||||
|          | ||||
|         self.date_check = DateEdit.DateEdit( | ||||
|             self.date_object, self.date_entry, | ||||
|             self.date_edit, self.window) | ||||
|          | ||||
|         self.pixmap = self.change_dialog.get_widget("pixmap") | ||||
|         pixmap = self.glade.get_widget("pixmap") | ||||
|          | ||||
|         mtype = self.obj.get_mime_type() | ||||
|         if mtype: | ||||
|             pb = ImgManip.get_thumbnail_image(self.obj.get_path(),mtype) | ||||
|             self.pixmap.set_from_pixbuf(pb) | ||||
|             pixmap.set_from_pixbuf(pb) | ||||
|             descr = GrampsMime.get_description(mtype) | ||||
|             if descr: | ||||
|                 self.change_dialog.get_widget("type").set_text(descr) | ||||
|                 self.glade.get_widget("type").set_text(descr) | ||||
|         else: | ||||
|             pb = GrampsMime.find_mime_type_pixbuf('text/plain') | ||||
|             self.pixmap.set_from_pixbuf(pb) | ||||
|             self.change_dialog.get_widget("type").set_text(_('Note')) | ||||
|  | ||||
|         self.change_dialog.get_widget("gid").set_text(self.obj.get_gramps_id()) | ||||
|             pixmap.set_from_pixbuf(pb) | ||||
|             self.glade.get_widget("type").set_text(_('Note')) | ||||
|  | ||||
|         self.setup_filepath() | ||||
|          | ||||
|         self.gladeif.connect('change_global','delete_event', | ||||
|                              self.on_delete_event) | ||||
|         self.gladeif.connect('button91','clicked',self.close_window) | ||||
|         self.gladeif.connect('ok','clicked',self.on_ok_clicked) | ||||
|         self.gladeif.connect('button102','clicked',self.on_help_clicked) | ||||
|  | ||||
|         self._create_tabbed_windows() | ||||
|  | ||||
|         self.show() | ||||
|  | ||||
|     def _create_tabbed_windows(self): | ||||
|         self.vbox = self.change_dialog.get_widget('vbox') | ||||
|         self.notebook = gtk.Notebook() | ||||
|         self.notebook.show() | ||||
|         self.vbox.pack_start(self.notebook,True) | ||||
|  | ||||
|         self.attr_list = AttrEmbedList(self.state, self.uistate, self.track, | ||||
|                                        self.obj.get_attribute_list()) | ||||
|         self.note_tab = NoteTab(self.state, self.uistate, self.track, | ||||
|                                 self.obj.get_note_object()) | ||||
|         self.src_list = SourceEmbedList(self.state,self.uistate, | ||||
|                                         self.track,self.obj.source_list) | ||||
|     def _create_tabbed_pages(self): | ||||
|         notebook = gtk.Notebook() | ||||
|  | ||||
|         if self.obj.get_mime_type(): | ||||
|             self.notebook.insert_page(self.src_list) | ||||
|             self.notebook.insert_page(self.attr_list) | ||||
|             self.notebook.insert_page(self.note_tab) | ||||
|             self.src_list = self._add_tab( | ||||
|                 notebook, | ||||
|                 SourceEmbedList(self.dbstate,self.uistate, | ||||
|                                 self.track,self.obj.source_list)) | ||||
|              | ||||
|             self.attr_list = self._add_tab( | ||||
|                 notebook, | ||||
|                 AttrEmbedList(self.dbstate, self.uistate, self.track, | ||||
|                               self.obj.get_attribute_list())) | ||||
|              | ||||
|             self.note_tab = self._add_tab( | ||||
|                 notebook, | ||||
|                 NoteTab(self.dbstate, self.uistate, self.track, | ||||
|                         self.obj.get_note_object())) | ||||
|         else: | ||||
|             self.notebook.insert_page(self.note_tab) | ||||
|             self.notebook.insert_page(self.src_list) | ||||
|             self.notebook.insert_page(self.attr_list) | ||||
|             self.note_tab = self._add_tab( | ||||
|                 notebook, | ||||
|                 NoteTab(self.dbstate, self.uistate, self.track, | ||||
|                         self.obj.get_note_object())) | ||||
|  | ||||
|         self.notebook.set_tab_label(self.src_list,self.src_list.get_tab_widget()) | ||||
|         self.notebook.set_tab_label(self.note_tab,self.note_tab.get_tab_widget()) | ||||
|         self.notebook.set_tab_label(self.attr_list,self.attr_list.get_tab_widget()) | ||||
|             self.src_list = self._add_tab( | ||||
|                 notebook, | ||||
|                 SourceEmbedList(self.dbstate,self.uistate, | ||||
|                                 self.track,self.obj.source_list)) | ||||
|              | ||||
|             self.attr_list = self._add_tab( | ||||
|                 notebook, | ||||
|                 AttrEmbedList(self.dbstate, self.uistate, self.track, | ||||
|                               self.obj.get_attribute_list())) | ||||
|  | ||||
|         self.backref_list = self._add_page(MediaBackRefList( | ||||
|             self.state,self.uistate,self.track, | ||||
|             self.db.find_backlink_handles(self.obj.handle))) | ||||
|         self.backref_list = self._add_tab( | ||||
|             notebook, | ||||
|             MediaBackRefList(self.dbstate,self.uistate,self.track, | ||||
|                              self.db.find_backlink_handles(self.obj.handle))) | ||||
|  | ||||
|     def _add_page(self,page): | ||||
|         self.notebook.insert_page(page) | ||||
|         self.notebook.set_tab_label(page,page.get_tab_widget()) | ||||
|         return page | ||||
|         notebook.show_all() | ||||
|         self.glade.get_widget('vbox').pack_start(notebook,True) | ||||
|  | ||||
|     def build_menu_names(self,person): | ||||
|         win_menu_label = _("Media Properties") | ||||
|         return (_('Edit Media Object'),win_menu_label) | ||||
|  | ||||
|     def build_window_key(self,person): | ||||
|         if person: | ||||
|             return person.get_handle() | ||||
|         else: | ||||
|             return id(self) | ||||
|  | ||||
|     def on_delete_event(self,obj,b): | ||||
|         self.close() | ||||
|  | ||||
|     def select_file(self,obj): | ||||
|         f = gtk.FileChooserDialog(_('Select Media Object'), | ||||
|                                   action=gtk.FILE_CHOOSER_ACTION_OPEN, | ||||
|                                   buttons=(gtk.STOCK_CANCEL, | ||||
|                                            gtk.RESPONSE_CANCEL, | ||||
|                                            gtk.STOCK_OPEN, | ||||
|                                            gtk.RESPONSE_OK)) | ||||
|         f = gtk.FileChooserDialog( | ||||
|             _('Select Media Object'), | ||||
|             action=gtk.FILE_CHOOSER_ACTION_OPEN, | ||||
|             buttons=(gtk.STOCK_CANCEL, | ||||
|                      gtk.RESPONSE_CANCEL, | ||||
|                      gtk.STOCK_OPEN, | ||||
|                      gtk.RESPONSE_OK)) | ||||
|  | ||||
|         text = self.file_path.get_text() | ||||
|         name = os.path.basename(text) | ||||
|         path = os.path.dirname(text) | ||||
|  | ||||
|         f.set_filename(path) | ||||
| @@ -223,48 +179,31 @@ class EditMedia(DisplayState.ManagedWindow): | ||||
|             self.file_path.set_text(f.get_filename()) | ||||
|         f.destroy() | ||||
|          | ||||
|     def close_window(self,obj): | ||||
|         if self.idle != None: | ||||
|             gobject.source_remove(self.idle) | ||||
|         self.close() | ||||
|  | ||||
|     def setup_filepath(self): | ||||
|         self.select = self.change_dialog.get_widget('file_select') | ||||
|         self.file_path = self.change_dialog.get_widget("path") | ||||
|         self.select = self.glade.get_widget('file_select') | ||||
|         self.file_path = self.glade.get_widget("path") | ||||
|          | ||||
|         if self.obj.get_mime_type(): | ||||
|             fname = self.obj.get_path() | ||||
|             self.file_path.set_text(fname) | ||||
|             self.select.connect('clicked', self.select_file) | ||||
|         else: | ||||
|             self.change_dialog.get_widget('path_label').hide() | ||||
|             self.glade.get_widget('path_label').hide() | ||||
|             self.file_path.hide() | ||||
|             self.select.hide() | ||||
|              | ||||
|     def on_apply_clicked(self, obj): | ||||
|         desc = unicode(self.descr_window.get_text()) | ||||
|         note = self.obj.get_note() | ||||
|         path = self.change_dialog.get_widget('path').get_text() | ||||
|     def save(self, *obj): | ||||
|         path = self.glade.get_widget('path').get_text() | ||||
|  | ||||
|         if path != self.obj.get_path(): | ||||
|             mime = GrampsMime.get_type(path) | ||||
|             self.obj.set_mime_type(mime) | ||||
|         self.obj.set_path(path) | ||||
|  | ||||
|         if not self.date_object.is_equal(self.obj.get_date_object()): | ||||
|             self.obj.set_date_object(self.date_object) | ||||
|  | ||||
|         trans = self.db.transaction_begin() | ||||
|         self.db.commit_media_object(self.obj,trans) | ||||
|         self.db.transaction_commit(trans,_("Edit Media Object")) | ||||
|  | ||||
|     def on_help_clicked(self, obj): | ||||
|         """Display the relevant portion of GRAMPS manual""" | ||||
|         GrampsDisplay.help('adv-media') | ||||
|          | ||||
|     def on_ok_clicked(self, obj): | ||||
|         self.on_apply_clicked(obj) | ||||
|         self.close(obj) | ||||
|         self.close_window() | ||||
|  | ||||
| class DeleteMediaQuery: | ||||
|  | ||||
| @@ -319,12 +258,3 @@ class DeleteMediaQuery: | ||||
|         self.db.remove_object(self.media_handle,trans) | ||||
|         self.db.transaction_commit(trans,_("Remove Media Object")) | ||||
|  | ||||
| def build_dropdown(entry,strings): | ||||
|     store = gtk.ListStore(str) | ||||
|     for value in strings: | ||||
|         node = store.append() | ||||
|         store.set(node,0,value) | ||||
|     completion = gtk.EntryCompletion() | ||||
|     completion.set_text_column(0) | ||||
|     completion.set_model(store) | ||||
|     entry.set_completion(completion) | ||||
|   | ||||
| @@ -25,7 +25,6 @@ | ||||
| # Standard python modules | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| import urlparse | ||||
| from gettext import gettext as _ | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| @@ -44,22 +43,14 @@ import gtk.glade | ||||
| #------------------------------------------------------------------------- | ||||
| import const | ||||
| import Utils | ||||
| import GrampsKeys | ||||
| import NameDisplay | ||||
| import PluginMgr | ||||
| import RelLib | ||||
| import RelImage | ||||
| import ListModel | ||||
| import GrampsMime | ||||
| import ImgManip | ||||
| import DisplayState | ||||
| import GrampsDisplay | ||||
|  | ||||
| from QuestionDialog import ErrorDialog | ||||
| from DdTargets import DdTargets | ||||
| from WindowUtils import GladeIf | ||||
|  | ||||
| import DisplayState | ||||
| from DisplayTabs import * | ||||
| from GrampsWidgets import * | ||||
|  | ||||
| @@ -80,10 +71,7 @@ class EditMediaRef(DisplayState.ManagedWindow): | ||||
|         self.db = self.state.db | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, media_ref) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         fname = self.media.get_path() | ||||
|         self.change_dialog = gtk.glade.XML(const.gladeFile, | ||||
|                                            "change_description","gramps") | ||||
|  | ||||
| @@ -135,7 +123,7 @@ class EditMediaRef(DisplayState.ManagedWindow): | ||||
|  | ||||
|         self.gladeif = GladeIf(self.change_dialog) | ||||
|         self.window.connect('delete_event',self.on_delete_event) | ||||
|         self.gladeif.connect('button84','clicked',self.close) | ||||
|         self.gladeif.connect('button84','clicked',self.close_window) | ||||
|         self.gladeif.connect('button82','clicked',self.on_ok_clicked) | ||||
|         self.gladeif.connect('button104','clicked',self.on_help_clicked) | ||||
|  | ||||
| @@ -192,10 +180,12 @@ class EditMediaRef(DisplayState.ManagedWindow): | ||||
|  | ||||
|     def on_delete_event(self,obj,b): | ||||
|         self.gladeif.close() | ||||
|         self.close() | ||||
|  | ||||
|     def close(self,obj): | ||||
|     def close_window(self,obj): | ||||
|         self.gladeif.close() | ||||
|         self.window.destroy() | ||||
|         self.close() | ||||
|  | ||||
|     def on_apply_clicked(self): | ||||
|  | ||||
| @@ -226,4 +216,4 @@ class EditMediaRef(DisplayState.ManagedWindow): | ||||
|          | ||||
|     def on_ok_clicked(self,obj): | ||||
|         self.on_apply_clicked() | ||||
|         self.close(obj) | ||||
|         self.close() | ||||
|   | ||||
| @@ -37,7 +37,6 @@ from cgi import escape | ||||
| #------------------------------------------------------------------------- | ||||
| import gtk | ||||
| import gtk.glade | ||||
| import gobject | ||||
| import gtk.gdk | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| @@ -49,7 +48,6 @@ import const | ||||
| import Utils | ||||
| import GrampsKeys | ||||
| import GrampsMime | ||||
| import AutoComp | ||||
| import RelLib | ||||
| import DateHandler | ||||
| import NameDisplay | ||||
| @@ -57,218 +55,201 @@ import NameEdit | ||||
| import DisplayState | ||||
| import GrampsDisplay | ||||
| import GrampsWidgets | ||||
| import EditPrimary | ||||
| from DisplayTabs import * | ||||
|  | ||||
| from WindowUtils import GladeIf | ||||
| from QuestionDialog import WarningDialog, ErrorDialog, SaveDialog, QuestionDialog2 | ||||
| from QuestionDialog import WarningDialog, ErrorDialog, QuestionDialog2 | ||||
| from DdTargets import DdTargets | ||||
|  | ||||
| try: | ||||
|     set() | ||||
| except: | ||||
|     from sets import Set as set | ||||
|      | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # Constants | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
|  | ||||
| _temple_names = const.lds_temple_codes.keys() | ||||
| _temple_names.sort() | ||||
| _temple_names = [""] + _temple_names | ||||
| _select_gender = ((True,False,False),(False,True,False),(False,False,True)) | ||||
| _use_patronymic = [ | ||||
|     "ru","RU","ru_RU","koi8r","ru_koi8r","russian","Russian", | ||||
|     ] | ||||
| _use_patronymic = set(["ru","RU","ru_RU","koi8r","ru_koi8r","russian","Russian"]) | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # EditPerson class | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| class EditPerson(DisplayState.ManagedWindow): | ||||
| class EditPerson(EditPrimary.EditPrimary): | ||||
|  | ||||
|     use_patronymic = locale.getlocale(locale.LC_TIME)[0] in _use_patronymic | ||||
|  | ||||
|     def __init__(self,state,uistate,track,person,callback=None): | ||||
|         """Creates an edit window.  Associates a person with the window.""" | ||||
|  | ||||
|         self.dp = DateHandler.parser | ||||
|         self.dd = DateHandler.displayer | ||||
|         self.nd = NameDisplay.displayer | ||||
|         EditPrimary.EditPrimary.__init__(self, state, uistate, track, | ||||
|                                          person, state.db.get_person_from_handle, | ||||
|                                          callback) | ||||
|  | ||||
|         self.person = person | ||||
|         self.orig_handle = self.person.get_handle() | ||||
|         if self.orig_handle: | ||||
|             self.person = state.db.get_person_from_handle(self.orig_handle) | ||||
|              | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, self.person) | ||||
|  | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         self.dbstate = state | ||||
|         self.uistate = uistate | ||||
|         self.retval = const.UPDATE_PERSON | ||||
|          | ||||
|         self.orig_surname = self.person.get_primary_name().get_group_name() | ||||
|         self.db = self.dbstate.db | ||||
|         self.callback = callback | ||||
|         self.pdmap = {} | ||||
|         self.add_places = [] | ||||
|         self.should_guess_gender = (not person.get_gramps_id() and | ||||
|                                     person.get_gender () == | ||||
|     def _local_init(self): | ||||
|         self.pname = self.obj.get_primary_name() | ||||
|         self.should_guess_gender = (not self.obj.get_gramps_id() and | ||||
|                                     self.obj.get_gender () == | ||||
|                                     RelLib.Person.UNKNOWN) | ||||
|  | ||||
|         for key in self.db.get_place_handles(): | ||||
|             p = self.db.get_place_from_handle(key).get_display_info() | ||||
|             self.pdmap[p[0]] = key | ||||
|  | ||||
|         mod = not self.db.readonly | ||||
|              | ||||
|         self.load_obj = None | ||||
|         self.top = gtk.glade.XML(const.editPersonFile, "edit_person","gramps") | ||||
|         self.window = self.top.get_widget("edit_person") | ||||
|         self.gladeif = GladeIf(self.top) | ||||
|         self.window.set_title("%s - GRAMPS" % _('Edit Person')) | ||||
|         self.define_top_level(self.top.get_widget("edit_person"), None, | ||||
|                               _('Edit Person')) | ||||
|          | ||||
|         self.marker = self.top.get_widget('marker') | ||||
|         self.marker.set_sensitive(mod) | ||||
|         if person: | ||||
|             try: | ||||
|                 defval = person.get_marker()[0] | ||||
|             except: | ||||
|                 defval = (RelLib.PrimaryObject.MARKER_NONE,"") | ||||
|         else: | ||||
|             defval = None | ||||
|         self.marker_type_selector = AutoComp.StandardCustomSelector( | ||||
|             Utils.marker_types, self.marker, | ||||
|             RelLib.PrimaryObject.MARKER_CUSTOM, defval) | ||||
|          | ||||
|         self.gender = self.top.get_widget('gender') | ||||
|         self.gender.set_sensitive(mod) | ||||
|         self.private = GrampsWidgets.PrivacyButton(self.top.get_widget('private'), | ||||
|                                                    self.person) | ||||
|  | ||||
|         self.ntype_field = self.top.get_widget("ntype") | ||||
|         self.ntype_field.set_sensitive(mod) | ||||
|  | ||||
|         self.vbox   = self.top.get_widget('vbox') | ||||
|         self.suffix = self.top.get_widget("suffix") | ||||
|         self.suffix.set_editable(mod) | ||||
|         self.prefix = self.top.get_widget("prefix") | ||||
|         self.prefix.set_editable(mod) | ||||
|         self.given = self.top.get_widget("given_name") | ||||
|         self.given.set_editable(mod) | ||||
|         self.title = self.top.get_widget("title") | ||||
|         self.title.set_editable(mod) | ||||
|         self.surname = self.top.get_widget("surname") | ||||
|         self.surname.set_editable(mod) | ||||
|         self.gid = self.top.get_widget("gid") | ||||
|         self.gid.set_editable(mod) | ||||
|  | ||||
|         self.person_photo = self.top.get_widget("personPix") | ||||
|         self.obj_photo = self.top.get_widget("personPix") | ||||
|         self.eventbox = self.top.get_widget("eventbox1") | ||||
|         self.prefix_label = self.top.get_widget('prefix_label') | ||||
|  | ||||
|         if self.use_patronymic: | ||||
|             self.prefix_label.set_text(_('Patronymic:')) | ||||
|             self.prefix_label.set_use_underline(True) | ||||
|  | ||||
|         self.birth_ref = person.get_birth_ref() | ||||
|         self.death_ref = person.get_death_ref() | ||||
|  | ||||
|         self.pname = RelLib.Name(self.person.get_primary_name()) | ||||
|  | ||||
|         self.gender.set_active(self.person.get_gender()) | ||||
|          | ||||
|         self.place_list = self.pdmap.keys() | ||||
|         self.place_list.sort() | ||||
|  | ||||
|         build_dropdown(self.surname,self.db.get_surname_list()) | ||||
|  | ||||
|         gid = self.person.get_gramps_id() | ||||
|         if gid: | ||||
|             self.gid.set_text(gid) | ||||
|         self.gid.set_editable(True) | ||||
|  | ||||
| #         self.lds_baptism = RelLib.LdsOrd(self.person.get_lds_baptism()) | ||||
| #         self.lds_endowment = RelLib.LdsOrd(self.person.get_lds_endowment()) | ||||
| #         self.lds_sealing = RelLib.LdsOrd(self.person.get_lds_sealing()) | ||||
|  | ||||
| #         if GrampsKeys.get_uselds() \ | ||||
| #                         or (not self.lds_baptism.is_empty()) \ | ||||
| #                         or (not self.lds_endowment.is_empty()) \ | ||||
| #                         or (not self.lds_sealing.is_empty()): | ||||
| #             self.top.get_widget("lds_tab").show() | ||||
| #             self.top.get_widget("lds_page").show() | ||||
| #             if (not self.lds_baptism.is_empty()) \ | ||||
| #                         or (not self.lds_endowment.is_empty()) \ | ||||
| #                         or (not self.lds_sealing.is_empty()): | ||||
| #                 Utils.bold_label(self.lds_tab) | ||||
| #         else: | ||||
| #             self.top.get_widget("lds_tab").hide() | ||||
| #             self.top.get_widget("lds_page").hide() | ||||
|  | ||||
|         self.ntype_selector = \ | ||||
|                            AutoComp.StandardCustomSelector(Utils.name_types, | ||||
|                                                            self.ntype_field, | ||||
|                                                            RelLib.Name.CUSTOM, | ||||
|                                                            RelLib.Name.BIRTH) | ||||
|         self.write_primary_name() | ||||
|     def _post_init(self): | ||||
|         self.load_person_image() | ||||
|          | ||||
|         self.gladeif.connect("edit_person", "delete_event", self.on_delete_event) | ||||
|         self.gladeif.connect("button15", "clicked", self.on_cancel_edit) | ||||
|         self.gladeif.connect("ok", "clicked", self.on_apply_person_clicked) | ||||
|         self.gladeif.connect("button134", "clicked", self.on_help_clicked) | ||||
|         self.gladeif.connect("given_name", "focus_out_event", | ||||
|                              self.on_given_focus_out_event) | ||||
|         self.gladeif.connect("button177", "clicked", self.on_edit_name_clicked) | ||||
|         self.surname_field.grab_focus() | ||||
|  | ||||
|     def _connect_signals(self): | ||||
|         self.define_cancel_button(self.top.get_widget("button15")) | ||||
|         self.define_ok_button(self.top.get_widget("ok"), self.save) | ||||
|         self.define_help_button(self.top.get_widget("button134"),'adv-pers') | ||||
|  | ||||
|         self.top.get_widget("given_name").connect("focus_out_event", | ||||
|                                                   self.given_focus_out_event) | ||||
|         self.top.get_widget("button177").connect("clicked", self.edit_name_clicked) | ||||
|  | ||||
|         self.eventbox.connect('button-press-event',self.image_button_press) | ||||
|  | ||||
|         self._create_tabbed_pages() | ||||
|          | ||||
|         self.surname.grab_focus() | ||||
|         self.show() | ||||
|     def _setup_fields(self): | ||||
|  | ||||
|     def _add_page(self,page): | ||||
|         self.notebook.insert_page(page) | ||||
|         self.notebook.set_tab_label(page,page.get_tab_widget()) | ||||
|         return page | ||||
|         self.private = GrampsWidgets.PrivacyButton( | ||||
|             self.top.get_widget('private'), | ||||
|             self.obj) | ||||
|  | ||||
|         self.gender = GrampsWidgets.MonitoredMenu( | ||||
|             self.top.get_widget('gender'), | ||||
|             self.obj.set_gender, | ||||
|             self.obj.get_gender, | ||||
|             ( | ||||
|             (_('female'),RelLib.Person.FEMALE), | ||||
|             (_('male'),RelLib.Person.MALE), | ||||
|             (_('unknown'),RelLib.Person.UNKNOWN) | ||||
|             ), | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.ntype_field = GrampsWidgets.MonitoredType( | ||||
|             self.top.get_widget("ntype"), | ||||
|             self.pname.set_type, | ||||
|             self.pname.get_type, | ||||
|             dict(Utils.name_types), | ||||
|             RelLib.Name.CUSTOM, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.marker = GrampsWidgets.MonitoredType( | ||||
|             self.top.get_widget('marker'), | ||||
|             self.obj.set_marker, | ||||
|             self.obj.get_marker, | ||||
|             dict(Utils.marker_types), | ||||
|             RelLib.PrimaryObject.MARKER_CUSTOM, | ||||
|             self.db.readonly) | ||||
|          | ||||
|         if self.use_patronymic: | ||||
|             self.prefix = GrampsWidgets.MonitoredEntry( | ||||
|                 self.top.get_widget("prefix"), | ||||
|                 self.pname.set_patronymic, | ||||
|                 self.pname.get_patronymic, | ||||
|                 self.db.readonly) | ||||
|              | ||||
|             prefix_label = self.top.get_widget('prefix_label') | ||||
|             prefix_label.set_text(_('Patronymic:')) | ||||
|             prefix_label.set_use_underline(True) | ||||
|         else: | ||||
|             self.prefix = GrampsWidgets.MonitoredEntry( | ||||
|                 self.top.get_widget("prefix"), | ||||
|                 self.pname.set_surname_prefix, | ||||
|                 self.pname.get_surname_prefix, | ||||
|                 self.db.readonly) | ||||
|  | ||||
|         self.suffix = GrampsWidgets.MonitoredEntry( | ||||
|             self.top.get_widget("suffix"), | ||||
|             self.pname.set_suffix, | ||||
|             self.pname.get_suffix, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.given = GrampsWidgets.MonitoredEntry( | ||||
|             self.top.get_widget("given_name"), | ||||
|             self.pname.set_first_name, | ||||
|             self.pname.get_first_name, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.title = GrampsWidgets.MonitoredEntry( | ||||
|             self.top.get_widget("title"), | ||||
|             self.pname.set_title, | ||||
|             self.pname.get_title, | ||||
|             self.db.readonly) | ||||
|          | ||||
|         self.surname_field = GrampsWidgets.MonitoredEntry( | ||||
|             self.top.get_widget("surname"), | ||||
|             self.pname.set_surname, | ||||
|             self.pname.get_surname, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.gid = GrampsWidgets.MonitoredEntry( | ||||
|             self.top.get_widget("gid"), | ||||
|             self.obj.set_gramps_id, | ||||
|             self.obj.get_gramps_id, | ||||
|             self.db.readonly) | ||||
|  | ||||
|     def _create_tabbed_pages(self): | ||||
|         """ | ||||
|         Creates the notebook tabs and inserts them into the main | ||||
|         window. | ||||
|          | ||||
|         """ | ||||
|         self.notebook = gtk.Notebook() | ||||
|         notebook = gtk.Notebook() | ||||
|  | ||||
|         self.event_list = self._add_page(PersonEventEmbedList( | ||||
|             self.dbstate,self.uistate, self.track,self.person)) | ||||
|         self.event_list = self._add_tab( | ||||
|             notebook, | ||||
|             PersonEventEmbedList(self.dbstate,self.uistate, | ||||
|                                  self.track,self.obj)) | ||||
|          | ||||
|         self.name_list = self._add_page(NameEmbedList( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.person.get_alternate_names())) | ||||
|         self.srcref_list = self._add_page(SourceEmbedList( | ||||
|             self.dbstate,self.uistate, self.track, | ||||
|             self.person.source_list)) | ||||
|         self.attr_list = self._add_page(AttrEmbedList( | ||||
|             self.dbstate,self.uistate,self.track, | ||||
|             self.person.get_attribute_list())) | ||||
|         self.addr_list = self._add_page(AddrEmbedList( | ||||
|             self.dbstate,self.uistate,self.track, | ||||
|             self.person.get_address_list())) | ||||
|         self.note_tab = self._add_page(NoteTab( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.person.get_note_object())) | ||||
|         self.gallery_tab = self._add_page(GalleryTab( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.person.get_media_list())) | ||||
|         self.web_list = self._add_page(WebEmbedList( | ||||
|             self.dbstate,self.uistate,self.track, | ||||
|             self.person.get_url_list())) | ||||
|         self.name_list = self._add_tab( | ||||
|             notebook, | ||||
|             NameEmbedList(self.dbstate, self.uistate, self.track, | ||||
|                           self.obj.get_alternate_names())) | ||||
|          | ||||
|         self.srcref_list = self._add_tab( | ||||
|             notebook, | ||||
|             SourceEmbedList(self.dbstate,self.uistate, | ||||
|                             self.track, self.obj.source_list)) | ||||
|          | ||||
|         self.attr_list = self._add_tab( | ||||
|             notebook, | ||||
|             AttrEmbedList(self.dbstate,self.uistate, self.track, | ||||
|                           self.obj.get_attribute_list())) | ||||
|          | ||||
|         self.addr_list = self._add_tab( | ||||
|             notebook, | ||||
|             AddrEmbedList(self.dbstate,self.uistate,self.track, | ||||
|                           self.obj.get_address_list())) | ||||
|          | ||||
|         self.note_tab = self._add_tab( | ||||
|             notebook, | ||||
|             NoteTab(self.dbstate, self.uistate, self.track, | ||||
|                     self.obj.get_note_object())) | ||||
|          | ||||
|         self.gallery_tab = self._add_tab( | ||||
|             notebook, | ||||
|             GalleryTab(self.dbstate, self.uistate, self.track, | ||||
|                        self.obj.get_media_list())) | ||||
|          | ||||
|         self.web_list = self._add_tab( | ||||
|             notebook, | ||||
|             WebEmbedList(self.dbstate,self.uistate,self.track, | ||||
|                          self.obj.get_url_list())) | ||||
|  | ||||
|         self.notebook.show_all() | ||||
|         self.vbox.pack_start(self.notebook,True) | ||||
|         notebook.show_all() | ||||
|         self.top.get_widget('vbox').pack_start(notebook,True) | ||||
|  | ||||
|     def build_menu_names(self,person): | ||||
|         win_menu_label = self.nd.display(person) | ||||
| @@ -276,31 +257,15 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|             win_menu_label = _("New Person") | ||||
|         return (_('Edit Person'),win_menu_label) | ||||
|  | ||||
|     def build_window_key(self,person): | ||||
|         if person: | ||||
|             return person.get_handle() | ||||
|         else: | ||||
|             return id(self) | ||||
|      | ||||
|     def set_list_dnd(self,obj, get, begin, receive): | ||||
|         obj.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.NAME.target()], | ||||
|                           gtk.gdk.ACTION_COPY) | ||||
|         obj.drag_source_set(gtk.gdk.BUTTON1_MASK,[DdTargets.NAME.target()], | ||||
|                             gtk.gdk.ACTION_COPY) | ||||
|         obj.connect('drag_data_get', get) | ||||
|         obj.connect('drag_begin', begin) | ||||
|         if not self.db.readonly: | ||||
|             obj.connect('drag_data_received', receive) | ||||
|  | ||||
|     def build_pdmap(self): | ||||
|         self.pdmap.clear() | ||||
|         cursor = self.db.get_place_cursor() | ||||
|         data = cursor.next() | ||||
|         while data: | ||||
|             if data[1][2]: | ||||
|                 self.pdmap[data[1][2]] = data[0] | ||||
|             data = cursor.next() | ||||
|         cursor.close() | ||||
| #     def set_list_dnd(self,obj, get, begin, receive): | ||||
| #         obj.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.NAME.target()], | ||||
| #                           gtk.gdk.ACTION_COPY) | ||||
| #         obj.drag_source_set(gtk.gdk.BUTTON1_MASK,[DdTargets.NAME.target()], | ||||
| #                             gtk.gdk.ACTION_COPY) | ||||
| #         obj.connect('drag_data_get', get) | ||||
| #         obj.connect('drag_begin', begin) | ||||
| #         if not self.db.readonly: | ||||
| #             obj.connect('drag_data_received', receive) | ||||
|  | ||||
|     def image_callback(self,ref): | ||||
|         obj = self.db.get_object_from_handle(ref.get_reference_handle()) | ||||
| @@ -309,7 +274,7 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|     def image_button_press(self,obj,event): | ||||
|         if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: | ||||
|  | ||||
|             media_list = self.person.get_media_list() | ||||
|             media_list = self.obj.get_media_list() | ||||
|             if media_list: | ||||
|                 from EditMediaRef import EditMediaRef | ||||
|                  | ||||
| @@ -320,7 +285,7 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|                 EditMediaRef(self.dbstate, self.uistate, self.track, | ||||
|                              media_obj, media_ref, self.image_callback) | ||||
|         elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: | ||||
|             media_list = self.person.get_media_list() | ||||
|             media_list = self.obj.get_media_list() | ||||
|             if media_list: | ||||
|                 ph = media_list[0] | ||||
|                 self.show_popup(ph,event) | ||||
| @@ -347,7 +312,7 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|  | ||||
|     def popup_view_photo(self, obj): | ||||
|         """Open this picture in a picture viewer""" | ||||
|         media_list = self.person.get_media_list() | ||||
|         media_list = self.obj.get_media_list() | ||||
|         if media_list: | ||||
|             ph = media_list[0] | ||||
|             object_handle = ph.get_reference_handle() | ||||
| @@ -355,7 +320,7 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|  | ||||
|     def popup_edit_photo(self, obj): | ||||
|         """Open this picture in a picture editor""" | ||||
|         media_list = self.person.get_media_list() | ||||
|         media_list = self.obj.get_media_list() | ||||
|         if media_list: | ||||
|             ph = media_list[0] | ||||
|             object_handle = ph.get_reference_handle() | ||||
| @@ -364,7 +329,7 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|                 os.execvp(const.editor,[const.editor, obj.get_path()]) | ||||
|  | ||||
|     def popup_change_description(self,obj): | ||||
|         media_list = self.person.get_media_list() | ||||
|         media_list = self.obj.get_media_list() | ||||
|         if media_list: | ||||
|             from EditMediaRef import EditMediaRef | ||||
|              | ||||
| @@ -375,167 +340,17 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|                          media_obj, media_ref, self.image_callback) | ||||
|  | ||||
|  | ||||
|     def on_help_clicked(self,obj): | ||||
|         """Display the relevant portion of GRAMPS manual""" | ||||
|         GrampsDisplay.help('adv-pers') | ||||
|  | ||||
|     def on_gender_activate (self, button): | ||||
|         self.should_guess_gender = False | ||||
|  | ||||
|     def on_given_focus_out_event (self, entry, event): | ||||
|     def given_focus_out_event (self, entry, event): | ||||
|         if not self.should_guess_gender: | ||||
|             return | ||||
|  | ||||
|         gender = self.db.genderStats.guess_gender(unicode(entry.get_text ())) | ||||
|         self.gender.set_active( gender) | ||||
|  | ||||
|     def build_menu(self,list,task,opt_menu,type): | ||||
|         cell = gtk.CellRendererText() | ||||
|         opt_menu.pack_start(cell,True) | ||||
|         opt_menu.add_attribute(cell,'text',0) | ||||
|  | ||||
|         store = gtk.ListStore(str) | ||||
|         for val in list: | ||||
|             store.append(row=[val]) | ||||
|         opt_menu.set_model(store) | ||||
|         opt_menu.connect('changed',task) | ||||
|         opt_menu.set_active(type) | ||||
|  | ||||
|     def on_cancel_edit(self,obj): | ||||
|         """If the data has changed, give the user a chance to cancel | ||||
|         the close window""" | ||||
|          | ||||
|         if not self.db.readonly and self.did_data_change() and not GrampsKeys.get_dont_ask(): | ||||
|             n = "<i>%s</i>" % escape(self.nd.display(self.person)) | ||||
|             SaveDialog(_('Save changes to %s?') % n, | ||||
|                        _('If you close without saving, the changes you ' | ||||
|                          'have made will be lost'), | ||||
|                        self.cancel_callback, | ||||
|                        self.save) | ||||
|         else: | ||||
|             self.close() | ||||
|  | ||||
|     def save(self): | ||||
|         self.on_apply_person_clicked(None) | ||||
|  | ||||
|     def on_delete_event(self,obj,b): | ||||
|         """If the data has changed, give the user a chance to cancel | ||||
|         the close window""" | ||||
|         if not self.db.readonly and self.did_data_change() and not GrampsKeys.get_dont_ask(): | ||||
|             n = "<i>%s</i>" % escape(self.nd.display(self.person)) | ||||
|             SaveDialog(_('Save Changes to %s?') % n, | ||||
|                        _('If you close without saving, the changes you ' | ||||
|                          'have made will be lost'), | ||||
|                        self.cancel_callback, | ||||
|                        self.save) | ||||
|             return True | ||||
|         else: | ||||
|             self.close() | ||||
|             return False | ||||
|  | ||||
|     def cancel_callback(self): | ||||
|         """If the user answered yes to abandoning changes, close the window""" | ||||
|         self.close() | ||||
|  | ||||
|     def did_data_change(self): | ||||
|         """Check to see if any of the data has changed from the | ||||
|         orig record""" | ||||
|  | ||||
|         return False | ||||
|         surname = unicode(self.surname.get_text()) | ||||
|  | ||||
|         ntype = self.ntype_selector.get_values() | ||||
|         suffix = unicode(self.suffix.get_text()) | ||||
|         prefix = unicode(self.prefix.get_text()) | ||||
|         given = unicode(self.given.get_text()) | ||||
|         title = unicode(self.title.get_text()) | ||||
|  | ||||
|         idval = unicode(self.gid.get_text()) | ||||
|         if idval == "": | ||||
|             idval = None | ||||
|  | ||||
|         changed = False | ||||
|         name = self.person.get_primary_name() | ||||
|  | ||||
|         if self.private.get_active() != self.person.get_privacy(): | ||||
|             changed = True | ||||
|  | ||||
|         if self.person.get_gramps_id() != idval: | ||||
|             changed = True | ||||
|         if suffix != name.get_suffix(): | ||||
|             changed = True | ||||
|         if self.use_patronymic: | ||||
|             if prefix != name.get_patronymic(): | ||||
|                 changed = True | ||||
|             elif prefix != name.get_surname_prefix(): | ||||
|                 changed = True | ||||
|         if surname.upper() != name.get_surname().upper(): | ||||
|             changed = True | ||||
|         if ntype != name.get_type(): | ||||
|             changed = True | ||||
|         if given != name.get_first_name(): | ||||
|             changed = True | ||||
|         if title != name.get_title(): | ||||
|             changed = True | ||||
|         if self.pname.get_note() != name.get_note(): | ||||
|             changed = True | ||||
| #        if self.check_lds(): | ||||
| #            changed = True | ||||
|  | ||||
|         (female,male,unknown) = _select_gender[self.gender.get_active()] | ||||
|          | ||||
|         if male and self.person.get_gender() != RelLib.Person.MALE: | ||||
|             changed = True | ||||
|         elif female and self.person.get_gender() != RelLib.Person.FEMALE: | ||||
|             changed = True | ||||
|         elif unknown and self.person.get_gender() != RelLib.Person.UNKNOWN: | ||||
|             changed = True | ||||
|  | ||||
| #       if not self.lds_baptism.are_equal(self.person.get_lds_baptism()): | ||||
| #            changed= True | ||||
|  | ||||
| #       if not self.lds_endowment.are_equal(self.person.get_lds_endowment()): | ||||
| #            changed = True | ||||
|  | ||||
| #       if not self.lds_sealing.are_equal(self.person.get_lds_sealing()): | ||||
| #            changed = True | ||||
|                  | ||||
|         return changed | ||||
|  | ||||
| #     def check_lds(self): | ||||
| #         date_str = unicode(self.ldsbap_date.get_text()) | ||||
| #         DateHandler.set_date(self.lds_baptism,date_str) | ||||
| #         temple = _temple_names[self.ldsbap_temple.get_active()] | ||||
| #         if const.lds_temple_codes.has_key(temple): | ||||
| #             self.lds_baptism.set_temple(const.lds_temple_codes[temple]) | ||||
| #         else: | ||||
| #             self.lds_baptism.set_temple("") | ||||
| #         self.lds_baptism.set_place_handle(self.get_place(self.ldsbapplace,1)) | ||||
|  | ||||
| #         date_str = unicode(self.ldsend_date.get_text()) | ||||
| #         DateHandler.set_date(self.lds_endowment,date_str) | ||||
| #         temple = _temple_names[self.ldsend_temple.get_active()] | ||||
| #         if const.lds_temple_codes.has_key(temple): | ||||
| #             self.lds_endowment.set_temple(const.lds_temple_codes[temple]) | ||||
| #         else: | ||||
| #             self.lds_endowment.set_temple("") | ||||
| #         self.lds_endowment.set_place_handle(self.get_place(self.ldsendowplace,1)) | ||||
|  | ||||
| #         date_str = unicode(self.ldsseal_date.get_text()) | ||||
| #         DateHandler.set_date(self.lds_sealing,date_str) | ||||
| #         temple = _temple_names[self.ldsseal_temple.get_active()] | ||||
| #         if const.lds_temple_codes.has_key(temple): | ||||
| #             self.lds_sealing.set_temple(const.lds_temple_codes[temple]) | ||||
| #         else: | ||||
| #             self.lds_sealing.set_temple("") | ||||
| #         self.lds_sealing.set_family_handle(self.ldsfam) | ||||
| #         self.lds_sealing.set_place_handle(self.get_place(self.ldssealplace,1)) | ||||
|         self.gender.force(self.db.genderStats.guess_gender(self.given.get_value())) | ||||
|  | ||||
|     def load_photo(self,photo): | ||||
|         """loads, scales, and displays the person's main photo""" | ||||
|         self.load_obj = photo | ||||
|         if photo == None: | ||||
|             self.person_photo.hide() | ||||
|             self.obj_photo.hide() | ||||
|         else: | ||||
|             try: | ||||
|                 i = gtk.gdk.pixbuf_new_from_file(photo) | ||||
| @@ -544,13 +359,13 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|                 x = int(scale*(i.get_width())) | ||||
|                 y = int(scale*(i.get_height())) | ||||
|                 i = i.scale_simple(x,y,gtk.gdk.INTERP_BILINEAR) | ||||
|                 self.person_photo.set_from_pixbuf(i) | ||||
|                 self.person_photo.show() | ||||
|                 self.obj_photo.set_from_pixbuf(i) | ||||
|                 self.obj_photo.show() | ||||
|             except: | ||||
|                 self.person_photo.hide() | ||||
|                 self.obj_photo.hide() | ||||
|  | ||||
|     def _check_for_unknown_gender(self): | ||||
|         if self.gender.get_active() == RelLib.Person.UNKNOWN: | ||||
|         if self.obj.get_gender() == RelLib.Person.UNKNOWN: | ||||
|             dialog = QuestionDialog2( | ||||
|                 _("Unknown gender specified"), | ||||
|                 _("The gender of the person is currently unknown. " | ||||
| @@ -564,12 +379,12 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|         return False | ||||
|          | ||||
|     def _check_and_update_id(self): | ||||
|         idval = unicode(self.gid.get_text()) | ||||
|         if idval != self.person.get_gramps_id(): | ||||
|         original = self.db.get_person_from_handle(self.obj.get_handle()) | ||||
|          | ||||
|         if original.get_gramps_id() != self.obj.get_gramps_id(): | ||||
|             idval = self.obj.get_gramps_id() | ||||
|             person = self.db.get_person_from_gramps_id(idval) | ||||
|             if not person: | ||||
|                 self.person.set_gramps_id(idval) | ||||
|             else: | ||||
|             if person: | ||||
|                 n = self.nd.display(person) | ||||
|                 msg1 = _("GRAMPS ID value was not changed.") | ||||
|                 msg2 = _("You have attempted to change the GRAMPS ID to a value " | ||||
| @@ -578,92 +393,56 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|                     'person' : n } | ||||
|                 WarningDialog(msg1,msg2) | ||||
|  | ||||
|     def _update_primary_name(self): | ||||
|         surname = unicode(self.surname.get_text()) | ||||
|         suffix = unicode(self.suffix.get_text()) | ||||
|         prefix = unicode(self.prefix.get_text()) | ||||
|         ntype = self.ntype_selector.get_values() | ||||
|         given = unicode(self.given.get_text()) | ||||
|         title = unicode(self.title.get_text()) | ||||
|          | ||||
|         name = self.pname | ||||
|          | ||||
|         if suffix != name.get_suffix(): | ||||
|             name.set_suffix(suffix) | ||||
|  | ||||
|         if self.use_patronymic: | ||||
|             if prefix != name.get_patronymic(): | ||||
|                 name.set_patronymic(prefix) | ||||
|         else: | ||||
|             if prefix != name.get_surname_prefix(): | ||||
|                 name.set_surname_prefix(prefix) | ||||
|             | ||||
|         if surname != name.get_surname(): | ||||
|             name.set_surname(surname) | ||||
|  | ||||
|         if given != name.get_first_name(): | ||||
|             name.set_first_name(given) | ||||
|  | ||||
|         if title != name.get_title(): | ||||
|             name.set_title(title) | ||||
|  | ||||
|         name.set_source_reference_list(self.pname.get_source_references()) | ||||
|  | ||||
|         if name != self.person.get_primary_name(): | ||||
|             self.person.set_primary_name(name) | ||||
|  | ||||
|  | ||||
|     def _update_family_ids(self, trans): | ||||
|         # Update each of the families child lists to reflect any | ||||
|         # change in ordering due to the new birth date | ||||
|         family = self.person.get_main_parents_family_handle() | ||||
|         family = self.obj.get_main_parents_family_handle() | ||||
|         if (family): | ||||
|             f = self.db.find_family_from_handle(family,trans) | ||||
|             new_order = self.reorder_child_list(self.person,f.get_child_handle_list()) | ||||
|             new_order = self.reorder_child_list(self.obj,f.get_child_handle_list()) | ||||
|             f.set_child_handle_list(new_order) | ||||
|         for (family, rel1, rel2) in self.person.get_parent_family_handle_list(): | ||||
|         for (family, rel1, rel2) in self.obj.get_parent_family_handle_list(): | ||||
|             f = self.db.find_family_from_handle(family,trans) | ||||
|             new_order = self.reorder_child_list(self.person,f.get_child_handle_list()) | ||||
|             new_order = self.reorder_child_list(self.obj,f.get_child_handle_list()) | ||||
|             f.set_child_handle_list(new_order) | ||||
|  | ||||
|         error = False | ||||
|         (female,male,unknown) = _select_gender[self.gender.get_active()] | ||||
|         if male and self.person.get_gender() != RelLib.Person.MALE: | ||||
|             self.person.set_gender(RelLib.Person.MALE) | ||||
|             for temp_family_handle in self.person.get_family_handle_list(): | ||||
|         original = self.db.get_person_from_handle(self.obj.handle) | ||||
|          | ||||
|         (female,male,unknown) = _select_gender[self.obj.get_gender()] | ||||
|         if male and original.get_gender() != RelLib.Person.MALE: | ||||
|             for temp_family_handle in self.obj.get_family_handle_list(): | ||||
|                 temp_family = self.db.get_family_from_handle(temp_family_handle) | ||||
|                 if self.person == temp_family.get_mother_handle(): | ||||
|                 if self.obj == temp_family.get_mother_handle(): | ||||
|                     if temp_family.get_father_handle() != None: | ||||
|                         error = True | ||||
|                     else: | ||||
|                         temp_family.set_mother_handle(None) | ||||
|                         temp_family.set_father_handle(self.person) | ||||
|         elif female and self.person.get_gender() != RelLib.Person.FEMALE: | ||||
|             self.person.set_gender(RelLib.Person.FEMALE) | ||||
|             for temp_family_handle in self.person.get_family_handle_list(): | ||||
|                         temp_family.set_father_handle(self.obj) | ||||
|         elif female and original != RelLib.Person.FEMALE: | ||||
|             for temp_family_handle in self.obj.get_family_handle_list(): | ||||
|                 temp_family = self.db.get_family_from_handle(temp_family_handle) | ||||
|                 if self.person == temp_family.get_father_handle(): | ||||
|                 if self.obj == temp_family.get_father_handle(): | ||||
|                     if temp_family.get_mother_handle() != None: | ||||
|                         error = True | ||||
|                     else: | ||||
|                         temp_family.set_father_handle(None) | ||||
|                         temp_family.set_mother_handle(self.person) | ||||
|         elif unknown and self.person.get_gender() != RelLib.Person.UNKNOWN: | ||||
|             self.person.set_gender(RelLib.Person.UNKNOWN) | ||||
|             for temp_family_handle in self.person.get_family_handle_list(): | ||||
|                         temp_family.set_mother_handle(self.obj) | ||||
|         elif unknown and original.get_gender() != RelLib.Person.UNKNOWN: | ||||
|             for temp_family_handle in self.obj.get_family_handle_list(): | ||||
|                 temp_family = self.db.get_family_from_handle(temp_family_handle) | ||||
|                 if self.person == temp_family.get_father_handle(): | ||||
|                 if self.obj == temp_family.get_father_handle(): | ||||
|                     if temp_family.get_mother_handle() != None: | ||||
|                         error = True | ||||
|                     else: | ||||
|                         temp_family.set_father_handle(None) | ||||
|                         temp_family.set_mother_handle(self.person) | ||||
|                 if self.person == temp_family.get_mother_handle(): | ||||
|                         temp_family.set_mother_handle(self.obj) | ||||
|                 if self.obj == temp_family.get_mother_handle(): | ||||
|                     if temp_family.get_father_handle() != None: | ||||
|                         error = True | ||||
|                     else: | ||||
|                         temp_family.set_mother_handle(None) | ||||
|                         temp_family.set_father_handle(self.person) | ||||
|                         temp_family.set_father_handle(self.obj) | ||||
|  | ||||
|         if error: | ||||
|             msg2 = _("Problem changing the gender") | ||||
| @@ -671,104 +450,47 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|                     "with marriage information.\nPlease check " | ||||
|                     "the person's marriages.") | ||||
|             ErrorDialog(msg) | ||||
|          | ||||
|  | ||||
|     def on_apply_person_clicked(self,obj): | ||||
|     def save(self,*obj): | ||||
|         """ | ||||
|         Save the data. | ||||
|         """ | ||||
|  | ||||
|         if self._check_for_unknown_gender(): | ||||
|             return | ||||
|  | ||||
|  | ||||
|         (br, dr, el) = self.event_list.return_info() | ||||
|         self.person.set_birth_ref(br) | ||||
|         self.person.set_death_ref(dr) | ||||
|         self.person.set_event_ref_list(el) | ||||
|         self.obj.set_birth_ref(br) | ||||
|         self.obj.set_death_ref(dr) | ||||
|         self.obj.set_event_ref_list(el) | ||||
|          | ||||
|         self.window.hide() | ||||
|  | ||||
|         trans = self.db.transaction_begin() | ||||
|  | ||||
|         self._check_and_update_id() | ||||
|         self._update_primary_name() | ||||
|          | ||||
|         self.build_pdmap() | ||||
|  | ||||
|         self._update_family_ids(trans) | ||||
|  | ||||
|         self.person.set_marker(self.marker_type_selector.get_values()) | ||||
|         self.person.set_privacy(self.private.get_active()) | ||||
|  | ||||
| #         if not self.lds_not_loaded: | ||||
| #             self.check_lds() | ||||
| #             lds_ord = RelLib.LdsOrd(self.person.get_lds_baptism()) | ||||
| #             if not self.lds_baptism.are_equal(lds_ord): | ||||
| #                 self.person.set_lds_baptism(self.lds_baptism) | ||||
|  | ||||
| #             lds_ord = RelLib.LdsOrd(self.person.get_lds_endowment()) | ||||
| #             if not self.lds_endowment.are_equal(lds_ord): | ||||
| #                 self.person.set_lds_endowment(self.lds_endowment) | ||||
|  | ||||
| #             lds_ord = RelLib.LdsOrd(self.person.get_lds_sealing()) | ||||
| #             if not self.lds_sealing.are_equal(lds_ord): | ||||
| #                 self.person.set_lds_sealing(self.lds_sealing) | ||||
|  | ||||
| #        self.person.set_source_reference_list(self.srcreflist) | ||||
|  | ||||
|         if not self.person.get_handle(): | ||||
|             self.db.add_person(self.person, trans) | ||||
|         if not self.obj.get_handle(): | ||||
|             self.db.add_person(self.obj, trans) | ||||
|         else: | ||||
|             if not self.person.get_gramps_id(): | ||||
|                 self.person.set_gramps_id(self.db.find_next_person_gramps_id()) | ||||
|             self.db.commit_person(self.person, trans) | ||||
|             if not self.obj.get_gramps_id(): | ||||
|                 self.obj.set_gramps_id(self.db.find_next_person_gramps_id()) | ||||
|             self.db.commit_person(self.obj, trans) | ||||
|  | ||||
|         n = self.nd.display(self.person) | ||||
|  | ||||
|         self.db.transaction_commit(trans,_("Edit Person (%s)") % n) | ||||
|         self.db.transaction_commit(trans,_("Edit Person (%s)") % self.nd.display(self.obj)) | ||||
|         self.close() | ||||
|  | ||||
|     def get_place(self,field,makenew=0): | ||||
|         text = unicode(field.get_text().strip()) | ||||
|         if text: | ||||
|             if self.pdmap.has_key(text): | ||||
|                 return self.pdmap[text] | ||||
|             elif makenew: | ||||
|                 place = RelLib.Place() | ||||
|                 place.set_title(text) | ||||
|                 trans = self.db.transaction_begin() | ||||
|                 self.db.add_place(place,trans) | ||||
|                 self.retval |= const.UPDATE_PLACE | ||||
|                 self.db.transaction_commit(trans,_('Add Place (%s)' % text)) | ||||
|                 self.pdmap[text] = place.get_handle() | ||||
|                 self.add_places.append(place) | ||||
|                 return place.get_handle() | ||||
|             else: | ||||
|                 return u"" | ||||
|         else: | ||||
|             return u"" | ||||
|  | ||||
|     def on_edit_name_clicked(self,obj): | ||||
|         ntype = self.ntype_selector.get_values() | ||||
|         self.pname.set_type(ntype) | ||||
|         self.pname.set_suffix(unicode(self.suffix.get_text())) | ||||
|         self.pname.set_surname(unicode(self.surname.get_text())) | ||||
|         if self.use_patronymic: | ||||
|             self.pname.set_patronymic(unicode(self.prefix.get_text())) | ||||
|         else: | ||||
|             self.pname.set_surname_prefix(unicode(self.prefix.get_text())) | ||||
|         self.pname.set_first_name(unicode(self.given.get_text())) | ||||
|         self.pname.set_title(unicode(self.title.get_text())) | ||||
|  | ||||
|     def edit_name_clicked(self,obj): | ||||
|         NameEdit.NameEditor(self.dbstate, self.uistate, self.track, | ||||
|                             self.pname, self) | ||||
|                             self.pname, self.update_name) | ||||
|  | ||||
|     def update_name(self,name): | ||||
|         self.write_primary_name() | ||||
|         for obj in (self.suffix, self.prefix, self.given, self.title, self.ntype_field, | ||||
|                     self.surname_field): | ||||
|             obj.update() | ||||
|  | ||||
|     def load_person_image(self): | ||||
|         media_list = self.person.get_media_list() | ||||
|         media_list = self.obj.get_media_list() | ||||
|         if media_list: | ||||
|             ph = media_list[0] | ||||
|             object_handle = ph.get_reference_handle() | ||||
| @@ -782,18 +504,6 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|         else: | ||||
|             self.load_photo(None) | ||||
|  | ||||
|     def write_primary_name(self): | ||||
|         # initial values | ||||
|         self.suffix.set_text(self.pname.get_suffix()) | ||||
|         if self.use_patronymic: | ||||
|             self.prefix.set_text(self.pname.get_patronymic()) | ||||
|         else: | ||||
|             self.prefix.set_text(self.pname.get_surname_prefix()) | ||||
|  | ||||
|         self.surname.set_text(self.pname.get_surname()) | ||||
|         self.given.set_text(self.pname.get_first_name()) | ||||
|         self.title.set_text(self.pname.get_title()) | ||||
|  | ||||
|     def birth_dates_in_order(self,list): | ||||
|         """Check any *valid* birthdates in the list to insure that they are in | ||||
|         numerically increasing order.""" | ||||
| @@ -867,22 +577,3 @@ class EditPerson(DisplayState.ManagedWindow): | ||||
|             list.insert(target,person.get_handle()) | ||||
|         return list | ||||
|  | ||||
| def build_dropdown(entry,strings): | ||||
|     store = gtk.ListStore(str) | ||||
|     for value in strings: | ||||
|         node = store.append() | ||||
|         store.set(node,0,unicode(value)) | ||||
|     completion = gtk.EntryCompletion() | ||||
|     completion.set_text_column(0) | ||||
|     completion.set_model(store) | ||||
|     entry.set_completion(completion) | ||||
|  | ||||
| def build_combo(entry,strings): | ||||
|     cell = gtk.CellRendererText() | ||||
|     entry.pack_start(cell,True) | ||||
|     entry.add_attribute(cell,'text',0) | ||||
|     store = gtk.ListStore(str) | ||||
|     for value in strings: | ||||
|         node = store.append() | ||||
|         store.set(node,0,unicode(value)) | ||||
|     entry.set_model(store) | ||||
|   | ||||
| @@ -26,9 +26,7 @@ | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| import cPickle as pickle | ||||
| import gc | ||||
| from gettext import gettext as _ | ||||
| import sys | ||||
|  | ||||
| import logging | ||||
| log = logging.getLogger(".") | ||||
| @@ -49,15 +47,9 @@ import gtk.glade | ||||
| #------------------------------------------------------------------------- | ||||
| import const | ||||
| import Utils | ||||
| import Sources | ||||
| import NameDisplay | ||||
| import DisplayState | ||||
| import Spell | ||||
| import GrampsDisplay | ||||
| import RelLib | ||||
| import ListModel | ||||
| import EditPrimary | ||||
|  | ||||
| from DdTargets import DdTargets | ||||
| from DisplayTabs import * | ||||
| from GrampsWidgets import * | ||||
|  | ||||
| @@ -66,50 +58,33 @@ from GrampsWidgets import * | ||||
| # EditPlace | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| class EditPlace(DisplayState.ManagedWindow): | ||||
| class EditPlace(EditPrimary.EditPrimary): | ||||
|  | ||||
|     def __init__(self,dbstate,uistate,track,place): | ||||
|         self.dbstate = dbstate | ||||
|     def __init__(self,dbstate,uistate,track,place,callback=None): | ||||
|         EditPrimary.EditPrimary.__init__( | ||||
|             self, dbstate, uistate, track, place, | ||||
|             dbstate.db.get_place_from_handle, callback) | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, place) | ||||
|     def _local_init(self): | ||||
|         self.top = gtk.glade.XML(const.gladeFile,"place_editor","gramps") | ||||
|  | ||||
|         self.name_display = NameDisplay.displayer.display | ||||
|         self.place = place | ||||
|         self.db = dbstate.db | ||||
|  | ||||
|         self.top = gtk.glade.XML(const.gladeFile,"placeEditor","gramps") | ||||
|  | ||||
|         self.window = self.top.get_widget("placeEditor") | ||||
|         title_label = self.top.get_widget('title') | ||||
|  | ||||
|         Utils.set_titles(self.window,title_label,_('Place Editor')) | ||||
|  | ||||
|         self.top.get_widget('changed').set_text(place.get_change_display()) | ||||
|  | ||||
|         self.notebook = self.top.get_widget('notebook3') | ||||
|  | ||||
|         self._create_tabbed_pages() | ||||
|         self._setup_fields() | ||||
|         self._connect_signals() | ||||
|         self.show() | ||||
|  | ||||
|         self.pdmap = {} | ||||
|         self.build_pdmap() | ||||
|         self.define_top_level(self.top.get_widget("place_editor"), | ||||
|                               self.top.get_widget('title'), | ||||
|                               _('Place Editor')) | ||||
|  | ||||
|     def _connect_signals(self): | ||||
|         self.top.get_widget('placeEditor').connect('delete_event', self.delete_event) | ||||
|         self.top.get_widget('button127').connect('clicked', self.close) | ||||
|         self.top.get_widget('button135').connect('clicked', self.help_clicked) | ||||
|         ok = self.top.get_widget('ok') | ||||
|         ok.connect('clicked', self.apply_clicked) | ||||
|         ok.set_sensitive(not self.db.readonly) | ||||
|         self.define_ok_button(self.top.get_widget('ok'),self.save) | ||||
|         self.define_cancel_button(self.top.get_widget('cancel')) | ||||
|         self.define_help_button(self.top.get_widget('help'),'adv-plc') | ||||
|  | ||||
|     def _setup_fields(self): | ||||
|         mloc = self.place.get_main_location() | ||||
|         mloc = self.obj.get_main_location() | ||||
|          | ||||
|         self.top.get_widget('changed').set_text(self.obj.get_change_display()) | ||||
|  | ||||
|         self.title = MonitoredEntry( | ||||
|             self.top.get_widget("place_title"), | ||||
|             self.place.set_title, self.place.get_title, | ||||
|             self.obj.set_title, self.obj.get_title, | ||||
|             self.db.readonly) | ||||
|          | ||||
|         self.city = MonitoredEntry( | ||||
| @@ -142,21 +117,14 @@ class EditPlace(DisplayState.ManagedWindow): | ||||
|          | ||||
|         self.longitude = MonitoredEntry( | ||||
|             self.top.get_widget("longitude"), | ||||
|             self.place.set_longitude, self.place.get_longitude, | ||||
|             self.obj.set_longitude, self.obj.get_longitude, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.latitude = MonitoredEntry( | ||||
|             self.top.get_widget("latitude"), | ||||
|             self.place.set_latitude, self.place.get_latitude, | ||||
|             self.obj.set_latitude, self.obj.get_latitude, | ||||
|             self.db.readonly) | ||||
|          | ||||
|  | ||||
|     def build_window_key(self,place): | ||||
|         if place: | ||||
|             return place.get_handle() | ||||
|         else: | ||||
|             return id(self) | ||||
|  | ||||
|     def build_menu_names(self,place): | ||||
|         win_menu_label = place.get_title() | ||||
|         if not win_menu_label.strip(): | ||||
| @@ -164,7 +132,7 @@ class EditPlace(DisplayState.ManagedWindow): | ||||
|         return (win_menu_label, _('Edit Place')) | ||||
|  | ||||
|     def build_pdmap(self): | ||||
|         self.pdmap.clear() | ||||
|         self.pdmap = {} | ||||
|         cursor = self.db.get_place_cursor() | ||||
|         data = cursor.next() | ||||
|         while data: | ||||
| @@ -173,60 +141,52 @@ class EditPlace(DisplayState.ManagedWindow): | ||||
|             data = cursor.next() | ||||
|         cursor.close() | ||||
|  | ||||
|     def _add_page(self,page): | ||||
|         self.notebook.insert_page(page) | ||||
|         self.notebook.set_tab_label(page,page.get_tab_widget()) | ||||
|         return page | ||||
|  | ||||
|     def _create_tabbed_pages(self): | ||||
|         """ | ||||
|         Creates the notebook tabs and inserts them into the main | ||||
|         window. | ||||
|          | ||||
|         """ | ||||
|         self.loc_list = self._add_page(LocationEmbedList( | ||||
|             self.dbstate,self.uistate, self.track, | ||||
|             self.place.alt_loc)) | ||||
|         self.srcref_list = self._add_page(SourceEmbedList( | ||||
|             self.dbstate,self.uistate, self.track, | ||||
|             self.place.source_list)) | ||||
|         self.note_tab = self._add_page(NoteTab( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.place.get_note_object())) | ||||
|         self.gallery_tab = self._add_page(GalleryTab( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.place.get_media_list())) | ||||
|         self.web_list = self._add_page(WebEmbedList( | ||||
|             self.dbstate,self.uistate,self.track, | ||||
|             self.place.get_url_list())) | ||||
|         self.backref_list = self._add_page(PlaceBackRefList( | ||||
|             self.dbstate,self.uistate,self.track, | ||||
|             self.db.find_backlink_handles(self.place.handle))) | ||||
|         notebook = self.top.get_widget('notebook3') | ||||
|  | ||||
|     def delete_event(self,obj,b): | ||||
|         self.close() | ||||
|         self.loc_list = self._add_tab( | ||||
|             notebook, | ||||
|             LocationEmbedList(self.dbstate,self.uistate, self.track, | ||||
|                               self.obj.alt_loc)) | ||||
|          | ||||
|         self.srcref_list = self._add_tab( | ||||
|             notebook, | ||||
|             SourceEmbedList(self.dbstate,self.uistate, self.track, | ||||
|                             self.obj.source_list)) | ||||
|          | ||||
|         self.note_tab = self._add_tab( | ||||
|             notebook, | ||||
|             NoteTab(self.dbstate, self.uistate, self.track, | ||||
|                     self.obj.get_note_object())) | ||||
|          | ||||
|         self.gallery_tab = self._add_tab( | ||||
|             notebook, | ||||
|             GalleryTab(self.dbstate, self.uistate, self.track, | ||||
|                        self.obj.get_media_list())) | ||||
|          | ||||
|         self.web_list = self._add_tab( | ||||
|             notebook, | ||||
|             WebEmbedList(self.dbstate,self.uistate,self.track, | ||||
|                          self.obj.get_url_list())) | ||||
|          | ||||
|         self.backref_list = self._add_tab( | ||||
|             notebook, | ||||
|             PlaceBackRefList(self.dbstate,self.uistate,self.track, | ||||
|                              self.db.find_backlink_handles(self.obj.handle))) | ||||
|  | ||||
|     def close_window(self,obj): | ||||
|         self.close() | ||||
|         self.window.destroy() | ||||
|     def _cleanup_on_exit(self): | ||||
|         self.backref_list.close() | ||||
|  | ||||
|     def help_clicked(self,obj): | ||||
|         """Display the relevant portion of GRAMPS manual""" | ||||
|         GrampsDisplay.help('adv-plc') | ||||
|     def save(self,*obj): | ||||
|         title = self.obj.get_title() | ||||
|         self.build_pdmap() | ||||
|  | ||||
|     def build_columns(self,tree,list): | ||||
|         cnum = 0 | ||||
|         for name in list: | ||||
|             renderer = gtk.CellRendererText() | ||||
|             column = gtk.TreeViewColumn(name[0],renderer,text=cnum) | ||||
|             column.set_min_width(name[1]) | ||||
|             cnum = cnum + 1 | ||||
|             tree.append_column(column) | ||||
|  | ||||
|     def apply_clicked(self,obj): | ||||
|  | ||||
|         title = self.place.get_title() | ||||
|         if self.pdmap.has_key(title) and self.pdmap[title] != self.place.handle: | ||||
|         if self.pdmap.has_key(title) and self.pdmap[title] != self.obj.handle: | ||||
|             import QuestionDialog | ||||
|             QuestionDialog.ErrorDialog( | ||||
|                 _("Place title is already in use"), | ||||
| @@ -236,12 +196,12 @@ class EditPlace(DisplayState.ManagedWindow): | ||||
|             return | ||||
|  | ||||
|         trans = self.db.transaction_begin() | ||||
|         if self.place.get_handle(): | ||||
|             self.db.commit_place(self.place,trans) | ||||
|         if self.obj.get_handle(): | ||||
|             self.db.commit_place(self.obj,trans) | ||||
|         else: | ||||
|             self.db.add_place(self.place,trans) | ||||
|             self.db.add_place(self.obj,trans) | ||||
|         self.db.transaction_commit(trans, | ||||
|                                    _("Edit Place (%s)") % self.place.get_title()) | ||||
|                                    _("Edit Place (%s)") % self.obj.get_title()) | ||||
|          | ||||
|         self.close(obj) | ||||
|  | ||||
| @@ -254,13 +214,13 @@ class DeletePlaceQuery: | ||||
|  | ||||
|     def __init__(self,place,db): | ||||
|         self.db = db | ||||
|         self.place = place | ||||
|         self.obj = place | ||||
|          | ||||
|     def query_response(self): | ||||
|         trans = self.db.transaction_begin() | ||||
|         self.db.disable_signals() | ||||
|          | ||||
|         place_handle = self.place.get_handle() | ||||
|         place_handle = self.obj.get_handle() | ||||
|  | ||||
|         for handle in self.db.get_person_handles(sort_handles=False): | ||||
|             person = self.db.get_person_from_handle(handle) | ||||
| @@ -283,4 +243,4 @@ class DeletePlaceQuery: | ||||
|         self.db.enable_signals() | ||||
|         self.db.remove_place(place_handle,trans) | ||||
|         self.db.transaction_commit(trans, | ||||
|                                    _("Delete Place (%s)") % self.place.get_title()) | ||||
|                                    _("Delete Place (%s)") % self.obj.get_title()) | ||||
|   | ||||
| @@ -32,9 +32,8 @@ from gettext import gettext as _ | ||||
| # GTK/Gnome modules | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| import gobject | ||||
| import gtk | ||||
| import gtk.glade | ||||
| import gtk.gdk | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| @@ -44,117 +43,91 @@ import gtk.gdk | ||||
| import const | ||||
| import Utils | ||||
| import RelLib | ||||
| import NameDisplay | ||||
| import GrampsDisplay | ||||
|  | ||||
| from GrampsWidgets import * | ||||
| from DisplayTabs import * | ||||
| import DisplayState | ||||
| import EditPrimary | ||||
|  | ||||
| class EditRepository(DisplayState.ManagedWindow): | ||||
| class EditRepository(EditPrimary.EditPrimary): | ||||
|  | ||||
|     def __init__(self,dbstate,uistate,track,repository): | ||||
|  | ||||
|         if repository: | ||||
|             self.repository = repository | ||||
|         else: | ||||
|             self.repository = RelLib.Repository() | ||||
|         EditPrimary.EditPrimary.__init__(self, dbstate, uistate, track, | ||||
|                                          repository, dbstate.db.get_repository_from_handle) | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, repository) | ||||
|     def _local_init(self): | ||||
|         self.glade = gtk.glade.XML(const.gladeFile,"repository_editor","gramps") | ||||
|         self.define_top_level(self.glade.get_widget("repository_editor"), | ||||
|                               self.glade.get_widget('repository_title'), | ||||
|                               _('Repository Editor')) | ||||
|  | ||||
|         self.dbstate = dbstate | ||||
|         self.db = dbstate.db | ||||
|         self.name_display = NameDisplay.displayer.display | ||||
|  | ||||
|         self.path = self.db.get_save_path() | ||||
|  | ||||
|         self.glade = gtk.glade.XML(const.gladeFile,"repositoryEditor","gramps") | ||||
|         self.window = self.glade.get_widget("repositoryEditor") | ||||
|  | ||||
|         Utils.set_titles(self.window,self.glade.get_widget('repository_title'), | ||||
|                          _('Repository Editor')) | ||||
|     def _setup_fields(self): | ||||
|          | ||||
|         self.name = MonitoredEntry( | ||||
|             self.glade.get_widget("repository_name"), | ||||
|             self.repository.set_name, | ||||
|             self.repository.get_name, | ||||
|             self.obj.set_name, | ||||
|             self.obj.get_name, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.type = MonitoredType( | ||||
|             self.glade.get_widget("repository_type"), | ||||
|             self.repository.set_type, | ||||
|             self.repository.get_type, | ||||
|             self.obj.set_type, | ||||
|             self.obj.get_type, | ||||
|             dict(Utils.repository_types), | ||||
|             RelLib.Repository.CUSTOM) | ||||
|  | ||||
|         self.call_number = MonitoredEntry( | ||||
|             self.glade.get_widget('gid'), | ||||
|             self.repository.set_gramps_id, | ||||
|             self.repository.get_gramps_id, | ||||
|             self.obj.set_gramps_id, | ||||
|             self.obj.get_gramps_id, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.notebook = gtk.Notebook() | ||||
|         self.notebook.show() | ||||
|         self.glade.get_widget("vbox").pack_start(self.notebook,True,True) | ||||
|  | ||||
|         self.addr_tab = self._add_page(AddrEmbedList( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             repository.get_address_list())) | ||||
|  | ||||
|         self.url_tab = self._add_page(WebEmbedList( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             repository.get_url_list())) | ||||
|     def _create_tabbed_pages(self): | ||||
|          | ||||
|         self.note_tab = self._add_page(NoteTab( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             repository.get_note_object())) | ||||
|         notebook = gtk.Notebook() | ||||
|  | ||||
|         self.backref_tab = self._add_page(SourceBackRefList( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.db.find_backlink_handles(self.repository.handle))) | ||||
|         self.addr_tab = self._add_tab( | ||||
|             notebook, | ||||
|             AddrEmbedList(self.dbstate, self.uistate, self.track, | ||||
|                           self.obj.get_address_list())) | ||||
|  | ||||
|         self.glade.signal_autoconnect({ | ||||
|             "on_repositoryEditor_help_clicked" : self.on_help_clicked, | ||||
|             "on_repositoryEditor_ok_clicked" : self.on_repository_apply_clicked, | ||||
|             "on_repositoryEditor_cancel_clicked" : self.close_window, | ||||
|             "on_repositoryEditor_delete_event" : self.on_delete_event, | ||||
|             }) | ||||
|  | ||||
|         self.glade.get_widget('ok').set_sensitive(not self.db.readonly) | ||||
|         self.window.show() | ||||
|  | ||||
|     def _add_page(self,page): | ||||
|         self.notebook.insert_page(page) | ||||
|         self.notebook.set_tab_label(page,page.get_tab_widget()) | ||||
|         return page | ||||
|  | ||||
|     def on_delete_event(self,obj,b): | ||||
|         self.close() | ||||
|  | ||||
|     def on_help_clicked(self,obj): | ||||
|         """Display the relevant portion of GRAMPS manual""" | ||||
|         GrampsDisplay.help('adv-src') | ||||
|  | ||||
|     def close_window(self,obj): | ||||
|         self.close() | ||||
|         self.window.destroy() | ||||
|         self.url_tab = self._add_tab( | ||||
|             notebook, | ||||
|             WebEmbedList(self.dbstate, self.uistate, self.track, | ||||
|                          self.obj.get_url_list())) | ||||
|          | ||||
|     def on_repository_apply_clicked(self,obj): | ||||
|         self.note_tab = self._add_tab( | ||||
|             notebook, | ||||
|             NoteTab(self.dbstate, self.uistate, self.track, | ||||
|                     self.obj.get_note_object())) | ||||
|  | ||||
|         self.backref_tab = self._add_tab( | ||||
|             notebook, | ||||
|             SourceBackRefList(self.dbstate, self.uistate, self.track, | ||||
|                               self.db.find_backlink_handles(self.obj.handle))) | ||||
|  | ||||
|         notebook.show_all() | ||||
|         self.glade.get_widget("vbox").pack_start(notebook,True,True) | ||||
|  | ||||
|     def _connect_signals(self): | ||||
|         self.define_help_button(self.glade.get_widget('help'),'adv-src') | ||||
|         self.define_cancel_button(self.glade.get_widget('cancel')) | ||||
|         self.define_ok_button(self.glade.get_widget('ok'), self.save) | ||||
|  | ||||
|     def save(self,*obj): | ||||
|         trans = self.db.transaction_begin() | ||||
|         handle = None | ||||
|         if self.repository.get_handle() == None: | ||||
|             handle = self.db.add_repository(self.repository,trans) | ||||
|         if self.obj.get_handle() == None: | ||||
|             handle = self.db.add_repository(self.obj,trans) | ||||
|         else: | ||||
|             self.db.commit_repository(self.repository,trans) | ||||
|             handle = self.repository.get_handle() | ||||
|         self.db.transaction_commit(trans,_("Edit Repository (%s)") % self.repository.get_name()) | ||||
|  | ||||
|             self.db.commit_repository(self.obj,trans) | ||||
|             handle = self.obj.get_handle() | ||||
|         msg = _("Edit Repository (%s)") % self.obj.get_name() | ||||
|         self.db.transaction_commit(trans,msg) | ||||
|         self.close(obj) | ||||
|  | ||||
| class DelRepositoryQuery: | ||||
|     def __init__(self,repository,db,sources): | ||||
|         self.repository = repository | ||||
|         self.obj = repository | ||||
|         self.db = db | ||||
|         self.sources = sources | ||||
|  | ||||
| @@ -162,13 +135,13 @@ class DelRepositoryQuery: | ||||
|         trans = self.db.transaction_begin() | ||||
|          | ||||
|  | ||||
|         repos_handle_list = [self.repository.get_handle()] | ||||
|         repos_handle_list = [self.obj.get_handle()] | ||||
|  | ||||
|         for handle in self.sources: | ||||
|             source = self.db.get_source_from_handle(handle) | ||||
|             source.remove_repo_references(repos_handle_list) | ||||
|             self.db.commit_source(source,trans) | ||||
|  | ||||
|         self.db.remove_repository(self.repository.get_handle(),trans) | ||||
|         self.db.remove_repository(self.obj.get_handle(),trans) | ||||
|         self.db.transaction_commit( | ||||
|             trans,_("Delete Repository (%s)") % self.repository.get_name()) | ||||
|             trans,_("Delete Repository (%s)") % self.obj.get_name()) | ||||
|   | ||||
| @@ -26,8 +26,6 @@ | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| from gettext import gettext as _ | ||||
| import gc | ||||
| import sys | ||||
|  | ||||
| import logging | ||||
| log = logging.getLogger(".") | ||||
| @@ -51,7 +49,7 @@ import RelLib | ||||
| import NameDisplay | ||||
| import Spell | ||||
| import GrampsDisplay | ||||
| import DisplayState | ||||
| import EditPrimary | ||||
|  | ||||
| from DisplayTabs import * | ||||
| from WindowUtils import GladeIf | ||||
| @@ -62,104 +60,84 @@ from GrampsWidgets import * | ||||
| # Constants | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| class EditSource(DisplayState.ManagedWindow): | ||||
| class EditSource(EditPrimary.EditPrimary): | ||||
|  | ||||
|     def __init__(self,dbstate,uistate,track,source,readonly=False): | ||||
|         self.dbstate = dbstate | ||||
|         self.track = track | ||||
|         self.uistate = uistate | ||||
|     def __init__(self,dbstate,uistate,track,source): | ||||
|  | ||||
|         self.db = dbstate.db | ||||
|         self.name_display = NameDisplay.displayer.display | ||||
|         EditPrimary.EditPrimary.__init__( | ||||
|             self, dbstate, uistate, track, | ||||
|             source, dbstate.db.get_source_from_handle) | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, self.track, source) | ||||
|     def _local_init(self): | ||||
|  | ||||
|         if source: | ||||
|             self.source = source | ||||
|         else: | ||||
|             self.source = RelLib.Source() | ||||
|         assert(self.obj) | ||||
|         self.glade = gtk.glade.XML(const.gladeFile,"source_editor","gramps") | ||||
|  | ||||
|         self.glade = gtk.glade.XML(const.gladeFile,"sourceEditor","gramps") | ||||
|         self.window = self.glade.get_widget("sourceEditor") | ||||
|  | ||||
|         Utils.set_titles(self.window,self.glade.get_widget('title'), | ||||
|                          _('Source Editor')) | ||||
|         self.define_top_level(self.glade.get_widget("source_editor"), | ||||
|                               self.glade.get_widget('title'), | ||||
|                               _('Source Editor')) | ||||
|                  | ||||
|         self.vbox = self.glade.get_widget('vbox') | ||||
|  | ||||
|         self.notebook = gtk.Notebook() | ||||
|         self.notebook.show() | ||||
|         self.vbox.pack_start(self.notebook,True) | ||||
|  | ||||
|         self._create_tabbed_pages() | ||||
|         self._setup_fields() | ||||
|         self._connect_signals() | ||||
|         self.show() | ||||
|  | ||||
|     def _connect_signals(self): | ||||
|         self.glade.get_widget('cancel').connect('clicked', self.close_window) | ||||
|  | ||||
|         ok = self.glade.get_widget('ok') | ||||
|         ok.set_sensitive(not self.db.readonly) | ||||
|         ok.connect('clicked', self.apply_clicked) | ||||
|         self.define_ok_button(self.glade.get_widget('ok'),self.save) | ||||
|         self.define_cancel_button(self.glade.get_widget('cancel')) | ||||
|         self.define_help_button(self.glade.get_widget('help'),'adv-src') | ||||
|  | ||||
|     def _setup_fields(self): | ||||
|         self.author = MonitoredEntry( | ||||
|             self.glade.get_widget("author"), | ||||
|             self.source.set_author, | ||||
|             self.source.get_author, | ||||
|             self.obj.set_author, | ||||
|             self.obj.get_author, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.pubinfo = MonitoredEntry( | ||||
|             self.glade.get_widget("pubinfo"), | ||||
|             self.source.set_publication_info, | ||||
|             self.source.get_publication_info, | ||||
|             self.obj.set_publication_info, | ||||
|             self.obj.get_publication_info, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.abbrev = MonitoredEntry( | ||||
|             self.glade.get_widget("abbrev"), | ||||
|             self.source.set_abbreviation, | ||||
|             self.source.get_abbreviation, | ||||
|             self.obj.set_abbreviation, | ||||
|             self.obj.get_abbreviation, | ||||
|             self.db.readonly) | ||||
|  | ||||
|         self.title = MonitoredEntry( | ||||
|             self.glade.get_widget("source_title"), | ||||
|             self.source.set_title, | ||||
|             self.source.get_title, | ||||
|             self.obj.set_title, | ||||
|             self.obj.get_title, | ||||
|             self.db.readonly) | ||||
|  | ||||
|     def _add_page(self,page): | ||||
|         self.notebook.insert_page(page) | ||||
|         self.notebook.set_tab_label(page,page.get_tab_widget()) | ||||
|         return page | ||||
|  | ||||
|     def _create_tabbed_pages(self): | ||||
|         self.note_tab = self._add_page(NoteTab( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.source.get_note_object())) | ||||
|          | ||||
|         self.gallery_tab = self._add_page(GalleryTab( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.source.get_media_list())) | ||||
|                                            | ||||
|         self.data_tab = self._add_page(DataEmbedList( | ||||
|             self.dbstate, self.uistate, self.track, self.source)) | ||||
|                                         | ||||
|         self.repo_tab = self._add_page(RepoEmbedList( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.source.get_reporef_list())) | ||||
|          | ||||
|         self.backref_tab = self._add_page(SourceBackRefList( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.db.find_backlink_handles(self.source.handle))) | ||||
|          | ||||
|         self.notebook.show_all() | ||||
|         notebook = gtk.Notebook() | ||||
|  | ||||
|     def build_window_key(self,source): | ||||
|         if source: | ||||
|             return source.get_handle() | ||||
|         else: | ||||
|             return id(self) | ||||
|         self.note_tab = self._add_tab( | ||||
|             notebook, | ||||
|             NoteTab(self.dbstate, self.uistate, self.track, | ||||
|                     self.obj.get_note_object())) | ||||
|          | ||||
|         self.gallery_tab = self._add_tab( | ||||
|             notebook, | ||||
|             GalleryTab(self.dbstate, self.uistate, self.track, | ||||
|                        self.obj.get_media_list())) | ||||
|                                            | ||||
|         self.data_tab = self._add_tab( | ||||
|             notebook, | ||||
|             DataEmbedList(self.dbstate, self.uistate, self.track, | ||||
|                           self.obj)) | ||||
|                                         | ||||
|         self.repo_tab = self._add_tab( | ||||
|             notebook, | ||||
|             RepoEmbedList(self.dbstate, self.uistate, self.track, | ||||
|                           self.obj.get_reporef_list())) | ||||
|          | ||||
|         self.backref_tab = self._add_tab( | ||||
|             notebook, | ||||
|             SourceBackRefList(self.dbstate, self.uistate, self.track, | ||||
|                               self.db.find_backlink_handles(self.obj.handle))) | ||||
|          | ||||
|         notebook.show_all() | ||||
|         self.glade.get_widget('vbox').pack_start(notebook,True) | ||||
|  | ||||
|     def build_menu_names(self,source): | ||||
|         if source: | ||||
| @@ -168,27 +146,18 @@ class EditSource(DisplayState.ManagedWindow): | ||||
|             label = "New Source" | ||||
|         return (label, _('Source Editor'))         | ||||
|  | ||||
|     def on_delete_event(self,obj,b): | ||||
|     def _cleanup_on_exit(self): | ||||
|         self.backref_tab.close() | ||||
|         self.close() | ||||
|  | ||||
|     def on_help_clicked(self,obj): | ||||
|         """Display the relevant portion of GRAMPS manual""" | ||||
|         GrampsDisplay.help('adv-src') | ||||
|  | ||||
|     def close_window(self,obj): | ||||
|         self.backref_tab.close() | ||||
|         self.close() | ||||
|  | ||||
|     def apply_clicked(self,obj): | ||||
|     def save(self,*obj): | ||||
|  | ||||
|         trans = self.db.transaction_begin() | ||||
|         if self.source.get_handle() == None: | ||||
|             self.db.add_source(self.source,trans) | ||||
|         if self.obj.get_handle() == None: | ||||
|             self.db.add_source(self.obj,trans) | ||||
|         else: | ||||
|             self.db.commit_source(self.source,trans) | ||||
|             self.db.commit_source(self.obj,trans) | ||||
|         self.db.transaction_commit(trans, | ||||
|                                    _("Edit Source (%s)") % self.source.get_title()) | ||||
|                                    _("Edit Source (%s)") % self.obj.get_title()) | ||||
|         self.close(obj) | ||||
|  | ||||
| class DelSrcQuery: | ||||
|   | ||||
| @@ -45,13 +45,10 @@ import gtk.glade | ||||
| # gramps modules | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| import Sources | ||||
| import Witness | ||||
| import const | ||||
| import Utils | ||||
| import AutoComp | ||||
| import RelLib | ||||
| import GrampsDisplay | ||||
| import DisplayState | ||||
|  | ||||
| from QuestionDialog import WarningDialog, ErrorDialog | ||||
| @@ -74,8 +71,6 @@ class EditSourceRef(DisplayState.ManagedWindow): | ||||
|         self.source = source | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, source_ref) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         self.update = update | ||||
|  | ||||
|   | ||||
| @@ -102,3 +102,12 @@ class FileVersionError(Exception): | ||||
|  | ||||
|     def __str__(self): | ||||
|         return self.value | ||||
|  | ||||
| class WindowActiveError(Exception): | ||||
|     """Error used to report that the request window is already displayed.""" | ||||
|     def __init__(self,value): | ||||
|         Exception.__init__(self) | ||||
|         self.value = value | ||||
|  | ||||
|     def __str__(self): | ||||
|         return self.value | ||||
|   | ||||
| @@ -49,9 +49,8 @@ import const | ||||
| import Utils | ||||
| import AutoComp | ||||
| import RelLib | ||||
| import DateEdit | ||||
| import GrampsDisplay | ||||
| import DisplayState | ||||
| import EditPrimary | ||||
|  | ||||
| from QuestionDialog import WarningDialog, ErrorDialog | ||||
| from DisplayTabs import * | ||||
| @@ -72,111 +71,95 @@ for event_type in Utils.family_events.keys(): | ||||
| # EventEditor class | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| class EventEditor(DisplayState.ManagedWindow): | ||||
| class EventEditor(EditPrimary.EditPrimary): | ||||
|  | ||||
|     def __init__(self,event,dbstate,uistate,track=[],callback=None): | ||||
|         self.db = dbstate.db | ||||
|         self.uistate = uistate | ||||
|         self.dbstate = dbstate | ||||
|         self.track = track | ||||
|         self.callback = callback | ||||
|          | ||||
|         self.event = event | ||||
|         self.path = self.db.get_save_path() | ||||
|         self.plist = [] | ||||
|         self.pmap = {} | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, self.track, event) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         if not event: | ||||
|             self.event = RelLib.Event() | ||||
|         EditPrimary.EditPrimary.__init__(self, dbstate, uistate, track, | ||||
|                                          event, dbstate.db.get_event_from_handle) | ||||
|  | ||||
|     def _local_init(self): | ||||
|         self.top = gtk.glade.XML(const.gladeFile, "event_edit","gramps") | ||||
|  | ||||
|         self.window = self.top.get_widget("event_edit") | ||||
|         title_label = self.top.get_widget('title') | ||||
|  | ||||
|         etitle = _('Event Editor') | ||||
|         Utils.set_titles(self.window,title_label, etitle, | ||||
|                          _('Event Editor')) | ||||
|  | ||||
|         self._create_tabbed_pages() | ||||
|         self._setup_fields() | ||||
|         self._connect_signals() | ||||
|         self.show() | ||||
|         Utils.set_titles(self.window, self.top.get_widget('title'), | ||||
|                          etitle, etitle) | ||||
|  | ||||
|     def _connect_signals(self): | ||||
|         self.top.get_widget('button111').connect('clicked',self.close_window) | ||||
|         self.top.get_widget('button126').connect('clicked',self.on_help_clicked) | ||||
|         self.top.get_widget('button111').connect('clicked',self.delete_event) | ||||
|         self.top.get_widget('button126').connect('clicked',self.help_clicked) | ||||
|  | ||||
|         ok = self.top.get_widget('ok') | ||||
|         ok.set_sensitive(not self.db.readonly) | ||||
|         ok.connect('clicked',self.on_event_edit_ok_clicked) | ||||
|         ok.connect('clicked',self.save) | ||||
|  | ||||
|     def _setup_fields(self): | ||||
|         self.place_field = PlaceEntry( | ||||
|             self.top.get_widget("eventPlace"), | ||||
|             self.event.get_place_handle(), | ||||
|             self.obj.get_place_handle(), | ||||
|             self.dbstate.get_place_completion(), | ||||
|             self.db.readonly) | ||||
|          | ||||
|         self.cause_monitor = MonitoredEntry( | ||||
|             self.top.get_widget("eventCause"), | ||||
|             self.event.set_cause, | ||||
|             self.event.get_cause, self.db.readonly) | ||||
|             self.obj.set_cause, | ||||
|             self.obj.get_cause, self.db.readonly) | ||||
|  | ||||
|         self.descr_field = MonitoredEntry( | ||||
|             self.top.get_widget("event_description"), | ||||
|             self.event.set_description, | ||||
|             self.event.get_description, self.db.readonly) | ||||
|             self.obj.set_description, | ||||
|             self.obj.get_description, self.db.readonly) | ||||
|  | ||||
|         self.priv = PrivacyButton( | ||||
|             self.top.get_widget("private"), | ||||
|             self.event, self.db.readonly) | ||||
|             self.obj, self.db.readonly) | ||||
|  | ||||
|         self.event_menu = MonitoredType( | ||||
|             self.top.get_widget("personal_events"), | ||||
|             self.event.set_type, | ||||
|             self.event.get_type, | ||||
|             self.obj.set_type, | ||||
|             self.obj.get_type, | ||||
|             dict(total_events), | ||||
|             RelLib.Event.CUSTOM) | ||||
|  | ||||
|         self.date_field = MonitoredDate( | ||||
|             self.top.get_widget("eventDate"), | ||||
|             self.top.get_widget("date_stat"), | ||||
|             self.event.get_date_object(), | ||||
|             self.obj.get_date_object(), | ||||
|             self.window, self.db.readonly) | ||||
|  | ||||
|     def _add_page(self,page): | ||||
|         self.notebook.insert_page(page) | ||||
|         self.notebook.set_tab_label(page,page.get_tab_widget()) | ||||
|         return page | ||||
|  | ||||
|     def _create_tabbed_pages(self): | ||||
|         """ | ||||
|         Creates the notebook tabs and inserts them into the main | ||||
|         window. | ||||
|         """ | ||||
|         vbox = self.top.get_widget('vbox') | ||||
|         self.notebook = gtk.Notebook() | ||||
|         notebook = gtk.Notebook() | ||||
|          | ||||
|         self.srcref_list = self._add_tab( | ||||
|             notebook, | ||||
|             SourceEmbedList(self.dbstate,self.uistate, self.track, | ||||
|                             self.obj.source_list)) | ||||
|          | ||||
|         self.note_tab = self._add_tab( | ||||
|             notebook, | ||||
|             NoteTab(self.dbstate, self.uistate, self.track, | ||||
|                     self.obj.get_note_object())) | ||||
|          | ||||
|         self.gallery_tab = self._add_tab( | ||||
|             notebook, | ||||
|             GalleryTab(self.dbstate, self.uistate, self.track, | ||||
|                        self.obj.get_media_list())) | ||||
|          | ||||
|         self.backref_tab = self._add_tab( | ||||
|             notebook, | ||||
|             EventBackRefList(self.dbstate, self.uistate, self.track, | ||||
|                              self.dbstate.db.find_backlink_handles(self.obj.handle))) | ||||
|  | ||||
|         self.srcref_list = self._add_page(SourceEmbedList( | ||||
|             self.dbstate,self.uistate, self.track, | ||||
|             self.event.source_list)) | ||||
|         self.note_tab = self._add_page(NoteTab( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.event.get_note_object())) | ||||
|         self.gallery_tab = self._add_page(GalleryTab( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.event.get_media_list())) | ||||
|         self.backref_tab = self._add_page(EventBackRefList( | ||||
|             self.dbstate, self.uistate, self.track, | ||||
|             self.dbstate.db.find_backlink_handles(self.event.handle))) | ||||
|         notebook.show_all() | ||||
|         self.top.get_widget('vbox').pack_start(notebook,True) | ||||
|  | ||||
|         self.notebook.show_all() | ||||
|         vbox.pack_start(self.notebook,True) | ||||
|     def _cleanup_on_exit(self): | ||||
|         self.backref_tab.close() | ||||
|  | ||||
|     def build_menu_names(self,event): | ||||
|         if event: | ||||
| @@ -192,60 +175,53 @@ class EventEditor(DisplayState.ManagedWindow): | ||||
|             submenu_label = _('New Event') | ||||
|         return (_('Event Editor'),submenu_label) | ||||
|  | ||||
|     def build_window_key(self,obj): | ||||
|         if obj: | ||||
|             return obj.get_handle() | ||||
|         else: | ||||
|             return id(self) | ||||
|  | ||||
|     def on_delete_event(self,obj,b): | ||||
|         self.close() | ||||
|  | ||||
|     def close_window(self,obj): | ||||
|         self.close() | ||||
|         self.window.destroy() | ||||
|  | ||||
|     def on_help_clicked(self,obj): | ||||
|     def help_clicked(self,obj): | ||||
|         """Display the relevant portion of GRAMPS manual""" | ||||
|         GrampsDisplay.help('adv-ev') | ||||
|  | ||||
|     def on_event_edit_ok_clicked(self,obj): | ||||
|     def save(self,*obj): | ||||
|  | ||||
|         (need_new, handle) = self.place_field.get_place_info() | ||||
|         if need_new: | ||||
|             place_obj = RelLib.Place() | ||||
|             place_obj.set_title(handle) | ||||
|             self.event.set_place_handle(place_obj.get_handle()) | ||||
|             self.obj.set_place_handle(place_obj.get_handle()) | ||||
|         else: | ||||
|             self.event.set_place_handle(handle) | ||||
|             self.obj.set_place_handle(handle) | ||||
|              | ||||
|         if self.event.handle == None: | ||||
|         if self.obj.handle == None: | ||||
|             trans = self.db.transaction_begin() | ||||
|             if need_new: | ||||
|                 self.db.add_place(place_obj,trans) | ||||
|             self.db.add_event(self.event,trans) | ||||
|             self.db.add_event(self.obj,trans) | ||||
|             self.db.transaction_commit(trans,_("Add Event")) | ||||
|         else: | ||||
|             orig = self.dbstate.db.get_event_from_handle(self.event.handle) | ||||
|             if cmp(self.event.serialize(),orig.serialize()): | ||||
|             orig = self.dbstate.db.get_event_from_handle(self.obj.handle) | ||||
|             if cmp(self.obj.serialize(),orig.serialize()): | ||||
|                 trans = self.db.transaction_begin() | ||||
|                 if need_new: | ||||
|                     self.db.add_place(place_obj,trans) | ||||
|                 self.db.commit_event(self.event,trans) | ||||
|                 self.db.commit_event(self.obj,trans) | ||||
|                 self.db.transaction_commit(trans,_("Edit Event")) | ||||
|  | ||||
|         if self.callback: | ||||
|             self.callback(self.event) | ||||
|             self.callback(self.obj) | ||||
|         self.close(obj) | ||||
|  | ||||
|     def commit(self,event,trans): | ||||
|         self.db.commit_event(event,trans) | ||||
|  | ||||
|     def get_event_names(self): | ||||
|         data = set(self.db.get_family_event_types()) | ||||
|         data.union(self.db.get_person_event_types()) | ||||
|         return list(data) | ||||
|  | ||||
|     def data_has_changed(self): | ||||
|         if self.db.readonly: | ||||
|             return False | ||||
|         elif self.obj.handle: | ||||
|             orig = self.db.get_event_from_handle(self.obj.handle) | ||||
|             return cmp(orig.serialize(),self.obj.serialize()) != 0 | ||||
|         else: | ||||
|             return True | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # Delete Query class | ||||
|   | ||||
| @@ -114,10 +114,16 @@ class EventView(PageView.ListView): | ||||
|     def on_double_click(self,obj,event): | ||||
|         handle = self.first_selected() | ||||
|         the_event = self.dbstate.db.get_event_from_handle(handle) | ||||
|         EventEdit.EventEditor(the_event,self.dbstate, self.uistate, []) | ||||
|         try: | ||||
|             EventEdit.EventEditor(the_event,self.dbstate, self.uistate, []) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add(self,obj): | ||||
|         EventEdit.EventEditor(RelLib.Event(),self.dbstate, self.uistate, []) | ||||
|         try: | ||||
|             EventEdit.EventEditor(RelLib.Event(),self.dbstate, self.uistate, []) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def remove(self,obj): | ||||
|         for event_handle in self.selected_handles(): | ||||
| @@ -155,5 +161,8 @@ class EventView(PageView.ListView): | ||||
|  | ||||
|         for handle in mlist: | ||||
|             event = self.dbstate.db.get_event_from_handle(handle) | ||||
|             EventEdit.EventEditor(event, self.dbstate, self.uistate) | ||||
|             try: | ||||
|                 EventEdit.EventEditor(event, self.dbstate, self.uistate) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|   | ||||
| @@ -37,6 +37,7 @@ import PageView | ||||
| import DisplayModels | ||||
| import const | ||||
| import Utils | ||||
| import Errors | ||||
| from QuestionDialog import QuestionDialog, ErrorDialog | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| @@ -114,7 +115,10 @@ class FamilyListView(PageView.ListView): | ||||
|     def add(self,obj): | ||||
|         import EditFamily | ||||
|         family = RelLib.Family() | ||||
|         EditFamily.EditFamily(self.dbstate,self.uistate,[],family) | ||||
|         try: | ||||
|             EditFamily.EditFamily(self.dbstate,self.uistate,[],family) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def remove(self,obj): | ||||
|         return | ||||
| @@ -126,4 +130,7 @@ class FamilyListView(PageView.ListView): | ||||
|         for handle in mlist: | ||||
|             import EditFamily | ||||
|             family = self.dbstate.db.get_family_from_handle(handle) | ||||
|             EditFamily.EditFamily(self.dbstate,self.uistate,[],family) | ||||
|             try: | ||||
|                 EditFamily.EditFamily(self.dbstate,self.uistate,[],family) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|   | ||||
| @@ -31,6 +31,7 @@ import ImgManip | ||||
| import ReportUtils | ||||
| import GrampsKeys | ||||
| import GrampsWidgets | ||||
| import Errors | ||||
|  | ||||
| _GenderCode = { | ||||
|     RelLib.Person.MALE    : u'\u2642', | ||||
| @@ -556,24 +557,36 @@ class FamilyView(PageView.PersonNavView): | ||||
|         if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: | ||||
|             import EditPerson | ||||
|             person = self.dbstate.db.get_person_from_handle(handle) | ||||
|             EditPerson.EditPerson(self.dbstate, self.uistate, [], person) | ||||
|             try: | ||||
|                 EditPerson.EditPerson(self.dbstate, self.uistate, [], person) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|          | ||||
|     def edit_person(self,obj,handle): | ||||
|         import EditPerson | ||||
|         person = self.dbstate.db.get_person_from_handle(handle) | ||||
|         EditPerson.EditPerson(self.dbstate, self.uistate, [], person) | ||||
|         try: | ||||
|             EditPerson.EditPerson(self.dbstate, self.uistate, [], person) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def edit_family(self,obj,event,handle): | ||||
|         if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: | ||||
|             import EditFamily | ||||
|             family = self.dbstate.db.get_family_from_handle(handle) | ||||
|             EditFamily.EditFamily(self.dbstate,self.uistate,[],family) | ||||
|             try: | ||||
|                 EditFamily.EditFamily(self.dbstate,self.uistate,[],family) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def add_family(self,obj,event,handle): | ||||
|         if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: | ||||
|             import EditFamily | ||||
|             family = RelLib.Family() | ||||
|             EditFamily.EditFamily(self.dbstate,self.uistate,[],family) | ||||
|             try: | ||||
|                 EditFamily.EditFamily(self.dbstate,self.uistate,[],family) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def delete_family(self,obj,event,handle): | ||||
|         if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: | ||||
|   | ||||
| @@ -236,12 +236,12 @@ class MonitoredCheckbox: | ||||
|         self.obj = obj | ||||
|         self.set_val = set_val | ||||
|         self.get_val = get_val | ||||
|         self.set_active(get_val()) | ||||
|         self.obj.set_active(get_val()) | ||||
|  | ||||
|     def _on_toggle(self,obj): | ||||
|         self.set_val(obj.get_active()) | ||||
|         if self.on_toggle: | ||||
|             self.on_toggle(get_val()) | ||||
|             self.on_toggle(self.get_val()) | ||||
|          | ||||
| class MonitoredEntry: | ||||
|  | ||||
| @@ -256,6 +256,9 @@ class MonitoredEntry: | ||||
|         self.obj.connect('changed', self._on_change) | ||||
|         self.obj.set_editable(not read_only) | ||||
|  | ||||
|     def connect(self,signal,callback): | ||||
|         self.obj.connect(signal,callback) | ||||
|  | ||||
|     def _on_change(self,obj): | ||||
|         self.set_val(unicode(obj.get_text())) | ||||
|         if self.changed: | ||||
| @@ -264,10 +267,20 @@ class MonitoredEntry: | ||||
|     def force_value(self,value): | ||||
|         self.obj.set_text(value) | ||||
|  | ||||
|     def get_value(self,value): | ||||
|         return unicode(self.obj.get_text()) | ||||
|  | ||||
|     def enable(self,value): | ||||
|         self.obj.set_sensitive(value) | ||||
|         self.obj.set_editable(value) | ||||
|  | ||||
|     def grab_focus(self): | ||||
|         self.obj.grab_focus() | ||||
|  | ||||
|     def update(self): | ||||
|         if self.get_val(): | ||||
|             self.obj.set_text(self.get_val()) | ||||
|  | ||||
| class MonitoredText: | ||||
|  | ||||
|     def __init__(self,obj,set_val,get_val,read_only=False): | ||||
| @@ -304,6 +317,10 @@ class MonitoredType: | ||||
|         self.obj.set_sensitive(not readonly) | ||||
|         self.obj.connect('changed', self.on_change) | ||||
|  | ||||
|     def update(self): | ||||
|         if self.get_val(): | ||||
|             self.sel.set_values(self.get_val()) | ||||
|  | ||||
|     def on_change(self, obj): | ||||
|         self.set_val(self.sel.get_values()) | ||||
|  | ||||
| @@ -322,6 +339,9 @@ class MonitoredMenu: | ||||
|         self.obj.connect('changed',self.on_change) | ||||
|         self.obj.set_sensitive(not readonly) | ||||
|  | ||||
|     def force(self,value): | ||||
|         self.obj.set_active(value) | ||||
|  | ||||
|     def on_change(self, obj): | ||||
|         self.set_val(self.model.get_value(obj.get_active_iter(),1)) | ||||
|          | ||||
|   | ||||
| @@ -35,7 +35,6 @@ import gtk.glade | ||||
| #------------------------------------------------------------------------- | ||||
| import const | ||||
| import Utils | ||||
| import RelLib | ||||
| import GrampsDisplay | ||||
| import DisplayState | ||||
|  | ||||
|   | ||||
| @@ -43,13 +43,8 @@ import gtk.glade | ||||
| #------------------------------------------------------------------------- | ||||
| import const | ||||
| import Utils | ||||
| import AutoComp | ||||
| import Sources | ||||
| import RelLib | ||||
| import NameDisplay | ||||
| import DateEdit | ||||
| import DateHandler | ||||
| import Spell | ||||
| import GrampsDisplay | ||||
| import DisplayState | ||||
| from DisplayTabs import * | ||||
| @@ -71,8 +66,6 @@ class NameEditor(DisplayState.ManagedWindow): | ||||
|         self.callback = callback | ||||
|          | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, name) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         self.name = name | ||||
|         self.original_group_as = self.name.get_group_as() | ||||
|   | ||||
| @@ -908,7 +908,11 @@ class PedView(PageView.PersonNavView): | ||||
|     def edit_person_cb(self,obj,person_handle): | ||||
|         person = self.db.get_person_from_handle(person_handle) | ||||
|         if person: | ||||
|             EditPerson.EditPerson(self.dbstate, self.uistate, [], person, self.person_edited_cb) | ||||
|             try: | ||||
|                 EditPerson.EditPerson(self.dbstate, self.uistate, [], person, | ||||
|                                       self.person_edited_cb) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|             return True | ||||
|         return False | ||||
|  | ||||
| @@ -929,7 +933,12 @@ class PedView(PageView.PersonNavView): | ||||
|         if event.button==1 and event.type == gtk.gdk._2BUTTON_PRESS: | ||||
|             person = self.db.get_person_from_handle(person_handle) | ||||
|             if person: | ||||
|                 EditPerson.EditPerson(self.dbstate, self.uistate, [], person, self.person_edited_cb) | ||||
|                 try: | ||||
|                     EditPerson.EditPerson(self.dbstate, self.uistate, [], person, | ||||
|                                           self.person_edited_cb) | ||||
|                 except Errors.WindowActiveError: | ||||
|                     pass | ||||
|                      | ||||
|         elif event.button!=1: | ||||
|             self.build_full_nav_menu_cb(obj,event,person_handle) | ||||
|         return True | ||||
|   | ||||
| @@ -53,6 +53,7 @@ import NameDisplay | ||||
| import Utils | ||||
| import QuestionDialog | ||||
| import TreeTips | ||||
| import Errors | ||||
|  | ||||
| from DdTargets import DdTargets | ||||
|  | ||||
| @@ -349,12 +350,18 @@ class PersonView(PageView.PersonNavView): | ||||
|  | ||||
|     def add(self,obj): | ||||
|         person = RelLib.Person() | ||||
|         EditPerson.EditPerson(self.dbstate, self.uistate, [], person) | ||||
|         try: | ||||
|             EditPerson.EditPerson(self.dbstate, self.uistate, [], person) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def edit(self,obj): | ||||
|         if self.dbstate.active: | ||||
|             EditPerson.EditPerson(self.dbstate, self.uistate, [], | ||||
|                                   self.dbstate.active) | ||||
|             try: | ||||
|                 EditPerson.EditPerson(self.dbstate, self.uistate, [], | ||||
|                                       self.dbstate.active) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|     def remove(self,obj): | ||||
|         mlist = self.get_selected_objects() | ||||
| @@ -608,7 +615,10 @@ class PersonView(PageView.PersonNavView): | ||||
|             handle = self.first_selected() | ||||
|             person = self.dbstate.db.get_person_from_handle(handle) | ||||
|             if person: | ||||
|                 EditPerson.EditPerson(self.dbstate, self.uistate, [], person) | ||||
|                 try: | ||||
|                     EditPerson.EditPerson(self.dbstate, self.uistate, [], person) | ||||
|                 except Errors.WindowActiveError: | ||||
|                     pass | ||||
|                 return True | ||||
|         elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: | ||||
|             menu = self.uistate.uimanager.get_widget('/Popup') | ||||
|   | ||||
| @@ -38,6 +38,7 @@ import EditPlace | ||||
| import DisplayModels | ||||
| import const | ||||
| import Utils | ||||
| import Errors | ||||
| from QuestionDialog import QuestionDialog, ErrorDialog | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| @@ -118,10 +119,16 @@ class PlaceView(PageView.ListView): | ||||
|     def on_double_click(self,obj,event): | ||||
|         handle = self.first_selected() | ||||
|         place = self.dbstate.db.get_place_from_handle(handle) | ||||
|         EditPlace.EditPlace(self.dbstate,self.uistate,[],place) | ||||
|         try: | ||||
|             EditPlace.EditPlace(self.dbstate,self.uistate,[],place) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def add(self,obj): | ||||
|         EditPlace.EditPlace(self.dbstate,self.uistate,[],RelLib.Place()) | ||||
|         try: | ||||
|             EditPlace.EditPlace(self.dbstate,self.uistate,[],RelLib.Place()) | ||||
|         except Errors.WindowActiveError: | ||||
|             pass | ||||
|  | ||||
|     def remove(self,obj): | ||||
|         for event_handle in self.selected_handles(): | ||||
| @@ -159,5 +166,8 @@ class PlaceView(PageView.ListView): | ||||
|  | ||||
|         for handle in mlist: | ||||
|             place = self.dbstate.db.get_place_from_handle(handle) | ||||
|             EditPlace.EditPlace(self.dbstate,self.uistate,[],place) | ||||
|             try: | ||||
|                 EditPlace.EditPlace(self.dbstate,self.uistate,[],place) | ||||
|             except Errors.WindowActiveError: | ||||
|                 pass | ||||
|  | ||||
|   | ||||
| @@ -94,8 +94,7 @@ class PluginDialog(DisplayState.ManagedWindow): | ||||
|         self.content = content | ||||
|  | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, [], None) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         self.state = state | ||||
|         self.uistate = uistate | ||||
|          | ||||
| @@ -315,8 +314,7 @@ class PluginStatus(DisplayState.ManagedWindow): | ||||
|  | ||||
|         import cStringIO | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, [], None) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         self.state = state | ||||
|         self.uistate = uistate | ||||
|          | ||||
|   | ||||
| @@ -26,7 +26,6 @@ | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| from gettext import gettext as _ | ||||
| import gc | ||||
| from cgi import escape | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| @@ -65,8 +64,6 @@ class UrlEditor(DisplayState.ManagedWindow): | ||||
|         self.name = name | ||||
|          | ||||
|         DisplayState.ManagedWindow.__init__(self, uistate, track, url) | ||||
|         if self.already_exist: | ||||
|             return | ||||
|  | ||||
|         self.url = url | ||||
|         self.callback = callback | ||||
|   | ||||
| @@ -654,8 +654,9 @@ def set_title_label(xmlobj,t): | ||||
|     title_label.set_use_markup(True) | ||||
|  | ||||
| def set_titles(window,title,t,msg=None): | ||||
|     title.set_text('<span weight="bold" size="larger">%s</span>' % t) | ||||
|     title.set_use_markup(True) | ||||
|     if title: | ||||
|         title.set_text('<span weight="bold" size="larger">%s</span>' % t) | ||||
|         title.set_use_markup(True) | ||||
|     if msg: | ||||
|         window.set_title('%s - GRAMPS' % msg) | ||||
|     else: | ||||
|   | ||||
| @@ -22,6 +22,14 @@ | ||||
|  | ||||
| # $Id$ | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # Standard python modules | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| import os | ||||
| from gettext import gettext as _ | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # Standard GRAMPS Websites | ||||
| @@ -31,14 +39,6 @@ url_homepage    = "http://gramps-project.org/" | ||||
| url_mailinglist = "http://sourceforge.net/mail/?group_id=25770" | ||||
| url_burtracker  = "http://sourceforge.net/tracker/?group_id=25770&atid=385137" | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # Standard python modules | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| import os | ||||
| from gettext import gettext as _ | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # Mime Types | ||||
| @@ -88,14 +88,8 @@ no_gconf = False | ||||
| # this one, and that the plugins directory is in a directory below this. | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| if os.environ.has_key('GRAMPSDIR'): | ||||
|     rootDir = os.environ['GRAMPSDIR'] | ||||
| else: | ||||
|     rootDir = os.getcwd() | ||||
|  | ||||
| good_xpm       = os.path.join(rootDir,"good.png") | ||||
| bad_xpm        = os.path.join(rootDir,"bad.png") | ||||
| caution_xpm    = os.path.join(rootDir,"caution.png") | ||||
| rootDir = os.path.abspath(os.path.dirname(__file__)) | ||||
|  | ||||
| system_filters = os.path.join(rootDir,"system_filters.xml") | ||||
| custom_filters = "~/.gramps/custom_filters.xml" | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
| <glade-interface> | ||||
| <requires lib="gnome"/> | ||||
|  | ||||
| <widget class="GtkDialog" id="sourceEditor"> | ||||
| <widget class="GtkDialog" id="source_editor"> | ||||
|   <property name="visible">True</property> | ||||
|   <property name="title" translatable="yes"></property> | ||||
|   <property name="type">GTK_WINDOW_TOPLEVEL</property> | ||||
| @@ -68,7 +68,7 @@ | ||||
| 	  </child> | ||||
|  | ||||
| 	  <child> | ||||
| 	    <widget class="GtkButton" id="button166"> | ||||
| 	    <widget class="GtkButton" id="help"> | ||||
| 	      <property name="visible">True</property> | ||||
| 	      <property name="can_default">True</property> | ||||
| 	      <property name="can_focus">True</property> | ||||
| @@ -492,7 +492,7 @@ | ||||
|   </child> | ||||
| </widget> | ||||
|  | ||||
| <widget class="GtkDialog" id="marriageEditor"> | ||||
| <widget class="GtkDialog" id="family_editor"> | ||||
|   <property name="visible">True</property> | ||||
|   <property name="title" translatable="yes"></property> | ||||
|   <property name="type">GTK_WINDOW_TOPLEVEL</property> | ||||
| @@ -1370,7 +1370,7 @@ | ||||
|   </child> | ||||
| </widget> | ||||
|  | ||||
| <widget class="GtkDialog" id="placeEditor"> | ||||
| <widget class="GtkDialog" id="place_editor"> | ||||
|   <property name="visible">True</property> | ||||
|   <property name="title" translatable="yes"></property> | ||||
|   <property name="type">GTK_WINDOW_TOPLEVEL</property> | ||||
| @@ -1403,7 +1403,7 @@ | ||||
| 	  <property name="layout_style">GTK_BUTTONBOX_END</property> | ||||
|  | ||||
| 	  <child> | ||||
| 	    <widget class="GtkButton" id="button127"> | ||||
| 	    <widget class="GtkButton" id="cancel"> | ||||
| 	      <property name="visible">True</property> | ||||
| 	      <property name="can_default">True</property> | ||||
| 	      <property name="can_focus">True</property> | ||||
| @@ -1432,7 +1432,7 @@ | ||||
| 	  </child> | ||||
|  | ||||
| 	  <child> | ||||
| 	    <widget class="GtkButton" id="button135"> | ||||
| 	    <widget class="GtkButton" id="help"> | ||||
| 	      <property name="visible">True</property> | ||||
| 	      <property name="can_default">True</property> | ||||
| 	      <property name="can_focus">True</property> | ||||
| @@ -12995,7 +12995,7 @@ Text Beside Icons</property> | ||||
|   </child> | ||||
| </widget> | ||||
|  | ||||
| <widget class="GtkDialog" id="repositoryEditor"> | ||||
| <widget class="GtkDialog" id="repository_editor"> | ||||
|   <property name="visible">True</property> | ||||
|   <property name="title" translatable="yes"></property> | ||||
|   <property name="type">GTK_WINDOW_TOPLEVEL</property> | ||||
|   | ||||
| @@ -48,6 +48,11 @@ import gtk.gdk | ||||
| import gtk | ||||
| import gtk.glade | ||||
|  | ||||
|  | ||||
| # setup import path | ||||
|  | ||||
| sys.path.append(os.path.abspath(os.path.basename(__file__))) | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # Load internationalization setup | ||||
|   | ||||
		Reference in New Issue
	
	Block a user