Rename placeview and placemodel classes for consistency

svn: r14216
This commit is contained in:
Nick Hall 2010-02-04 21:05:15 +00:00
parent 31d920ef29
commit a818db8817
10 changed files with 298 additions and 399 deletions

View File

@ -33,7 +33,7 @@ from gen.ggettext import gettext as _
# gramps modules
#
#-------------------------------------------------------------------------
from gui.views.treemodels import PlaceModel
from gui.views.treemodels.placemodel import PlaceListModel
from baseselector import BaseSelector
#-------------------------------------------------------------------------
@ -54,7 +54,7 @@ class SelectPlace(BaseSelector):
return _("Select Place")
def get_model_class(self):
return PlaceModel
return PlaceListModel
def get_column_titles(self):
return [

View File

@ -13,9 +13,7 @@ pkgdata_PYTHON = \
mediamodel.py \
notemodel.py \
peoplemodel.py \
placebasemodel.py \
placemodel.py \
placetreemodel.py \
repomodel.py \
sourcemodel.py \
treebasemodel.py

View File

@ -27,9 +27,7 @@ from peoplemodel import PeopleBaseModel, PersonListModel, PersonTreeModel
from familymodel import FamilyModel
from eventmodel import EventModel
from sourcemodel import SourceModel
from placebasemodel import PlaceBaseModel
from placemodel import PlaceModel
from placetreemodel import PlaceTreeModel
from placemodel import PlaceBaseModel, PlaceListModel, PlaceTreeModel
from mediamodel import MediaModel
from repomodel import RepositoryModel
from notemodel import NoteModel

View File

@ -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''

View File

@ -1,7 +1,9 @@
#
# 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
# it under the terms of the GNU General Public License as published by
@ -27,6 +29,7 @@ Place Model.
# python modules
#
#-------------------------------------------------------------------------
import cgi
import logging
_LOG = logging.getLogger(".gui.views.treemodels.placemodel")
@ -42,15 +45,190 @@ import gtk
# 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.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).
"""
@ -60,3 +238,105 @@ class PlaceModel(PlaceBaseModel, FlatBaseModel):
PlaceBaseModel.__init__(self, db)
FlatBaseModel.__init__(self, db, scol, order, tooltip_column=13,
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])

View File

@ -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])

View File

@ -19,9 +19,9 @@ pkgdata_PYTHON = \
pedigreeviewext.gpr.py \
personlistview.py \
persontreeview.py \
placetreeview.gpr.py \
placelistview.py \
placetreeview.py \
placeview.py \
placetreeview.gpr.py \
relview.py \
repoview.py \
sourceview.py \

View File

@ -20,7 +20,7 @@
# $Id$
"""
Place View
Place List View
"""
#-------------------------------------------------------------------------
@ -29,7 +29,7 @@ Place View
#
#-------------------------------------------------------------------------
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).
"""
def __init__(self, dbstate, uistate):
PlaceBaseView.__init__(self, dbstate, uistate,
_('Places'), PlaceModel,
_('Places'), PlaceListModel,
nav_group=0)

View File

@ -30,7 +30,7 @@ Place Tree View
#-------------------------------------------------------------------------
from gui.views.listview import LISTTREE
from libplaceview import PlaceBaseView
from gui.views.treemodels.placetreemodel import PlaceTreeModel, COUNTRYLEVELS
from gui.views.treemodels.placemodel import PlaceTreeModel, COUNTRYLEVELS
import gen.lib
import Errors
from gui.editors import EditPlace

View File

@ -154,16 +154,16 @@ viewclass = 'PersonListView',
order = END,
)
register(VIEW,
id = 'placeview',
id = 'placelistview',
name = _("Place View"),
description = _("The view showing all the places of the family tree"),
version = '1.0',
status = STABLE,
fname = 'placeview.py',
fname = 'placelistview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
category = ("Places", _("Places")),
viewclass = 'PlaceView',
viewclass = 'PlaceListView',
order = START,
)