Rename placeview and placemodel classes for consistency
svn: r14216
This commit is contained in:
@@ -33,7 +33,7 @@ from gen.ggettext import gettext as _
|
|||||||
# gramps modules
|
# gramps modules
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
from gui.views.treemodels import PlaceModel
|
from gui.views.treemodels.placemodel import PlaceListModel
|
||||||
from baseselector import BaseSelector
|
from baseselector import BaseSelector
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@@ -54,7 +54,7 @@ class SelectPlace(BaseSelector):
|
|||||||
return _("Select Place")
|
return _("Select Place")
|
||||||
|
|
||||||
def get_model_class(self):
|
def get_model_class(self):
|
||||||
return PlaceModel
|
return PlaceListModel
|
||||||
|
|
||||||
def get_column_titles(self):
|
def get_column_titles(self):
|
||||||
return [
|
return [
|
||||||
|
@@ -13,9 +13,7 @@ pkgdata_PYTHON = \
|
|||||||
mediamodel.py \
|
mediamodel.py \
|
||||||
notemodel.py \
|
notemodel.py \
|
||||||
peoplemodel.py \
|
peoplemodel.py \
|
||||||
placebasemodel.py \
|
|
||||||
placemodel.py \
|
placemodel.py \
|
||||||
placetreemodel.py \
|
|
||||||
repomodel.py \
|
repomodel.py \
|
||||||
sourcemodel.py \
|
sourcemodel.py \
|
||||||
treebasemodel.py
|
treebasemodel.py
|
||||||
|
@@ -27,9 +27,7 @@ from peoplemodel import PeopleBaseModel, PersonListModel, PersonTreeModel
|
|||||||
from familymodel import FamilyModel
|
from familymodel import FamilyModel
|
||||||
from eventmodel import EventModel
|
from eventmodel import EventModel
|
||||||
from sourcemodel import SourceModel
|
from sourcemodel import SourceModel
|
||||||
from placebasemodel import PlaceBaseModel
|
from placemodel import PlaceBaseModel, PlaceListModel, PlaceTreeModel
|
||||||
from placemodel import PlaceModel
|
|
||||||
from placetreemodel import PlaceTreeModel
|
|
||||||
from mediamodel import MediaModel
|
from mediamodel import MediaModel
|
||||||
from repomodel import RepositoryModel
|
from repomodel import RepositoryModel
|
||||||
from notemodel import NoteModel
|
from notemodel import NoteModel
|
||||||
|
@@ -1,208 +0,0 @@
|
|||||||
#
|
|
||||||
# Gramps - a GTK+/GNOME based genealogy program
|
|
||||||
#
|
|
||||||
# Copyright (C) 2000-2006 Donald N. Allingham
|
|
||||||
# Copyright (C) 2009 Nick Hall
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
# $Id$
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# python modules
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
import time
|
|
||||||
import logging
|
|
||||||
log = logging.getLogger(".")
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# GNOME/GTK modules
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
import gtk
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# GRAMPS modules
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
import const
|
|
||||||
import ToolTips
|
|
||||||
import GrampsLocale
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# internationalization
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
from gen.ggettext import gettext as _
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# PlaceBaseModel
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
class PlaceBaseModel(object):
|
|
||||||
|
|
||||||
HANDLE_COL = 12
|
|
||||||
|
|
||||||
def __init__(self, db):
|
|
||||||
self.gen_cursor = db.get_place_cursor
|
|
||||||
self.map = db.get_raw_place_data
|
|
||||||
self.fmap = [
|
|
||||||
self.column_name,
|
|
||||||
self.column_id,
|
|
||||||
self.column_parish,
|
|
||||||
self.column_postal_code,
|
|
||||||
self.column_city,
|
|
||||||
self.column_county,
|
|
||||||
self.column_state,
|
|
||||||
self.column_country,
|
|
||||||
self.column_latitude,
|
|
||||||
self.column_longitude,
|
|
||||||
self.column_change,
|
|
||||||
self.column_street,
|
|
||||||
self.column_handle,
|
|
||||||
self.column_tooltip
|
|
||||||
]
|
|
||||||
self.smap = [
|
|
||||||
self.column_name,
|
|
||||||
self.column_id,
|
|
||||||
self.column_parish,
|
|
||||||
self.column_postal_code,
|
|
||||||
self.column_city,
|
|
||||||
self.column_county,
|
|
||||||
self.column_state,
|
|
||||||
self.column_country,
|
|
||||||
self.sort_latitude,
|
|
||||||
self.sort_longitude,
|
|
||||||
self.sort_change,
|
|
||||||
self.column_street,
|
|
||||||
self.column_handle,
|
|
||||||
]
|
|
||||||
|
|
||||||
def on_get_n_columns(self):
|
|
||||||
return len(self.fmap)+1
|
|
||||||
|
|
||||||
def column_handle(self, data):
|
|
||||||
return unicode(data[0])
|
|
||||||
|
|
||||||
def column_name(self, data):
|
|
||||||
return unicode(data[2])
|
|
||||||
|
|
||||||
def __format_degrees(self, angle, sign_str):
|
|
||||||
"""
|
|
||||||
Format a decimal as degrees, minutes and seconds.
|
|
||||||
If the value is not a decimal leave it unformatted.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
angle = float(angle)
|
|
||||||
except ValueError:
|
|
||||||
return angle
|
|
||||||
|
|
||||||
if angle >= 0:
|
|
||||||
sign = sign_str[0]
|
|
||||||
else:
|
|
||||||
sign = sign_str[1]
|
|
||||||
seconds = abs(int(angle * 60 * 60))
|
|
||||||
minutes = seconds / 60
|
|
||||||
seconds %= 60
|
|
||||||
degrees = minutes / 60
|
|
||||||
minutes %= 60
|
|
||||||
|
|
||||||
string = unicode(degrees) + u'\u00b0 ' + \
|
|
||||||
unicode(minutes) + u'\u2032 ' + \
|
|
||||||
unicode(seconds) + u'\u2033 ' + unicode(sign)
|
|
||||||
|
|
||||||
return string
|
|
||||||
|
|
||||||
def column_longitude(self, data):
|
|
||||||
return self.__format_degrees(data[3], _('EW'))
|
|
||||||
|
|
||||||
def column_latitude(self, data):
|
|
||||||
return self.__format_degrees(data[4], _('NS'))
|
|
||||||
|
|
||||||
def sort_longitude(self, data):
|
|
||||||
return unicode(data[3])
|
|
||||||
|
|
||||||
def sort_latitude(self, data):
|
|
||||||
return unicode(data[4])
|
|
||||||
|
|
||||||
def column_id(self, data):
|
|
||||||
return unicode(data[1])
|
|
||||||
|
|
||||||
def column_parish(self, data):
|
|
||||||
try:
|
|
||||||
return data[5][1]
|
|
||||||
except:
|
|
||||||
return u''
|
|
||||||
|
|
||||||
def column_street(self, data):
|
|
||||||
try:
|
|
||||||
return data[5][0][0]
|
|
||||||
except:
|
|
||||||
return u''
|
|
||||||
|
|
||||||
def column_city(self, data):
|
|
||||||
try:
|
|
||||||
return data[5][0][1]
|
|
||||||
except:
|
|
||||||
return u''
|
|
||||||
|
|
||||||
def column_county(self, data):
|
|
||||||
try:
|
|
||||||
return data[5][0][2]
|
|
||||||
except:
|
|
||||||
return u''
|
|
||||||
|
|
||||||
def column_state(self, data):
|
|
||||||
try:
|
|
||||||
return data[5][0][3]
|
|
||||||
except:
|
|
||||||
return u''
|
|
||||||
|
|
||||||
def column_country(self, data):
|
|
||||||
try:
|
|
||||||
return data[5][0][4]
|
|
||||||
except:
|
|
||||||
return u''
|
|
||||||
|
|
||||||
def column_postal_code(self, data):
|
|
||||||
try:
|
|
||||||
return data[5][0][5]
|
|
||||||
except:
|
|
||||||
return u''
|
|
||||||
|
|
||||||
def sort_change(self, data):
|
|
||||||
return "%012x" % data[11]
|
|
||||||
|
|
||||||
def column_change(self, data):
|
|
||||||
return unicode(time.strftime('%x %X',time.localtime(data[11])),
|
|
||||||
GrampsLocale.codeset)
|
|
||||||
|
|
||||||
def column_tooltip(self, data):
|
|
||||||
if const.USE_TIPS:
|
|
||||||
try:
|
|
||||||
t = ToolTips.TipFromFunction(
|
|
||||||
self.db, lambda:
|
|
||||||
self.db.get_place_from_handle(data[0]))
|
|
||||||
except:
|
|
||||||
log.error("Failed to create tooltip.", exc_info=True)
|
|
||||||
return t
|
|
||||||
else:
|
|
||||||
return u''
|
|
@@ -1,7 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Gramps - a GTK+/GNOME based genealogy program
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
#
|
#
|
||||||
# Copyright (C) 2009 Nick Hall
|
# Copyright (C) 2000-2006 Donald N. Allingham
|
||||||
|
# Copyright (C) 2009-2010 Nick Hall
|
||||||
|
# Copyright (C) 2009 Benny Malengier
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -27,6 +29,7 @@ Place Model.
|
|||||||
# python modules
|
# python modules
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
import cgi
|
||||||
import logging
|
import logging
|
||||||
_LOG = logging.getLogger(".gui.views.treemodels.placemodel")
|
_LOG = logging.getLogger(".gui.views.treemodels.placemodel")
|
||||||
|
|
||||||
@@ -42,15 +45,190 @@ import gtk
|
|||||||
# GRAMPS modules
|
# GRAMPS modules
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
from gui.views.treemodels.placebasemodel import PlaceBaseModel
|
import const
|
||||||
|
import ToolTips
|
||||||
|
import GrampsLocale
|
||||||
from gui.views.treemodels.flatbasemodel import FlatBaseModel
|
from gui.views.treemodels.flatbasemodel import FlatBaseModel
|
||||||
|
from gui.views.treemodels.treebasemodel import TreeBaseModel
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# PlaceModel
|
# internationalization
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
class PlaceModel(PlaceBaseModel, FlatBaseModel):
|
from gen.ggettext import gettext as _
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Constants
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
COUNTRYLEVELS = {
|
||||||
|
'default': [_('<Countries>'), _('<States>'), _('<Counties>'),
|
||||||
|
_('<Places>')]
|
||||||
|
}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# PlaceBaseModel
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
class PlaceBaseModel(object):
|
||||||
|
|
||||||
|
HANDLE_COL = 12
|
||||||
|
|
||||||
|
def __init__(self, db):
|
||||||
|
self.gen_cursor = db.get_place_cursor
|
||||||
|
self.map = db.get_raw_place_data
|
||||||
|
self.fmap = [
|
||||||
|
self.column_name,
|
||||||
|
self.column_id,
|
||||||
|
self.column_parish,
|
||||||
|
self.column_postal_code,
|
||||||
|
self.column_city,
|
||||||
|
self.column_county,
|
||||||
|
self.column_state,
|
||||||
|
self.column_country,
|
||||||
|
self.column_latitude,
|
||||||
|
self.column_longitude,
|
||||||
|
self.column_change,
|
||||||
|
self.column_street,
|
||||||
|
self.column_handle,
|
||||||
|
self.column_tooltip
|
||||||
|
]
|
||||||
|
self.smap = [
|
||||||
|
self.column_name,
|
||||||
|
self.column_id,
|
||||||
|
self.column_parish,
|
||||||
|
self.column_postal_code,
|
||||||
|
self.column_city,
|
||||||
|
self.column_county,
|
||||||
|
self.column_state,
|
||||||
|
self.column_country,
|
||||||
|
self.sort_latitude,
|
||||||
|
self.sort_longitude,
|
||||||
|
self.sort_change,
|
||||||
|
self.column_street,
|
||||||
|
self.column_handle,
|
||||||
|
]
|
||||||
|
|
||||||
|
def on_get_n_columns(self):
|
||||||
|
return len(self.fmap)+1
|
||||||
|
|
||||||
|
def column_handle(self, data):
|
||||||
|
return unicode(data[0])
|
||||||
|
|
||||||
|
def column_name(self, data):
|
||||||
|
return unicode(data[2])
|
||||||
|
|
||||||
|
def __format_degrees(self, angle, sign_str):
|
||||||
|
"""
|
||||||
|
Format a decimal as degrees, minutes and seconds.
|
||||||
|
If the value is not a decimal leave it unformatted.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
angle = float(angle)
|
||||||
|
except ValueError:
|
||||||
|
return angle
|
||||||
|
|
||||||
|
if angle >= 0:
|
||||||
|
sign = sign_str[0]
|
||||||
|
else:
|
||||||
|
sign = sign_str[1]
|
||||||
|
seconds = abs(int(angle * 60 * 60))
|
||||||
|
minutes = seconds / 60
|
||||||
|
seconds %= 60
|
||||||
|
degrees = minutes / 60
|
||||||
|
minutes %= 60
|
||||||
|
|
||||||
|
string = unicode(degrees) + u'\u00b0 ' + \
|
||||||
|
unicode(minutes) + u'\u2032 ' + \
|
||||||
|
unicode(seconds) + u'\u2033 ' + unicode(sign)
|
||||||
|
|
||||||
|
return string
|
||||||
|
|
||||||
|
def column_longitude(self, data):
|
||||||
|
return self.__format_degrees(data[3], _('EW'))
|
||||||
|
|
||||||
|
def column_latitude(self, data):
|
||||||
|
return self.__format_degrees(data[4], _('NS'))
|
||||||
|
|
||||||
|
def sort_longitude(self, data):
|
||||||
|
return unicode(data[3])
|
||||||
|
|
||||||
|
def sort_latitude(self, data):
|
||||||
|
return unicode(data[4])
|
||||||
|
|
||||||
|
def column_id(self, data):
|
||||||
|
return unicode(data[1])
|
||||||
|
|
||||||
|
def column_parish(self, data):
|
||||||
|
try:
|
||||||
|
return data[5][1]
|
||||||
|
except:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
def column_street(self, data):
|
||||||
|
try:
|
||||||
|
return data[5][0][0]
|
||||||
|
except:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
def column_city(self, data):
|
||||||
|
try:
|
||||||
|
return data[5][0][1]
|
||||||
|
except:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
def column_county(self, data):
|
||||||
|
try:
|
||||||
|
return data[5][0][2]
|
||||||
|
except:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
def column_state(self, data):
|
||||||
|
try:
|
||||||
|
return data[5][0][3]
|
||||||
|
except:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
def column_country(self, data):
|
||||||
|
try:
|
||||||
|
return data[5][0][4]
|
||||||
|
except:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
def column_postal_code(self, data):
|
||||||
|
try:
|
||||||
|
return data[5][0][5]
|
||||||
|
except:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
def sort_change(self, data):
|
||||||
|
return "%012x" % data[11]
|
||||||
|
|
||||||
|
def column_change(self, data):
|
||||||
|
return unicode(time.strftime('%x %X',time.localtime(data[11])),
|
||||||
|
GrampsLocale.codeset)
|
||||||
|
|
||||||
|
def column_tooltip(self, data):
|
||||||
|
if const.USE_TIPS:
|
||||||
|
try:
|
||||||
|
t = ToolTips.TipFromFunction(
|
||||||
|
self.db, lambda:
|
||||||
|
self.db.get_place_from_handle(data[0]))
|
||||||
|
except:
|
||||||
|
log.error("Failed to create tooltip.", exc_info=True)
|
||||||
|
return t
|
||||||
|
else:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# PlaceListModel
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
class PlaceListModel(PlaceBaseModel, FlatBaseModel):
|
||||||
"""
|
"""
|
||||||
Flat place model. (Original code in PlaceBaseModel).
|
Flat place model. (Original code in PlaceBaseModel).
|
||||||
"""
|
"""
|
||||||
@@ -60,3 +238,105 @@ class PlaceModel(PlaceBaseModel, FlatBaseModel):
|
|||||||
PlaceBaseModel.__init__(self, db)
|
PlaceBaseModel.__init__(self, db)
|
||||||
FlatBaseModel.__init__(self, db, scol, order, tooltip_column=13,
|
FlatBaseModel.__init__(self, db, scol, order, tooltip_column=13,
|
||||||
search=search, skip=skip, sort_map=sort_map)
|
search=search, skip=skip, sort_map=sort_map)
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# PlaceTreeModel
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
class PlaceTreeModel(PlaceBaseModel, TreeBaseModel):
|
||||||
|
"""
|
||||||
|
Hierarchical place model.
|
||||||
|
"""
|
||||||
|
def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None,
|
||||||
|
skip=set(), sort_map=None):
|
||||||
|
|
||||||
|
PlaceBaseModel.__init__(self, db)
|
||||||
|
TreeBaseModel.__init__(self, db, scol=scol, order=order,
|
||||||
|
tooltip_column=13,
|
||||||
|
search=search, skip=skip, sort_map=sort_map,
|
||||||
|
nrgroups = 3,
|
||||||
|
group_can_have_handle = True)
|
||||||
|
|
||||||
|
def _set_base_data(self):
|
||||||
|
"""See TreeBaseModel, for place, most have been set in init of
|
||||||
|
PlaceBaseModel
|
||||||
|
"""
|
||||||
|
self.number_items = self.db.get_number_of_places
|
||||||
|
self.hmap = [self.column_header] + [None]*12
|
||||||
|
|
||||||
|
def get_tree_levels(self):
|
||||||
|
"""
|
||||||
|
Return the headings of the levels in the hierarchy.
|
||||||
|
"""
|
||||||
|
return ['Country', 'State', 'County', 'Place Name']
|
||||||
|
|
||||||
|
def add_row(self, handle, data):
|
||||||
|
"""
|
||||||
|
Add nodes to the node map for a single place.
|
||||||
|
|
||||||
|
handle The handle of the gramps object.
|
||||||
|
data The object data.
|
||||||
|
"""
|
||||||
|
if data[5] is None:
|
||||||
|
# No primary location
|
||||||
|
level = [''] * 5
|
||||||
|
else:
|
||||||
|
#country, state, county, city, street
|
||||||
|
level = [data[5][0][i] for i in range(4,-1,-1)]
|
||||||
|
|
||||||
|
node1 = (level[0], )
|
||||||
|
node2 = (level[1], level[0])
|
||||||
|
node3 = (level[2], level[1], level[0])
|
||||||
|
sort_key = self.sort_func(data)
|
||||||
|
|
||||||
|
if not (level[3] or level[4]):
|
||||||
|
if level[2]:
|
||||||
|
self.add_node(None, node1, level[0], None, add_parent=False)
|
||||||
|
self.add_node(node1, node2, level[1], None, add_parent=False)
|
||||||
|
self.add_node(node2, node3, level[2], None, add_parent=False)
|
||||||
|
self.add_node(node3, handle, sort_key, handle, add_parent=False)
|
||||||
|
elif level[1]:
|
||||||
|
self.add_node(None, node1, level[0], None, add_parent=False)
|
||||||
|
self.add_node(node1, node2, level[1], None, add_parent=False)
|
||||||
|
self.add_node(node2, handle, level[1], handle, add_parent=False)
|
||||||
|
elif level[0]:
|
||||||
|
self.add_node(None, node1, level[0], None, add_parent=False)
|
||||||
|
self.add_node(node1, handle, level[0], handle, add_parent=False)
|
||||||
|
else:
|
||||||
|
self.add_node(None, node1, level[0], None, add_parent=False)
|
||||||
|
self.add_node(node1, node2, level[1], None, add_parent=False)
|
||||||
|
self.add_node(node2, node3, level[2], None, add_parent=False)
|
||||||
|
self.add_node(node3, handle, sort_key, handle, add_parent=False)
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.add_node(None, node1, level[0], None, add_parent=False)
|
||||||
|
self.add_node(node1, node2, level[1], None, add_parent=False)
|
||||||
|
self.add_node(node2, node3, level[2], None, add_parent=False)
|
||||||
|
self.add_node(node3, handle, sort_key, handle, add_parent=False)
|
||||||
|
|
||||||
|
def column_name(self, data):
|
||||||
|
if data[2]:
|
||||||
|
return unicode(data[2])
|
||||||
|
elif data[5] is not None:
|
||||||
|
level = [data[5][0][i] for i in range(4,-1,-1)]
|
||||||
|
if not (level[3] or level[4]):
|
||||||
|
return unicode(level[2] or level[1] or level[0])
|
||||||
|
elif level[3] and level[4]:
|
||||||
|
return unicode(level[3] + ', ' + level[4])
|
||||||
|
elif level[3] or level[4]:
|
||||||
|
return unicode(level[3] or level[4])
|
||||||
|
else:
|
||||||
|
return u"<i>%s<i>" % cgi.escape(_("<no name>"))
|
||||||
|
return unicode(data[2])
|
||||||
|
|
||||||
|
def column_header(self, node):
|
||||||
|
"""
|
||||||
|
Return a column heading. This is called for nodes with no associated
|
||||||
|
Gramps handle.
|
||||||
|
"""
|
||||||
|
if node.name:
|
||||||
|
return '<i>%s</i>' % cgi.escape(node.name)
|
||||||
|
else:
|
||||||
|
level = len(self.on_get_path(node))
|
||||||
|
return '<i>%s</i>' % cgi.escape(COUNTRYLEVELS['default'][level])
|
||||||
|
@@ -1,169 +0,0 @@
|
|||||||
#
|
|
||||||
# Gramps - a GTK+/GNOME based genealogy program
|
|
||||||
#
|
|
||||||
# Copyright (C) 2009 Nick Hall
|
|
||||||
# Copyright (C) 2009 Benny Malengier
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
# $Id$
|
|
||||||
|
|
||||||
"""
|
|
||||||
Place tree model.
|
|
||||||
"""
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# python modules
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
import cgi
|
|
||||||
import logging
|
|
||||||
_LOG = logging.getLogger(".gui.views.treemodels.placetreemodel")
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# GNOME/GTK modules
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
import gtk
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# GRAMPS modules
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
from gui.views.treemodels.placebasemodel import PlaceBaseModel
|
|
||||||
from gui.views.treemodels.treebasemodel import TreeBaseModel
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Internationalization
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
from gen.ggettext import gettext as _
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Constants
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
COUNTRYLEVELS = {
|
|
||||||
'default': [_('<Countries>'), _('<States>'), _('<Counties>'),
|
|
||||||
_('<Places>')]
|
|
||||||
}
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# PlaceTreeModel
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
class PlaceTreeModel(PlaceBaseModel, TreeBaseModel):
|
|
||||||
"""
|
|
||||||
Hierarchical place model.
|
|
||||||
"""
|
|
||||||
def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None,
|
|
||||||
skip=set(), sort_map=None):
|
|
||||||
|
|
||||||
PlaceBaseModel.__init__(self, db)
|
|
||||||
TreeBaseModel.__init__(self, db, scol=scol, order=order,
|
|
||||||
tooltip_column=13,
|
|
||||||
search=search, skip=skip, sort_map=sort_map,
|
|
||||||
nrgroups = 3,
|
|
||||||
group_can_have_handle = True)
|
|
||||||
|
|
||||||
def _set_base_data(self):
|
|
||||||
"""See TreeBaseModel, for place, most have been set in init of
|
|
||||||
PlaceBaseModel
|
|
||||||
"""
|
|
||||||
self.number_items = self.db.get_number_of_places
|
|
||||||
self.hmap = [self.column_header] + [None]*12
|
|
||||||
|
|
||||||
def get_tree_levels(self):
|
|
||||||
"""
|
|
||||||
Return the headings of the levels in the hierarchy.
|
|
||||||
"""
|
|
||||||
return ['Country', 'State', 'County', 'Place Name']
|
|
||||||
|
|
||||||
def add_row(self, handle, data):
|
|
||||||
"""
|
|
||||||
Add nodes to the node map for a single place.
|
|
||||||
|
|
||||||
handle The handle of the gramps object.
|
|
||||||
data The object data.
|
|
||||||
"""
|
|
||||||
if data[5] is None:
|
|
||||||
# No primary location
|
|
||||||
level = [''] * 5
|
|
||||||
else:
|
|
||||||
#country, state, county, city, street
|
|
||||||
level = [data[5][0][i] for i in range(4,-1,-1)]
|
|
||||||
|
|
||||||
node1 = (level[0], )
|
|
||||||
node2 = (level[1], level[0])
|
|
||||||
node3 = (level[2], level[1], level[0])
|
|
||||||
sort_key = self.sort_func(data)
|
|
||||||
|
|
||||||
if not (level[3] or level[4]):
|
|
||||||
if level[2]:
|
|
||||||
self.add_node(None, node1, level[0], None, add_parent=False)
|
|
||||||
self.add_node(node1, node2, level[1], None, add_parent=False)
|
|
||||||
self.add_node(node2, node3, level[2], None, add_parent=False)
|
|
||||||
self.add_node(node3, handle, sort_key, handle, add_parent=False)
|
|
||||||
elif level[1]:
|
|
||||||
self.add_node(None, node1, level[0], None, add_parent=False)
|
|
||||||
self.add_node(node1, node2, level[1], None, add_parent=False)
|
|
||||||
self.add_node(node2, handle, level[1], handle, add_parent=False)
|
|
||||||
elif level[0]:
|
|
||||||
self.add_node(None, node1, level[0], None, add_parent=False)
|
|
||||||
self.add_node(node1, handle, level[0], handle, add_parent=False)
|
|
||||||
else:
|
|
||||||
self.add_node(None, node1, level[0], None, add_parent=False)
|
|
||||||
self.add_node(node1, node2, level[1], None, add_parent=False)
|
|
||||||
self.add_node(node2, node3, level[2], None, add_parent=False)
|
|
||||||
self.add_node(node3, handle, sort_key, handle, add_parent=False)
|
|
||||||
|
|
||||||
else:
|
|
||||||
self.add_node(None, node1, level[0], None, add_parent=False)
|
|
||||||
self.add_node(node1, node2, level[1], None, add_parent=False)
|
|
||||||
self.add_node(node2, node3, level[2], None, add_parent=False)
|
|
||||||
self.add_node(node3, handle, sort_key, handle, add_parent=False)
|
|
||||||
|
|
||||||
def column_name(self, data):
|
|
||||||
if data[2]:
|
|
||||||
return unicode(data[2])
|
|
||||||
elif data[5] is not None:
|
|
||||||
level = [data[5][0][i] for i in range(4,-1,-1)]
|
|
||||||
if not (level[3] or level[4]):
|
|
||||||
return unicode(level[2] or level[1] or level[0])
|
|
||||||
elif level[3] and level[4]:
|
|
||||||
return unicode(level[3] + ', ' + level[4])
|
|
||||||
elif level[3] or level[4]:
|
|
||||||
return unicode(level[3] or level[4])
|
|
||||||
else:
|
|
||||||
return u"<i>%s<i>" % cgi.escape(_("<no name>"))
|
|
||||||
return unicode(data[2])
|
|
||||||
|
|
||||||
def column_header(self, node):
|
|
||||||
"""
|
|
||||||
Return a column heading. This is called for nodes with no associated
|
|
||||||
Gramps handle.
|
|
||||||
"""
|
|
||||||
if node.name:
|
|
||||||
return '<i>%s</i>' % cgi.escape(node.name)
|
|
||||||
else:
|
|
||||||
level = len(self.on_get_path(node))
|
|
||||||
return '<i>%s</i>' % cgi.escape(COUNTRYLEVELS['default'][level])
|
|
||||||
|
|
@@ -19,9 +19,9 @@ pkgdata_PYTHON = \
|
|||||||
pedigreeviewext.gpr.py \
|
pedigreeviewext.gpr.py \
|
||||||
personlistview.py \
|
personlistview.py \
|
||||||
persontreeview.py \
|
persontreeview.py \
|
||||||
placetreeview.gpr.py \
|
placelistview.py \
|
||||||
placetreeview.py \
|
placetreeview.py \
|
||||||
placeview.py \
|
placetreeview.gpr.py \
|
||||||
relview.py \
|
relview.py \
|
||||||
repoview.py \
|
repoview.py \
|
||||||
sourceview.py \
|
sourceview.py \
|
||||||
|
@@ -20,7 +20,7 @@
|
|||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Place View
|
Place List View
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@@ -29,7 +29,7 @@ Place View
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
from libplaceview import PlaceBaseView
|
from libplaceview import PlaceBaseView
|
||||||
from gui.views.treemodels import PlaceModel
|
from gui.views.treemodels.placemodel import PlaceListModel
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@@ -40,14 +40,14 @@ from gen.ggettext import gettext as _
|
|||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# PlaceView
|
# PlaceListView
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
class PlaceView(PlaceBaseView):
|
class PlaceListView(PlaceBaseView):
|
||||||
"""
|
"""
|
||||||
Flat place view. (Original code in PlaceBaseView).
|
Flat place view. (Original code in PlaceBaseView).
|
||||||
"""
|
"""
|
||||||
def __init__(self, dbstate, uistate):
|
def __init__(self, dbstate, uistate):
|
||||||
PlaceBaseView.__init__(self, dbstate, uistate,
|
PlaceBaseView.__init__(self, dbstate, uistate,
|
||||||
_('Places'), PlaceModel,
|
_('Places'), PlaceListModel,
|
||||||
nav_group=0)
|
nav_group=0)
|
@@ -30,7 +30,7 @@ Place Tree View
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
from gui.views.listview import LISTTREE
|
from gui.views.listview import LISTTREE
|
||||||
from libplaceview import PlaceBaseView
|
from libplaceview import PlaceBaseView
|
||||||
from gui.views.treemodels.placetreemodel import PlaceTreeModel, COUNTRYLEVELS
|
from gui.views.treemodels.placemodel import PlaceTreeModel, COUNTRYLEVELS
|
||||||
import gen.lib
|
import gen.lib
|
||||||
import Errors
|
import Errors
|
||||||
from gui.editors import EditPlace
|
from gui.editors import EditPlace
|
||||||
|
@@ -154,16 +154,16 @@ viewclass = 'PersonListView',
|
|||||||
order = END,
|
order = END,
|
||||||
)
|
)
|
||||||
register(VIEW,
|
register(VIEW,
|
||||||
id = 'placeview',
|
id = 'placelistview',
|
||||||
name = _("Place View"),
|
name = _("Place View"),
|
||||||
description = _("The view showing all the places of the family tree"),
|
description = _("The view showing all the places of the family tree"),
|
||||||
version = '1.0',
|
version = '1.0',
|
||||||
status = STABLE,
|
status = STABLE,
|
||||||
fname = 'placeview.py',
|
fname = 'placelistview.py',
|
||||||
authors = [u"The Gramps project"],
|
authors = [u"The Gramps project"],
|
||||||
authors_email = ["http://gramps-project.org"],
|
authors_email = ["http://gramps-project.org"],
|
||||||
category = ("Places", _("Places")),
|
category = ("Places", _("Places")),
|
||||||
viewclass = 'PlaceView',
|
viewclass = 'PlaceListView',
|
||||||
order = START,
|
order = START,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user