From 9e400a2ca3e054f5e1f37df5fa2999e199fd46ca Mon Sep 17 00:00:00 2001 From: Benny Malengier Date: Wed, 11 Jul 2012 17:50:51 +0000 Subject: [PATCH] Fixes in treeview broke listview, now fixed simplified unicode/str casting columnorder working svn: r19990 --- src/gen/db/write.py | 6 +++--- src/gen/utils/cast.py | 17 ++++++++++++----- src/gui/columnorder.py | 14 +++++++------- src/gui/editors/displaytabs/surnametab.py | 12 ++++++------ src/gui/views/listview.py | 14 +++++++------- src/gui/views/treemodels/flatbasemodel.py | 12 ++++++------ src/gui/views/treemodels/treebasemodel.py | 6 +++--- src/gui/widgets/menutoolbuttonaction.py | 3 ++- src/guiQML/views/personview.py | 6 +++--- src/plugins/lib/libplaceview.py | 3 ++- 10 files changed, 51 insertions(+), 42 deletions(-) diff --git a/src/gen/db/write.py b/src/gen/db/write.py index 85b88d973..86956af75 100644 --- a/src/gen/db/write.py +++ b/src/gen/db/write.py @@ -62,7 +62,7 @@ from gen.db import (DbBsddbRead, DbWriteBase, BSDDBTxn, find_surname_name, DbUndoBSDDB as DbUndo) from gen.db.dbconst import * from gen.utils.callback import Callback -from gen.utils.cast import (conv_unicode_tosrtkey_ongtk, conv_dbstr_to_unicode) +from gen.utils.cast import (conv_unicode_tosrtkey, conv_dbstr_to_unicode) from gen.updatecallback import UpdateCallback from gen.errors import DbError from gen.constfunc import win @@ -1428,7 +1428,7 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback): self.emit('person-groupname-rebuild', (name, grouppar)) def sort_surname_list(self): - self.surname_list.sort(key=conv_unicode_tosrtkey_ongtk) + self.surname_list.sort(key=conv_unicode_tosrtkey) @catch_db_error def build_surname_list(self): @@ -1440,7 +1440,7 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback): #TODO GTK3: Why double conversion? Convert to a list of str objects! self.surname_list = sorted( map(conv_dbstr_to_unicode, set(self.surnames.keys())), - key=conv_unicode_tosrtkey_ongtk) + key=conv_unicode_tosrtkey) def add_to_surname_list(self, person, batch_transaction): """ diff --git a/src/gen/utils/cast.py b/src/gen/utils/cast.py index be81f0a50..01d106a96 100644 --- a/src/gen/utils/cast.py +++ b/src/gen/utils/cast.py @@ -43,15 +43,22 @@ from gen.datehandler import codeset """ strxfrm needs it's unicode argument correctly cast before used. """ -conv_unicode_tosrtkey = lambda x: locale.strxfrm(x.encode('utf-8', 'replace')) -conv_unicode_tosrtkey_ongtk = lambda x: locale.strxfrm(x.encode( +conv_unicode_tosrtkey = lambda x: locale.strxfrm(x.encode(codeset, 'replace')) + +if codeset == 'UTF-8': + conv_str_tosrtkey = lambda x: locale.strxfrm(x) +else: + conv_str_tosrtkey = lambda x: locale.strxfrm(unicode(x,'UTF-8').encode( codeset, 'replace')) -conv_str_tosrtkey_ongtk = lambda x: locale.strxfrm(unicode(x,'utf-8').encode( - codeset, 'replace')) +def conv_tosrtkey(value): + if isinstance(value, unicode): + return conv_unicode_tosrtkey(value) + return conv_str_tosrtkey(value) -conv_dbstr_to_unicode = lambda x: unicode(x, 'utf-8') +#strings in database are utf-8 +conv_dbstr_to_unicode = lambda x: unicode(x, 'UTF-8') def cast_to_bool(val): if val == str(True): diff --git a/src/gui/columnorder.py b/src/gui/columnorder.py index 9b9f823eb..2648dcf98 100644 --- a/src/gui/columnorder.py +++ b/src/gui/columnorder.py @@ -82,7 +82,7 @@ class ColumnOrder(Gtk.VBox): self.config = config self.on_apply = on_apply - self.pack_start(Gtk.Label(' ', True, True, 0), expand=False, fill=False) + self.pack_start(Gtk.Label(label=' '), False, False, 0) self.startrow = 0 if self.treeview: @@ -90,15 +90,15 @@ class ColumnOrder(Gtk.VBox): _('Tree View: first column "%s" cannot be changed') % column_names[0]) self.startrow = 1 - self.pack_start(label, expand=False, fill=False) - self.pack_start(Gtk.Label(' ', True, True, 0), expand=False, fill=False) + self.pack_start(label, False, False, 0) + self.pack_start(Gtk.Label(label=' '), False, False, 0) - self.pack_start(Gtk.Label(_('Drag and drop the columns to change' - ' the order', True, True, 0)), expand=False, fill=False) - self.pack_start(Gtk.Label(' ', True, True, 0), expand=False, fill=False) + self.pack_start(Gtk.Label(label=_('Drag and drop the columns to change' + ' the order')), False, False, 0) + self.pack_start(Gtk.Label(label=' '), False, False,0) hbox = Gtk.HBox() hbox.set_spacing(10) - hbox.pack_start(Gtk.Label(' ', True, True, 0)) + hbox.pack_start(Gtk.Label(label=' '), True, True, 0) scroll = Gtk.ScrolledWindow() scroll.set_size_request(300,300) hbox.pack_start(scroll, True, True, 0) diff --git a/src/gui/editors/displaytabs/surnametab.py b/src/gui/editors/displaytabs/surnametab.py index c72462e75..27f87e914 100644 --- a/src/gui/editors/displaytabs/surnametab.py +++ b/src/gui/editors/displaytabs/surnametab.py @@ -176,14 +176,14 @@ class SurnameTab(EmbeddedList): for idx in range(len(self.model)): node = self.model.get_iter(idx) surn = self.model.get_value(node, 5) - surn.set_prefix(unicode(self.model.get_value(node, 0))) - surn.set_surname(unicode(self.model.get_value(node, 1))) - surn.set_connector(unicode(self.model.get_value(node, 2))) - surn.get_origintype().set(unicode(self.model.get_value(node, 3))) + surn.set_prefix(unicode(self.model.get_value(node, 0), 'UTF-8')) + surn.set_surname(unicode(self.model.get_value(node, 1), 'UTF-8')) + surn.set_connector(unicode(self.model.get_value(node, 2), 'UTF-8')) + surn.get_origintype().set(unicode(self.model.get_value(node, 3), 'UTF-8')) surn.set_primary(self.model.get_value(node, 4)) new_list += [surn] return new_list - + def update(self): """ Store the present data in the model to the name object @@ -203,7 +203,7 @@ class SurnameTab(EmbeddedList): prim = False if len(self.obj.get_surname_list()) == 0: prim = True - node = self.model.append(row=['', '', '', NameOriginType(), prim, + node = self.model.append(row=['', '', '', str(NameOriginType()), prim, Surname()]) self.selection.select_iter(node) path = self.model.get_path(node) diff --git a/src/gui/views/listview.py b/src/gui/views/listview.py index a23702fe5..2ae7b31b7 100644 --- a/src/gui/views/listview.py +++ b/src/gui/views/listview.py @@ -378,7 +378,7 @@ class ListView(NavigationView): if self.type_list() == LISTFLAT: # Flat - iter = self.model.nodemap.new_iter(handle) + iter = self.model.node_map.new_iter(handle) try: path = self.model.do_get_path(iter) except: @@ -543,7 +543,7 @@ class ListView(NavigationView): construct a list sel_list with all selected handles ''' if store.do_get_flags() & Gtk.TreeModelFlags.LIST_ONLY: - handle = store.node_map.get_handle(path) + handle = store.node_map.get_handle(path.get_indices()[0]) else: handle = store.get_handle(store.get_node_from_iter(iter)) @@ -1100,9 +1100,9 @@ class ListView(NavigationView): self.uistate.status_text(_("Updating display...")) self.uistate.set_busy_cursor(True) - selected = self.selection.get_selected_rows() - for path in selected[1]: - self.list.expand_row(path, True) + store, selected = self.selection.get_selected_rows() + for path in selected: + self.list.expand_row(path, False) self.uistate.set_busy_cursor(False) self.uistate.modify_statusbar(self.dbstate) @@ -1113,8 +1113,8 @@ class ListView(NavigationView): :param obj: not used, present only to allow the use of the method in event callback """ - selected = self.selection.get_selected_rows() - for path in selected[1]: + store, selected = self.selection.get_selected_rows() + for path in selected: self.list.collapse_row(path) def can_configure(self): diff --git a/src/gui/views/treemodels/flatbasemodel.py b/src/gui/views/treemodels/flatbasemodel.py index bd0435a91..c81a7c959 100644 --- a/src/gui/views/treemodels/flatbasemodel.py +++ b/src/gui/views/treemodels/flatbasemodel.py @@ -74,7 +74,7 @@ from gi.repository import Gtk # #------------------------------------------------------------------------- from gen.filters import SearchFilter, ExactSearchFilter -from gen.utils.cast import conv_unicode_tosrtkey_ongtk +from gen.utils.cast import conv_unicode_tosrtkey, conv_tosrtkey #------------------------------------------------------------------------- # @@ -107,7 +107,7 @@ class FlatNodeMap(object): the path, and a dictionary mapping hndl to index. To obtain index given a path, method real_index() is available - ..Note: If a string sortkey is used, apply conv_unicode_tosrtkey_ongtk + ..Note: If a string sortkey is used, apply conv_unicode_tosrtkey on it , so as to have localized sort """ @@ -563,13 +563,13 @@ class FlatBaseModel(GObject.Object, Gtk.TreeModel): Return the (sort_key, handle) list of all data that can maximally be shown. This list is sorted ascending, via localized string sort. - conv_unicode_tosrtkey_ongtk which uses strxfrm + conv_unicode_tosrtkey which uses strxfrm """ # use cursor as a context manager with self.gen_cursor() as cursor: #loop over database and store the sort field, and the handle, and #allow for a third iter - return sorted((map(conv_unicode_tosrtkey_ongtk, + return sorted((map(conv_tosrtkey, self.sort_func(data)), key) for key, data in cursor) def _rebuild_search(self, ignore=None): @@ -639,7 +639,7 @@ class FlatBaseModel(GObject.Object, Gtk.TreeModel): if self.node_map.get_path_from_handle(handle) is not None: return # row is already displayed data = self.map(handle) - insert_val = (map(conv_unicode_tosrtkey_ongtk, self.sort_func(data)), + insert_val = (map(conv_tosrtkey, self.sort_func(data)), handle) if not self.search or \ (self.search and self.search.match(handle, self.db)): @@ -673,7 +673,7 @@ class FlatBaseModel(GObject.Object, Gtk.TreeModel): return # row is not currently displayed self.clear_cache(handle) oldsortkey = self.node_map.get_sortkey(handle) - newsortkey = map(conv_unicode_tosrtkey_ongtk, self.sort_func(self.map( + newsortkey = map(conv_tosrtkey, self.sort_func(self.map( handle))) if oldsortkey is None or oldsortkey != newsortkey: #or the changed object is not present in the view due to filtering diff --git a/src/gui/views/treemodels/treebasemodel.py b/src/gui/views/treemodels/treebasemodel.py index 39d1e1a6a..621f36e66 100644 --- a/src/gui/views/treemodels/treebasemodel.py +++ b/src/gui/views/treemodels/treebasemodel.py @@ -55,7 +55,7 @@ from gi.repository import Gtk # GRAMPS modules # #------------------------------------------------------------------------- -from gen.utils.cast import conv_str_tosrtkey_ongtk, conv_unicode_tosrtkey_ongtk +from gen.utils.cast import conv_str_tosrtkey, conv_unicode_tosrtkey import gui.widgets.progressdialog as progressdlg from lru import LRU from bisect import bisect_right @@ -91,11 +91,11 @@ class Node(object): if isinstance(sortkey, unicode): self.name = sortkey.encode('utf-8') #sortkey must be localized sort, so - self.sortkey = conv_unicode_tosrtkey_ongtk(sortkey) + self.sortkey = conv_unicode_tosrtkey(sortkey) else: self.name = sortkey #sortkey must be localized sort, so - self.sortkey = conv_str_tosrtkey_ongtk(sortkey) + self.sortkey = conv_str_tosrtkey(sortkey) else: self.name = '' self.sortkey = None diff --git a/src/gui/widgets/menutoolbuttonaction.py b/src/gui/widgets/menutoolbuttonaction.py index f0668ec41..55d9f3eba 100644 --- a/src/gui/widgets/menutoolbuttonaction.py +++ b/src/gui/widgets/menutoolbuttonaction.py @@ -76,7 +76,8 @@ class MenuToolButtonAction(Gtk.Action): @type tooltip: str """ - GObject.GObject.__init__(self, name, label, tooltip, None) + GObject.GObject.__init__(self, name=name, label=label, tooltip=tooltip, + stock_id=None) ##TODO GTK3: following is deprecated, must be replaced by ## Gtk.MenuToolButton.set_related_action(MenuToolButtonAction) in calling class? ## self.set_tool_item_type(Gtk.MenuToolButton) diff --git a/src/guiQML/views/personview.py b/src/guiQML/views/personview.py index d10f610e9..4adaae929 100644 --- a/src/guiQML/views/personview.py +++ b/src/guiQML/views/personview.py @@ -55,7 +55,7 @@ from PySide import QtOpenGL # #------------------------------------------------------------------------- from gen.const import ROOT_DIR -from gui.views.treemodels import conv_unicode_tosrtkey_ongtk +from gui.views.treemodels import conv_unicode_tosrtkey from gen.ggettext import gettext as _ from gen.display.name import displayer as name_displayer from gen.lib import Name @@ -124,14 +124,14 @@ class QMLPersonListModel(QtCore.QAbstractListModel): Return the (sort_key, handle) list of all data that can maximally be shown. This list is sorted ascending, via localized string sort. - conv_unicode_tosrtkey_ongtk which uses strxfrm, which is apparently + conv_unicode_tosrtkey which uses strxfrm, which is apparently broken in Win ?? --> they should fix base lib, we need strxfrm, fix it in the Utils module. """ # use cursor as a context manager with self.gen_cursor() as cursor: #loop over database and store the sort field, and the handle - return sorted((map(conv_unicode_tosrtkey_ongtk, + return sorted((map(conv_unicode_tosrtkey, self.sort_func(data)), key) for key, data in cursor) def sort_name(self, data): diff --git a/src/plugins/lib/libplaceview.py b/src/plugins/lib/libplaceview.py index 637b6ebd8..23841ca81 100644 --- a/src/plugins/lib/libplaceview.py +++ b/src/plugins/lib/libplaceview.py @@ -38,6 +38,7 @@ Base view for Place Views # GTK/Gnome modules # #------------------------------------------------------------------------- +from gi.repository import Gdk from gi.repository import Gtk #------------------------------------------------------------------------- @@ -212,7 +213,7 @@ class PlaceBaseView(ListView): widget.set_stock_id(Gtk.STOCK_JUMP_TO) if self.drag_info(): self.list.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, - [('text/plain', 0, 0), self.drag_info().target()], + [('text/plain', 0, 0), self.drag_info().target_data()], Gdk.DragAction.COPY) def __create_maps_menu_actions(self):