2008-12-08 16:34:54 +05:30
|
|
|
# -*- python -*-
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#
|
|
|
|
# Gramps - a GTK+/GNOME based genealogy program
|
|
|
|
#
|
2009-09-08 02:43:38 +05:30
|
|
|
# Copyright (C) 2007-2009 Serge Noiraud
|
|
|
|
# Copyright (C) 2009 Helge GRAMPS
|
|
|
|
# Copyright (C) 2009 Josip
|
2008-12-10 04:20:21 +05:30
|
|
|
# Copyright (C) 2008 Benny Malengier
|
2008-12-08 16:34:54 +05:30
|
|
|
#
|
|
|
|
# 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$
|
|
|
|
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
Geo View
|
|
|
|
"""
|
2008-12-08 16:34:54 +05:30
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# Python modules
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
from gettext import gettext as _
|
|
|
|
import os
|
|
|
|
import urlparse
|
|
|
|
import const
|
2009-01-19 04:33:05 +05:30
|
|
|
import operator
|
2009-09-08 02:43:38 +05:30
|
|
|
import locale
|
2008-12-08 16:34:54 +05:30
|
|
|
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# GTK/Gnome modules
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
import gtk
|
|
|
|
|
2008-12-09 12:56:03 +05:30
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# Gramps Modules
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
import gen.lib
|
|
|
|
import Utils
|
|
|
|
import Config
|
|
|
|
from BasicUtils import name_displayer as _nd
|
2008-12-10 20:29:26 +05:30
|
|
|
from PlaceUtils import conv_lat_lon
|
2008-12-09 12:56:03 +05:30
|
|
|
|
2008-12-08 16:34:54 +05:30
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
2009-09-08 02:43:38 +05:30
|
|
|
# regexp for html title Notes ...
|
2008-12-08 16:34:54 +05:30
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
2009-09-08 02:43:38 +05:30
|
|
|
import re
|
|
|
|
ZOOMANDPOS = re.compile('zoom=([0-9]*) coord=([0-9\.\-\+]*), ([0-9\.\-\+]*):::')
|
2008-12-10 04:20:21 +05:30
|
|
|
|
2009-09-08 02:43:38 +05:30
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# Web interfaces
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
2008-12-10 04:20:21 +05:30
|
|
|
|
2009-09-08 02:43:38 +05:30
|
|
|
URL_SEP = '/'
|
2008-12-10 04:20:21 +05:30
|
|
|
|
2009-09-08 02:43:38 +05:30
|
|
|
from HtmlRenderer import HtmlView
|
2008-12-08 16:34:54 +05:30
|
|
|
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# Constants
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
2009-01-08 15:18:42 +05:30
|
|
|
GEOVIEW_SUBPATH = Utils.get_empty_tempdir('geoview')
|
2009-01-19 04:33:05 +05:30
|
|
|
NB_MARKERS_PER_PAGE = 200
|
2008-12-10 04:20:21 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# Functions
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
def _alternate_map():
|
|
|
|
"""
|
|
|
|
return the alternate name of the map provider.
|
|
|
|
"""
|
|
|
|
if Config.get(Config.GEOVIEW_GOOGLEMAPS):
|
|
|
|
alternate_map = "google"
|
|
|
|
elif Config.get(Config.GEOVIEW_OPENLAYERS):
|
|
|
|
alternate_map = "openlayers"
|
|
|
|
elif Config.get(Config.GEOVIEW_YAHOO):
|
|
|
|
alternate_map = "yahoo"
|
|
|
|
elif Config.get(Config.GEOVIEW_MICROSOFT):
|
|
|
|
alternate_map = "microsoft"
|
|
|
|
return alternate_map
|
|
|
|
|
2009-09-08 02:43:38 +05:30
|
|
|
def _get_sign(value):
|
2008-12-10 04:20:21 +05:30
|
|
|
"""
|
2009-09-08 02:43:38 +05:30
|
|
|
return 1 if we have a negative number, 0 in other case
|
2008-12-10 04:20:21 +05:30
|
|
|
"""
|
2009-09-08 02:43:38 +05:30
|
|
|
if value < 0.0:
|
|
|
|
return 1
|
|
|
|
else:
|
|
|
|
return 0
|
|
|
|
|
|
|
|
def _get_zoom_lat(value):
|
|
|
|
zoomlat = 1
|
|
|
|
for i, x in enumerate([80.0, 40.0, 20.0, 10.0, 3.0,
|
|
|
|
2.0, 1.0, 0.5, 0.2, 0.1]):
|
|
|
|
if value < x:
|
|
|
|
zoomlat = i+1
|
|
|
|
return zoomlat + 2
|
|
|
|
|
|
|
|
def _get_zoom_long(value):
|
|
|
|
zoomlong = 1
|
|
|
|
for i, x in enumerate([120.0, 60.0, 30.0, 15.0, 7.0,
|
|
|
|
4.0, 2.0, 1.0, .5, .2, .1]):
|
|
|
|
if value < x:
|
|
|
|
zoomlong = i+1
|
|
|
|
return zoomlong + 2
|
2008-12-10 04:20:21 +05:30
|
|
|
|
2008-12-08 16:34:54 +05:30
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# GeoView
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
2008-12-12 17:43:22 +05:30
|
|
|
class GeoView(HtmlView):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
The view used to render html pages.
|
|
|
|
"""
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-02-11 04:51:46 +05:30
|
|
|
def __init__(self, dbstate, uistate):
|
2009-01-27 02:56:20 +05:30
|
|
|
HtmlView.__init__(self, dbstate, uistate, title=_('GeoView'))
|
2009-09-08 02:43:38 +05:30
|
|
|
self.dbstate.connect('database-changed', self._new_database)
|
2008-12-08 16:34:54 +05:30
|
|
|
self.usedmap = "openstreetmap"
|
|
|
|
self.displaytype = "person"
|
2009-01-19 04:33:05 +05:30
|
|
|
self.nbmarkers = 0
|
2009-01-29 05:26:32 +05:30
|
|
|
self.without = 0
|
2009-01-19 04:33:05 +05:30
|
|
|
self.nbpages = 0
|
2009-02-11 04:51:46 +05:30
|
|
|
self.yearinmarker = []
|
|
|
|
self.mustcenter = False
|
|
|
|
self.centerlat = 0.0
|
|
|
|
self.centerlon = 0.0
|
|
|
|
self.setattr = True
|
|
|
|
self.latit = 0.0
|
|
|
|
self.longt = 0.0
|
|
|
|
self.maxlat = 0.0
|
|
|
|
self.maxlon = 0.0
|
|
|
|
self.height = 0.0
|
|
|
|
self.width = 0.0
|
|
|
|
self.zoom = 1
|
2009-09-08 02:43:38 +05:30
|
|
|
self.lock_action = None
|
|
|
|
self.realzoom = 0
|
|
|
|
self.reallatitude = 0.0
|
|
|
|
self.reallongitude = 0.0
|
|
|
|
if Config.get(Config.GEOVIEW_LOCKZOOM):
|
|
|
|
self.realzoom = Config.get(Config.GEOVIEW_ZOOM)
|
|
|
|
self.displaytype = Config.get(Config.GEOVIEW_MAP)
|
|
|
|
self.reallatitude, self.reallongitude = conv_lat_lon(
|
|
|
|
Config.get(Config.GEOVIEW_LATITUDE),
|
|
|
|
Config.get(Config.GEOVIEW_LONGITUDE),
|
|
|
|
"D.D8")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.minyear = 1
|
|
|
|
self.maxyear = 1
|
|
|
|
self.maxgen = 1
|
|
|
|
self.mapview = None
|
|
|
|
self.yearint = 0
|
|
|
|
self.centered = True
|
|
|
|
self.center = True
|
|
|
|
self.place_list = []
|
|
|
|
self.htmlfile = ""
|
|
|
|
self.places = []
|
|
|
|
self.sort = []
|
|
|
|
self.without_coord_file = []
|
|
|
|
self.place_without_coordinates = []
|
|
|
|
self.minlat = float(0.0)
|
|
|
|
self.maxlat = float(0.0)
|
|
|
|
self.minlon = float(0.0)
|
|
|
|
self.key_active_changed = None
|
|
|
|
|
2009-02-17 00:12:38 +05:30
|
|
|
def top_widget(self):
|
|
|
|
"""
|
|
|
|
The top widget to use, for GeoView, none
|
|
|
|
"""
|
|
|
|
return gtk.Label()
|
|
|
|
|
2008-12-12 17:43:22 +05:30
|
|
|
def on_delete(self):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-01-19 04:33:05 +05:30
|
|
|
We need to suppress temporary files here.
|
2009-09-08 02:43:38 +05:30
|
|
|
Save the zoom, latitude, longitude and lock
|
|
|
|
"""
|
|
|
|
self._savezoomandposition()
|
|
|
|
Config.set(Config.GEOVIEW_LOCKZOOM,
|
|
|
|
self.lock_action.get_action('SaveZoom').get_active()
|
|
|
|
)
|
|
|
|
if self.lock_action.get_action('SaveZoom').get_active():
|
|
|
|
Config.set(Config.GEOVIEW_ZOOM, self.realzoom)
|
|
|
|
Config.set(Config.GEOVIEW_LATITUDE, self.reallatitude)
|
|
|
|
Config.set(Config.GEOVIEW_LONGITUDE, self.reallongitude)
|
|
|
|
Config.set(Config.GEOVIEW_MAP, self.displaytype)
|
|
|
|
else:
|
|
|
|
Config.set(Config.GEOVIEW_ZOOM, 0)
|
|
|
|
Config.set(Config.GEOVIEW_LATITUDE, "0.0")
|
|
|
|
Config.set(Config.GEOVIEW_LONGITUDE, "0.0")
|
|
|
|
Config.set(Config.GEOVIEW_MAP, "person")
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2008-12-12 03:34:45 +05:30
|
|
|
def init_parent_signals_for_map(self, widget, event):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
Required to properly bootstrap the signal handlers.
|
|
|
|
This handler is connected by build_widget.
|
|
|
|
After the outside ViewManager has placed this widget we are
|
|
|
|
able to access the parent container.
|
|
|
|
"""
|
2008-12-12 17:43:22 +05:30
|
|
|
self.box.disconnect(self.bootstrap_handler)
|
2009-08-14 03:29:59 +05:30
|
|
|
self.box.parent.connect("size-allocate", self._size_request_for_map)
|
|
|
|
self._size_request_for_map(widget.parent, event)
|
2009-01-27 04:00:13 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _size_request_for_map(self, widget, event, data=None):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
We need to resize the map
|
|
|
|
"""
|
|
|
|
gws = widget.get_allocation()
|
|
|
|
self.width = gws.width
|
|
|
|
self.height = gws.height
|
2009-01-05 05:12:20 +05:30
|
|
|
self.external_uri()
|
|
|
|
if self.need_to_resize != True:
|
|
|
|
try:
|
2009-09-08 02:43:38 +05:30
|
|
|
self._geo_places()
|
2009-01-05 05:12:20 +05:30
|
|
|
except:
|
|
|
|
pass
|
2008-12-12 03:34:45 +05:30
|
|
|
|
2008-12-08 16:34:54 +05:30
|
|
|
def set_active(self):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Set view active when we enter into this view.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2008-12-08 16:34:54 +05:30
|
|
|
self.key_active_changed = self.dbstate.connect('active-changed',
|
|
|
|
self.goto_active_person)
|
2009-01-27 04:00:13 +05:30
|
|
|
|
2008-12-08 16:34:54 +05:30
|
|
|
def set_inactive(self):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Set view inactive when switching to another view.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2008-12-12 17:43:22 +05:30
|
|
|
HtmlView.set_inactive(self)
|
2008-12-08 16:34:54 +05:30
|
|
|
self.dbstate.disconnect(self.key_active_changed)
|
2009-01-27 04:00:13 +05:30
|
|
|
|
2009-09-08 02:43:38 +05:30
|
|
|
def _savezoomandposition(self):
|
|
|
|
"""
|
|
|
|
The only way we have to save the zoom and position is to change the title
|
|
|
|
of the html page then to get this title.
|
|
|
|
When the title change, we receive a 'changed-title' signal.
|
|
|
|
Then we can get the new title with the new values.
|
|
|
|
"""
|
|
|
|
res = self.dbstate.db.get_researcher()
|
|
|
|
if res: # Don't modify the current values if no db is loaded.
|
|
|
|
start = 0
|
2009-09-09 02:58:27 +05:30
|
|
|
try:
|
|
|
|
title = ZOOMANDPOS.search(self.renderer.title, start)
|
|
|
|
if title:
|
|
|
|
self.realzoom = title.group(1)
|
|
|
|
self.reallatitude = title.group(2)
|
|
|
|
self.reallongitude = title.group(3)
|
|
|
|
except:
|
|
|
|
pass
|
2009-09-08 02:43:38 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _change_map(self, usedmap):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Tell the browser to change the current map.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
self.renderer.execute_script(
|
2009-08-14 03:29:59 +05:30
|
|
|
"javascript:swap_map('"+usedmap+"','"+usedmap+"')")
|
2009-09-08 02:43:38 +05:30
|
|
|
self._savezoomandposition()
|
2008-12-08 16:34:54 +05:30
|
|
|
|
|
|
|
def ui_definition(self):
|
|
|
|
"""
|
|
|
|
Specifies the UIManager XML code that defines the menus and buttons
|
|
|
|
associated with the interface.
|
|
|
|
"""
|
2008-12-10 04:20:21 +05:30
|
|
|
return '''<ui>
|
|
|
|
<toolbar name="ToolBar">
|
2008-12-13 03:03:22 +05:30
|
|
|
<placeholder name="CommonNavigation">
|
|
|
|
<toolitem action="Back"/>
|
|
|
|
<toolitem action="Forward"/>
|
|
|
|
<toolitem action="Refresh"/>
|
|
|
|
</placeholder>
|
2008-12-10 04:20:21 +05:30
|
|
|
<placeholder name="CommonEdit">
|
|
|
|
<toolitem action="OpenStreetMap"/>
|
|
|
|
<toolitem action="%s"/>
|
2009-09-08 02:43:38 +05:30
|
|
|
<toolitem action="SaveZoom"/>
|
2008-12-10 04:20:21 +05:30
|
|
|
<separator/>
|
|
|
|
<toolitem action="PersonMaps"/>
|
|
|
|
<toolitem action="FamilyMaps"/>
|
|
|
|
<toolitem action="EventMaps"/>
|
|
|
|
<toolitem action="AllPlacesMaps"/>
|
|
|
|
</placeholder>
|
|
|
|
</toolbar>
|
2009-08-14 03:29:59 +05:30
|
|
|
</ui>''' % _alternate_map()
|
2008-12-08 16:34:54 +05:30
|
|
|
|
|
|
|
def define_actions(self):
|
|
|
|
"""
|
|
|
|
Required define_actions function for PageView. Builds the action
|
2009-01-20 02:28:02 +05:30
|
|
|
group information required.
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-01-20 02:28:02 +05:30
|
|
|
HtmlView._define_actions_fw_bw(self)
|
2009-01-24 17:44:45 +05:30
|
|
|
self.forward_action.set_sensitive(False)
|
|
|
|
self.back_action.set_sensitive(False)
|
2009-09-08 02:43:38 +05:30
|
|
|
self._add_action('OpenStreetMap', 'gramps-geo-mainmap',
|
2009-02-11 04:51:46 +05:30
|
|
|
_('_OpenStreetMap'),
|
2009-08-14 03:29:59 +05:30
|
|
|
callback=self._select_openstreetmap_map,
|
2008-12-10 04:20:21 +05:30
|
|
|
tip=_("Select OpenStreetMap Maps"))
|
|
|
|
if Config.get(Config.GEOVIEW_GOOGLEMAPS):
|
2009-09-08 02:43:38 +05:30
|
|
|
self._add_action('google', 'gramps-geo-altmap',
|
2008-12-10 04:20:21 +05:30
|
|
|
_('_Google Maps'),
|
2009-08-14 03:29:59 +05:30
|
|
|
callback=self._select_google_map,
|
2009-02-04 01:49:05 +05:30
|
|
|
tip=_("Select Google Maps."))
|
2008-12-10 04:20:21 +05:30
|
|
|
elif Config.get(Config.GEOVIEW_OPENLAYERS):
|
2009-09-08 02:43:38 +05:30
|
|
|
self._add_action('openlayers', 'gramps-geo-altmap',
|
2008-12-10 04:20:21 +05:30
|
|
|
_('_OpenLayers Maps'),
|
2009-08-14 03:29:59 +05:30
|
|
|
callback=self._select_openlayers_map,
|
2009-02-04 01:49:05 +05:30
|
|
|
tip=_("Select OpenLayers Maps."))
|
2008-12-10 04:20:21 +05:30
|
|
|
elif Config.get(Config.GEOVIEW_YAHOO):
|
2009-09-08 02:43:38 +05:30
|
|
|
self._add_action('yahoo', 'gramps-geo-altmap',
|
2008-12-10 04:20:21 +05:30
|
|
|
_('_Yahoo! Maps'),
|
2009-08-14 03:29:59 +05:30
|
|
|
callback=self._select_yahoo_map,
|
2009-02-04 01:49:05 +05:30
|
|
|
tip=_("Select Yahoo Maps."))
|
2008-12-10 04:20:21 +05:30
|
|
|
elif Config.get(Config.GEOVIEW_MICROSOFT):
|
2009-09-08 02:43:38 +05:30
|
|
|
self._add_action('microsoft', 'gramps-geo-altmap',
|
2008-12-10 04:20:21 +05:30
|
|
|
_('_Microsoft Maps'),
|
2009-08-14 03:29:59 +05:30
|
|
|
callback=self._select_microsoft_map,
|
2009-02-04 01:49:05 +05:30
|
|
|
tip=_("Select Microsoft Maps"))
|
2009-09-08 02:43:38 +05:30
|
|
|
self.lock_action = gtk.ActionGroup(self.title + '/SaveZoom')
|
|
|
|
self.lock_action.add_toggle_actions([
|
|
|
|
('SaveZoom', 'gramps-lock', _("_SaveZoom"), "<ALT>L",
|
|
|
|
_("Save the zoom between places map, person map, "
|
|
|
|
"family map and events map"),
|
|
|
|
self._save_zoom,
|
|
|
|
Config.get(Config.GEOVIEW_LOCKZOOM)
|
|
|
|
)
|
|
|
|
])
|
|
|
|
self._add_action_group(self.lock_action)
|
2009-02-04 01:49:05 +05:30
|
|
|
self._add_action('AllPlacesMaps', gtk.STOCK_HOME, _('_All Places'),
|
2009-08-14 03:29:59 +05:30
|
|
|
callback=self._all_places, tip=_("Attempt to view all places in "
|
|
|
|
"the family tree."))
|
2008-12-10 04:20:21 +05:30
|
|
|
self._add_action('PersonMaps', 'gramps-person', _('_Person'),
|
2009-08-14 03:29:59 +05:30
|
|
|
callback=self._person_places,
|
|
|
|
tip=_("Attempt to view all the places "
|
|
|
|
"where the selected people lived."))
|
2008-12-10 04:20:21 +05:30
|
|
|
self._add_action('FamilyMaps', 'gramps-parents-add', _('_Family'),
|
2009-08-14 03:29:59 +05:30
|
|
|
callback=self._family_places,
|
2009-02-11 04:51:46 +05:30
|
|
|
tip=_("Attempt to view places of the selected people's family."))
|
2008-12-10 04:20:21 +05:30
|
|
|
self._add_action('EventMaps', 'gramps-event', _('_Event'),
|
2009-08-14 03:29:59 +05:30
|
|
|
callback=self._event_places,
|
2009-02-11 04:51:46 +05:30
|
|
|
tip=_("Attempt to view places connected to all events."))
|
2008-12-10 04:20:21 +05:30
|
|
|
|
2009-02-11 04:51:46 +05:30
|
|
|
def goto_active_person(self, handle=None):
|
|
|
|
"""
|
|
|
|
Here when the GeoView page is loaded
|
|
|
|
"""
|
2009-09-08 02:43:38 +05:30
|
|
|
self._geo_places()
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _all_places(self, hanle=None):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
|
|
|
Specifies the place for the home person to display with mapstraction.
|
|
|
|
"""
|
|
|
|
self.displaytype = "places"
|
2009-09-08 02:43:38 +05:30
|
|
|
self._geo_places()
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _person_places(self, handle=None):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
|
|
|
Specifies the person places.
|
|
|
|
"""
|
|
|
|
self.displaytype = "person"
|
2009-09-08 02:43:38 +05:30
|
|
|
self._geo_places()
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _family_places(self, hanle=None):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
|
|
|
Specifies the family places to display with mapstraction.
|
|
|
|
"""
|
|
|
|
self.displaytype = "family"
|
2009-09-08 02:43:38 +05:30
|
|
|
self._geo_places()
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _event_places(self, hanle=None):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
|
|
|
Specifies all event places to display with mapstraction.
|
|
|
|
"""
|
|
|
|
self.displaytype = "event"
|
2009-09-08 02:43:38 +05:30
|
|
|
self._geo_places()
|
|
|
|
|
|
|
|
def _new_database(self, *args):
|
|
|
|
"""
|
|
|
|
We just change the database.
|
|
|
|
Restore the initial config. Is it good ?
|
|
|
|
"""
|
|
|
|
if Config.get(Config.GEOVIEW_LOCKZOOM):
|
|
|
|
self.realzoom = Config.get(Config.GEOVIEW_ZOOM)
|
|
|
|
self.displaytype = Config.get(Config.GEOVIEW_MAP)
|
|
|
|
self.reallatitude, self.reallongitude = conv_lat_lon(
|
|
|
|
Config.get(Config.GEOVIEW_LATITUDE),
|
|
|
|
Config.get(Config.GEOVIEW_LONGITUDE),
|
|
|
|
"D.D8")
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-09-08 02:43:38 +05:30
|
|
|
def _geo_places(self):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
|
|
|
Specifies the places to display with mapstraction.
|
|
|
|
"""
|
2009-09-08 02:43:38 +05:30
|
|
|
if self.nbmarkers > 0 :
|
|
|
|
# While the db is not loaded, we have 0 markers.
|
|
|
|
self._savezoomandposition()
|
2009-01-05 05:12:20 +05:30
|
|
|
self.external_url = False
|
2009-01-19 04:33:05 +05:30
|
|
|
self.nbmarkers = 0
|
2009-01-29 05:26:32 +05:30
|
|
|
self.without = 0
|
2009-09-08 02:43:38 +05:30
|
|
|
self._createmapstraction(self.displaytype)
|
|
|
|
self.open(urlparse.urlunsplit(
|
|
|
|
('file', '',
|
|
|
|
URL_SEP.join(self.htmlfile.split(os.sep)),
|
|
|
|
'', '')))
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _select_openstreetmap_map(self, handle):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Make openstreetmap the default map.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-02-07 17:34:06 +05:30
|
|
|
self.usedmap = "openstreetmap"
|
2009-08-14 03:29:59 +05:30
|
|
|
self._change_map("openstreetmap")
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _select_openlayers_map(self, handle):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Make openstreetmap the default map.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-02-07 17:34:06 +05:30
|
|
|
self.usedmap = "openlayers"
|
2009-08-14 03:29:59 +05:30
|
|
|
self._change_map("openlayers")
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _select_google_map(self, handle):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
Specifies google is the default map
|
|
|
|
"""
|
2009-02-07 17:34:06 +05:30
|
|
|
self.usedmap = "google"
|
2009-08-14 03:29:59 +05:30
|
|
|
self._change_map("google")
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _select_yahoo_map(self, handle):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Make yahoo map the default map.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-02-07 17:34:06 +05:30
|
|
|
self.usedmap = "yahoo"
|
2009-08-14 03:29:59 +05:30
|
|
|
self._change_map("yahoo")
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _select_microsoft_map(self, handle):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Make microsoft the default map.
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-02-11 04:51:46 +05:30
|
|
|
self.usedmap = "microsoft"
|
2009-08-14 03:29:59 +05:30
|
|
|
self._change_map("microsoft")
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-09-08 02:43:38 +05:30
|
|
|
def _save_zoom(self, button):
|
|
|
|
"""
|
|
|
|
Do we change the zoom between maps ?
|
|
|
|
It's not between maps providers, but between people, family,
|
|
|
|
events or places map.
|
|
|
|
When we unlock, we reload the page with our values.
|
|
|
|
"""
|
|
|
|
if not button.get_active():
|
|
|
|
self._change_map(self.usedmap)
|
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _createpageplaceswithoutcoord(self):
|
2009-01-29 05:26:32 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Create a page with the list of all places without coordinates
|
2009-01-29 05:26:32 +05:30
|
|
|
page.
|
|
|
|
"""
|
|
|
|
data = """
|
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" \
|
|
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" >
|
|
|
|
<head>
|
|
|
|
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
|
|
|
|
<title>%(title)s</title>
|
|
|
|
</head>
|
|
|
|
<body >
|
2009-09-08 02:43:38 +05:30
|
|
|
<H4>%(content)s<a href="javascript:history.go(-1)">%(back)s</a></H4>
|
2009-01-29 05:26:32 +05:30
|
|
|
""" % { 'title' : _('List of places without coordinates'),
|
2009-02-04 01:49:05 +05:30
|
|
|
'content': _('Here is the list of all places in the family tree'
|
2009-01-29 05:26:32 +05:30
|
|
|
' for which we have no coordinates.<br>'
|
2009-09-08 02:43:38 +05:30
|
|
|
' This means no longitude or latitude.<p>'),
|
|
|
|
'back' : _('Back to prior page')
|
2009-01-29 05:26:32 +05:30
|
|
|
}
|
|
|
|
end = """
|
|
|
|
</table>
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
"""
|
2009-02-11 04:51:46 +05:30
|
|
|
ufd = open(self.without_coord_file, "w+")
|
|
|
|
ufd.write(data)
|
2009-01-29 05:26:32 +05:30
|
|
|
self.places = sorted(self.place_without_coordinates)
|
|
|
|
i = 1
|
2009-02-11 04:51:46 +05:30
|
|
|
ufd.write("<table border=1 ><th width=10%>NB</th>")
|
|
|
|
ufd.write("<th width=20%>Gramps ID</th><th>Place</th>")
|
2009-01-29 05:26:32 +05:30
|
|
|
for place in self.places:
|
2009-09-08 02:43:38 +05:30
|
|
|
ufd.write("<tr><td>%d</td><td>%s</td><td>%s</td></tr>\n"
|
2009-02-11 04:51:46 +05:30
|
|
|
% ( i, place[0], place[1] ))
|
2009-01-29 05:26:32 +05:30
|
|
|
i += 1
|
2009-02-11 04:51:46 +05:30
|
|
|
ufd.write(end)
|
|
|
|
ufd.close()
|
2009-01-29 05:26:32 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _createmapstractionpostheader(self, h3mess, h4mess,
|
2009-02-11 04:51:46 +05:30
|
|
|
maxpages, curpage, ftype):
|
|
|
|
"""
|
|
|
|
This is needed to add infos to the header.
|
|
|
|
This can't be in createmapstractionheader because we need
|
|
|
|
to know something which is known only after some work.
|
|
|
|
"""
|
|
|
|
self.maxgen = Config.get(Config.GENERATION_DEPTH)
|
2008-12-08 16:34:54 +05:30
|
|
|
if self.maxyear == 0:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.maxyear = 2100
|
2008-12-08 16:34:54 +05:30
|
|
|
if self.minyear == 9999:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.minyear = 1500
|
2008-12-08 16:34:54 +05:30
|
|
|
period = (self.maxyear-self.minyear)
|
|
|
|
intvl = (period/self.maxgen)
|
|
|
|
modulo = intvl - ( intvl % 10 )
|
|
|
|
if modulo == 0:
|
|
|
|
modulo = 10
|
2009-09-11 00:19:48 +05:30
|
|
|
self.minyear -= self.minyear % 10
|
|
|
|
self.maxyear -= self.maxyear % 10
|
2009-02-11 04:51:46 +05:30
|
|
|
self.yearint = (self.maxyear-self.minyear)/self.maxgen
|
2009-09-11 00:19:48 +05:30
|
|
|
self.yearint -= self.yearint % modulo
|
2008-12-08 16:34:54 +05:30
|
|
|
if self.yearint == 0:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.yearint = 10
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("<script>\n")
|
|
|
|
self.mapview.write(" var step = %s;\n" % self.yearint)
|
|
|
|
self.mapview.write("</script>\n")
|
|
|
|
self.mapview.write("</head>\n")
|
|
|
|
self.mapview.write("<body >\n")
|
2009-01-19 04:33:05 +05:30
|
|
|
if maxpages > 1:
|
2009-02-04 01:49:05 +05:30
|
|
|
message = _("There are %d markers to display. They are split up "
|
|
|
|
"over %d pages of %d markers : " % (self.nbmarkers,
|
|
|
|
maxpages, NB_MARKERS_PER_PAGE))
|
2009-01-19 04:33:05 +05:30
|
|
|
self.mapview.write(" <div id='pages' font=-4 >%s<br>\n" % message)
|
|
|
|
if curpage != 1:
|
2009-09-08 02:43:38 +05:30
|
|
|
priorfile = os.path.join(GEOVIEW_SUBPATH,
|
|
|
|
"GeoV-%c-%05d.html" %
|
|
|
|
(ftype, curpage-1))
|
|
|
|
priorfile = urlparse.urlunsplit(
|
|
|
|
('file', '',
|
|
|
|
URL_SEP.join(priorfile.split(os.sep)),
|
|
|
|
'', ''))
|
2009-01-28 00:43:42 +05:30
|
|
|
self.mapview.write("<a href='%s' >--</a>" % priorfile)
|
2009-01-19 04:33:05 +05:30
|
|
|
else:
|
|
|
|
self.mapview.write(" --")
|
2009-02-11 04:51:46 +05:30
|
|
|
for page in range(1, maxpages+1, 1):
|
2009-01-19 04:33:05 +05:30
|
|
|
if page == curpage:
|
|
|
|
self.mapview.write(" %d" % page)
|
|
|
|
else:
|
2009-01-28 00:43:42 +05:30
|
|
|
if ( page < curpage + 11 ) and ( page > curpage - 11 ):
|
2009-09-08 02:43:38 +05:30
|
|
|
nextfile = os.path.join(GEOVIEW_SUBPATH,
|
|
|
|
"GeoV-%c-%05d.html" % \
|
|
|
|
(ftype, page))
|
|
|
|
nextfile = urlparse.urlunsplit(
|
|
|
|
('file', '',
|
|
|
|
URL_SEP.join(nextfile.split(os.sep)),
|
|
|
|
'', ''))
|
|
|
|
self.mapview.write("\n<a href='%s' >%d</a>" %
|
2009-02-11 04:51:46 +05:30
|
|
|
(nextfile, page))
|
2009-01-19 04:33:05 +05:30
|
|
|
if curpage != maxpages:
|
2009-09-08 02:43:38 +05:30
|
|
|
nextfile = os.path.join(GEOVIEW_SUBPATH,
|
|
|
|
"GeoV-%c-%05d.html" % (ftype, curpage+1))
|
|
|
|
nextfile = urlparse.urlunsplit(
|
|
|
|
('file', '',
|
|
|
|
URL_SEP.join(nextfile.split(os.sep)),
|
|
|
|
'', ''))
|
|
|
|
self.mapview.write("\n<a href='%s' >++</a>" % nextfile)
|
2009-01-19 04:33:05 +05:30
|
|
|
else:
|
|
|
|
self.mapview.write(" ++")
|
|
|
|
self.mapview.write("\n</div>\n")
|
2009-01-29 05:26:32 +05:30
|
|
|
if self.without != 0:
|
2009-09-08 02:43:38 +05:30
|
|
|
self.without_coord_file = os.path.join(GEOVIEW_SUBPATH,
|
|
|
|
"without_coord.html")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("<div id='coord' font=-4 >You have ")
|
2009-09-08 02:43:38 +05:30
|
|
|
filename = urlparse.urlunsplit(
|
|
|
|
('file', '',
|
|
|
|
URL_SEP.join(self.without_coord_file.split(os.sep)),
|
|
|
|
'', ''))
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("<a href=\"%s\" >%d<a>" % \
|
2009-09-08 02:43:38 +05:30
|
|
|
( filename, self.without ) )
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write(" places without coordinates</div>\n" )
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createpageplaceswithoutcoord()
|
2008-12-08 16:34:54 +05:30
|
|
|
if self.displaytype != "places":
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" <form method='POST' name='btns'>\n")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write(" <input type='radio' ")
|
|
|
|
self.mapview.write("name='years' value='All' checked\n")
|
|
|
|
self.mapview.write(" onchange=\"selectmarkers")
|
2009-02-20 02:41:08 +05:30
|
|
|
self.mapview.write("(\'All\')\"/>%s\n" % _("All"))
|
2009-02-11 04:51:46 +05:30
|
|
|
for year in range(self.minyear, self.maxyear+self.yearint,
|
|
|
|
self.yearint):
|
|
|
|
self.mapview.write(" <input type='radio' ")
|
|
|
|
self.mapview.write("name='years' value=\'%s\'\n" %year)
|
|
|
|
self.mapview.write(" onchange=\"selectmarkers")
|
|
|
|
self.mapview.write("(\'%s\')\"/>%s\n" % ( year, year ))
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" </form>\n")
|
2009-01-19 04:33:05 +05:30
|
|
|
self.mapview.write("<H3>%s</H3>" % h3mess)
|
|
|
|
if h4mess:
|
|
|
|
self.mapview.write("<H4>%s</H4>" % h4mess)
|
2009-08-14 03:29:59 +05:30
|
|
|
margin = 10
|
|
|
|
self.mapview.write("\n<div id=\"openstreetmap\" class=\"Mapstraction\"")
|
|
|
|
self.mapview.write(" style=\"width: %dpx; " % (self.width - margin*4))
|
|
|
|
self.mapview.write("height: %dpx\"></div>\n" % (self.height * 0.74))
|
|
|
|
self.mapview.write("<div id=\"%s\" class=\"Mapstraction\"" % \
|
|
|
|
_alternate_map())
|
|
|
|
self.mapview.write(" style=\"display: none; ")
|
|
|
|
self.mapview.write("width: %dpx; height: %dpx\"></div>\n" % \
|
|
|
|
((self.width - margin*4), (self.height * 0.74 )))
|
|
|
|
self.mapview.write("<script type=\"text/javascript\">\n")
|
|
|
|
self.mapview.write(" var mapstraction = new Mapstraction")
|
|
|
|
self.mapview.write("('openstreetmap','openstreetmap');\n")
|
|
|
|
self.mapview.write(" mapstraction.addControls(")
|
|
|
|
self.mapview.write("{ pan: true, zoom: 'large', ")
|
|
|
|
self.mapview.write("overview: true, scale: true, map_type: true });\n")
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _create_needed_javascript(self):
|
|
|
|
"""
|
|
|
|
Create the needed javascript functions.
|
|
|
|
"""
|
|
|
|
self.mapview.write("<script>\n")
|
|
|
|
self.mapview.write(" var gmarkers = [];\n")
|
|
|
|
self.mapview.write(" var min = 0;\n")
|
2009-09-08 02:43:38 +05:30
|
|
|
self.mapview.write(" var zoom = 0;\n")
|
|
|
|
self.mapview.write(" var pos = 0;\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" var selected = 0;\n")
|
2009-09-08 02:43:38 +05:30
|
|
|
self.mapview.write(" var current_map = '%s';\n" % self.usedmap )
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" var selectedmarkers = 'All';\n")
|
|
|
|
self.mapview.write(" // shows or hide markers of a ")
|
|
|
|
self.mapview.write("particular category\n")
|
|
|
|
self.mapview.write(" function selectmarkers(year) {\n")
|
|
|
|
self.mapview.write(" selectedmarkers = year;\n")
|
|
|
|
self.mapview.write(" for (var i=0; i<gmarkers.length; i++) {\n")
|
|
|
|
self.mapview.write(" val = gmarkers[i].getAttribute")
|
|
|
|
self.mapview.write("(\"year\");\n")
|
|
|
|
self.mapview.write(" min = parseInt(year);\n")
|
|
|
|
self.mapview.write(" max = min + step;\n")
|
|
|
|
self.mapview.write(" if ( selectedmarkers == \"All\" ) ")
|
|
|
|
self.mapview.write("{ min = 0; max = 9999; }\n")
|
|
|
|
self.mapview.write(" gmarkers[i].hide();\n")
|
|
|
|
self.mapview.write(" gmarkers[i].")
|
|
|
|
self.mapview.write("closeBubble();\n")
|
|
|
|
self.mapview.write(" years = val.split(' ');\n")
|
|
|
|
self.mapview.write(" for ( j=0; j < years.length; j++) {\n")
|
|
|
|
self.mapview.write(" if ( years[j] >= min ) {\n")
|
|
|
|
self.mapview.write(" if ( years[j] < max ) {\n")
|
|
|
|
self.mapview.write(" gmarkers[i].show();\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" }\n")
|
2009-09-08 02:43:38 +05:30
|
|
|
self.mapview.write(" function savezoomandposition(mapstraction) {\n")
|
|
|
|
self.mapview.write(" var t=setTimeout(\"savezoomandposition(")
|
|
|
|
self.mapview.write("mapstraction)\",1000);\n")
|
|
|
|
self.mapview.write(" nzoom = mapstraction.getZoom();\n")
|
|
|
|
self.mapview.write(" nposition=mapstraction.getCenter();\n")
|
|
|
|
self.mapview.write(" if ( ( nzoom != zoom ) || ")
|
|
|
|
self.mapview.write("( nposition != pos )) {\n")
|
|
|
|
self.mapview.write(" zoom = nzoom;\n")
|
|
|
|
self.mapview.write(" pos = nposition;\n")
|
|
|
|
self.mapview.write(" document.title = \"zoom=\" + zoom + \" ")
|
|
|
|
self.mapview.write("coord=\" + pos + \":::\";\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" }\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" function removemarkers(mapstraction) {\n")
|
|
|
|
self.mapview.write(" for ( m=0; m < gmarkers.length; m++) {\n")
|
|
|
|
self.mapview.write(" mapstraction.removeMarker(gmarkers[m]);\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" function get_selected_radio() {\n")
|
|
|
|
self.mapview.write(" selected = 0;\n")
|
|
|
|
self.mapview.write(" for ( b=0; b < document.btns.years.length; ")
|
|
|
|
self.mapview.write("b++) {\n if ( document.btns.years[b].checked ")
|
|
|
|
self.mapview.write("== true ) selected=b;\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" function set_selected_radio() {\n")
|
|
|
|
self.mapview.write(" document.btns.years[selected].click();\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" function reset_radio() {\n")
|
|
|
|
self.mapview.write(" document.btns.years[0].click();\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
self.mapview.write(" function swap_map(div,map) {\n")
|
2009-09-08 02:43:38 +05:30
|
|
|
self.mapview.write(" savezoomandposition(mapstraction);\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
if self.displaytype != "places":
|
|
|
|
self.mapview.write(" get_selected_radio();\n")
|
|
|
|
self.mapview.write(" removemarkers(mapstraction);\n")
|
2009-09-08 02:43:38 +05:30
|
|
|
self.mapview.write(" current_map=map;\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" mapstraction.swap(div,map);\n")
|
|
|
|
if self.displaytype != "places":
|
|
|
|
self.mapview.write(" reset_radio();\n")
|
|
|
|
self.mapview.write(" setmarkers(mapstraction);\n")
|
2009-09-08 02:43:38 +05:30
|
|
|
self.mapview.write(" mapstraction.enableScrollWheelZoom();\n")
|
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
if self.displaytype != "places":
|
|
|
|
self.mapview.write(" set_selected_radio();\n")
|
|
|
|
self.mapview.write(" }\n")
|
|
|
|
|
|
|
|
def _createmapstractionheader(self, filename):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
Create the html header of the page.
|
|
|
|
"""
|
|
|
|
self.mapview = open(filename, "w+")
|
|
|
|
self.mapview.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD")
|
|
|
|
self.mapview.write(" XHTML 1.0 Strict//EN\" \n")
|
|
|
|
self.mapview.write(" \"http://www.w3.org/TR/xhtml1/DTD/")
|
|
|
|
self.mapview.write("xhtml1-strict.dtd\">\n")
|
2009-09-08 02:43:38 +05:30
|
|
|
(lang_country, modifier ) = locale.getlocale()
|
|
|
|
self.mapview.write("<html xmlns=\"http://www.w3.org/1999/xhtml\""
|
|
|
|
" lang=\"%s\" >\n" % lang_country)
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("<head>\n")
|
|
|
|
self.mapview.write(" <meta http-equiv=\"content-type\" ")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("content=\"text/html; charset=utf-8\"/>\n")
|
2009-09-08 02:43:38 +05:30
|
|
|
self.mapview.write(" <meta http-equiv=\"Accept-Language\" ")
|
|
|
|
self.mapview.write("content=\"%s\"/>\n" % lang_country.split('_')[0])
|
|
|
|
self.mapview.write(" <meta http-equiv=\"Content-Language\" ")
|
|
|
|
self.mapview.write("content=\"%s\"/>\n" % lang_country.split('_')[0])
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" <title>Geo Maps Java Script ")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("API for Gramps</title>\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" <meta http-equiv=\"Content-Script-Type\" ")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("content=\"text/javascript\">\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("<script type=\"text/javascript\"\n" )
|
2009-09-08 02:43:38 +05:30
|
|
|
fpath = os.path.join(const.ROOT_DIR,
|
|
|
|
'mapstraction',
|
|
|
|
'mapstraction.js')
|
|
|
|
upath = urlparse.urlunsplit(('file', '',
|
|
|
|
URL_SEP.join(fpath.split(os.sep)),
|
|
|
|
'', ''))
|
|
|
|
self.mapview.write(" src=\"%s\">\n" % upath)
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("</script>\n")
|
|
|
|
self.mapview.write("<script id=\"googleapiimport\" \n")
|
|
|
|
self.mapview.write(" src=\"http://maps.google.com/")
|
|
|
|
self.mapview.write("maps?file=api&v=2\"\n")
|
|
|
|
self.mapview.write(" type=\"text/javascript\">\n")
|
|
|
|
self.mapview.write("</script>\n")
|
2009-09-09 02:58:27 +05:30
|
|
|
if _alternate_map() == "microsoft":
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("<script type=\"text/javascript\"\n")
|
|
|
|
self.mapview.write(" src=\"http://dev.virtualearth.net/")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("mapcontrol/mapcontrol.ashx?v=6\">\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("</script>\n")
|
2009-09-09 02:58:27 +05:30
|
|
|
elif _alternate_map() == "yahoo":
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("<script type=\"text/javascript\"\n")
|
|
|
|
self.mapview.write(" src=\"http://api.maps.yahoo.com/")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("ajaxymap?v=3.0&appid=MapstractionDemo\" ")
|
|
|
|
self.mapview.write("type=\"text/javascript\">\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("</script>\n")
|
2009-09-09 02:58:27 +05:30
|
|
|
elif _alternate_map() == "openlayers":
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("<script type=\"text/javascript\"\n")
|
|
|
|
self.mapview.write(" src=\"http://openlayers.org/")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("api/OpenLayers.js\">\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("</script>\n")
|
|
|
|
|
|
|
|
def _createmapstractiontrailer(self):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Add the last directives for the html page.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" setcenterandzoom(mapstraction);\n")
|
|
|
|
self.mapview.write(" setmarkers(mapstraction);\n")
|
2009-09-08 02:43:38 +05:30
|
|
|
self.mapview.write(" savezoomandposition(mapstraction);\n")
|
|
|
|
self.mapview.write(" if ( current_map != \"openstreetmap\") {")
|
|
|
|
self.mapview.write(" swap_map(current_map,current_map);")
|
|
|
|
self.mapview.write(" };\n")
|
|
|
|
self.mapview.write(" mapstraction.enableScrollWheelZoom();\n")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("</script>\n")
|
|
|
|
self.mapview.write("</body>\n")
|
2008-12-12 17:43:22 +05:30
|
|
|
self.mapview.write("</html>\n")
|
|
|
|
self.mapview.close()
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _set_center_and_zoom(self, ptype):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-14 03:29:59 +05:30
|
|
|
Calculate the zoom.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-01-19 04:33:05 +05:30
|
|
|
# Select the center of the map and the zoom
|
2009-01-24 19:22:53 +05:30
|
|
|
self.centered = False
|
2009-02-11 04:51:46 +05:30
|
|
|
if ptype == 2:
|
2009-01-19 04:33:05 +05:30
|
|
|
# Sort by year for events
|
|
|
|
self.sort = sorted(self.place_list, key=operator.itemgetter(7))
|
|
|
|
else:
|
|
|
|
# Sort by place
|
|
|
|
self.sort = sorted(self.place_list)
|
2009-09-08 02:43:38 +05:30
|
|
|
signminlon = _get_sign(self.minlon)
|
|
|
|
signminlat = _get_sign(self.minlat)
|
|
|
|
signmaxlon = _get_sign(self.maxlon)
|
|
|
|
signmaxlat = _get_sign(self.maxlat)
|
2008-12-08 16:34:54 +05:30
|
|
|
if signminlon == signmaxlon:
|
2009-02-11 04:51:46 +05:30
|
|
|
maxlong = abs(abs(self.minlon)-abs(self.maxlon))
|
2008-12-08 16:34:54 +05:30
|
|
|
else:
|
2009-02-11 04:51:46 +05:30
|
|
|
maxlong = abs(abs(self.minlon)+abs(self.maxlon))
|
2008-12-08 16:34:54 +05:30
|
|
|
if signminlat == signmaxlat:
|
2009-02-11 04:51:46 +05:30
|
|
|
maxlat = abs(abs(self.minlat)-abs(self.maxlat))
|
2008-12-08 16:34:54 +05:30
|
|
|
else:
|
2009-02-11 04:51:46 +05:30
|
|
|
maxlat = abs(abs(self.minlat)+abs(self.maxlat))
|
2009-01-19 04:33:05 +05:30
|
|
|
# Calculate the zoom. all places must be displayed on the map.
|
2009-09-08 02:43:38 +05:30
|
|
|
zoomlat = _get_zoom_lat(maxlat)
|
|
|
|
zoomlong = _get_zoom_long(maxlong)
|
2008-12-08 16:34:54 +05:30
|
|
|
if zoomlat < zoomlong:
|
2009-02-10 05:07:40 +05:30
|
|
|
self.zoom = zoomlat
|
2008-12-08 16:34:54 +05:30
|
|
|
else:
|
2009-02-10 05:07:40 +05:30
|
|
|
self.zoom = zoomlong
|
2008-12-23 23:58:33 +05:30
|
|
|
self.zoom -= 1
|
2009-01-31 17:02:50 +05:30
|
|
|
if self.zoom < 2:
|
|
|
|
self.zoom = 2
|
2009-01-19 04:33:05 +05:30
|
|
|
# We center the map on a point at the center of all markers
|
|
|
|
self.centerlat = maxlat/2
|
|
|
|
self.centerlon = maxlong/2
|
2009-01-27 04:00:13 +05:30
|
|
|
latit = 0.0
|
|
|
|
longt = 0.0
|
2009-01-19 04:33:05 +05:30
|
|
|
for mark in self.sort:
|
2009-01-24 19:22:53 +05:30
|
|
|
cent = int(mark[6])
|
|
|
|
if cent:
|
|
|
|
self.centered = True
|
2009-01-29 05:26:32 +05:30
|
|
|
if ( signminlat == signmaxlat ):
|
2009-01-31 17:02:50 +05:30
|
|
|
if signminlat == 1:
|
|
|
|
latit = self.minlat+self.centerlat
|
2009-01-29 05:26:32 +05:30
|
|
|
else:
|
2009-01-31 17:02:50 +05:30
|
|
|
latit = self.maxlat-self.centerlat
|
2009-01-29 05:26:32 +05:30
|
|
|
elif self.maxlat > self.centerlat:
|
2009-01-19 04:33:05 +05:30
|
|
|
latit = self.maxlat-self.centerlat
|
|
|
|
else:
|
2009-01-31 17:02:50 +05:30
|
|
|
latit = self.minlat+self.centerlat
|
2009-01-29 05:26:32 +05:30
|
|
|
if ( signminlon == signmaxlon ):
|
2009-01-31 17:02:50 +05:30
|
|
|
if signminlon == 1:
|
|
|
|
longt = self.minlon+self.centerlon
|
2009-01-29 05:26:32 +05:30
|
|
|
else:
|
2009-01-31 17:02:50 +05:30
|
|
|
longt = self.maxlon-self.centerlon
|
2009-01-29 05:26:32 +05:30
|
|
|
elif self.maxlon > self.centerlon:
|
2009-01-19 04:33:05 +05:30
|
|
|
longt = self.maxlon-self.centerlon
|
|
|
|
else:
|
2009-01-31 17:02:50 +05:30
|
|
|
longt = self.minlon+self.centerlon
|
2009-02-11 04:51:46 +05:30
|
|
|
# all maps: 0.0 for longitude and latitude means no location.
|
2009-01-31 17:02:50 +05:30
|
|
|
if latit == 0.0 and longt == 0.0:
|
2009-02-10 05:07:40 +05:30
|
|
|
latit = 0.00000001
|
|
|
|
longt = 0.00000001
|
2009-01-27 04:00:13 +05:30
|
|
|
self.mustcenter = False
|
|
|
|
if latit != 0.0 or longt != 0.0:
|
|
|
|
self.latit = latit
|
|
|
|
self.longt = longt
|
|
|
|
self.mustcenter = True
|
2009-08-14 03:29:59 +05:30
|
|
|
|
|
|
|
def _create_pages(self, ptype, h3mess, h4mess):
|
|
|
|
"""
|
|
|
|
Do we need to create a multi-pages document ?
|
|
|
|
Do we have too many markers ?
|
|
|
|
"""
|
|
|
|
nbmarkers = 0
|
|
|
|
self.nbpages = 0
|
|
|
|
pages = ( self.nbmarkers / NB_MARKERS_PER_PAGE ) + 1
|
|
|
|
if (nbmarkers % NB_MARKERS_PER_PAGE) == 0:
|
|
|
|
try:
|
|
|
|
self._createmapstractiontrailer()
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
self._set_center_and_zoom(ptype)
|
2009-02-11 04:51:46 +05:30
|
|
|
for page in range(0, pages, 1):
|
2009-01-19 04:33:05 +05:30
|
|
|
self.nbpages += 1
|
2009-02-11 04:51:46 +05:30
|
|
|
if ptype == 1:
|
2009-01-19 04:33:05 +05:30
|
|
|
ftype = "P"
|
2009-02-11 04:51:46 +05:30
|
|
|
elif ptype == 2:
|
2009-01-19 04:33:05 +05:30
|
|
|
ftype = "E"
|
2009-02-11 04:51:46 +05:30
|
|
|
elif ptype == 3:
|
2009-01-19 04:33:05 +05:30
|
|
|
ftype = "F"
|
2009-02-11 04:51:46 +05:30
|
|
|
elif ptype == 4:
|
2009-01-19 04:33:05 +05:30
|
|
|
ftype = "I"
|
|
|
|
else:
|
|
|
|
ftype = "X"
|
2009-09-08 02:43:38 +05:30
|
|
|
filename = os.path.join(GEOVIEW_SUBPATH,
|
|
|
|
"GeoV-%c-%05d.html" %
|
|
|
|
(ftype, self.nbpages))
|
2009-01-19 04:33:05 +05:30
|
|
|
if self.nbpages == 1:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.htmlfile = filename
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createmapstractionheader(filename)
|
|
|
|
self._create_needed_javascript()
|
2009-01-19 04:33:05 +05:30
|
|
|
first = ( self.nbpages - 1 ) * NB_MARKERS_PER_PAGE
|
|
|
|
last = ( self.nbpages * NB_MARKERS_PER_PAGE ) - 1
|
2009-08-14 03:29:59 +05:30
|
|
|
self._create_markers(ptype, first, last)
|
|
|
|
self._createmapstractionpostheader(h3mess, h4mess,
|
|
|
|
pages, self.nbpages, ftype)
|
|
|
|
self._createmapstractiontrailer()
|
2009-01-19 04:33:05 +05:30
|
|
|
if self.nbpages == 1:
|
|
|
|
self.open(self.htmlfile)
|
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _createmapstraction(self, displaytype):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
Which kind of map are we going to create ?
|
|
|
|
"""
|
2009-01-19 04:33:05 +05:30
|
|
|
if displaytype == "places":
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createmapstractionplaces(self.dbstate)
|
2009-01-19 04:33:05 +05:30
|
|
|
elif displaytype == "family":
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createmapstractionfamily(self.dbstate)
|
2009-01-19 04:33:05 +05:30
|
|
|
elif displaytype == "person":
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createmapstractionperson(self.dbstate)
|
2009-01-19 04:33:05 +05:30
|
|
|
elif displaytype == "event":
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createmapstractionevents(self.dbstate)
|
2009-01-19 04:33:05 +05:30
|
|
|
else:
|
2009-09-08 02:43:38 +05:30
|
|
|
self._createmapstractionheader(os.path.join(GEOVIEW_SUBPATH,
|
|
|
|
"error.html"))
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createmapnotimplemented()
|
|
|
|
self._createmapstractiontrailer()
|
2009-01-19 04:33:05 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _append_to_places_without_coord(self, gid, place):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Create a list of places without coordinates.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
self.place_without_coordinates.append([gid, place])
|
2009-01-29 05:26:32 +05:30
|
|
|
self.without += 1
|
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _append_to_places_list(self, place, evttype, name, lat,
|
2009-02-11 04:51:46 +05:30
|
|
|
longit, descr, center, year):
|
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Create a list of places with coordinates.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
|
|
|
self.place_list.append([place, name, evttype, lat,
|
|
|
|
longit, descr, int(center), year])
|
2009-01-19 04:33:05 +05:30
|
|
|
self.nbmarkers += 1
|
2009-02-11 04:51:46 +05:30
|
|
|
tfa = float(lat)
|
|
|
|
tfb = float(longit)
|
2009-01-24 19:22:53 +05:30
|
|
|
if year is not None:
|
2009-02-11 04:51:46 +05:30
|
|
|
tfc = int(year)
|
|
|
|
if tfc != 0:
|
|
|
|
if tfc < self.minyear:
|
|
|
|
self.minyear = tfc
|
|
|
|
if tfc > self.maxyear:
|
|
|
|
self.maxyear = tfc
|
|
|
|
if tfa < 0.0:
|
2009-09-11 00:19:48 +05:30
|
|
|
tfa -= 0.00000001
|
2009-01-31 17:02:50 +05:30
|
|
|
else:
|
2009-09-11 00:19:48 +05:30
|
|
|
tfa += 0.00000001
|
2009-02-11 04:51:46 +05:30
|
|
|
if tfb < 0.0:
|
2009-09-11 00:19:48 +05:30
|
|
|
tfb -= 0.00000001
|
2009-01-31 17:02:50 +05:30
|
|
|
else:
|
2009-09-11 00:19:48 +05:30
|
|
|
tfb += 0.00000001
|
2009-01-19 04:33:05 +05:30
|
|
|
if self.minlat == 0.0:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.minlat = tfa
|
|
|
|
if tfa < self.minlat:
|
|
|
|
if tfa < 0.0:
|
|
|
|
self.minlat = tfa
|
2009-01-19 04:33:05 +05:30
|
|
|
if self.maxlat == 0.0:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.maxlat = tfa
|
|
|
|
if tfa > self.maxlat:
|
|
|
|
if tfa > 0.0:
|
|
|
|
self.maxlat = tfa
|
2009-01-19 04:33:05 +05:30
|
|
|
if self.minlon == 0.0:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.minlon = tfb
|
|
|
|
if tfb < self.minlon:
|
|
|
|
if tfb < 0.0:
|
|
|
|
self.minlon = tfb
|
2009-01-19 04:33:05 +05:30
|
|
|
if self.maxlon == 0.0:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.maxlon = tfb
|
|
|
|
if tfb > self.maxlon:
|
|
|
|
if tfb > 0.0:
|
|
|
|
self.maxlon = tfb
|
2009-01-19 04:33:05 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _create_markers(self, format, firstm, lastm):
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Create all markers for the specified person.
|
2009-02-11 04:51:46 +05:30
|
|
|
"""
|
2009-01-19 04:33:05 +05:30
|
|
|
last = ""
|
2009-02-11 04:51:46 +05:30
|
|
|
indm = 0
|
|
|
|
divclose = True
|
2009-01-19 04:33:05 +05:30
|
|
|
self.yearinmarker = []
|
2009-02-11 04:51:46 +05:30
|
|
|
ininterval = False
|
2009-01-19 04:33:05 +05:30
|
|
|
self.setattr = True
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" function setcenterandzoom(mapstraction) {\n")
|
2009-01-19 04:33:05 +05:30
|
|
|
if self.mustcenter:
|
2009-01-24 19:22:53 +05:30
|
|
|
self.centered = True
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write(" var point = new LatLonPoint")
|
2009-09-08 02:43:38 +05:30
|
|
|
if self.lock_action.get_action('SaveZoom').get_active():
|
|
|
|
self.mapview.write("(%s,%s);" % (self.reallatitude,
|
|
|
|
self.reallongitude))
|
|
|
|
else:
|
|
|
|
self.mapview.write("(%s,%s);" % (self.latit, self.longt))
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("mapstraction.setCenterAndZoom")
|
2009-09-08 02:43:38 +05:30
|
|
|
if self.lock_action.get_action('SaveZoom').get_active():
|
|
|
|
self.mapview.write("(point, %s);\n" % self.realzoom)
|
|
|
|
else:
|
|
|
|
self.mapview.write("(point, %s);\n" % self.zoom)
|
2009-01-19 04:33:05 +05:30
|
|
|
self.setattr = False
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("}\n")
|
|
|
|
self.mapview.write(" function setmarkers(mapstraction) {\n")
|
2009-01-19 04:33:05 +05:30
|
|
|
for mark in self.sort:
|
|
|
|
if ( indm >= firstm ) and ( indm <= lastm ):
|
2009-02-11 04:51:46 +05:30
|
|
|
ininterval = True
|
|
|
|
if ininterval:
|
2009-01-19 04:33:05 +05:30
|
|
|
if last != mark[0]:
|
2009-01-28 00:43:42 +05:30
|
|
|
if not divclose:
|
2009-02-11 04:51:46 +05:30
|
|
|
if ininterval:
|
2009-01-28 00:43:42 +05:30
|
|
|
self.mapview.write("</div>\");")
|
|
|
|
divclose = True
|
|
|
|
years = ""
|
|
|
|
if mark[2]:
|
2009-02-11 04:51:46 +05:30
|
|
|
for year in self.yearinmarker:
|
|
|
|
years += "%d " % year
|
2009-01-28 00:43:42 +05:30
|
|
|
years += "end"
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("my_marker.setAttribute")
|
|
|
|
self.mapview.write("('year','%s');" % years)
|
2009-01-28 00:43:42 +05:30
|
|
|
self.yearinmarker = []
|
|
|
|
self.mapview.write("mapstraction.addMarker(my_marker);")
|
2009-02-11 04:51:46 +05:30
|
|
|
indm += 1
|
2009-01-19 04:33:05 +05:30
|
|
|
if ( indm > lastm ):
|
2009-01-28 00:43:42 +05:30
|
|
|
if (indm % NB_MARKERS_PER_PAGE) == 0:
|
2009-02-11 04:51:46 +05:30
|
|
|
ininterval = False
|
2009-01-28 00:43:42 +05:30
|
|
|
last = mark[0]
|
2009-01-19 04:33:05 +05:30
|
|
|
if ( indm >= firstm ) and ( indm <= lastm ):
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("\n var point = new LatLonPoint")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("(%s,%s);" % (mark[3], mark[4]))
|
2009-01-28 00:43:42 +05:30
|
|
|
self.mapview.write("my_marker = new Marker(point);")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("gmarkers[%d]=my_marker;" % \
|
|
|
|
(( indm - 1 ) % NB_MARKERS_PER_PAGE))
|
|
|
|
self.mapview.write("my_marker.setLabel")
|
|
|
|
self.mapview.write("(\"%s\");" % mark[0])
|
2009-01-19 04:33:05 +05:30
|
|
|
self.yearinmarker.append(mark[7])
|
2009-02-11 04:51:46 +05:30
|
|
|
divclose = False
|
|
|
|
self.mapview.write("my_marker.setInfoBubble(\"<div ")
|
|
|
|
self.mapview.write("style='white-space:nowrap;' >")
|
2009-01-19 04:33:05 +05:30
|
|
|
if format == 1:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("%s<br>____________<br>" % \
|
|
|
|
mark[0])
|
|
|
|
self.mapview.write("<br>%s" % mark[5])
|
2009-01-19 04:33:05 +05:30
|
|
|
elif format == 2:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("%s____________<br>" % mark[1])
|
|
|
|
self.mapview.write("<br>%s - %s" % (mark[7],
|
|
|
|
mark[5]))
|
2009-01-19 04:33:05 +05:30
|
|
|
elif format == 3:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("%s<br>____________<br>" % \
|
|
|
|
mark[0])
|
|
|
|
self.mapview.write("<br>%s - %s" % (mark[7],
|
|
|
|
mark[5]))
|
2009-01-19 04:33:05 +05:30
|
|
|
elif format == 4:
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("%s<br>____________<br>" % \
|
|
|
|
mark[0])
|
|
|
|
self.mapview.write("<br>%s - %s" % (mark[7],
|
|
|
|
mark[5]))
|
2009-01-19 04:33:05 +05:30
|
|
|
else: # This marker already exists. add info.
|
|
|
|
self.mapview.write("<br>%s - %s" % (mark[7], mark[5]))
|
2009-08-14 03:29:59 +05:30
|
|
|
ret = 1
|
|
|
|
for year in self.yearinmarker:
|
|
|
|
if year == mark[7]:
|
|
|
|
ret = 0
|
|
|
|
if (ret):
|
2009-01-19 04:33:05 +05:30
|
|
|
self.yearinmarker.append(mark[7])
|
|
|
|
else:
|
|
|
|
indm += 1
|
2009-02-11 04:51:46 +05:30
|
|
|
if self.nbmarkers > 0 and ininterval:
|
2009-01-28 00:43:42 +05:30
|
|
|
years = ""
|
|
|
|
if mark[2]:
|
2009-02-11 04:51:46 +05:30
|
|
|
for year in self.yearinmarker:
|
|
|
|
years += "%d " % year
|
2009-01-28 00:43:42 +05:30
|
|
|
years += "end"
|
|
|
|
self.mapview.write("</div>\");")
|
|
|
|
self.mapview.write("my_marker.setAttribute('year','%s');" % years)
|
|
|
|
self.mapview.write("mapstraction.addMarker(my_marker);")
|
|
|
|
if self.nbmarkers == 0:
|
2009-01-27 04:00:13 +05:30
|
|
|
# We have no valid geographic point to center the map.
|
|
|
|
# So you'll see the street where I live.
|
|
|
|
# I think another place should be better :
|
|
|
|
# Where is the place where the gramps project began ?
|
|
|
|
#
|
|
|
|
# I think we should put here all gramps developpers.
|
|
|
|
# not only me ...
|
|
|
|
#
|
2009-01-27 13:03:40 +05:30
|
|
|
longitude = 0.0
|
|
|
|
latitude = 0.0
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write("\nvar point = new LatLonPoint")
|
|
|
|
self.mapview.write("(%s,%s);\n" % (latitude, longitude))
|
|
|
|
self.mapview.write(" mapstraction.setCenterAndZoom")
|
|
|
|
self.mapview.write("(point, %d);\n" % 2)
|
2009-01-27 04:00:13 +05:30
|
|
|
self.mapview.write(" my_marker = new Marker(point);\n")
|
2009-02-11 04:51:46 +05:30
|
|
|
self.mapview.write(" my_marker.setLabel")
|
|
|
|
self.mapview.write("(\"%s\");\n" % _("No location."))
|
|
|
|
self.mapview.write(" my_marker.setInfoBubble(\"<div ")
|
|
|
|
self.mapview.write("style='white-space:nowrap;' >")
|
2009-02-04 01:49:05 +05:30
|
|
|
self.mapview.write(_("You have no places in your family tree "
|
|
|
|
" with coordinates."))
|
2009-01-27 13:03:40 +05:30
|
|
|
self.mapview.write("<br>")
|
2009-02-04 01:49:05 +05:30
|
|
|
self.mapview.write(_("You are looking at the default map."))
|
2009-01-27 13:03:40 +05:30
|
|
|
self.mapview.write("</div>\");\n")
|
2009-01-27 04:00:13 +05:30
|
|
|
self.mapview.write(" mapstraction.addMarker(my_marker);")
|
2009-08-14 03:29:59 +05:30
|
|
|
self.mapview.write("\n}")
|
|
|
|
self.mapview.write("\n</script>\n")
|
2009-01-19 04:33:05 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _createpersonmarkers(self, dbstate, person, comment):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Create all markers for the specified person.
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
|
|
|
latitude = ""
|
|
|
|
longitude = ""
|
|
|
|
if person:
|
|
|
|
birth_ref = person.get_birth_ref()
|
|
|
|
if birth_ref:
|
2009-02-11 04:51:46 +05:30
|
|
|
birth = dbstate.db.get_event_from_handle(birth_ref.ref)
|
2008-12-08 16:34:54 +05:30
|
|
|
birthdate = birth.get_date_object()
|
|
|
|
birthyear = birthdate.get_year()
|
|
|
|
bplace_handle = birth.get_place_handle()
|
|
|
|
if bplace_handle:
|
2009-02-11 04:51:46 +05:30
|
|
|
place = dbstate.db.get_place_from_handle(bplace_handle)
|
2009-08-10 04:16:55 +05:30
|
|
|
if place:
|
|
|
|
longitude = place.get_longitude()
|
|
|
|
latitude = place.get_latitude()
|
|
|
|
latitude, longitude = conv_lat_lon(latitude,
|
|
|
|
longitude, "D.D8")
|
|
|
|
if comment:
|
|
|
|
descr1 = _("%(comment)s : birth place.") % {
|
|
|
|
'comment': comment}
|
|
|
|
else:
|
|
|
|
descr1 = _("birth place.")
|
|
|
|
descr = place.get_title()
|
|
|
|
# place.get_longitude and place.get_latitude return
|
|
|
|
# one string. We have coordinates when the two values
|
|
|
|
# contains non null string.
|
|
|
|
if ( longitude and latitude ):
|
2009-08-14 03:29:59 +05:30
|
|
|
self._append_to_places_list(descr,
|
|
|
|
gen.lib.EventType.BIRTH,
|
|
|
|
_nd.display(person),
|
|
|
|
latitude, longitude,
|
|
|
|
descr1,
|
|
|
|
int(self.center),
|
|
|
|
birthyear)
|
2009-08-10 04:16:55 +05:30
|
|
|
self.center = False
|
|
|
|
else:
|
2009-08-14 03:29:59 +05:30
|
|
|
self._append_to_places_without_coord(
|
|
|
|
place.gramps_id, descr)
|
2008-12-08 16:34:54 +05:30
|
|
|
latitude = ""
|
|
|
|
longitude = ""
|
|
|
|
death_ref = person.get_death_ref()
|
|
|
|
if death_ref:
|
2009-02-11 04:51:46 +05:30
|
|
|
death = dbstate.db.get_event_from_handle(death_ref.ref)
|
2008-12-08 16:34:54 +05:30
|
|
|
deathdate = death.get_date_object()
|
|
|
|
deathyear = deathdate.get_year()
|
|
|
|
dplace_handle = death.get_place_handle()
|
|
|
|
if dplace_handle:
|
2009-02-11 04:51:46 +05:30
|
|
|
place = dbstate.db.get_place_from_handle(dplace_handle)
|
2009-08-10 04:16:55 +05:30
|
|
|
if place:
|
|
|
|
longitude = place.get_longitude()
|
|
|
|
latitude = place.get_latitude()
|
|
|
|
latitude, longitude = conv_lat_lon(latitude,
|
|
|
|
longitude, "D.D8")
|
|
|
|
descr = place.get_title()
|
|
|
|
if comment:
|
|
|
|
descr1 = _("%(comment)s : death place.") % {
|
|
|
|
'comment': comment}
|
|
|
|
else:
|
|
|
|
descr1 = _("death place.")
|
|
|
|
# place.get_longitude and place.get_latitude return
|
|
|
|
# one string. We have coordinates when the two values
|
|
|
|
# contains non null string.
|
|
|
|
if ( longitude and latitude ):
|
2009-08-14 03:29:59 +05:30
|
|
|
self._append_to_places_list(descr,
|
|
|
|
gen.lib.EventType.DEATH,
|
|
|
|
_nd.display(person),
|
|
|
|
latitude, longitude,
|
|
|
|
descr1,
|
|
|
|
int(self.center),
|
|
|
|
deathyear)
|
2009-08-10 04:16:55 +05:30
|
|
|
self.center = False
|
|
|
|
else:
|
2009-08-14 03:29:59 +05:30
|
|
|
self._append_to_places_without_coord(
|
|
|
|
place.gramps_id, descr)
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _createmapstractionplaces(self, dbstate):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Create the marker for each place in the database which has a lat/lon.
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
|
|
|
self.place_list = []
|
2009-01-29 05:26:32 +05:30
|
|
|
self.place_without_coordinates = []
|
2008-12-08 16:34:54 +05:30
|
|
|
self.minlat = float(0.0)
|
|
|
|
self.maxlat = float(0.0)
|
|
|
|
self.minlon = float(0.0)
|
|
|
|
self.maxlon = float(0.0)
|
2009-01-19 04:45:39 +05:30
|
|
|
self.minyear = int(9999)
|
|
|
|
self.maxyear = int(0)
|
2008-12-08 16:34:54 +05:30
|
|
|
latitude = ""
|
|
|
|
longitude = ""
|
2009-01-24 19:22:53 +05:30
|
|
|
self.center = True
|
2009-08-14 03:29:59 +05:30
|
|
|
for place_handle in dbstate.db.iter_place_handles():
|
2009-02-11 04:51:46 +05:30
|
|
|
place = dbstate.db.get_place_from_handle( place_handle)
|
2008-12-08 16:34:54 +05:30
|
|
|
if place:
|
|
|
|
descr = place.get_title()
|
2009-02-04 01:49:05 +05:30
|
|
|
descr1 = _("Id : %s") % place.gramps_id
|
2008-12-08 16:34:54 +05:30
|
|
|
longitude = place.get_longitude()
|
|
|
|
latitude = place.get_latitude()
|
2008-12-10 20:29:26 +05:30
|
|
|
latitude, longitude = conv_lat_lon(latitude, longitude, "D.D8")
|
2009-02-11 04:51:46 +05:30
|
|
|
# place.get_longitude and place.get_latitude return
|
|
|
|
# one string. We have coordinates when the two values
|
|
|
|
# contains non null string.
|
2009-01-29 05:26:32 +05:30
|
|
|
if ( longitude and latitude ):
|
2009-08-14 03:29:59 +05:30
|
|
|
self._append_to_places_list(descr, None, "",
|
|
|
|
latitude, longitude,
|
|
|
|
descr1, self.center, None)
|
2009-01-24 19:22:53 +05:30
|
|
|
self.center = False
|
2009-01-29 05:26:32 +05:30
|
|
|
else:
|
2009-08-14 03:29:59 +05:30
|
|
|
self._append_to_places_without_coord(place.gramps_id,
|
|
|
|
descr)
|
2009-01-24 19:22:53 +05:30
|
|
|
if self.center:
|
2009-01-27 13:05:55 +05:30
|
|
|
mess = _("Cannot center the map. No location with coordinates.")
|
2009-01-19 04:33:05 +05:30
|
|
|
else:
|
|
|
|
mess = ""
|
2009-08-14 03:29:59 +05:30
|
|
|
self._create_pages(1,
|
|
|
|
_("All places in the family tree with coordinates."),
|
|
|
|
mess)
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _createmapstractionevents(self, dbstate):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Create one marker for each place associated with an event in the database
|
2008-12-08 16:34:54 +05:30
|
|
|
which has a lat/lon.
|
|
|
|
"""
|
|
|
|
self.place_list = []
|
2009-01-29 05:26:32 +05:30
|
|
|
self.place_without_coordinates = []
|
2008-12-08 16:34:54 +05:30
|
|
|
self.minlat = float(0.0)
|
|
|
|
self.maxlat = float(0.0)
|
|
|
|
self.minlon = float(0.0)
|
|
|
|
self.maxlon = float(0.0)
|
|
|
|
self.minyear = int(9999)
|
|
|
|
self.maxyear = int(0)
|
|
|
|
latitude = ""
|
|
|
|
longitude = ""
|
2009-01-24 19:22:53 +05:30
|
|
|
self.center = True
|
2009-02-11 04:51:46 +05:30
|
|
|
for event_handle in dbstate.db.get_event_handles():
|
|
|
|
event = dbstate.db.get_event_from_handle( event_handle)
|
2008-12-08 16:34:54 +05:30
|
|
|
if event:
|
2009-08-10 04:16:55 +05:30
|
|
|
place_handle = event.get_place_handle()
|
2008-12-08 16:34:54 +05:30
|
|
|
eventdate = event.get_date_object()
|
|
|
|
eventyear = eventdate.get_year()
|
2009-02-04 01:49:05 +05:30
|
|
|
descr1 = _("Id : %(id)s (%(year)s)") % {
|
|
|
|
'id' : event.gramps_id,
|
|
|
|
'year' : eventyear}
|
2009-08-10 04:16:55 +05:30
|
|
|
if place_handle:
|
|
|
|
place = dbstate.db.get_place_from_handle(place_handle)
|
|
|
|
if place:
|
|
|
|
longitude = place.get_longitude()
|
|
|
|
latitude = place.get_latitude()
|
|
|
|
latitude, longitude = conv_lat_lon(latitude, longitude,
|
|
|
|
"D.D8")
|
|
|
|
city = place.get_main_location().get_city()
|
|
|
|
country = place.get_main_location().get_country()
|
|
|
|
descr2 = "%s; %s" % (city, country)
|
|
|
|
# place.get_longitude and place.get_latitude return
|
|
|
|
# one string. We have coordinates when the two values
|
|
|
|
# contains non null string.
|
|
|
|
if ( longitude and latitude ):
|
2009-08-14 03:29:59 +05:30
|
|
|
person_list = [
|
|
|
|
dbstate.db.get_person_from_handle(ref_handle)
|
2009-08-10 04:16:55 +05:30
|
|
|
for (ref_type, ref_handle) in \
|
2009-08-14 03:29:59 +05:30
|
|
|
dbstate.db.find_backlink_handles(
|
|
|
|
event_handle)
|
2009-08-10 04:16:55 +05:30
|
|
|
if ref_type == 'Person'
|
|
|
|
]
|
|
|
|
if person_list:
|
|
|
|
descr = "<br>"
|
|
|
|
for person in person_list:
|
|
|
|
descr = ("%(description)s%(name)s<br>") % {
|
|
|
|
'description' : descr,
|
|
|
|
'name' : _nd.display(person)}
|
2009-08-14 03:29:59 +05:30
|
|
|
#) % { 'eventtype': gen.lib.EventType(
|
|
|
|
descr = ("%(eventtype)s;"+
|
|
|
|
" %(place)s%(description)s"
|
2009-08-10 04:16:55 +05:30
|
|
|
) % { 'eventtype': gen.lib.EventType(
|
2009-08-14 03:29:59 +05:30
|
|
|
event.get_type()
|
|
|
|
),
|
|
|
|
'place': place.get_title(),
|
|
|
|
'description': descr}
|
2009-08-10 04:16:55 +05:30
|
|
|
else:
|
|
|
|
descr = ("%(eventtype)s; %(place)s<br>") % {
|
2009-08-14 03:29:59 +05:30
|
|
|
'eventtype': gen.lib.EventType(
|
|
|
|
event.get_type()
|
|
|
|
),
|
|
|
|
'place': place.get_title()}
|
|
|
|
self._append_to_places_list(descr1, descr,
|
|
|
|
descr,
|
|
|
|
latitude, longitude,
|
|
|
|
descr2, self.center,
|
|
|
|
eventyear)
|
2009-08-10 04:16:55 +05:30
|
|
|
self.center = False
|
2009-01-05 05:12:20 +05:30
|
|
|
else:
|
2009-08-10 04:16:55 +05:30
|
|
|
descr = place.get_title()
|
2009-08-14 03:29:59 +05:30
|
|
|
self._append_to_places_without_coord(
|
|
|
|
place.gramps_id, descr)
|
2009-01-24 19:22:53 +05:30
|
|
|
if self.center:
|
2009-01-27 13:05:55 +05:30
|
|
|
mess = _("Cannot center the map. No location with coordinates.")
|
2009-01-19 04:33:05 +05:30
|
|
|
else:
|
|
|
|
mess = ""
|
2009-08-14 03:29:59 +05:30
|
|
|
self._create_pages(2,
|
|
|
|
_("All events in the family tree with coordinates."),
|
|
|
|
mess)
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _createmapstractionfamily(self, dbstate):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Create all markers for each people of a family
|
2008-12-08 16:34:54 +05:30
|
|
|
in the database which has a lat/lon.
|
|
|
|
"""
|
|
|
|
self.place_list = []
|
2009-01-29 05:26:32 +05:30
|
|
|
self.place_without_coordinates = []
|
2008-12-08 16:34:54 +05:30
|
|
|
self.minlat = float(0.0)
|
|
|
|
self.maxlat = float(0.0)
|
|
|
|
self.minlon = float(0.0)
|
|
|
|
self.maxlon = float(0.0)
|
|
|
|
self.minyear = int(9999)
|
|
|
|
self.maxyear = int(0)
|
2009-01-24 19:22:53 +05:30
|
|
|
self.center = True
|
2009-01-28 00:43:42 +05:30
|
|
|
person = None
|
2009-02-11 04:51:46 +05:30
|
|
|
if dbstate.active:
|
|
|
|
person = dbstate.active
|
2009-01-28 00:43:42 +05:30
|
|
|
if person is not None:
|
2008-12-08 16:34:54 +05:30
|
|
|
family_list = person.get_family_handle_list()
|
|
|
|
if len(family_list) > 0:
|
|
|
|
fhandle = family_list[0] # first is primary
|
2009-02-11 04:51:46 +05:30
|
|
|
fam = dbstate.db.get_family_from_handle(fhandle)
|
2009-08-14 03:29:59 +05:30
|
|
|
handle = fam.get_father_handle()
|
|
|
|
father = dbstate.db.get_person_from_handle(handle)
|
2008-12-08 16:34:54 +05:30
|
|
|
if father:
|
2009-02-04 01:49:05 +05:30
|
|
|
comment = _("Id : Father : %s") % father.gramps_id
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createpersonmarkers(dbstate, father, comment)
|
|
|
|
handle = fam.get_mother_handle()
|
|
|
|
mother = dbstate.db.get_person_from_handle(handle)
|
2008-12-08 16:34:54 +05:30
|
|
|
if mother:
|
2009-02-04 01:49:05 +05:30
|
|
|
comment = _("Id : Mother : %s") % mother.gramps_id
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createpersonmarkers(dbstate, mother, comment)
|
2008-12-08 16:34:54 +05:30
|
|
|
index = 0
|
|
|
|
child_ref_list = fam.get_child_ref_list()
|
|
|
|
if child_ref_list:
|
|
|
|
for child_ref in child_ref_list:
|
2009-02-11 04:51:46 +05:30
|
|
|
child = dbstate.db.get_person_from_handle(child_ref.ref)
|
2008-12-08 16:34:54 +05:30
|
|
|
if child:
|
|
|
|
index += 1
|
2009-02-04 01:49:05 +05:30
|
|
|
comment = _("Id : Child : %(id)s %(index)d") % {
|
|
|
|
'id' : child.gramps_id,
|
|
|
|
'index': index}
|
2009-08-14 03:29:59 +05:30
|
|
|
self._createpersonmarkers(dbstate, child, comment)
|
2009-09-08 02:43:38 +05:30
|
|
|
else:
|
|
|
|
comment = _("Id : Child : %(id)s has no parents.") % {
|
|
|
|
'id' : person.gramps_id }
|
|
|
|
self._createpersonmarkers(dbstate, person, comment)
|
2009-01-24 19:22:53 +05:30
|
|
|
if self.center:
|
2009-01-27 13:05:55 +05:30
|
|
|
mess = _("Cannot center the map. No location with coordinates.")
|
2009-01-29 05:26:32 +05:30
|
|
|
if person is not None:
|
2009-08-14 03:29:59 +05:30
|
|
|
self._create_pages(3, _("The active person's family members "
|
|
|
|
"have no places with coordinates."),
|
|
|
|
mess)
|
2009-01-29 05:26:32 +05:30
|
|
|
else:
|
2009-08-14 03:29:59 +05:30
|
|
|
self._create_pages(3, _("No active person set."), mess)
|
2009-01-19 04:33:05 +05:30
|
|
|
else:
|
|
|
|
mess = ""
|
2009-08-14 03:29:59 +05:30
|
|
|
self._create_pages(3,
|
|
|
|
( _("All %(name)s people's family places in the "
|
|
|
|
"family tree with coordinates.") % {
|
2009-02-04 01:49:05 +05:30
|
|
|
'name' :_nd.display(person) }),
|
2009-08-14 03:29:59 +05:30
|
|
|
mess)
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _createmapstractionperson(self, dbstate):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Create all markers for each people's event in the database which has
|
|
|
|
a lat/lon.
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
|
|
|
self.place_list = []
|
2009-01-29 05:26:32 +05:30
|
|
|
self.place_without_coordinates = []
|
2008-12-08 16:34:54 +05:30
|
|
|
self.minlat = float(0.0)
|
|
|
|
self.maxlat = float(0.0)
|
|
|
|
self.minlon = float(0.0)
|
|
|
|
self.maxlon = float(0.0)
|
|
|
|
self.minyear = int(9999)
|
|
|
|
self.maxyear = int(0)
|
|
|
|
latitude = ""
|
|
|
|
longitude = ""
|
2009-01-28 00:43:42 +05:30
|
|
|
person = None
|
2009-02-11 04:51:46 +05:30
|
|
|
if dbstate.active:
|
|
|
|
person = dbstate.active
|
2009-01-24 19:22:53 +05:30
|
|
|
self.center = True
|
2009-01-28 00:43:42 +05:30
|
|
|
if person is not None:
|
2008-12-08 16:34:54 +05:30
|
|
|
# For each event, if we have a place, set a marker.
|
|
|
|
for event_ref in person.get_event_ref_list():
|
|
|
|
if not event_ref:
|
|
|
|
continue
|
|
|
|
if event_ref.role != gen.lib.EventRoleType.PRIMARY:
|
|
|
|
# Only match primaries, no witnesses
|
|
|
|
continue
|
2009-02-11 04:51:46 +05:30
|
|
|
event = dbstate.db.get_event_from_handle(event_ref.ref)
|
2008-12-08 16:34:54 +05:30
|
|
|
eventdate = event.get_date_object()
|
|
|
|
eventyear = eventdate.get_year()
|
|
|
|
place_handle = event.get_place_handle()
|
|
|
|
if place_handle:
|
2009-02-11 04:51:46 +05:30
|
|
|
place = dbstate.db.get_place_from_handle(place_handle)
|
2009-08-10 04:16:55 +05:30
|
|
|
if place:
|
|
|
|
longitude = place.get_longitude()
|
|
|
|
latitude = place.get_latitude()
|
|
|
|
latitude, longitude = conv_lat_lon(latitude,
|
|
|
|
longitude, "D.D8")
|
|
|
|
descr = place.get_title()
|
|
|
|
evt = gen.lib.EventType(event.get_type())
|
|
|
|
descr1 = _("%(eventtype)s : %(name)s") % {
|
|
|
|
'eventtype': evt,
|
|
|
|
'name': _nd.display(person)}
|
|
|
|
# place.get_longitude and place.get_latitude return
|
|
|
|
# one string. We have coordinates when the two values
|
|
|
|
# contains non null string.
|
|
|
|
if ( longitude and latitude ):
|
2009-08-14 03:29:59 +05:30
|
|
|
self._append_to_places_list(descr, evt,
|
|
|
|
_nd.display(person),
|
|
|
|
latitude, longitude,
|
|
|
|
descr1, self.center,
|
|
|
|
eventyear)
|
2009-08-10 04:16:55 +05:30
|
|
|
self.center = False
|
|
|
|
else:
|
2009-08-14 03:29:59 +05:30
|
|
|
self._append_to_places_without_coord(
|
|
|
|
place.gramps_id, descr)
|
2009-01-24 19:22:53 +05:30
|
|
|
if self.center:
|
2009-01-27 13:05:55 +05:30
|
|
|
mess = _("Cannot center the map. No location with coordinates.")
|
2009-01-29 05:26:32 +05:30
|
|
|
if person is not None:
|
2009-08-14 03:29:59 +05:30
|
|
|
self._create_pages(4,
|
|
|
|
_("The active person has no places with coordinates."), mess)
|
2009-01-29 05:26:32 +05:30
|
|
|
else:
|
2009-08-14 03:29:59 +05:30
|
|
|
self._create_pages(4, _("No active person set."), mess)
|
2009-01-19 04:33:05 +05:30
|
|
|
else:
|
|
|
|
mess = ""
|
2009-08-14 03:29:59 +05:30
|
|
|
self._create_pages(4, ( _("All event places for %s.") %
|
|
|
|
_nd.display(person) ), mess)
|
2008-12-08 16:34:54 +05:30
|
|
|
|
2009-08-14 03:29:59 +05:30
|
|
|
def _createmapnotimplemented(self):
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-08-10 04:16:55 +05:30
|
|
|
Inform the user this work is not implemented.
|
2008-12-08 16:34:54 +05:30
|
|
|
"""
|
2009-02-04 01:49:05 +05:30
|
|
|
self.mapview.write(" <H1>%s </H1>" % _("Not yet implemented ..."))
|
2008-12-08 16:34:54 +05:30
|
|
|
|