diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 711e0f1b0..579886e67 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,13 @@ +2005-12-23 Don Allingham + * DisplayState.py: recent file support + * EditPerson.py: Window management + * EditSource.py: Window management + * EventEdit.py: Window management + * ListBox.py: Window management + * Sources.py: Window management + * UrlEdit.py: Window management + * ViewManager.py: Window management + 2005-12-23 Alex Roitman * src/EditPerson.py: Swap menu/submenu labels. * src/EventEdit.py: Menu label fixes. diff --git a/gramps2/src/DisplayState.py b/gramps2/src/DisplayState.py index 28f9cb3b1..061e30f45 100644 --- a/gramps2/src/DisplayState.py +++ b/gramps2/src/DisplayState.py @@ -340,6 +340,59 @@ class GrampsWindowManager: self.action_group.add_actions(action_data) self.enable() + +#------------------------------------------------------------------------- +# +# Recent Docs Menu +# +#------------------------------------------------------------------------- + +_rct_top = '' +_rct_btm = '' + +import RecentFiles +import os +try: + from gnomevfs import get_mime_type +except: + from gnome.vfs import get_mime_type + +class RecentDocsMenu: + def __init__(self,uimanager): + self.action_group = gtk.ActionGroup('RecentFiles') + self.active = DISABLED + self.uimanager = uimanager + + def build(self): + f = StringIO() + f.write(_rct_top) + gramps_rf = RecentFiles.GrampsRecentFiles() + + count = 0 + + if self.active != DISABLED: + self.uimanager.remove_ui(self.active) + self.uimanager.remove_action_group(self.action_group) + self.active = DISABLED + + actions = [] + for item in gramps_rf.gramps_recent_files: + try: + filename = os.path.basename(item.get_path()).replace('_','__') + filetype = get_mime_type(item.get_path()) + action_id = "RecentMenu%d" % count + f.write('' % action_id) + actions.append((action_id,None,filename,None,None,None)) + except RuntimeError: + pass # ignore no longer existing files + + count +=1 + f.write(_rct_btm) + self.action_group.add_actions(actions) + self.uimanager.insert_action_group(self.action_group,1) + self.action = self.uimanager.add_ui_from_string(f.getvalue()) + f.close() + #------------------------------------------------------------------------- # # Gramps Managed Window class diff --git a/gramps2/src/EditPerson.py b/gramps2/src/EditPerson.py index 566c7c992..0ee67542b 100644 --- a/gramps2/src/EditPerson.py +++ b/gramps2/src/EditPerson.py @@ -108,7 +108,7 @@ class EditPerson(DisplayState.ManagedWindow): else: self.orig_handle = "" - DisplayState.ManagedWindow.__init__(self, uistate, [], person) + DisplayState.ManagedWindow.__init__(self, uistate, track, person) if self.already_exist: return diff --git a/gramps2/src/EditSource.py b/gramps2/src/EditSource.py index 1fbd67ff6..997916cae 100644 --- a/gramps2/src/EditSource.py +++ b/gramps2/src/EditSource.py @@ -181,7 +181,7 @@ class EditSource(DisplayState.ManagedWindow): self.idle = None self.name_display = NameDisplay.displayer.display - DisplayState.ManagedWindow.__init__(self, uistate, self.track, self.source) + DisplayState.ManagedWindow.__init__(self, uistate, self.track, source) if source: self.source = source @@ -411,7 +411,7 @@ class EditSource(DisplayState.ManagedWindow): if data_type == 0: import EditPerson person = self.db.get_person_from_handle(handle) - EditPerson.EditPerson(self.parent,person,self.db) + EditPerson.EditPerson(self.state, self.uistate, self.track, person) elif data_type == 1: import Marriage family = self.db.get_family_from_handle(handle) diff --git a/gramps2/src/EventEdit.py b/gramps2/src/EventEdit.py index 3a2a73a3b..f7b6063e3 100644 --- a/gramps2/src/EventEdit.py +++ b/gramps2/src/EventEdit.py @@ -113,7 +113,7 @@ class EventEditor(DisplayState.ManagedWindow): self.dp = _dp self.dd = _dd - DisplayState.ManagedWindow.__init__(self, uistate, [], event) + DisplayState.ManagedWindow.__init__(self, uistate, self.track, event) if self.already_exist: return diff --git a/gramps2/src/ListBox.py b/gramps2/src/ListBox.py index 2cfd188ff..afd30e13f 100644 --- a/gramps2/src/ListBox.py +++ b/gramps2/src/ListBox.py @@ -612,15 +612,16 @@ class UrlListBox(ReorderListBox): self.data[index].set_description(value) def add(self,obj): - UrlEdit.UrlEditor(self.state, self.uistate, self.name, None, - self.edit_callback) + UrlEdit.UrlEditor(self.state, self.uistate, self.track, + self.name, None, self.edit_callback) def update(self,obj): store,node = self.list_model.get_selected() if node: - UrlEdit.UrlEditor(self.state, self.uistate, self.name, + UrlEdit.UrlEditor(self.state, self.uistate, self.track, + self.name, self.list_model.get_object(node), - self.edit_callback, self.window) + self.edit_callback) def display_data(self,url): return [url.get_path(), url.get_description()] diff --git a/gramps2/src/Sources.py b/gramps2/src/Sources.py index e1bb2e488..a9e2fb12c 100644 --- a/gramps2/src/Sources.py +++ b/gramps2/src/Sources.py @@ -319,7 +319,8 @@ class SourceTab: if node: col = store.get_path(node) src = self.list[col[0]] - SourceEditor(self.state, self.uistate, self.track, src, self.update_clist) + SourceEditor(self.state, self.uistate, self.track, + src, self.update_clist) def add_src_clicked(self,obj): src = RelLib.SourceRef() @@ -351,9 +352,7 @@ class SourceEditor(DisplayState.ManagedWindow): else: submenu_label = _('New Source Reference') - DisplayState.ManagedWindow.__init__( - self, uistate, self.track, srcref, submenu_label, - _('Source Reference Editor')) + DisplayState.ManagedWindow.__init__(self, uistate, self.track, srcref) self.update = update self.source_ref = srcref @@ -427,6 +426,13 @@ class SourceEditor(DisplayState.ManagedWindow): self.db.connect('source-add', self.rebuild_menu) self.window.show() + def build_menu_names(self,srcref): + if srcref: + submenu_label = _('Source Reference') + else: + submenu_label = _('New Source Reference') + return (_('Source Reference Editor'),submenu_label) + def rebuild_menu(self,handle_list): self.build_source_menu(handle_list[0]) diff --git a/gramps2/src/UrlEdit.py b/gramps2/src/UrlEdit.py index 9a590f7b0..08c58f8a2 100644 --- a/gramps2/src/UrlEdit.py +++ b/gramps2/src/UrlEdit.py @@ -45,6 +45,8 @@ import const import Utils import RelLib import GrampsDisplay +import DisplayState + from WindowUtils import GladeIf #------------------------------------------------------------------------- @@ -52,18 +54,20 @@ from WindowUtils import GladeIf # UrlEditor class # #------------------------------------------------------------------------- -class UrlEditor: +class UrlEditor(DisplayState.ManagedWindow): + + def __init__(self, dbstate, uistate, track, name, url, callback): + + self.db = dbstate.db + self.uistate = uistate + self.state = dbstate + self.callback = callback + self.name = name + + DisplayState.ManagedWindow.__init__(self, uistate, track, url) + if self.already_exist: + return - def __init__(self,parent,name,url,callback,parent_window=None): - self.parent = parent - if url: - if self.parent.child_windows.has_key(url): - self.parent.child_windows[url].present(None) - return - else: - self.win_key = url - else: - self.win_key = self self.url = url self.callback = callback self.top = gtk.glade.XML(const.dialogFile, "url_edit","gramps") @@ -78,7 +82,7 @@ class UrlEditor: if not name or name == ", ": etitle =_('Internet Address Editor') else: - etitle =_('Internet Address Editor for %s') % escape(name), + etitle =_('Internet Address Editor for %s') % escape(name) Utils.set_titles(self.window,title_label, etitle, @@ -93,37 +97,25 @@ class UrlEditor: self.gladeif.connect('button124','clicked', self.on_url_edit_ok_clicked) self.gladeif.connect('button130','clicked', self.on_help_clicked) - if parent_window: - self.window.set_transient_for(parent_window) - self.add_itself_to_menu() + self.window.set_transient_for(self.parent_window) self.window.show() + def build_menu_names(self,obj): + if not self.name or self.name == ", ": + etitle =_('Internet Address Editor') + else: + etitle =_('Internet Address Editor for %s') % escape(self.name) + return (etitle, _('Internet Address Editor')) + def on_delete_event(self,*obj): self.gladeif.close() - self.remove_itself_from_menu() gc.collect() def close(self,*obj): self.gladeif.close() - self.remove_itself_from_menu() self.window.destroy() gc.collect() - def add_itself_to_menu(self): - self.parent.child_windows[self.win_key] = self - label = _('Internet Address Editor') - self.parent_menu_item = gtk.MenuItem(label) - self.parent_menu_item.connect("activate",self.present) - self.parent_menu_item.show() - self.parent.winsmenu.append(self.parent_menu_item) - - def remove_itself_from_menu(self): - del self.parent.child_windows[self.win_key] - self.parent_menu_item.destroy() - - def present(self,*obj): - self.window.present() - def on_help_clicked(self,*obj): """Display the relevant portion of GRAMPS manual""" GrampsDisplay.help('gramps-edit-complete') @@ -133,10 +125,6 @@ class UrlEditor: addr = unicode(self.addr.get_text()) priv = self.priv.get_active() - if self.url == None: - self.url = RelLib.Url() - self.parent.ulist.append(self.url) - self.update_url(des,addr,priv) self.callback(self.url) self.close(obj) @@ -144,12 +132,10 @@ class UrlEditor: def update_url(self,des,addr,priv): if self.url.get_path() != addr: self.url.set_path(addr) - self.parent.lists_changed = 1 if self.url.get_description() != des: self.url.set_description(des) - self.parent.lists_changed = 1 if self.url.get_privacy() != priv: self.url.set_privacy(priv) - self.parent.lists_changed = 1 + diff --git a/gramps2/src/ViewManager.py b/gramps2/src/ViewManager.py index e902efb29..562af72eb 100644 --- a/gramps2/src/ViewManager.py +++ b/gramps2/src/ViewManager.py @@ -78,7 +78,8 @@ uidefault = ''' - + + @@ -203,6 +204,8 @@ class ViewManager: person_nav = Navigation.PersonNavigation(self.uistate) self.navigation_type[PageView.NAVIGATION_PERSON] = (person_nav,None) + self.recent_manager = DisplayState.RecentDocsMenu(self.uimanager) + self.recent_manager.build() self.window.show() def init_interface(self): @@ -237,7 +240,7 @@ class ViewManager: ('FileMenu', None, '_File'), ('New', gtk.STOCK_NEW, '_New', "n", None, self.new_activate), ('Open', gtk.STOCK_OPEN, '_Open', "o", None, self.open_activate), - ('OpenRecent', gtk.STOCK_OPEN, 'Open _Recent'), + ('OpenRecent', None, 'Open _Recent'), ('Quit', gtk.STOCK_QUIT, '_Quit', "q", None, self.quit), ('ViewMenu', None, '_View'), ('Preferences', gtk.STOCK_PREFERENCES, '_Preferences'),