From 0104f2850955bd29b98740e06c3fd95bcb30bd1f Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Fri, 12 Aug 2005 03:39:26 +0000 Subject: [PATCH] * src/RepositoryView.py: added back in * src/gramps_main.py: added repository view svn: r5057 --- gramps2/ChangeLog | 4 + gramps2/src/PlaceView.py | 8 +- gramps2/src/RepositoryView.py | 270 ++++++++++------------------------ gramps2/src/SourceView.py | 8 +- gramps2/src/gramps_main.py | 2 + 5 files changed, 88 insertions(+), 204 deletions(-) diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index e1510ab5b..f1d307e61 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,7 @@ +2005-08-11 Don Allingham + * src/RepositoryView.py: added back in + * src/gramps_main.py: added repository view + 2005-08-11 Alex Roitman * src/DbState.py: Remove modeule. * src/DisplayState.py: Rename from DbState, kepp only DisplayState diff --git a/gramps2/src/PlaceView.py b/gramps2/src/PlaceView.py index 97ce50c6a..36b20ee22 100644 --- a/gramps2/src/PlaceView.py +++ b/gramps2/src/PlaceView.py @@ -70,10 +70,10 @@ class PlaceView(PageView.ListView): def __init__(self,dbstate,uistate): signal_map = { - 'event-add' : self.row_add, - 'event-update' : self.row_update, - 'event-delete' : self.row_delete, - 'event-rebuild' : self.build_tree, + 'place-add' : self.row_add, + 'place-update' : self.row_update, + 'place-delete' : self.row_delete, + 'place-rebuild' : self.build_tree, } PageView.ListView.__init__(self,'Place View',dbstate,uistate, diff --git a/gramps2/src/RepositoryView.py b/gramps2/src/RepositoryView.py index 20de8d8e0..b65db32b8 100644 --- a/gramps2/src/RepositoryView.py +++ b/gramps2/src/RepositoryView.py @@ -33,6 +33,7 @@ import gtk.gdk # #------------------------------------------------------------------------- import RelLib +import PageView import EditRepository import DisplayModels import const @@ -46,7 +47,6 @@ from QuestionDialog import QuestionDialog, ErrorDialog #------------------------------------------------------------------------- from gettext import gettext as _ - column_names = [ _('Name'), _('ID'), @@ -61,222 +61,100 @@ column_names = [ _('Search URL'), ] -_HANDLE_COL = 12 - #------------------------------------------------------------------------- # # RepositoryView # #------------------------------------------------------------------------- -class RepositoryView: - def __init__(self,parent,db,glade): - self.parent = parent - self.parent.connect('database-changed',self.change_db) +class RepositoryView(PageView.ListView): + def __init__(self,dbstate,uistate): - self.glade = glade - self.list = glade.get_widget("repository_list") - self.list.connect('button-press-event',self.button_press) - self.list.connect('key-press-event',self.key_press) - self.selection = self.list.get_selection() - self.selection.set_mode(gtk.SELECTION_MULTIPLE) - self.renderer = gtk.CellRendererText() - self.model = DisplayModels.RepositoryModel(self.parent.db,0) - self.sort_col = 0 - - self.list.set_model(self.model) - self.list.set_headers_clickable(True) - self.topWindow = self.glade.get_widget("gramps") + signal_map = { + 'repository-add' : self.row_add, + 'repository-update' : self.row_update, + 'repository-delete' : self.row_delete, + 'repository-rebuild' : self.build_tree, + } - self.columns = [] - self.change_db(db) + PageView.ListView.__init__(self,'Repository View',dbstate,uistate, + column_names,len(column_names), + DisplayModels.RepositoryModel, + signal_map) - def column_clicked(self,obj,data): - if self.sort_col != data: - order = gtk.SORT_ASCENDING - else: - if (self.columns[data].get_sort_order() == gtk.SORT_DESCENDING - or self.columns[data].get_sort_indicator() == False): - order = gtk.SORT_ASCENDING - else: - order = gtk.SORT_DESCENDING - self.sort_col = data + def column_order(self): + return self.dbstate.db.get_repository_column_order() + + def get_stock(self): + return 'gramps-repository' + + def ui_definition(self): + return ''' + + + + + + + + + + + + + + + + + + + + + + ''' + + def on_double_click(self,obj,event): handle = self.first_selected() - self.model = DisplayModels.RepositoryModel(self.parent.db, - self.sort_col,order) - self.list.set_model(self.model) - colmap = self.parent.db.get_repository_column_order() + place = self.dbstate.db.get_place_from_handle(handle) + EditRepository.EditRepository(place,self.dbstate, self.uistate) - if handle: - path = self.model.on_get_path(handle) - self.selection.select_path(path) - self.list.scroll_to_cell(path,None,1,0.5,0) - for i in range(0,len(self.columns)): - self.columns[i].set_sort_indicator(i==colmap[data][1]-1) - self.columns[self.sort_col].set_sort_order(order) + def add(self,obj): + EditRepository.EditRepository(RelLib.Repository(),self.dbstate, self.uistate) - def build_columns(self): - for column in self.columns: - self.list.remove_column(column) + def remove(self,obj): + for event_handle in self.selected_handles(): + db = self.dbstate.db + person_list = [ handle for handle in + db.get_person_handles(False) + if db.get_person_from_handle(handle).has_handle_reference('Repository',event_handle) ] + family_list = [ handle for handle in + db.get_family_handles() + if db.get_family_from_handle(handle).has_handle_reference('Repository',event_handle) ] - column = gtk.TreeViewColumn(_('Name'), self.renderer,text=0) - column.set_resizable(True) - column.set_min_width(225) - column.set_clickable(True) - column.connect('clicked',self.column_clicked,0) - self.list.append_column(column) - self.columns = [column] + event = db.get_event_from_handle(event_handle) - index = 1 - for pair in self.parent.db.get_repository_column_order(): - if not pair[0]: - continue - name = column_names[pair[1]] - column = gtk.TreeViewColumn(name, self.renderer, text=pair[1]) - column.connect('clicked',self.column_clicked,index) - column.set_resizable(True) - column.set_min_width(75) - column.set_clickable(True) - self.columns.append(column) - self.list.append_column(column) - index += 1 + ans = EditRepository.DelRepositoryQuery(event,db, + person_list,family_list) - def change_db(self,db): - db.connect('repository-add', self.repository_add) - db.connect('repository-update', self.repository_update) - db.connect('repository-delete', self.repository_delete) - db.connect('repository-rebuild',self.build_tree) - self.build_columns() - self.build_tree() - - def build_tree(self): - self.list.set_model(None) - self.model = DisplayModels.RepositoryModel(self.parent.db,self.sort_col) - self.list.set_model(self.model) - self.selection = self.list.get_selection() - self.selection.set_mode(gtk.SELECTION_MULTIPLE) - - def button_press(self,obj,event): - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: - mlist = [] - self.selection.selected_foreach(self.blist,mlist) - handle = mlist[0] - repository = self.parent.db.get_repository_from_handle(handle) - EditRepository.EditRepository(repository,self.parent.db,self.parent, - self.topWindow) - return True - elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: - self.build_context_menu(event) - return True - return False - - def key_press(self,obj,event): - if event.keyval == gtk.gdk.keyval_from_name("Return") \ - and not event.state: - self.on_edit_clicked(obj) - return True - return False - - def build_context_menu(self,event): - """Builds the menu with editing operations on the repository's list""" - - mlist = [] - self.selection.selected_foreach(self.blist,mlist) - if mlist: - sel_sensitivity = 1 - else: - sel_sensitivity = 0 - - entries = [ - (gtk.STOCK_ADD, self.on_add_clicked,1), - (gtk.STOCK_REMOVE, self.on_delete_clicked,sel_sensitivity), - (_("Edit"), self.on_edit_clicked,sel_sensitivity), - ] - - menu = gtk.Menu() - menu.set_title(_('Repository Menu')) - for stock_id,callback,sensitivity in entries: - item = gtk.ImageMenuItem(stock_id) - if callback: - item.connect("activate",callback) - item.set_sensitive(sensitivity) - item.show() - menu.append(item) - menu.popup(None,None,None,event.button,event.time) - - def on_add_clicked(self,obj): - EditRepository.EditRepository(RelLib.Repository(),self.parent.db,self.parent, - self.topWindow) - - def on_delete_clicked(self,obj): - mlist = [] - self.selection.selected_foreach(self.blist,mlist) - - for repos_handle in mlist: - - source_list = [ src_handle for src_handle \ - in self.parent.db.get_source_handles() \ - if self.parent.db.get_source_from_handle(src_handle).has_repo_reference(repos_handle)] - - repository = self.parent.db.get_repository_from_handle(repos_handle) - - ans = EditRepository.DelReposQuery(repository,self.parent.db,source_list) - - if len(source_list) > 0: - msg = _('This repository is currently being used. Deleting it ' + if len(person_list) + len(family_list) > 0: + msg = _('This place is currently being used. Deleting it ' 'will remove it from the database and from all ' - 'sources that reference it.') + 'people and families that reference it.') else: - msg = _('Deleting repository will remove it from the database.') + msg = _('Deleting place will remove it from the database.') msg = "%s %s" % (msg,Utils.data_recover_msg) - QuestionDialog(_('Delete %s?') % repository.get_name(), msg, - _('_Delete Repository'),ans.query_response, - self.topWindow) + descr = event.get_description() + if descr == "": + descr = event.get_gramps_id() + + QuestionDialog(_('Delete %s?') % descr, msg, + _('_Delete Repository'),ans.query_response) - def on_edit_clicked(self,obj): + def edit(self,obj): mlist = [] self.selection.selected_foreach(self.blist,mlist) for handle in mlist: - repository = self.parent.db.get_repository_from_handle(handle) - EditRepository.EditRepository(repository, self.parent.db, self.parent, - self.topWindow) + place = self.dbstate.db.get_place_from_handle(handle) + EditRepository.EditRepository(place, self.dbstate, self.uistate) - def repository_add(self,handle_list): - for handle in handle_list: - self.model.add_row_by_handle(handle) - - def repository_update(self,handle_list): - for handle in handle_list: - self.model.update_row_by_handle(handle) - - def repository_delete(self,handle_list): - for handle in handle_list: - self.model.delete_row_by_handle(handle) - - def first_selected(self): - mlist = [] - self.selection.selected_foreach(self.blist,mlist) - if mlist: - return mlist[0] - else: - return None - - def blist(self,store,path,iter,sel_list): - handle = store.get_value(iter,_HANDLE_COL) - sel_list.append(handle) - -## def merge(self): -## mlist = [] -## self.selection.selected_foreach(self.blist,mlist) - -## if len(mlist) != 2: -## msg = _("Cannot merge repositorys.") -## msg2 = _("Exactly two repositorys must be selected to perform a merge. " -## "A second repository can be selected by holding down the " -## "control key while clicking on the desired repository.") -## ErrorDialog(msg,msg2) -## else: -## import MergeData -## MergeData.MergeRepositorys(self.parent.db,mlist[0],mlist[1], -## self.build_tree) diff --git a/gramps2/src/SourceView.py b/gramps2/src/SourceView.py index 5b34fce43..b3c64700a 100644 --- a/gramps2/src/SourceView.py +++ b/gramps2/src/SourceView.py @@ -65,10 +65,10 @@ class SourceView(PageView.ListView): def __init__(self,dbstate,uistate): signal_map = { - 'event-add' : self.row_add, - 'event-update' : self.row_update, - 'event-delete' : self.row_delete, - 'event-rebuild' : self.build_tree, + 'source-add' : self.row_add, + 'source-update' : self.row_update, + 'source-delete' : self.row_delete, + 'source-rebuild' : self.build_tree, } PageView.ListView.__init__(self,'Source View',dbstate,uistate, diff --git a/gramps2/src/gramps_main.py b/gramps2/src/gramps_main.py index f82c90ff0..33b9fe0f8 100755 --- a/gramps2/src/gramps_main.py +++ b/gramps2/src/gramps_main.py @@ -23,6 +23,7 @@ import gtk import ViewManager import PersonView +import RepositoryView import PedView import MapView import PlaceView @@ -169,6 +170,7 @@ class Gramps: a.register_view(SourceView.SourceView) a.register_view(PlaceView.PlaceView) a.register_view(MapView.MapView) + a.register_view(RepositoryView.RepositoryView) a.init_interface() if GrampsKeys.get_usetips():