* src/EditPerson.py: window management improvements

* src/EditPlace.py: window management improvements
* src/EditSource.py: window management improvements
* src/EventEdit.py: window management improvements
* src/EventView.py: window management improvements
* src/ListBox.py: window management improvements
* src/NameEdit.py: window management improvements
* src/SourceView.py: window management improvements
* src/Sources.py: window management improvements


svn: r5618
This commit is contained in:
Don Allingham 2005-12-22 23:43:32 +00:00
parent 4d36b334bc
commit 848c95b7e4
11 changed files with 236 additions and 360 deletions

View File

@ -1,3 +1,15 @@
2005-12-22 Don Allingham <don@gramps-project.org>
* src/DisplayState.py: window management improvements
* src/EditPerson.py: window management improvements
* src/EditPlace.py: window management improvements
* src/EditSource.py: window management improvements
* src/EventEdit.py: window management improvements
* src/EventView.py: window management improvements
* src/ListBox.py: window management improvements
* src/NameEdit.py: window management improvements
* src/SourceView.py: window management improvements
* src/Sources.py: window management improvements
2005-12-22 Richard Taylor <rjt-gramps@thegrindstone.me.uk> 2005-12-22 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
* src/ImageSelect.py: changed display_refs to use find_backlink_handles and updated * src/ImageSelect.py: changed display_refs to use find_backlink_handles and updated
GlobalMediaProperties to use new UI model. GlobalMediaProperties to use new UI model.

View File

@ -356,7 +356,7 @@ class ManagedWindow:
event, and presenting itself when selected or attempted to create again. event, and presenting itself when selected or attempted to create again.
""" """
def __init__(self,uistate,track,window_key,submenu_label,menu_label): def __init__(self,uistate,track,obj):
""" """
Create child windows and add itself to menu, if not there already. Create child windows and add itself to menu, if not there already.
@ -383,6 +383,16 @@ class ManagedWindow:
... ...
""" """
window_key = self.build_window_key(obj)
menu_info = self.build_menu_names(obj)
if not menu_info:
menu_info = ('Undefined Menu','Undefined Submenu')
menu_label = menu_info[0]
submenu_label = menu_info[1]
if uistate.gwm.get_item_from_id(window_key): if uistate.gwm.get_item_from_id(window_key):
uistate.gwm.get_item_from_id(window_key).present() uistate.gwm.get_item_from_id(window_key).present()
self.already_exist = True self.already_exist = True
@ -414,6 +424,12 @@ class ManagedWindow:
# On the top level: we use gramps top window # On the top level: we use gramps top window
self.parent_window = self.uistate.window self.parent_window = self.uistate.window
def build_menu_names(self,obj):
return None
def build_window_key(self,obj):
return self
def close(self,obj=None,obj2=None): def close(self,obj=None,obj2=None):
""" """
Close itself. Close itself.

View File

@ -103,24 +103,16 @@ class EditPerson(DisplayState.ManagedWindow):
self.dd = DateHandler.displayer self.dd = DateHandler.displayer
self.nd = NameDisplay.displayer self.nd = NameDisplay.displayer
win_menu_label = self.nd.display(person)
if not win_menu_label.strip():
win_menu_label = _("New Person")
if person: if person:
self.orig_handle = person.get_handle() self.orig_handle = person.get_handle()
win_key = self.orig_handle
else: else:
self.orig_handle = "" self.orig_handle = ""
win_key = self
DisplayState.ManagedWindow.__init__( DisplayState.ManagedWindow.__init__(self, uistate, [], person)
self, uistate, [], win_key, win_menu_label, _('Edit Person'))
if self.already_exist: if self.already_exist:
return return
print "EditPerson added: track:", self.track
self.state = state self.state = state
self.uistate = uistate self.uistate = uistate
self.retval = const.UPDATE_PERSON self.retval = const.UPDATE_PERSON
@ -132,9 +124,6 @@ class EditPerson(DisplayState.ManagedWindow):
person = self.state.db.get_person_from_handle(self.orig_handle) person = self.state.db.get_person_from_handle(self.orig_handle)
self.person = person self.person = person
self.orig_surname = self.person.get_primary_name().get_group_name() self.orig_surname = self.person.get_primary_name().get_group_name()
#if self.parent_window.child_windows.has_key(self.orig_handle):
# self.parent_window.child_windows[self.orig_handle].present(None)
# return
self.db = self.state.db self.db = self.state.db
self.callback = callback self.callback = callback
self.child_windows = {} self.child_windows = {}
@ -435,7 +424,7 @@ class EditPerson(DisplayState.ManagedWindow):
# self.gladeif.connect("button130", "clicked", self.on_ldsseal_note_clicked) # self.gladeif.connect("button130", "clicked", self.on_ldsseal_note_clicked)
self.sourcetab = Sources.SourceTab( self.sourcetab = Sources.SourceTab(self.state, self.uistate, self.track,
self.srcreflist, self, self.top, self.window, self.slist, self.srcreflist, self, self.top, self.window, self.slist,
self.top.get_widget('add_src'), self.top.get_widget('edit_src'), self.top.get_widget('add_src'), self.top.get_widget('edit_src'),
self.top.get_widget('del_src'), self.db.readonly) self.top.get_widget('del_src'), self.db.readonly)
@ -461,6 +450,18 @@ class EditPerson(DisplayState.ManagedWindow):
widget.set_sensitive(not self.db.readonly) widget.set_sensitive(not self.db.readonly)
self.window.show() self.window.show()
def build_menu_names(self,person):
win_menu_label = self.nd.display(person)
if not win_menu_label.strip():
win_menu_label = _("New Person")
return (win_menu_label,_('Edit Person'))
def build_window_key(self,obj):
if obj:
win_key = obj.get_handle()
else:
win_key = self
def set_list_dnd(self,obj, get, begin, receive): def set_list_dnd(self,obj, get, begin, receive):
obj.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.NAME.target()], obj.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.NAME.target()],
gtk.gdk.ACTION_COPY) gtk.gdk.ACTION_COPY)
@ -1371,7 +1372,8 @@ class EditPerson(DisplayState.ManagedWindow):
self.write_primary_name() self.write_primary_name()
def on_ldsbap_source_clicked(self,obj): def on_ldsbap_source_clicked(self,obj):
Sources.SourceSelector(self.lds_baptism.get_source_references(), Sources.SourceSelector(self.state, self.uistate, self.track,
self.lds_baptism.get_source_references(),
self,self.update_ldsbap_list) self,self.update_ldsbap_list)
def update_ldsbap_list(self,list): def update_ldsbap_list(self,list):
@ -1383,7 +1385,8 @@ class EditPerson(DisplayState.ManagedWindow):
readonly=self.db.readonly) readonly=self.db.readonly)
def on_ldsendow_source_clicked(self,obj): def on_ldsendow_source_clicked(self,obj):
Sources.SourceSelector(self.lds_endowment.get_source_references(), Sources.SourceSelector(self.state, self.uitstate, self.track,
self.lds_endowment.get_source_references(),
self,self.set_ldsendow_list) self,self.set_ldsendow_list)
def set_ldsendow_list(self,list): def set_ldsendow_list(self,list):
@ -1395,7 +1398,8 @@ class EditPerson(DisplayState.ManagedWindow):
readonly=self.db.readonly) readonly=self.db.readonly)
def on_ldsseal_source_clicked(self,obj): def on_ldsseal_source_clicked(self,obj):
Sources.SourceSelector(self.lds_sealing.get_source_references(), Sources.SourceSelector(self.state, self.uistate, self.track,
self.lds_sealing.get_source_references(),
self,self.lds_seal_list) self,self.lds_seal_list)
def lds_seal_list(self,list): def lds_seal_list(self,list):

View File

@ -67,9 +67,10 @@ from WindowUtils import GladeIf
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class EditPlace(DisplayState.ManagedWindow): class EditPlace(DisplayState.ManagedWindow):
def __init__(self,place,dbstate,uistate): def __init__(self,place,dbstate,uistate,trace=[]):
self.dbstate = dbstate self.dbstate = dbstate
self.uistate = uistate self.uistate = uistate
self.trace = []
self.ref_not_loaded = place and place.get_handle() self.ref_not_loaded = place and place.get_handle()
self.idle = None self.idle = None
@ -218,6 +219,7 @@ class EditPlace(DisplayState.ManagedWindow):
self.gladeif.connect('del_url', 'clicked', self.on_delete_url_clicked) self.gladeif.connect('del_url', 'clicked', self.on_delete_url_clicked)
self.sourcetab = Sources.SourceTab( self.sourcetab = Sources.SourceTab(
self.state, self.ui_state, self.track,
self.srcreflist,self, self.srcreflist,self,
self.top_window,self.top,self.slist, self.top_window,self.top,self.slist,
self.top_window.get_widget('add_src'), self.top_window.get_widget('add_src'),
@ -249,12 +251,8 @@ class EditPlace(DisplayState.ManagedWindow):
self.top_window.get_widget('ok').set_sensitive(not self.db.readonly) self.top_window.get_widget('ok').set_sensitive(not self.db.readonly)
self.top.show() self.top.show()
win_menu_label = place.get_title()
if not win_menu_label.strip():
win_menu_label = _("New Place")
DisplayState.ManagedWindow.__init__( DisplayState.ManagedWindow.__init__(self, uistate, [], place)
self, uistate, [], self, win_menu_label, _('Edit Place'))
self.pdmap = {} self.pdmap = {}
self.build_pdmap() self.build_pdmap()
@ -265,6 +263,18 @@ class EditPlace(DisplayState.ManagedWindow):
self.idle = gobject.idle_add(self.display_references) self.idle = gobject.idle_add(self.display_references)
self.ref_not_loaded = False self.ref_not_loaded = False
def build_window_key(self,place):
if place:
return place.get_handle()
else:
return self
def build_menu_names(self,place):
win_menu_label = place.get_title()
if not win_menu_label.strip():
win_menu_label = _("New Place")
return (win_menu_label, _('Edit Place'))
def build_pdmap(self): def build_pdmap(self):
self.pdmap.clear() self.pdmap.clear()
cursor = self.db.get_place_cursor() cursor = self.db.get_place_cursor()
@ -278,7 +288,6 @@ class EditPlace(DisplayState.ManagedWindow):
def on_delete_event(self,obj,b): def on_delete_event(self,obj,b):
self.gladeif.close() self.gladeif.close()
self.glry.close() self.glry.close()
self.remove_itself_from_menu()
gc.collect() gc.collect()
def close(self,obj): def close(self,obj):

View File

@ -53,6 +53,8 @@ import NameDisplay
import RepositoryRefEdit import RepositoryRefEdit
import Spell import Spell
import GrampsDisplay import GrampsDisplay
import DisplayState
from WindowUtils import GladeIf from WindowUtils import GladeIf
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
@ -168,30 +170,26 @@ class ReposRefListView:
return self._widget.get_selection() return self._widget.get_selection()
class EditSource: class EditSource(DisplayState.ManagedWindow):
def __init__(self,source,dbstate,uistate,readonly=False): def __init__(self,dbstate,uistate,track,source,readonly=False):
self.dbstate = dbstate self.dbstate = dbstate
if source: self.track = track
self.source = source self.uistate = uistate
else:
self.source = RelLib.Source()
if self.source.get_handle():
self.ref_not_loaded = 1
else:
self.ref_not_loaded = 0
self.db = dbstate.db self.db = dbstate.db
self.idle = None self.idle = None
self.name_display = NameDisplay.displayer.display self.name_display = NameDisplay.displayer.display
# if source:
# if parent and self.parent.child_windows.has_key(source.get_handle()): DisplayState.ManagedWindow.__init__(self, uistate, self.track, self.source)
# self.parent.child_windows[source.get_handle()].present(None)
# return if source:
# else: self.source = source
# self.win_key = source.get_handle() self.ref_not_loaded = 1
# else: else:
# self.win_key = self self.source = RelLib.Source()
# self.child_windows = {} self.ref_not_loaded = 0
self.path = self.db.get_save_path() self.path = self.db.get_save_path()
self.not_loaded = 1 self.not_loaded = 1
self.lists_changed = 0 self.lists_changed = 0
@ -199,17 +197,17 @@ class EditSource:
mode = not self.db.readonly mode = not self.db.readonly
self.top_window = gtk.glade.XML(const.gladeFile,"sourceEditor","gramps") self.top_window = gtk.glade.XML(const.gladeFile,"sourceEditor","gramps")
self.top = self.top_window.get_widget("sourceEditor") self.window = self.top_window.get_widget("sourceEditor")
self.gladeif = GladeIf(self.top_window) self.gladeif = GladeIf(self.top_window)
Utils.set_titles(self.top,self.top_window.get_widget('title'), Utils.set_titles(self.window,self.top_window.get_widget('title'),
_('Source Editor')) _('Source Editor'))
plwidget = self.top_window.get_widget("iconlist") plwidget = self.top_window.get_widget("iconlist")
self.gallery = ImageSelect.Gallery(source, self.db.commit_place, self.gallery = ImageSelect.Gallery(source, self.db.commit_place,
self.path, self.path,
plwidget, plwidget,
self.db, self, self.top) self.db, self, self.window)
self.author = self.top_window.get_widget("author") self.author = self.top_window.get_widget("author")
self.pubinfo = self.top_window.get_widget("pubinfo") self.pubinfo = self.top_window.get_widget("pubinfo")
self.abbrev = self.top_window.get_widget("abbrev") self.abbrev = self.top_window.get_widget("abbrev")
@ -318,26 +316,34 @@ class EditSource:
else: else:
Utils.unbold_label(self.data_label) Utils.unbold_label(self.data_label)
# if parent_window:
# self.top.set_transient_for(parent_window)
self.top_window.get_widget('ok').set_sensitive(not self.db.readonly) self.top_window.get_widget('ok').set_sensitive(not self.db.readonly)
# if parent_window: self.window.set_transient_for(self.parent_window)
# self.top.set_transient_for(parent_window) self.window.show()
# self.add_itself_to_menu()
self.top.show()
self.model = None # This will hold the model for backreferences once it is complete. self.model = None # This will hold the model for backreferences once it is complete.
if self.ref_not_loaded: if self.ref_not_loaded:
self.ref_not_loaded = 0 self.ref_not_loaded = 0
Utils.temp_label(self.refs_label,self.top) Utils.temp_label(self.refs_label,self.window)
self.cursor_type = None self.cursor_type = None
self.idle = gobject.idle_add(self.display_references) self.idle = gobject.idle_add(self.display_references)
self.data_sel = self.datalist.get_selection() self.data_sel = self.datalist.get_selection()
def build_window_key(self,source):
if source:
return source.get_handle()
else:
return self
def build_menu_names(self,source):
if source:
label = "Edit Source"
else:
label = "New Source"
return (label, _('Source Editor'))
def on_add_data_clicked(self,widget): def on_add_data_clicked(self,widget):
node = self.data_model.append(row=['','']) node = self.data_model.append(row=['',''])
self.data_sel.select_iter(node) self.data_sel.select_iter(node)
@ -392,51 +398,12 @@ class EditSource:
def close(self,obj): def close(self,obj):
self.gallery.close() self.gallery.close()
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close() self.gladeif.close()
self.top.destroy() self.window.destroy()
if self.idle != None: if self.idle != None:
gobject.source_remove(self.idle) gobject.source_remove(self.idle)
gc.collect() gc.collect()
def close_child_windows(self):
return
for child_window in self.child_windows.values():
child_window.close(None)
self.child_windows = {}
def add_itself_to_menu(self):
return
self.parent.child_windows[self.win_key] = self
if not self.source:
label = _("New Source")
else:
label = self.source.get_title()
if not label.strip():
label = _("New Source")
label = "%s: %s" % (_('Source'),label)
self.parent_menu_item = gtk.MenuItem(label)
self.parent_menu_item.set_submenu(gtk.Menu())
self.parent_menu_item.show()
self.parent.winsmenu.append(self.parent_menu_item)
self.winsmenu = self.parent_menu_item.get_submenu()
self.menu_item = gtk.MenuItem(_('Source Editor'))
self.menu_item.connect("activate",self.present)
self.menu_item.show()
self.winsmenu.append(self.menu_item)
def remove_itself_from_menu(self):
return
del self.parent.child_windows[self.win_key]
self.menu_item.destroy()
self.winsmenu.destroy()
self.parent_menu_item.destroy()
def present(self,obj):
return
self.top.present()
def button_press(self,obj): def button_press(self,obj):
data = self.model.get_selected_objects() data = self.model.get_selected_objects()
if not data: if not data:
@ -556,9 +523,9 @@ class EditSource:
return True return True
if self.any_refs: if self.any_refs:
Utils.bold_label(self.refs_label,self.top) Utils.bold_label(self.refs_label,self.window)
else: else:
Utils.unbold_label(self.refs_label,self.top) Utils.unbold_label(self.refs_label,self.window)
self.ref_not_loaded = 0 self.ref_not_loaded = 0
self.backlink_generator = None self.backlink_generator = None
@ -629,7 +596,7 @@ class EditSource:
self.gallery.load_images() self.gallery.load_images()
elif page == 3 and self.ref_not_loaded: elif page == 3 and self.ref_not_loaded:
self.ref_not_loaded = 0 self.ref_not_loaded = 0
Utils.temp_label(self.refs_label,self.top) Utils.temp_label(self.refs_label,self.window)
self.idle = gobject.idle_add(self.display_references) self.idle = gobject.idle_add(self.display_references)
text = unicode( text = unicode(
self.notes_buffer.get_text(self.notes_buffer.get_start_iter(), self.notes_buffer.get_text(self.notes_buffer.get_start_iter(),
@ -637,9 +604,9 @@ class EditSource:
False) False)
) )
if text: if text:
Utils.bold_label(self.notes_label,self.top) Utils.bold_label(self.notes_label,self.window)
else: else:
Utils.unbold_label(self.notes_label,self.top) Utils.unbold_label(self.notes_label,self.window)
def update_repositories(self, repos_ref): def update_repositories(self, repos_ref):
"""Make the repository list reflect the change or addition of repos_ref""" """Make the repository list reflect the change or addition of repos_ref"""

View File

@ -95,23 +95,17 @@ def get_place(field,pmap,db):
# EventEditor class # EventEditor class
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class EventEditor: class EventEditor(DisplayState.ManagedWindow):
def __init__(self,event,dbstate,uistate): def __init__(self,event,dbstate,uistate,track=[]):
#self.parent = parent
self.db = dbstate.db self.db = dbstate.db
self.uistate = uistate
self.dbstate = dbstate
self.track = track
read_only = self.db.readonly read_only = self.db.readonly
noedit = self.db.readonly noedit = self.db.readonly
# if event:
# if self.parent.child_windows.has_key(event.get_handle()):
# self.parent.child_windows[event.get_handle()].present(None)
# return
# else:
# self.win_key = event.get_handle()
# else:
# self.win_key = self
self.event = event self.event = event
# self.child_windows = {}
self.path = self.db.get_save_path() self.path = self.db.get_save_path()
self.plist = [] self.plist = []
self.pmap = {} self.pmap = {}
@ -119,6 +113,10 @@ class EventEditor:
self.dp = _dp self.dp = _dp
self.dd = _dd self.dd = _dd
DisplayState.ManagedWindow.__init__(self, uistate, [], event)
if self.already_exist:
return
# build list for menu # build list for menu
## values = sets.Set(elist) ## values = sets.Set(elist)
## values.union(self.get_event_names()) ## values.union(self.get_event_names())
@ -184,7 +182,7 @@ class EventEditor:
del_src = self.top.get_widget('del_src') del_src = self.top.get_widget('del_src')
del_src.set_sensitive(not noedit) del_src.set_sensitive(not noedit)
self.sourcetab = Sources.SourceTab( self.sourcetab = Sources.SourceTab(self.dbstate, self.uistate, self.track,
self.srcreflist, self, self.top, self.window, self.slist, self.srcreflist, self, self.top, self.window, self.slist,
add_src, self.top.get_widget('edit_src'), del_src, add_src, self.top.get_widget('edit_src'), del_src,
self.db.readonly) self.db.readonly)
@ -263,70 +261,33 @@ class EventEditor:
Utils.bold_label(self.general_label) Utils.bold_label(self.general_label)
# try: self.window.set_transient_for(self.parent_window)
# self.window.set_transient_for(self.parent.window)
# except AttributeError:
# pass
# self.add_itself_to_menu()
self.window.show() self.window.show()
def build_menu_names(self,event):
if event:
win_menu_label = event.get_type()[1]
if not win_menu_label.strip():
win_menu_label = _("New Place")
return (win_menu_label,_('Edit Place'))
def build_window_key(self,obj):
if obj:
win_key = obj.get_handle()
else:
win_key = self
def on_delete_event(self,obj,b): def on_delete_event(self,obj,b):
self.gladeif.close() self.gladeif.close()
self.gallery.close() self.gallery.close()
self.close_child_windows()
self.remove_itself_from_menu()
gc.collect() gc.collect()
def close(self,obj): def close(self,obj):
self.gladeif.close() self.gladeif.close()
self.gallery.close() self.gallery.close()
self.close_child_windows()
self.remove_itself_from_menu()
self.window.destroy() self.window.destroy()
gc.collect() gc.collect()
def close_child_windows(self):
return
for child_window in self.child_windows.values():
child_window.close(None)
self.child_windows = {}
def add_itself_to_menu(self):
return
self.parent.child_windows[self.win_key] = self
if not self.event:
label = _("New Event")
else:
(val,strval) = self.event.get_type()
if val == RelLib.Event.CUSTOM:
label = strval
else:
label = total_events[val]
if not label.strip():
label = _("New Event")
label = "%s: %s" % (_('Event'),label)
self.parent_menu_item = gtk.MenuItem(label)
self.parent_menu_item.set_submenu(gtk.Menu())
self.parent_menu_item.show()
self.parent.winsmenu.append(self.parent_menu_item)
self.winsmenu = self.parent_menu_item.get_submenu()
self.menu_item = gtk.MenuItem(_('Event Editor'))
self.menu_item.connect("activate",self.present)
self.menu_item.show()
self.winsmenu.append(self.menu_item)
def remove_itself_from_menu(self):
return
if self.window:
del self.parent.child_windows[self.win_key]
self.menu_item.destroy()
self.winsmenu.destroy()
self.parent_menu_item.destroy()
def present(self,obj):
return
self.window.present()
def on_help_clicked(self,obj): def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual""" """Display the relevant portion of GRAMPS manual"""
GrampsDisplay.help('adv-ev') GrampsDisplay.help('adv-ev')
@ -443,33 +404,14 @@ class EventRefEditor(DisplayState.ManagedWindow):
self.state = state self.state = state
self.uistate = uistate self.uistate = uistate
self.referent = referent self.referent = referent
if event_ref:
win_key = event_ref
else:
win_key = self
if event:
if event.get_type()[0] == RelLib.Event.CUSTOM:
event_name = event.get_type()[1]
else:
try:
event_name = Utils.personal_events[event.get_type()[0]]
except:
event_name = Utils.family_events[event.get_type()[0]]
submenu_label = _('Event: %s') % event_name
else:
submenu_label = _('New Event')
menu_label = _('Event Reference Editor')
DisplayState.ManagedWindow.__init__(
self, uistate, track, win_key, submenu_label, menu_label)
DisplayState.ManagedWindow.__init__(self, uistate, track, event_ref)
if self.already_exist: if self.already_exist:
return return
self.update = update self.update = update
self.event_ref = event_ref self.event_ref = event_ref
self.event = event self.event = event
self.child_windows = {}
self.pmap = {} self.pmap = {}
for key in self.db.get_place_handles(): for key in self.db.get_place_handles():
@ -570,6 +512,7 @@ class EventRefEditor(DisplayState.ManagedWindow):
self.srcreflist = self.event.get_source_references() self.srcreflist = self.event.get_source_references()
self.sourcetab = Sources.SourceTab( self.sourcetab = Sources.SourceTab(
self.state, self.uistate, self.track,
self.srcreflist, self, self.top, self.window, self.slist, self.srcreflist, self, self.top, self.window, self.slist,
add_src, self.top.get_widget('eer_edit_src'), del_src, add_src, self.top.get_widget('eer_edit_src'), del_src,
self.db.readonly) self.db.readonly)
@ -609,6 +552,26 @@ class EventRefEditor(DisplayState.ManagedWindow):
self.window.set_transient_for(self.parent_window) self.window.set_transient_for(self.parent_window)
self.window.show() self.window.show()
def build_menu_names(self,event):
if event:
if event.get_type()[0] == RelLib.Event.CUSTOM:
event_name = event.get_type()[1]
else:
try:
event_name = Utils.personal_events[event.get_type()[0]]
except:
event_name = Utils.family_events[event.get_type()[0]]
submenu_label = _('Event: %s') % event_name
else:
submenu_label = _('New Event')
menu_label = _('Event Reference Editor')
def build_window_key(self,event):
if event:
return event.get_handle()
else:
return self
def on_help_clicked(self,obj): def on_help_clicked(self,obj):
pass pass

View File

@ -111,10 +111,10 @@ class EventView(PageView.ListView):
def on_double_click(self,obj,event): def on_double_click(self,obj,event):
handle = self.first_selected() handle = self.first_selected()
the_event = self.dbstate.db.get_event_from_handle(handle) the_event = self.dbstate.db.get_event_from_handle(handle)
EventEdit.EventEditor(the_event,self.dbstate, self.uistate) EventEdit.EventEditor(the_event,self.dbstate, self.uistate, [])
def add(self,obj): def add(self,obj):
EventEdit.EventEditor(RelLib.Event(),self.dbstate, self.uistate) EventEdit.EventEditor(RelLib.Event(),self.dbstate, self.uistate, [])
def remove(self,obj): def remove(self,obj):
for event_handle in self.selected_handles(): for event_handle in self.selected_handles():

View File

@ -499,14 +499,14 @@ class NameListBox(ReorderListBox):
self.data[index].set_suffix(value) self.data[index].set_suffix(value)
def add(self,obj): def add(self,obj):
NameEdit.NameEditor(self.state, self.uistate, None, self.edit_callback) NameEdit.NameEditor(self.state, self.uistate, None, self.track)
def update(self,obj): def update(self,obj):
store,node = self.list_model.get_selected() store,node = self.list_model.get_selected()
if node: if node:
NameEdit.NameEditor(self.state, self.uistate, NameEdit.NameEditor(self.state, self.uistate,
self.list_model.get_object(node), self.list_model.get_object(node),
self.edit_callback) self.track)
def display_data(self,name): def display_data(self,name):
has_note = name.get_note() has_note = name.get_note()

View File

@ -52,6 +52,7 @@ import DateEdit
import DateHandler import DateHandler
import Spell import Spell
import GrampsDisplay import GrampsDisplay
import DisplayState
from WindowUtils import GladeIf from WindowUtils import GladeIf
@ -60,23 +61,19 @@ from WindowUtils import GladeIf
# NameEditor class # NameEditor class
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class NameEditor: class NameEditor(DisplayState.ManagedWindow):
def __init__(self,parent,name,callback,parent_window=None): def __init__(self,dbstate,uistate,name,track):
self.db = dbstate.db
self.uistate = uistate
self.state = dbstate
DisplayState.ManagedWindow.__init__(self, uistate, track, name)
if self.already_exist:
return
self.parent = parent
self.db = self.parent.db
if name:
if self.parent.child_windows.has_key(name):
self.parent.child_windows[name].present(None)
return
else:
self.win_key = name
else:
self.win_key = self
self.name = name self.name = name
self.callback = callback
self.child_windows = {}
self.top = gtk.glade.XML(const.dialogFile, "name_edit","gramps") self.top = gtk.glade.XML(const.dialogFile, "name_edit","gramps")
self.gladeif = GladeIf(self.top) self.gladeif = GladeIf(self.top)
self.window = self.top.get_widget("name_edit") self.window = self.top.get_widget("name_edit")
@ -113,7 +110,7 @@ class NameEditor:
self.date_obj, self.date, self.date_obj, self.date,
date_stat, self.window) date_stat, self.window)
AutoComp.fill_combo(self.combo,self.parent.db.get_surname_list()) AutoComp.fill_combo(self.combo,self.db.get_surname_list())
self.surname_field = self.combo.get_child() self.surname_field = self.combo.get_child()
self.prefix_field = self.top.get_widget("alt_prefix") self.prefix_field = self.top.get_widget("alt_prefix")
self.prefix_field.set_editable(not self.db.readonly) self.prefix_field.set_editable(not self.db.readonly)
@ -153,6 +150,7 @@ class NameEditor:
Utils.set_titles(self.window, alt_title, tmsg, _('Name Editor')) Utils.set_titles(self.window, alt_title, tmsg, _('Name Editor'))
self.sourcetab = Sources.SourceTab( self.sourcetab = Sources.SourceTab(
self.state, self.uistate, self.track,
self.srcreflist, self, self.top, self.window, self.slist, self.srcreflist, self, self.top, self.window, self.slist,
self.top.get_widget('add_src'), self.top.get_widget('edit_src'), self.top.get_widget('add_src'), self.top.get_widget('edit_src'),
self.top.get_widget('del_src'), self.db.readonly) self.top.get_widget('del_src'), self.db.readonly)
@ -201,12 +199,19 @@ class NameEditor:
Utils.unbold_label(self.sources_label) Utils.unbold_label(self.sources_label)
Utils.unbold_label(self.general_label) Utils.unbold_label(self.general_label)
if parent_window:
self.window.set_transient_for(parent_window)
self.surname_field.connect('changed',self.update_group_as) self.surname_field.connect('changed',self.update_group_as)
self.add_itself_to_menu()
self.window.set_transient_for(self.parent_window)
self.window.show() self.window.show()
def build_menu_names(self,name):
if name:
submenu_label = _('%s: %s') % (_('Name',NameDisplay.displayer.display(name)))
else:
submenu_label = _('New Name')
menu_label = _('Name Editor')
return (menu_label,submenu_label)
def update_group_as(self,obj): def update_group_as(self,obj):
if not self.group_over.get_active(): if not self.group_over.get_active():
if self.name and self.name.get_group_as() != self.name.get_surname(): if self.name and self.name.get_group_as() != self.name.get_surname():
@ -229,50 +234,13 @@ class NameEditor:
def on_delete_event(self,*obj): def on_delete_event(self,*obj):
self.gladeif.close() self.gladeif.close()
self.close_child_windows()
self.remove_itself_from_menu()
gc.collect() gc.collect()
def close(self,*obj): def close(self,*obj):
self.gladeif.close() self.gladeif.close()
self.close_child_windows()
self.remove_itself_from_menu()
self.window.destroy() self.window.destroy()
gc.collect() gc.collect()
def close_child_windows(self):
for child_window in self.child_windows.values():
child_window.close(None)
self.child_windows = {}
def add_itself_to_menu(self):
self.parent.child_windows[self.win_key] = self
if not self.name:
label = _("New Name")
else:
label = self.name.get_name()
if not label.strip():
label = _("New Name")
label = "%s: %s" % (_('Alternate Name'),label)
self.parent_menu_item = gtk.MenuItem(label)
self.parent_menu_item.set_submenu(gtk.Menu())
self.parent_menu_item.show()
self.parent.winsmenu.append(self.parent_menu_item)
self.winsmenu = self.parent_menu_item.get_submenu()
self.menu_item = gtk.MenuItem(_('Name Editor'))
self.menu_item.connect("activate",self.present)
self.menu_item.show()
self.winsmenu.append(self.menu_item)
def remove_itself_from_menu(self):
del self.parent.child_windows[self.win_key]
self.menu_item.destroy()
self.winsmenu.destroy()
self.parent_menu_item.destroy()
def present(self,*obj):
self.window.present()
def on_help_clicked(self,*obj): def on_help_clicked(self,*obj):
"""Display the relevant portion of GRAMPS manual""" """Display the relevant portion of GRAMPS manual"""
GrampsDisplay.help('adv-an') GrampsDisplay.help('adv-an')
@ -346,7 +314,6 @@ class NameEditor:
self.update_name(first,last,suffix,patronymic,title,the_type,note,format,priv) self.update_name(first,last,suffix,patronymic,title,the_type,note,format,priv)
self.parent.lists_changed = 1 self.parent.lists_changed = 1
self.callback(self.name)
self.close(obj) self.close(obj)
def update_name(self,first,last,suffix,patronymic,title,the_type,note,format,priv): def update_name(self,first,last,suffix,patronymic,title,the_type,note,format,priv):

View File

@ -110,10 +110,10 @@ class SourceView(PageView.ListView):
def on_double_click(self,obj,event): def on_double_click(self,obj,event):
handle = self.first_selected() handle = self.first_selected()
source = self.dbstate.db.get_source_from_handle(handle) source = self.dbstate.db.get_source_from_handle(handle)
EditSource.EditSource(source,self.dbstate, self.uistate) EditSource.EditSource(self.dbstate, self.uistate, [], source)
def add(self,obj): def add(self,obj):
EditSource.EditSource(RelLib.Source(),self.dbstate, self.uistate) EditSource.EditSource(self.dbstate, self.uistate, [], RelLib.Source())
def remove(self,obj): def remove(self,obj):
for event_handle in self.selected_handles(): for event_handle in self.selected_handles():
@ -151,5 +151,5 @@ class SourceView(PageView.ListView):
for handle in mlist: for handle in mlist:
source = self.dbstate.db.get_source_from_handle(handle) source = self.dbstate.db.get_source_from_handle(handle)
EditSource.EditSource(source, self.dbstate, self.uistate) EditSource.EditSource(self.dbstate, self.uistate, [], source)

View File

@ -52,6 +52,7 @@ import DateEdit
import DateHandler import DateHandler
import GrampsDisplay import GrampsDisplay
import Spell import Spell
import DisplayState
from DdTargets import DdTargets from DdTargets import DdTargets
from WindowUtils import GladeIf from WindowUtils import GladeIf
@ -62,21 +63,27 @@ from WindowUtils import GladeIf
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class SourceSelector: class SourceSelector(DisplayState.ManagedWindow):
def __init__(self,srclist,parent,update=None): def __init__(self,state,uistate,track,srclist,parent,update=None):
self.db = parent.db self.db = state.db
self.parent = parent self.state = state
self.uistate = uistate
self.track = track
if srclist: if srclist:
if self.parent.child_windows.has_key(id(srclist)): win_key = id(srclist)
self.parent.child_windows[id(srclist)].present(None)
return
else:
self.win_key = id(srclist)
else: else:
self.win_key = self win_key = self
submenu_label = _('Source')
DisplayState.ManagedWindow.__init__(
self, uistate, self.track, win_key, submenu_label,
_('Source Selector'))
self.orig = srclist self.orig = srclist
self.list = [] self.list = []
self.child_windows = {}
for s in self.orig: for s in self.orig:
self.list.append(RelLib.SourceRef(s)) self.list.append(RelLib.SourceRef(s))
self.update=update self.update=update
@ -130,44 +137,13 @@ class SourceSelector:
def on_delete_event(self,obj,b): def on_delete_event(self,obj,b):
self.gladeif.close() self.gladeif.close()
self.close_child_windows()
self.remove_itself_from_menu()
gc.collect() gc.collect()
def close(self,obj): def close(self,obj):
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close() self.gladeif.close()
self.window.destroy() self.window.destroy()
gc.collect() gc.collect()
def close_child_windows(self):
for child_window in self.child_windows.values():
child_window.close(None)
self.child_windows = {}
def add_itself_to_menu(self):
self.parent.child_windows[self.win_key] = self
label = _('Source Reference')
self.parent_menu_item = gtk.MenuItem(label)
self.parent_menu_item.set_submenu(gtk.Menu())
self.parent_menu_item.show()
self.parent.winsmenu.append(self.parent_menu_item)
self.winsmenu = self.parent_menu_item.get_submenu()
self.menu_item = gtk.MenuItem(_('Reference Selector'))
self.menu_item.connect("activate",self.present)
self.menu_item.show()
self.winsmenu.append(self.menu_item)
def remove_itself_from_menu(self):
del self.parent.child_windows[self.win_key]
self.menu_item.destroy()
self.winsmenu.destroy()
self.parent_menu_item.destroy()
def present(self,obj):
self.window.present()
def on_help_clicked(self,obj): def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual""" """Display the relevant portion of GRAMPS manual"""
GrampsDisplay.help('gramps-edit-complete') GrampsDisplay.help('gramps-edit-complete')
@ -229,10 +205,13 @@ class SourceSelector:
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class SourceTab: class SourceTab:
def __init__(self, srclist, parent, top, window, clist, add_btn, def __init__(self, state, uistate, track, srclist, parent, top, window,
edit_btn, del_btn, readonly=False): clist, add_btn, edit_btn, del_btn, readonly=False):
self.db = parent.db self.db = state.db
self.state = state
self.uistate = uistate
self.track = track
self.parent = parent self.parent = parent
self.list = srclist self.list = srclist
self.top = top self.top = top
@ -340,11 +319,11 @@ class SourceTab:
if node: if node:
col = store.get_path(node) col = store.get_path(node)
src = self.list[col[0]] src = self.list[col[0]]
SourceEditor(src,self.db,self.update_clist,self) SourceEditor(self.state, self.uistate, self.track, src, self.update_clist)
def add_src_clicked(self,obj): def add_src_clicked(self,obj):
src = RelLib.SourceRef() src = RelLib.SourceRef()
SourceEditor(src,self.db,self.add_ref,self) SourceEditor(self.state, self.uistate, self.track, src, self.add_ref)
def del_src_clicked(self,obj): def del_src_clicked(self,obj):
(store,node) = self.selection.get_selected() (store,node) = self.selection.get_selected()
@ -359,32 +338,30 @@ class SourceTab:
# SourceEditor # SourceEditor
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class SourceEditor: class SourceEditor(DisplayState.ManagedWindow):
def __init__(self, srcref, database, update, parent): def __init__(self, state, uistate, track, srcref, update):
self.db = database self.db = state.db
self.parent = parent self.state = state
if self.parent.__dict__.has_key('child_windows'): self.track = track
self.win_parent = self.parent self.uistate = uistate
else:
self.win_parent = self.parent.parent
if srcref: if srcref:
if self.win_parent.child_windows.has_key(srcref): submenu_label = _('Source Reference')
self.win_parent.child_windows[srcref].present(None)
return
else:
self.win_key = srcref
else: else:
self.win_key = self submenu_label = _('New Source Reference')
DisplayState.ManagedWindow.__init__(
self, uistate, self.track, srcref, submenu_label,
_('Source Reference Editor'))
self.update = update self.update = update
self.source_ref = srcref self.source_ref = srcref
self.child_windows = {}
self.showSource = gtk.glade.XML(const.srcselFile, self.showSource = gtk.glade.XML(const.srcselFile,
"sourceDisplay","gramps") "sourceDisplay","gramps")
self.sourceDisplay = self.get_widget("sourceDisplay") self.window = self.get_widget("sourceDisplay")
Utils.set_titles(self.sourceDisplay, Utils.set_titles(self.window,
self.showSource.get_widget('title'), self.showSource.get_widget('title'),
_('Source Information')) _('Source Information'))
@ -433,7 +410,7 @@ class SourceEditor:
date_stat.set_sensitive(not self.db.readonly) date_stat.set_sensitive(not self.db.readonly)
self.date_check = DateEdit.DateEdit( self.date_check = DateEdit.DateEdit(
self.date_obj, self.date_entry_field, self.date_obj, self.date_entry_field,
date_stat, self.sourceDisplay) date_stat, self.window)
self.spage = self.get_widget("spage") self.spage = self.get_widget("spage")
self.spage.set_editable(not self.db.readonly) self.spage.set_editable(not self.db.readonly)
@ -446,61 +423,22 @@ class SourceEditor:
self.draw(self.active_source,fresh=True) self.draw(self.active_source,fresh=True)
self.set_button() self.set_button()
if self.parent: self.window.set_transient_for(self.parent_window)
self.sourceDisplay.set_transient_for(self.parent.window)
self.add_itself_to_menu()
self.db.connect('source-add', self.rebuild_menu) self.db.connect('source-add', self.rebuild_menu)
self.sourceDisplay.show() self.window.show()
def rebuild_menu(self,handle_list): def rebuild_menu(self,handle_list):
self.build_source_menu(handle_list[0]) self.build_source_menu(handle_list[0])
def on_delete_event(self,obj,b): def on_delete_event(self,obj,b):
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close() self.gladeif.close()
gc.collect() gc.collect()
def close(self,obj): def close(self,obj):
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close() self.gladeif.close()
self.sourceDisplay.destroy() self.window.destroy()
gc.collect() gc.collect()
def close_child_windows(self):
for child_window in self.child_windows.values():
child_window.close(None)
self.child_windows = {}
def add_itself_to_menu(self):
self.win_parent.child_windows[self.win_key] = self
if self.active_source:
label = self.active_source.get_title()
else:
label = _("New Source")
if not label.strip():
label = _("New Source")
label = "%s: %s" % (_('Source Reference'),label)
self.parent_menu_item = gtk.MenuItem(label)
self.parent_menu_item.set_submenu(gtk.Menu())
self.parent_menu_item.show()
self.win_parent.winsmenu.append(self.parent_menu_item)
self.winsmenu = self.parent_menu_item.get_submenu()
self.menu_item = gtk.MenuItem(_('Source Information'))
self.menu_item.connect("activate",self.present)
self.menu_item.show()
self.winsmenu.append(self.menu_item)
def remove_itself_from_menu(self):
del self.win_parent.child_windows[self.win_key]
self.menu_item.destroy()
self.winsmenu.destroy()
self.parent_menu_item.destroy()
def present(self,obj):
self.sourceDisplay.present()
def on_help_clicked(self,obj): def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual""" """Display the relevant portion of GRAMPS manual"""
GrampsDisplay.help('adv-si') GrampsDisplay.help('adv-si')
@ -609,4 +547,4 @@ class SourceEditor:
def add_src_clicked(self,obj): def add_src_clicked(self,obj):
import EditSource import EditSource
EditSource.EditSource(RelLib.Source(),self.db, self) EditSource.EditSource(self.state, self.uistate, self.track, RelLib.Source())