Geography : pylint up to 9.2 for all modules.
This commit is contained in:
parent
9d5322103e
commit
780a4be62c
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2010-2012 Serge Noiraud
|
||||
# Copyright (C) 2010-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Copyright (C) 2001-2007 Donald N. Allingham, Martin Hawlisch
|
||||
# Copyright (C) 2009 Douglas S. Blank
|
||||
# Copyright (C) 2009 Serge Noiraud
|
||||
# Copyright (C) 2009-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -23,9 +23,7 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import Gdk
|
||||
from gi.repository import Gtk
|
||||
import cairo
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
|
||||
@ -38,13 +36,18 @@ _ = glocale.translation.gettext
|
||||
# the print settings to remember between print sessions
|
||||
PRINT_SETTINGS = None
|
||||
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=maybe-no-member
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# CairoPrintSave class
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
class CairoPrintSave():
|
||||
"""Act as an abstract document that can render onto a cairo context.
|
||||
class CairoPrintSave(object):
|
||||
"""
|
||||
Act as an abstract document that can render onto a cairo context.
|
||||
|
||||
It can render the model onto cairo context pages, according to the received
|
||||
page style.
|
||||
@ -64,9 +67,11 @@ class CairoPrintSave():
|
||||
self.heightpx = heightpx
|
||||
self.drawfunc = drawfunc
|
||||
self.parent = parent
|
||||
self.preview = None
|
||||
|
||||
def run(self):
|
||||
"""Create the physical output from the meta document.
|
||||
"""
|
||||
Create the physical output from the meta document.
|
||||
|
||||
"""
|
||||
global PRINT_SETTINGS
|
||||
@ -79,7 +84,8 @@ class CairoPrintSave():
|
||||
page_setup = Gtk.PageSetup()
|
||||
if PRINT_SETTINGS is None:
|
||||
PRINT_SETTINGS = Gtk.PrintSettings()
|
||||
page_setup = Gtk.print_run_page_setup_dialog(None, page_setup, PRINT_SETTINGS)
|
||||
page_setup = Gtk.print_run_page_setup_dialog(None, page_setup,
|
||||
PRINT_SETTINGS)
|
||||
paper_size_used = page_setup.get_paper_size()
|
||||
if self.widthpx > self.heightpx:
|
||||
szw = self.widthpx
|
||||
@ -89,12 +95,13 @@ class CairoPrintSave():
|
||||
szw = self.heightpx
|
||||
height_used = paper_size_used.get_height(Gtk.Unit.POINTS)
|
||||
width_used = paper_size_used.get_width(Gtk.Unit.POINTS)
|
||||
coefx = szw / height_used # width and height depends on the selected page (A4, A3, ...)
|
||||
coefx = szw / height_used # width and height depends on the selected
|
||||
# page (A4, A3, ...)
|
||||
coefy = szh / width_used
|
||||
if coefx < coefy:
|
||||
self.scale = 100.0 / coefy
|
||||
self.scale = 100.0 / coefy
|
||||
else:
|
||||
self.scale = 100.0 / coefx
|
||||
self.scale = 100.0 / coefx
|
||||
PRINT_SETTINGS.set_scale(self.scale)
|
||||
if self.widthpx > self.heightpx:
|
||||
page_setup.set_orientation(Gtk.PageOrientation.LANDSCAPE)
|
||||
@ -127,13 +134,14 @@ class CairoPrintSave():
|
||||
def on_draw_page(self, operation, context, page_nr):
|
||||
"""Draw a page on a Cairo context.
|
||||
"""
|
||||
cr = context.get_cairo_context()
|
||||
self.drawfunc(self.parent, cr)
|
||||
ctx = context.get_cairo_context()
|
||||
self.drawfunc(self.parent, ctx)
|
||||
|
||||
def on_preview(self, operation, preview, context, parent):
|
||||
"""Implement custom print preview functionality.
|
||||
We provide a dummy holder here, because on_preview crashes if no
|
||||
default application is set with gir 3.3.2 (typically evince not installed)!
|
||||
default application is set with gir 3.3.2 (typically evince not
|
||||
installed)!
|
||||
"""
|
||||
operation.run(Gtk.PrintOperationAction.PREVIEW, None)
|
||||
return False
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2010-2012 Serge Noiraud
|
||||
# Copyright (C) 2010-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -39,6 +39,8 @@ from gi.repository import OsmGpsMap as osmgpsmap
|
||||
#-------------------------------------------------------------------------
|
||||
GEOGRAPHY_PATH = os.path.join(HOME_DIR, "maps")
|
||||
|
||||
# pylint: disable=bad-whitespace
|
||||
|
||||
ICONS = {
|
||||
EventType.BIRTH : 'gramps-geo-birth',
|
||||
EventType.DEATH : 'gramps-geo-death',
|
||||
@ -63,7 +65,7 @@ YAHOO_STREET = 14
|
||||
YAHOO_SATELLITE = 15
|
||||
YAHOO_HYBRID = 16
|
||||
|
||||
tiles_path = {
|
||||
TILES_PATH = {
|
||||
OPENSTREETMAP : "openstreetmap",
|
||||
OPENSTREETMAP_RENDERER : "openstreetmaprenderer",
|
||||
OPENAERIALMAP : "openaerialmap",
|
||||
@ -82,7 +84,7 @@ tiles_path = {
|
||||
YAHOO_HYBRID : "yahoohybrid",
|
||||
}
|
||||
|
||||
map_title = {
|
||||
MAP_TITLE = {
|
||||
OPENSTREETMAP : "OpenStreetMap",
|
||||
OPENSTREETMAP_RENDERER : "OpenStreetMap renderer",
|
||||
OPENAERIALMAP : "OpenAerialMap",
|
||||
@ -101,22 +103,16 @@ map_title = {
|
||||
YAHOO_HYBRID : "Yahoo hybrid",
|
||||
}
|
||||
|
||||
map_type = {
|
||||
MAP_TYPE = {
|
||||
OPENSTREETMAP : osmgpsmap.MapSource_t.OPENSTREETMAP,
|
||||
#OPENSTREETMAP_RENDERER : osmgpsmap.MapSource_t.OPENSTREETMAP_RENDERER,
|
||||
#OPENAERIALMAP : osmgpsmap.MapSource_t.OPENAERIALMAP,
|
||||
MAPS_FOR_FREE : osmgpsmap.MapSource_t.MAPS_FOR_FREE,
|
||||
OPENCYCLEMAP : osmgpsmap.MapSource_t.OPENCYCLEMAP,
|
||||
OSM_PUBLIC_TRANSPORT : osmgpsmap.MapSource_t.OSM_PUBLIC_TRANSPORT,
|
||||
#OSMC_TRAILS : osmgpsmap.MapSource_t.OSMC_TRAILS,
|
||||
GOOGLE_STREET : osmgpsmap.MapSource_t.GOOGLE_STREET,
|
||||
GOOGLE_SATELLITE : osmgpsmap.MapSource_t.GOOGLE_SATELLITE,
|
||||
GOOGLE_HYBRID : osmgpsmap.MapSource_t.GOOGLE_HYBRID,
|
||||
VIRTUAL_EARTH_STREET : osmgpsmap.MapSource_t.VIRTUAL_EARTH_STREET,
|
||||
VIRTUAL_EARTH_SATELLITE : osmgpsmap.MapSource_t.VIRTUAL_EARTH_SATELLITE,
|
||||
VIRTUAL_EARTH_HYBRID : osmgpsmap.MapSource_t.VIRTUAL_EARTH_HYBRID,
|
||||
#YAHOO_STREET : osmgpsmap.MapSource_t.YAHOO_STREET,
|
||||
#YAHOO_SATELLITE : osmgpsmap.MapSource_t.YAHOO_SATELLITE,
|
||||
#YAHOO_HYBRID : osmgpsmap.MapSource_t.YAHOO_HYBRID,
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -25,10 +25,7 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
from gi.repository import GObject
|
||||
import operator
|
||||
from math import *
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -43,15 +40,14 @@ _LOG = logging.getLogger("maps.datelayer")
|
||||
# GTK/Gnome modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import Gdk
|
||||
import cairo
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Gramps Modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import cairo
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -66,9 +62,12 @@ try:
|
||||
except:
|
||||
raise
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
class DateLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
"""
|
||||
This is the layer used to display the two extreme dates on the top left of the view
|
||||
This is the layer used to display the two extreme dates
|
||||
on the top left of the view
|
||||
"""
|
||||
def __init__(self):
|
||||
"""
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -25,7 +25,6 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
from gi.repository import GObject
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -55,7 +54,12 @@ try:
|
||||
except:
|
||||
raise
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
class DummyLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
"""
|
||||
This is the class for the Dummy layer.
|
||||
"""
|
||||
def __init__(self):
|
||||
"""
|
||||
Initialize the dummy layer
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -25,7 +25,6 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
from gi.repository import GObject
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -56,7 +55,9 @@ except:
|
||||
raise
|
||||
|
||||
class DummyMapNoGpsPoint(osmgpsmap.Map):
|
||||
""" . """
|
||||
def do_draw_gps_point(self, drawable):
|
||||
""" . """
|
||||
pass
|
||||
|
||||
GObject.type_register(DummyMapNoGpsPoint)
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -28,12 +28,9 @@
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.sgettext
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
from gi.repository import GObject
|
||||
import time
|
||||
from gi.repository import GLib
|
||||
from math import pi
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -41,22 +38,19 @@ from math import pi
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GdkPixbuf
|
||||
import cairo
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Gramps Modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gramps.gen.lib import EventType, Place, PlaceType, PlaceRef, PlaceName
|
||||
from gramps.gen.lib import EventType, Place, PlaceRef, PlaceName
|
||||
from gramps.gen.display.name import displayer as _nd
|
||||
from gramps.gen.display.place import displayer as _pd
|
||||
from gramps.gui.views.navigationview import NavigationView
|
||||
from gramps.gen.utils.libformatting import FormattingHelper
|
||||
from gramps.gen.errors import WindowActiveError
|
||||
from gramps.gen.const import HOME_DIR, IMAGE_DIR
|
||||
from gramps.gui.managedwindow import ManagedWindow
|
||||
from gramps.gen.const import HOME_DIR
|
||||
from gramps.gen.config import config
|
||||
from gramps.gui.editors import EditPlace, EditEvent, EditFamily, EditPerson
|
||||
from gramps.gui.selectors.selectplace import SelectPlace
|
||||
@ -94,6 +88,11 @@ GEOGRAPHY_PATH = os.path.join(HOME_DIR, "maps")
|
||||
PLACE_REGEXP = re.compile('<span background="green">(.*)</span>')
|
||||
PLACE_STRING = '<span background="green">%s</span>'
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
# pylint: disable=unused-variable
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=maybe-no-member
|
||||
|
||||
def _get_sign(value):
|
||||
"""
|
||||
return 1 if we have a negative number, 0 in other case
|
||||
@ -134,6 +133,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
NavigationView.__init__(self, title, pdata, dbstate, uistate,
|
||||
bm_type, nav_group)
|
||||
|
||||
OsmGps.__init__(self)
|
||||
self.dbstate = dbstate
|
||||
self.dbstate.connect('database-changed', self.change_db)
|
||||
self.default_text = "Enter location here!"
|
||||
@ -141,9 +141,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
self.centerlat = config.get("geography.center-lat")
|
||||
self.zoom = config.get("geography.zoom")
|
||||
self.lock = config.get("geography.lock")
|
||||
if config.get('geography.path') == "" :
|
||||
config.set('geography.path', GEOGRAPHY_PATH )
|
||||
OsmGps.__init__(self)
|
||||
if config.get('geography.path') == "":
|
||||
config.set('geography.path', GEOGRAPHY_PATH)
|
||||
|
||||
self.format_helper = FormattingHelper(self.dbstate)
|
||||
self.centerlat = self.centerlon = 0.0
|
||||
@ -159,23 +158,41 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
None, 0)
|
||||
self.geo_altmap = theme.load_surface('gramps-geo-altmap', 48, 1,
|
||||
None, 0)
|
||||
if ( config.get('geography.map_service') in
|
||||
( constants.OPENSTREETMAP,
|
||||
constants.MAPS_FOR_FREE,
|
||||
constants.OPENCYCLEMAP,
|
||||
constants.OSM_PUBLIC_TRANSPORT,
|
||||
if (config.get('geography.map_service') in
|
||||
(constants.OPENSTREETMAP,
|
||||
constants.MAPS_FOR_FREE,
|
||||
constants.OPENCYCLEMAP,
|
||||
constants.OSM_PUBLIC_TRANSPORT,
|
||||
)):
|
||||
default_image = self.geo_mainmap
|
||||
else:
|
||||
default_image = self.geo_altmap
|
||||
self.geo_othermap = {}
|
||||
for ident in ( EventType.BIRTH,
|
||||
EventType.DEATH,
|
||||
EventType.MARRIAGE ):
|
||||
for ident in (EventType.BIRTH,
|
||||
EventType.DEATH,
|
||||
EventType.MARRIAGE):
|
||||
icon = constants.ICONS.get(int(ident))
|
||||
self.geo_othermap[ident] = theme.load_surface(icon, 48, 1, None, 0)
|
||||
self.maxyear = 0
|
||||
self.minyear = 9999
|
||||
self.maxlat = 0.0
|
||||
self.minlat = 0.0
|
||||
self.maxlon = 0.0
|
||||
self.minlon = 0.0
|
||||
self.longt = 0.0
|
||||
self.latit = 0.0
|
||||
self.itemoption = None
|
||||
self.menu = None
|
||||
self.mark = None
|
||||
self.path_entry = None
|
||||
self.changemap = None
|
||||
self.clearmap = None
|
||||
self.nbplaces = 0
|
||||
|
||||
def add_bookmark(self, menu):
|
||||
"""
|
||||
Add the place to the bookmark
|
||||
"""
|
||||
mlist = self.selected_handles()
|
||||
if mlist:
|
||||
self.bookmarks.add(mlist[0])
|
||||
@ -188,6 +205,9 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
|
||||
|
||||
def add_bookmark_from_popup(self, menu, handle):
|
||||
"""
|
||||
Add the place to the bookmark from the popup menu
|
||||
"""
|
||||
if handle:
|
||||
self.uistate.set_active(handle, self.navigation_type())
|
||||
self.bookmarks.add(handle)
|
||||
@ -320,7 +340,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
else:
|
||||
title = _('Add cross hair')
|
||||
add_item = Gtk.MenuItem(label=title)
|
||||
add_item.connect("activate", self.config_crosshair, event, lat , lon)
|
||||
add_item.connect("activate", self.config_crosshair, event, lat, lon)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
|
||||
@ -330,27 +350,27 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
title = _('Lock zoom and position')
|
||||
add_item = Gtk.MenuItem(label=title)
|
||||
add_item.connect("activate", self.config_zoom_and_position,
|
||||
event, lat , lon)
|
||||
event, lat, lon)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
|
||||
add_item = Gtk.MenuItem(label=_("Add place"))
|
||||
add_item.connect("activate", self.add_place, event, lat , lon)
|
||||
add_item.connect("activate", self.add_place, event, lat, lon)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
|
||||
add_item = Gtk.MenuItem(label=_("Link place"))
|
||||
add_item.connect("activate", self.link_place, event, lat , lon)
|
||||
add_item.connect("activate", self.link_place, event, lat, lon)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
|
||||
add_item = Gtk.MenuItem(label=_("Add place from kml"))
|
||||
add_item.connect("activate", self.add_place_from_kml, event, lat , lon)
|
||||
add_item.connect("activate", self.add_place_from_kml, event, lat, lon)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
|
||||
add_item = Gtk.MenuItem(label=_("Center here"))
|
||||
add_item.connect("activate", self.set_center, event, lat , lon)
|
||||
add_item.connect("activate", self.set_center, event, lat, lon)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
|
||||
@ -361,7 +381,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
|
||||
map_name = constants.map_title[config.get("geography.map_service")]
|
||||
map_name = constants.MAP_TITLE[config.get("geography.map_service")]
|
||||
title = _("Replace '%(map)s' by =>") % {
|
||||
'map' : map_name
|
||||
}
|
||||
@ -375,10 +395,10 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
changemap.show()
|
||||
add_item.set_submenu(changemap)
|
||||
# show in the map menu all available providers
|
||||
for map in constants.map_type:
|
||||
changemapitem = Gtk.MenuItem(label=constants.map_title[map])
|
||||
for my_map in constants.MAP_TYPE:
|
||||
changemapitem = Gtk.MenuItem(label=constants.MAP_TITLE[my_map])
|
||||
changemapitem.show()
|
||||
changemapitem.connect("activate", self.change_map, map)
|
||||
changemapitem.connect("activate", self.change_map, my_map)
|
||||
changemap.append(changemapitem)
|
||||
|
||||
clear_text = _("Clear the '%(map)s' tiles cache.") % {
|
||||
@ -386,7 +406,9 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
}
|
||||
self.clearmap = Gtk.MenuItem(label=clear_text)
|
||||
clearmap = self.clearmap
|
||||
clearmap.connect("activate", self.clear_map, constants.tiles_path[config.get("geography.map_service")])
|
||||
clearmap.connect("activate", self.clear_map,
|
||||
constants.TILES_PATH[config.get(
|
||||
"geography.map_service")])
|
||||
|
||||
clearmap.show()
|
||||
menu.append(clearmap)
|
||||
@ -402,7 +424,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
import shutil
|
||||
|
||||
path = "%s%c%s" % ( config.get('geography.path'), os.sep, the_map )
|
||||
path = "%s%c%s" % (config.get('geography.path'), os.sep, the_map)
|
||||
shutil.rmtree(path)
|
||||
|
||||
def add_specific_menu(self, menu, event, lat, lon):
|
||||
@ -450,22 +472,21 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
14 : 0.0005, 15 : 0.0003, 16 : 0.0001,
|
||||
17 : 0.0001, 18 : 0.0001
|
||||
}.get(config.get("geography.zoom"), 5.0)
|
||||
latp = precision % lat
|
||||
lonp = precision % lon
|
||||
latp = precision % lat
|
||||
lonp = precision % lon
|
||||
mlatp = precision % float(mark[3])
|
||||
mlonp = precision % float(mark[4])
|
||||
latok = lonok = False
|
||||
_LOG.debug(" compare latitude : %s with %s (precision = %s)"
|
||||
" place='%s'" % (float(mark[3]), lat, precision,
|
||||
mark[0]))
|
||||
" place='%s'", float(mark[3]), lat, precision, mark[0])
|
||||
_LOG.debug("compare longitude : %s with %s (precision = %s)"
|
||||
" zoom=%d" % (float(mark[4]), lon, precision,
|
||||
config.get("geography.zoom")))
|
||||
if (float(mlatp) >= (float(latp) - shift) ) and \
|
||||
(float(mlatp) <= (float(latp) + shift) ):
|
||||
" zoom=%d", float(mark[4]), lon, precision,
|
||||
config.get("geography.zoom"))
|
||||
if (float(mlatp) >= (float(latp) - shift)) and \
|
||||
(float(mlatp) <= (float(latp) + shift)):
|
||||
latok = True
|
||||
if (float(mlonp) >= (float(lonp) - shift) ) and \
|
||||
(float(mlonp) <= (float(lonp) + shift) ):
|
||||
if (float(mlonp) >= (float(lonp) - shift)) and \
|
||||
(float(mlonp) <= (float(lonp) + shift)):
|
||||
lonok = True
|
||||
if latok and lonok:
|
||||
mark_selected.append(mark)
|
||||
@ -499,8 +520,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
Add a new marker
|
||||
"""
|
||||
mapservice = config.get('geography.map_service')
|
||||
if ( mapservice in ( constants.OPENSTREETMAP,
|
||||
constants.OPENSTREETMAP_RENDERER )):
|
||||
if (mapservice in (constants.OPENSTREETMAP,
|
||||
constants.OPENSTREETMAP_RENDERER)):
|
||||
default_image = self.geo_mainmap
|
||||
else:
|
||||
default_image = self.geo_altmap
|
||||
@ -544,7 +565,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
Create a list of places with coordinates.
|
||||
"""
|
||||
found = any(p[0] == place for p in self.places_found)
|
||||
if not found and self.nbplaces < self._config.get("geography.max_places"):
|
||||
if not found and (self.nbplaces <
|
||||
self._config.get("geography.max_places")):
|
||||
# We only show the first "geography.max_places".
|
||||
# over 3000 or 4000 places, the geography become unusable.
|
||||
# In this case, filter the places ...
|
||||
@ -590,19 +612,19 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
self.remove_all_markers()
|
||||
self.remove_all_gps()
|
||||
self.remove_all_tracks()
|
||||
if ( self.current_map is not None and
|
||||
self.current_map != config.get("geography.map_service") ):
|
||||
if (self.current_map is not None and
|
||||
self.current_map != config.get("geography.map_service")):
|
||||
self.change_map(self.osm, config.get("geography.map_service"))
|
||||
last = ""
|
||||
current = ""
|
||||
differtype = False
|
||||
savetype = None
|
||||
#savetype = None
|
||||
lat = 0.0
|
||||
lon = 0.0
|
||||
icon = None
|
||||
count = 0
|
||||
self.uistate.set_busy_cursor(True)
|
||||
_LOG.debug("%s" % time.strftime("start create_marker : "
|
||||
_LOG.debug("%s", time.strftime("start create_marker : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
for mark in self.sort:
|
||||
current = ([mark[3], mark[4]])
|
||||
@ -626,10 +648,10 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
count += 1
|
||||
if icon != mark[7]:
|
||||
differtype = True
|
||||
if ( lat != 0.0 and lon != 0.0 ):
|
||||
if lat != 0.0 and lon != 0.0:
|
||||
self.add_marker(None, None, lat, lon, icon, differtype, count)
|
||||
self._set_center_and_zoom()
|
||||
_LOG.debug("%s" % time.strftime(" stop create_marker : "
|
||||
_LOG.debug("%s", time.strftime(" stop create_marker : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
self.uistate.set_busy_cursor(False)
|
||||
|
||||
@ -646,17 +668,17 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
pt2 = bbox[1]
|
||||
s_bbox_lat2 = pt2.rlat + 10.0
|
||||
s_bbox_lon2 = pt2.rlon + 10.0
|
||||
result = ( s_bbox_lat1 > s_lat > s_bbox_lat2 ) and \
|
||||
( s_bbox_lon1 < s_lon < s_bbox_lon2 )
|
||||
result = ((s_bbox_lat1 > s_lat > s_bbox_lat2) and
|
||||
(s_bbox_lon1 < s_lon < s_bbox_lon2))
|
||||
return result
|
||||
|
||||
def _autozoom_in(self, lvl, p1lat, p1lon, p2lat, p2lon):
|
||||
"""
|
||||
We zoom in until at least one marker missing.
|
||||
"""
|
||||
if ( ( self._visible_marker(p1lat, p1lon)
|
||||
and self._visible_marker(p2lat, p2lon) )
|
||||
and lvl < 18 ):
|
||||
if ((self._visible_marker(p1lat, p1lon)
|
||||
and self._visible_marker(p2lat, p2lon))
|
||||
and lvl < 18):
|
||||
lvl += 1
|
||||
self.osm.set_zoom(lvl)
|
||||
GLib.timeout_add(int(50), self._autozoom_in, lvl,
|
||||
@ -669,9 +691,9 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
We zoom out until all markers visible.
|
||||
"""
|
||||
if ( not ( self._visible_marker(p1lat, p1lon)
|
||||
and self._visible_marker(p2lat, p2lon) )
|
||||
and lvl > 1 ):
|
||||
if (not (self._visible_marker(p1lat, p1lon)
|
||||
and self._visible_marker(p2lat, p2lon))
|
||||
and lvl > 1):
|
||||
lvl -= 1
|
||||
self.osm.set_zoom(lvl)
|
||||
GLib.timeout_add(int(50), self._autozoom_out, lvl,
|
||||
@ -691,8 +713,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
level_start = self.osm.props.zoom
|
||||
p1lat, p1lon = self.begin_selection.get_degrees()
|
||||
p2lat, p2lon = self.end_selection.get_degrees()
|
||||
lat = p1lat + ( p2lat - p1lat ) / 2
|
||||
lon = p1lon + ( p2lon - p1lon ) / 2
|
||||
lat = p1lat + (p2lat - p1lat) / 2
|
||||
lon = p1lon + (p2lon - p1lon) / 2
|
||||
# We center the map on the center of the region
|
||||
self.osm.set_center(lat, lon)
|
||||
self.save_center(lat, lon)
|
||||
@ -733,7 +755,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
maxlat = abs(abs(self.minlat) + abs(self.maxlat))
|
||||
latit = longt = 0.0
|
||||
for mark in self.sort:
|
||||
if ( signminlat == signmaxlat ):
|
||||
if signminlat == signmaxlat:
|
||||
if signminlat == 1:
|
||||
latit = self.minlat+self.centerlat
|
||||
else:
|
||||
@ -742,7 +764,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
latit = self.maxlat-self.centerlat
|
||||
else:
|
||||
latit = self.minlat+self.centerlat
|
||||
if ( signminlon == signmaxlon ):
|
||||
if signminlon == signmaxlon:
|
||||
if signminlon == 1:
|
||||
longt = self.minlon+self.centerlon
|
||||
else:
|
||||
@ -759,7 +781,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
if config.get("geography.lock"):
|
||||
self.osm.set_center_and_zoom(config.get("geography.center-lat"),
|
||||
config.get("geography.center-lon"),
|
||||
config.get("geography.zoom") )
|
||||
config.get("geography.zoom"))
|
||||
else:
|
||||
self._autozoom()
|
||||
self.save_center(self.latit, self.longt)
|
||||
@ -789,7 +811,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
mother = dbstate.db.get_person_from_handle(handle)
|
||||
fnam = _nd.display(father) if father else _("Unknown")
|
||||
mnam = _nd.display(mother) if mother else _("Unknown")
|
||||
return ( fnam, mnam )
|
||||
return (fnam, mnam)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -884,7 +906,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Edit the selected person at the marker position
|
||||
"""
|
||||
_LOG.debug("edit_person : %s" % mark[8])
|
||||
_LOG.debug("edit_person : %s", mark[8])
|
||||
# need to add code here to edit the person.
|
||||
person = self.dbstate.db.get_person_from_gramps_id(mark[8])
|
||||
try:
|
||||
@ -896,7 +918,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Edit the selected family at the marker position
|
||||
"""
|
||||
_LOG.debug("edit_family : %s" % mark[11])
|
||||
_LOG.debug("edit_family : %s", mark[11])
|
||||
family = self.dbstate.db.get_family_from_gramps_id(mark[11])
|
||||
try:
|
||||
EditFamily(self.dbstate, self.uistate, [], family)
|
||||
@ -907,7 +929,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Edit the selected event at the marker position
|
||||
"""
|
||||
_LOG.debug("edit_event : %s" % mark[10])
|
||||
_LOG.debug("edit_event : %s", mark[10])
|
||||
event = self.dbstate.db.get_event_from_gramps_id(mark[10])
|
||||
try:
|
||||
EditEvent(self.dbstate, self.uistate, [], event)
|
||||
@ -933,8 +955,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
|
||||
"""
|
||||
# Ask for the kml file
|
||||
filter = Gtk.FileFilter()
|
||||
filter.add_pattern("*.kml")
|
||||
filtering = Gtk.FileFilter()
|
||||
filtering.add_pattern("*.kml")
|
||||
kml = Gtk.FileChooserDialog(
|
||||
_("Select a kml file used to add places"),
|
||||
action=Gtk.FileChooserAction.OPEN,
|
||||
@ -943,7 +965,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
_('_Apply'), Gtk.ResponseType.OK))
|
||||
mpath = HOME_DIR
|
||||
kml.set_current_folder(os.path.dirname(mpath))
|
||||
kml.set_filter(filter)
|
||||
kml.set_filter(filtering)
|
||||
|
||||
status = kml.run()
|
||||
if status == Gtk.ResponseType.OK:
|
||||
@ -1167,20 +1189,27 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
(1000, 10000))
|
||||
configdialog.add_checkbox(grid,
|
||||
_('Use keypad for shortcuts :\n'
|
||||
'Either we choose the + and - from the keypad if we select this,\n'
|
||||
'Either we choose the + and - from the keypad if we '
|
||||
'select this,\n'
|
||||
'or we use the characters from the keyboard.'),
|
||||
5, 'geography.use-keypad',
|
||||
extra_callback=self.update_shortcuts)
|
||||
return _('The map'), grid
|
||||
|
||||
def set_tilepath(self, *obj):
|
||||
"""
|
||||
Save the tile path in the config section.
|
||||
"""
|
||||
if self.path_entry.get_text().strip():
|
||||
config.set('geography.path', self.path_entry.get_text())
|
||||
else:
|
||||
config.set('geography.path', GEOGRAPHY_PATH )
|
||||
config.set('geography.path', GEOGRAPHY_PATH)
|
||||
|
||||
def select_tilepath(self, *obj):
|
||||
f = Gtk.FileChooserDialog(
|
||||
"""
|
||||
Call a file chooser selection box to select the tile path.
|
||||
"""
|
||||
selected_dir = Gtk.FileChooserDialog(
|
||||
_("Select tile cache directory for offline mode"),
|
||||
action=Gtk.FileChooserAction.SELECT_FOLDER,
|
||||
parent=self.uistate.window,
|
||||
@ -1191,12 +1220,11 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
mpath = config.get('geography.path')
|
||||
if not mpath:
|
||||
mpath = HOME_DIR
|
||||
f.set_current_folder(os.path.dirname(mpath))
|
||||
selected_dir.set_current_folder(os.path.dirname(mpath))
|
||||
|
||||
status = f.run()
|
||||
status = selected_dir.run()
|
||||
if status == Gtk.ResponseType.OK:
|
||||
val = f.get_filename()
|
||||
val = selected_dir.get_filename()
|
||||
if val:
|
||||
self.path_entry.set_text(val)
|
||||
f.destroy()
|
||||
|
||||
selected_dir.destroy()
|
||||
|
@ -20,18 +20,12 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
# $Id: dummynogps.py 20708 2012-11-27 04:31:14Z paul-franklin $
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os,sys
|
||||
from gi.repository import GObject
|
||||
import operator
|
||||
from math import *
|
||||
import xml.etree.ElementTree as ETree
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -47,7 +41,6 @@ _LOG = logging.getLogger("maps.kmllayer")
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import Gdk
|
||||
import cairo
|
||||
from gi.repository import Pango, PangoCairo
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -69,14 +62,20 @@ try:
|
||||
except:
|
||||
raise
|
||||
|
||||
# pylint: disable=unused-variable
|
||||
# pylint: disable=unused-argument
|
||||
# pylint: disable=no-member
|
||||
|
||||
class KmlLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
"""
|
||||
This is the layer used to display kml files over the map
|
||||
* Allowed : points, paths and polygons.
|
||||
|
||||
* One point : name, (latitude, longitude)
|
||||
* One path : name, type, color, transparency, [ (latitude, longitude), (latitude, longitude), ...]
|
||||
* One polygon : name, type, color, transparency, [ (latitude, longitude), (latitude, longitude), ...]
|
||||
* One path : name, type, color, transparency,
|
||||
* [ (latitude, longitude), (latitude, longitude), ...]
|
||||
* One polygon : name, type, color, transparency,
|
||||
* [ (latitude, longitude), (latitude, longitude), ...]
|
||||
"""
|
||||
def __init__(self):
|
||||
"""
|
||||
@ -89,6 +88,7 @@ class KmlLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
self.name = ""
|
||||
self.type = ""
|
||||
self.points = []
|
||||
self.kml = None
|
||||
|
||||
def clear(self):
|
||||
"""
|
||||
@ -122,7 +122,8 @@ class KmlLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
map_points = []
|
||||
for point in points:
|
||||
conv_pt = osmgpsmap.MapPoint.new_degrees(point[0], point[1])
|
||||
coord_x, coord_y = gpsmap.convert_geographic_to_screen(conv_pt)
|
||||
(coord_x,
|
||||
coord_y) = gpsmap.convert_geographic_to_screen(conv_pt)
|
||||
map_points.append((coord_x, coord_y))
|
||||
first = True
|
||||
ctx.save()
|
||||
@ -137,9 +138,11 @@ class KmlLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
for idx_pt in range(0, len(map_points)):
|
||||
if first:
|
||||
first = False
|
||||
ctx.move_to(map_points[idx_pt][0], map_points[idx_pt][1])
|
||||
ctx.move_to(map_points[idx_pt][0],
|
||||
map_points[idx_pt][1])
|
||||
else:
|
||||
ctx.line_to(map_points[idx_pt][0], map_points[idx_pt][1])
|
||||
ctx.line_to(map_points[idx_pt][0],
|
||||
map_points[idx_pt][1])
|
||||
ctx.close_path()
|
||||
if ptype == "Polygon":
|
||||
ctx.stroke()
|
||||
@ -156,7 +159,8 @@ class KmlLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
map_points = []
|
||||
for point in points:
|
||||
conv_pt = osmgpsmap.MapPoint.new_degrees(point[0], point[1])
|
||||
coord_x, coord_y = gpsmap.convert_geographic_to_screen(conv_pt)
|
||||
(coord_x,
|
||||
coord_y) = gpsmap.convert_geographic_to_screen(conv_pt)
|
||||
map_points.append((coord_x, coord_y))
|
||||
first = True
|
||||
ctx.save()
|
||||
@ -169,9 +173,11 @@ class KmlLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
for idx_pt in range(0, len(map_points)):
|
||||
if first:
|
||||
first = False
|
||||
ctx.move_to(map_points[idx_pt][0], map_points[idx_pt][1])
|
||||
ctx.move_to(map_points[idx_pt][0],
|
||||
map_points[idx_pt][1])
|
||||
else:
|
||||
ctx.line_to(map_points[idx_pt][0], map_points[idx_pt][1])
|
||||
ctx.line_to(map_points[idx_pt][0],
|
||||
map_points[idx_pt][1])
|
||||
ctx.stroke()
|
||||
ctx.restore()
|
||||
|
||||
|
@ -25,10 +25,8 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os,sys
|
||||
import os
|
||||
from gi.repository import GObject
|
||||
import operator
|
||||
from math import *
|
||||
import xml.etree.ElementTree as ETree
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -39,6 +37,8 @@ import xml.etree.ElementTree as ETree
|
||||
import logging
|
||||
_LOG = logging.getLogger("maps.libkml")
|
||||
|
||||
# pylint: disable=unused-variable
|
||||
|
||||
class Kml(GObject.GObject):
|
||||
"""
|
||||
This is the library used to read kml files
|
||||
@ -46,7 +46,8 @@ class Kml(GObject.GObject):
|
||||
|
||||
* One point : name, (latitude, longitude)
|
||||
* One path : name, [ (latitude, longitude), (latitude, longitude), ...]
|
||||
* One polygon : name, type, color, [ (latitude, longitude), (latitude, longitude), ...]
|
||||
* One polygon : name, type, color,
|
||||
* [ (latitude, longitude), (latitude, longitude), ...]
|
||||
|
||||
* Some kml files use the altitude. We don't use it.
|
||||
|
||||
@ -54,7 +55,8 @@ class Kml(GObject.GObject):
|
||||
def __init__(self, kml_file):
|
||||
"""
|
||||
Initialize the library
|
||||
The access right and validity of the kmlfile must be verified before this method.
|
||||
The access right and validity of the kmlfile must be verified
|
||||
before this method.
|
||||
"""
|
||||
GObject.GObject.__init__(self)
|
||||
self.tag = ""
|
||||
@ -68,8 +70,8 @@ class Kml(GObject.GObject):
|
||||
self.polygons = []
|
||||
self.tree = ETree.parse(kml_file)
|
||||
root = self.tree.getroot()
|
||||
self.tag = root.tag.replace('}kml','}')
|
||||
_LOG.debug("Tag version of kml file %s is %s" % (kml_file, self.tag))
|
||||
self.tag = root.tag.replace('}kml', '}')
|
||||
_LOG.debug("Tag version of kml file %s is %s", kml_file, self.tag)
|
||||
fname, extension = os.path.splitext(kml_file)
|
||||
fdir, self.kmlfile = os.path.split(fname)
|
||||
|
||||
@ -110,49 +112,50 @@ class Kml(GObject.GObject):
|
||||
"""
|
||||
Get all the coordinates for this marker
|
||||
"""
|
||||
for subAttribute in attributes:
|
||||
if subAttribute.tag == self.tag + 'coordinates':
|
||||
self.get_coordinates(subAttribute)
|
||||
for sub_attribute in attributes:
|
||||
if sub_attribute.tag == self.tag + 'coordinates':
|
||||
self.get_coordinates(sub_attribute)
|
||||
|
||||
def get_polygon_outer_boundary(self, attributes):
|
||||
"""
|
||||
This function get the coordinates used to draw a filled polygon.
|
||||
"""
|
||||
self.type = 'OuterPolygon'
|
||||
for subAttribute in attributes:
|
||||
if subAttribute.tag == self.tag + 'LinearRing':
|
||||
self.get_linear_ring(subAttribute)
|
||||
for sub_attribute in attributes:
|
||||
if sub_attribute.tag == self.tag + 'LinearRing':
|
||||
self.get_linear_ring(sub_attribute)
|
||||
|
||||
def get_polygon_inner_boundary(self, attributes):
|
||||
"""
|
||||
This function get the coordinates used to draw a hole inside a filled polygon.
|
||||
This function get the coordinates used to draw a hole inside
|
||||
a filled polygon.
|
||||
"""
|
||||
self.type = 'InnerPolygon'
|
||||
for subAttribute in attributes:
|
||||
if subAttribute.tag == self.tag + 'LinearRing':
|
||||
self.get_linear_ring(subAttribute)
|
||||
for sub_attribute in attributes:
|
||||
if sub_attribute.tag == self.tag + 'LinearRing':
|
||||
self.get_linear_ring(sub_attribute)
|
||||
|
||||
def get_polygon(self, attributes):
|
||||
"""
|
||||
Get all the coordinates for the polygon
|
||||
"""
|
||||
for subAttribute in attributes:
|
||||
if subAttribute.tag == self.tag + 'outerBoundaryIs':
|
||||
self.get_polygon_outer_boundary(subAttribute)
|
||||
for sub_attribute in attributes:
|
||||
if sub_attribute.tag == self.tag + 'outerBoundaryIs':
|
||||
self.get_polygon_outer_boundary(sub_attribute)
|
||||
self.polygons.append((self.name,
|
||||
self.type,
|
||||
self.color,
|
||||
self.transparency,
|
||||
self.points))
|
||||
if subAttribute.tag == self.tag + 'innerBoundaryIs':
|
||||
self.get_polygon_inner_boundary(subAttribute)
|
||||
if sub_attribute.tag == self.tag + 'innerBoundaryIs':
|
||||
self.get_polygon_inner_boundary(sub_attribute)
|
||||
self.polygons.append((self.name,
|
||||
self.type,
|
||||
self.color,
|
||||
self.transparency,
|
||||
self.points))
|
||||
if subAttribute.tag == self.tag + 'LinearRing':
|
||||
self.get_linear_ring(subAttribute)
|
||||
if sub_attribute.tag == self.tag + 'LinearRing':
|
||||
self.get_linear_ring(sub_attribute)
|
||||
self.type = 'Polygon'
|
||||
self.polygons.append((self.name,
|
||||
self.type,
|
||||
@ -165,18 +168,18 @@ class Kml(GObject.GObject):
|
||||
Get all the coordinates for this marker
|
||||
"""
|
||||
self.type = 'Point'
|
||||
for subAttribute in attributes:
|
||||
if subAttribute.tag == self.tag + 'coordinates':
|
||||
self.get_coordinates(subAttribute)
|
||||
for sub_attribute in attributes:
|
||||
if sub_attribute.tag == self.tag + 'coordinates':
|
||||
self.get_coordinates(sub_attribute)
|
||||
|
||||
def get_path(self, attributes):
|
||||
"""
|
||||
Get all the coordinates for this marker
|
||||
"""
|
||||
self.type = 'Path'
|
||||
for subAttribute in attributes:
|
||||
if subAttribute.tag == self.tag + 'coordinates':
|
||||
self.get_coordinates(subAttribute)
|
||||
for sub_attribute in attributes:
|
||||
if sub_attribute.tag == self.tag + 'coordinates':
|
||||
self.get_coordinates(sub_attribute)
|
||||
self.paths.append((self.name,
|
||||
self.type,
|
||||
self.color,
|
||||
@ -184,45 +187,48 @@ class Kml(GObject.GObject):
|
||||
self.points))
|
||||
|
||||
def get_multi_geometry(self, attributes):
|
||||
for subAttribute in attributes:
|
||||
if subAttribute.tag == self.tag + 'Polygon':
|
||||
self.polygon(subAttribute)
|
||||
if subAttribute.tag == self.tag + 'LineString':
|
||||
self.get_path(subAttribute)
|
||||
"""
|
||||
Do we have some sub structures ?
|
||||
"""
|
||||
for sub_attribute in attributes:
|
||||
if sub_attribute.tag == self.tag + 'Polygon':
|
||||
self.get_polygon(sub_attribute)
|
||||
if sub_attribute.tag == self.tag + 'LineString':
|
||||
self.get_path(sub_attribute)
|
||||
|
||||
def add_kml(self):
|
||||
"""
|
||||
Add a kml file.
|
||||
"""
|
||||
lineStrings = self.tree.findall('.//' + self.tag + 'Placemark')
|
||||
for attributes in lineStrings:
|
||||
line_strings = self.tree.findall('.//' + self.tag + 'Placemark')
|
||||
for attributes in line_strings:
|
||||
self.points = []
|
||||
self.set_default()
|
||||
for subAttribute in attributes:
|
||||
if subAttribute.tag == self.tag + 'name':
|
||||
self.name = subAttribute.text
|
||||
if subAttribute.tag == self.tag + 'Polygon':
|
||||
self.get_polygon(subAttribute)
|
||||
if subAttribute.tag == self.tag + 'LineString':
|
||||
self.get_path(subAttribute)
|
||||
if subAttribute.tag == self.tag + 'MultiGeometry':
|
||||
self.get_multi_geometry(subAttribute)
|
||||
for sub_attribute in attributes:
|
||||
if sub_attribute.tag == self.tag + 'name':
|
||||
self.name = sub_attribute.text
|
||||
if sub_attribute.tag == self.tag + 'Polygon':
|
||||
self.get_polygon(sub_attribute)
|
||||
if sub_attribute.tag == self.tag + 'LineString':
|
||||
self.get_path(sub_attribute)
|
||||
if sub_attribute.tag == self.tag + 'MultiGeometry':
|
||||
self.get_multi_geometry(sub_attribute)
|
||||
return (self.paths, self.polygons)
|
||||
|
||||
def add_points(self):
|
||||
"""
|
||||
Add points or markers
|
||||
"""
|
||||
lineStrings = self.tree.findall('.//' + self.tag + 'Placemark')
|
||||
line_strings = self.tree.findall('.//' + self.tag + 'Placemark')
|
||||
self.markers = []
|
||||
for attributes in lineStrings:
|
||||
for attributes in line_strings:
|
||||
self.points = []
|
||||
self.set_default()
|
||||
for subAttribute in attributes:
|
||||
if subAttribute.tag == self.tag + 'name':
|
||||
self.name = subAttribute.text
|
||||
if subAttribute.tag == self.tag + 'Point':
|
||||
self.get_point(subAttribute)
|
||||
for sub_attribute in attributes:
|
||||
if sub_attribute.tag == self.tag + 'name':
|
||||
self.name = sub_attribute.text
|
||||
if sub_attribute.tag == self.tag + 'Point':
|
||||
self.get_point(sub_attribute)
|
||||
self.markers.append((self.name, self.points))
|
||||
return self.markers
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -25,9 +25,8 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
from gi.repository import GObject
|
||||
from math import *
|
||||
from math import pi
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -42,15 +41,14 @@ _LOG = logging.getLogger("maps.lifeway")
|
||||
# GTK/Gnome modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import Gdk
|
||||
import cairo
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Gramps Modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import cairo
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -65,6 +63,8 @@ try:
|
||||
except:
|
||||
raise
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
class LifeWayLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
"""
|
||||
This is the layer used to display tracks or the life way for one or several
|
||||
@ -93,7 +93,7 @@ class LifeWayLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
alpha is the transparence
|
||||
radius is the size of the track.
|
||||
"""
|
||||
if isinstance(color,str):
|
||||
if isinstance(color, str):
|
||||
color = Gdk.color_parse(color)
|
||||
self.lifeways_ref.append((points, color, radius))
|
||||
|
||||
@ -101,7 +101,7 @@ class LifeWayLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
"""
|
||||
Add a track or life way.
|
||||
"""
|
||||
if isinstance(color,str):
|
||||
if isinstance(color, str):
|
||||
color = Gdk.color_parse(color)
|
||||
self.lifeways.append((points, color))
|
||||
|
||||
@ -121,24 +121,29 @@ class LifeWayLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
rds = float(lifeway[2])
|
||||
for point in lifeway[0]:
|
||||
conv_pt1 = osmgpsmap.MapPoint.new_degrees(point[0], point[1])
|
||||
coord_x1, coord_y1 = gpsmap.convert_geographic_to_screen(conv_pt1)
|
||||
conv_pt2 = osmgpsmap.MapPoint.new_degrees(point[0]+rds, point[1])
|
||||
coord_x2, coord_y2 = gpsmap.convert_geographic_to_screen(conv_pt2)
|
||||
coord_x1, coord_y1 = gpsmap.convert_geographic_to_screen(
|
||||
conv_pt1)
|
||||
conv_pt2 = osmgpsmap.MapPoint.new_degrees(point[0]+rds,
|
||||
point[1])
|
||||
coord_x2, coord_y2 = gpsmap.convert_geographic_to_screen(
|
||||
conv_pt2)
|
||||
coy = abs(coord_y2-coord_y1)
|
||||
conv_pt2 = osmgpsmap.MapPoint.new_degrees(point[0], point[1]+rds)
|
||||
coord_x2, coord_y2 = gpsmap.convert_geographic_to_screen(conv_pt2)
|
||||
conv_pt2 = osmgpsmap.MapPoint.new_degrees(point[0],
|
||||
point[1]+rds)
|
||||
coord_x2, coord_y2 = gpsmap.convert_geographic_to_screen(
|
||||
conv_pt2)
|
||||
cox = abs(coord_x2-coord_x1)
|
||||
cox = cox if cox > 1.2 else 1.2
|
||||
coy = coy if coy > 1.2 else 1.2
|
||||
coz = abs( 1.0 / float(cox) * float(coy) )
|
||||
coz = abs(1.0 / float(cox) * float(coy))
|
||||
coz = coz if coz > 1.2 else 1.2
|
||||
ctx.save()
|
||||
ctx.scale(1.0,coz)
|
||||
ctx.scale(1.0, coz)
|
||||
ctx.move_to(coord_x1, coord_y1)
|
||||
ctx.translate(coord_x1, coord_y1/coz)
|
||||
ctx.arc(0.0, 0.0, cox, 0.0, 2*pi)
|
||||
ctx.fill()
|
||||
ctx.set_source_rgba(1.0,0.0,0.0,0.5)
|
||||
ctx.set_source_rgba(1.0, 0.0, 0.0, 0.5)
|
||||
ctx.set_line_width(2.0)
|
||||
ctx.arc(0.0, 0.0, cox, 0.0, 2*pi)
|
||||
ctx.stroke()
|
||||
@ -164,7 +169,7 @@ class LifeWayLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
else:
|
||||
ctx.line_to(map_points[idx_pt][0], map_points[idx_pt][1])
|
||||
ctx.stroke()
|
||||
if len(map_points) == 1 : # We have only one point
|
||||
if len(map_points) == 1: # We have only one point
|
||||
crdx = map_points[0][0]
|
||||
crdy = map_points[0][1]
|
||||
ctx.move_to(crdx, crdy)
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -25,9 +25,7 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
from gi.repository import GObject
|
||||
from math import *
|
||||
import time
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -37,15 +35,12 @@ import time
|
||||
#------------------------------------------------------------------------
|
||||
import logging
|
||||
_LOG = logging.getLogger("maps.markerlayer")
|
||||
#_LOG = logging.getLogger("GeoGraphy.markerlayer")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GTK/Gnome modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import Gtk
|
||||
import cairo
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -66,6 +61,8 @@ try:
|
||||
except:
|
||||
raise
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
class MarkerLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
"""
|
||||
This is the layer used to display the markers.
|
||||
@ -121,7 +118,7 @@ class MarkerLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
max_interval = 0.01
|
||||
if min_interval == 0: # This to avoid divide by zero
|
||||
min_interval = 0.01
|
||||
_LOG.debug("%s" % time.strftime("start drawing : "
|
||||
_LOG.debug("%s", time.strftime("start drawing : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
for marker in self.markers:
|
||||
ctx.save()
|
||||
@ -131,28 +128,28 @@ class MarkerLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
if mark > self.nb_ref_by_places:
|
||||
# at maximum, we'll have an icon size = (0.6 + 0.3) * 48 = 43.2
|
||||
size += (0.3 * ((mark - self.nb_ref_by_places)
|
||||
/ max_interval) )
|
||||
/ max_interval))
|
||||
else:
|
||||
# at minimum, we'll have an icon size = (0.6 - 0.3) * 48 = 14.4
|
||||
size -= (0.3 * ((self.nb_ref_by_places - mark)
|
||||
/ min_interval) )
|
||||
/ min_interval))
|
||||
|
||||
conv_pt = osmgpsmap.MapPoint.new_degrees(float(marker[0][0]),
|
||||
float(marker[0][1]))
|
||||
float(marker[0][1]))
|
||||
coord_x, coord_y = gpsmap.convert_geographic_to_screen(conv_pt)
|
||||
ctx.translate(coord_x, coord_y)
|
||||
ctx.scale( size, size)
|
||||
ctx.scale(size, size)
|
||||
# below, we try to place exactly the marker depending on its size.
|
||||
# Normaly, the left top corner of the image is set to the coordinates.
|
||||
# The left top corner of the image is set to the coordinates.
|
||||
# The tip of the pin which should be at the marker position is at
|
||||
# 3/18 of the width and to the height of the image.
|
||||
# So we shift the image position.
|
||||
posY = - int( 48 * size + 0.5 ) - 10
|
||||
posX = - int(( 48 * size ) / 6 + 0.5 ) - 10
|
||||
ctx.set_source_surface(marker[1], posX, posY)
|
||||
pos_y = - int(48 * size + 0.5) - 10
|
||||
pos_x = - int((48 * size) / 6 + 0.5) - 10
|
||||
ctx.set_source_surface(marker[1], pos_x, pos_y)
|
||||
ctx.paint()
|
||||
ctx.restore()
|
||||
_LOG.debug("%s" % time.strftime("end drawing : "
|
||||
_LOG.debug("%s", time.strftime("end drawing : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
|
||||
def do_render(self, gpsmap):
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -25,10 +25,7 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
from gi.repository import GObject
|
||||
import operator
|
||||
from math import *
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -44,7 +41,6 @@ _LOG = logging.getLogger("maps.messagelayer")
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import Gdk
|
||||
import cairo
|
||||
from gi.repository import Pango, PangoCairo
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -66,6 +62,10 @@ try:
|
||||
except:
|
||||
raise
|
||||
|
||||
# pylint: disable=unused-variable
|
||||
# pylint: disable=unused-argument
|
||||
# pylint: disable=no-member
|
||||
|
||||
class MessageLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
"""
|
||||
This is the layer used to display messages over the map
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -26,7 +26,6 @@
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
from gi.repository import GObject
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -78,7 +77,14 @@ try:
|
||||
except:
|
||||
raise
|
||||
|
||||
class OsmGps():
|
||||
# pylint: disable=unused-argument
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=maybe-no-member
|
||||
|
||||
class OsmGps(object):
|
||||
"""
|
||||
This class is used to create a map
|
||||
"""
|
||||
def __init__(self):
|
||||
"""
|
||||
Initialize the map
|
||||
@ -111,7 +117,7 @@ class OsmGps():
|
||||
os.makedirs(cache_path, 0o755) # create dir like mkdir -p
|
||||
except:
|
||||
ErrorDialog(_("Can't create tiles cache directory %s") %
|
||||
cache_path )
|
||||
cache_path)
|
||||
return self.vbox
|
||||
|
||||
self.change_map(None, config.get("geography.map_service"))
|
||||
@ -127,13 +133,13 @@ class OsmGps():
|
||||
self.vbox.remove(self.osm)
|
||||
self.osm.destroy()
|
||||
tiles_path = os.path.join(config.get('geography.path'),
|
||||
constants.tiles_path[map_type])
|
||||
constants.TILES_PATH[map_type])
|
||||
if not os.path.isdir(tiles_path):
|
||||
try:
|
||||
os.makedirs(tiles_path, 0o755) # create dir like mkdir -p
|
||||
except:
|
||||
ErrorDialog(_("Can't create tiles cache directory for '%s'.") %
|
||||
constants.map_title[map_type])
|
||||
constants.MAP_TITLE[map_type])
|
||||
config.set("geography.map_service", map_type)
|
||||
self.current_map = map_type
|
||||
http_proxy = get_env_var('http_proxy')
|
||||
@ -143,12 +149,14 @@ class OsmGps():
|
||||
if http_proxy:
|
||||
self.osm = osmgpsmap.Map(tile_cache=tiles_path,
|
||||
proxy_uri=http_proxy,
|
||||
map_source=constants.map_type[map_type])
|
||||
map_source=constants.MAP_TYPE[
|
||||
map_type])
|
||||
else:
|
||||
self.osm = osmgpsmap.Map(tile_cache=tiles_path,
|
||||
map_source=constants.map_type[map_type])
|
||||
map_source=constants.MAP_TYPE[
|
||||
map_type])
|
||||
self.osm.props.tile_cache = osmgpsmap.MAP_CACHE_AUTO
|
||||
current_map = osmgpsmap.MapOsd( show_dpad=False, show_zoom=True)
|
||||
current_map = osmgpsmap.MapOsd(show_dpad=False, show_zoom=True)
|
||||
self.end_selection = None
|
||||
self.osm.layer_add(current_map)
|
||||
self.osm.layer_add(DummyLayer())
|
||||
@ -158,11 +166,11 @@ class OsmGps():
|
||||
self.marker_layer = self.add_marker_layer()
|
||||
self.date_layer = self.add_date_layer()
|
||||
self.message_layer = self.add_message_layer()
|
||||
self.cross_map = osmgpsmap.MapOsd( show_crosshair=False)
|
||||
self.cross_map = osmgpsmap.MapOsd(show_crosshair=False)
|
||||
self.set_crosshair(config.get("geography.show_cross"))
|
||||
self.osm.set_center_and_zoom(config.get("geography.center-lat"),
|
||||
config.get("geography.center-lon"),
|
||||
config.get("geography.zoom") )
|
||||
config.get("geography.zoom"))
|
||||
|
||||
self.osm.connect('button_release_event', self.map_clicked)
|
||||
self.osm.connect('button_press_event', self.map_clicked)
|
||||
@ -176,21 +184,30 @@ class OsmGps():
|
||||
def update_shortcuts(self, arg):
|
||||
"""
|
||||
connect the keyboard or the keypad for shortcuts
|
||||
arg is mandatory because this function is also called by the checkbox button
|
||||
arg is mandatory because this function is also called by
|
||||
the checkbox button
|
||||
"""
|
||||
config.set('geography.use-keypad',
|
||||
self._config.get('geography.use-keypad'))
|
||||
if config.get('geography.use-keypad'):
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.ZOOMIN, Gdk.keyval_from_name("KP_Add"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.ZOOMOUT, Gdk.keyval_from_name("KP_Subtract"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.ZOOMIN,
|
||||
Gdk.keyval_from_name("KP_Add"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.ZOOMOUT,
|
||||
Gdk.keyval_from_name("KP_Subtract"))
|
||||
else:
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.ZOOMIN, Gdk.keyval_from_name("plus"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.ZOOMOUT, Gdk.keyval_from_name("minus"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.ZOOMIN,
|
||||
Gdk.keyval_from_name("plus"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.ZOOMOUT,
|
||||
Gdk.keyval_from_name("minus"))
|
||||
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.UP, Gdk.keyval_from_name("Up"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.DOWN, Gdk.keyval_from_name("Down"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.LEFT, Gdk.keyval_from_name("Left"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.RIGHT, Gdk.keyval_from_name("Right"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.UP,
|
||||
Gdk.keyval_from_name("Up"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.DOWN,
|
||||
Gdk.keyval_from_name("Down"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.LEFT,
|
||||
Gdk.keyval_from_name("Left"))
|
||||
self.osm.set_keyboard_shortcut(osmgpsmap.MapKey_t.RIGHT,
|
||||
Gdk.keyval_from_name("Right"))
|
||||
|
||||
# For shortcuts work, we must grab the focus
|
||||
self.osm.grab_focus()
|
||||
@ -296,7 +313,8 @@ class OsmGps():
|
||||
"""
|
||||
Moving during selection
|
||||
"""
|
||||
current = osmmap.convert_screen_to_geographic(int(event.x), int(event.y))
|
||||
current = osmmap.convert_screen_to_geographic(int(event.x),
|
||||
int(event.y))
|
||||
lat, lon = current.get_degrees()
|
||||
if self.zone_selection:
|
||||
# We draw a rectangle to show the selected region.
|
||||
@ -324,17 +342,17 @@ class OsmGps():
|
||||
"""
|
||||
Save the longitude and lontitude in case we switch between maps.
|
||||
"""
|
||||
_LOG.debug("save_center : %s,%s" % (lat, lon) )
|
||||
if ( -90.0 < lat < +90.0 ) and ( -180.0 < lon < +180.0 ):
|
||||
_LOG.debug("save_center : %s,%s", lat, lon)
|
||||
if (-90.0 < lat < +90.0) and (-180.0 < lon < +180.0):
|
||||
config.set("geography.center-lat", lat)
|
||||
config.set("geography.center-lon", lon)
|
||||
else:
|
||||
_LOG.debug("save_center : new coordinates : %s,%s" % (lat, lon) )
|
||||
_LOG.debug("save_center : old coordinates : %s,%s" % (lat, lon) )
|
||||
_LOG.debug("save_center : new coordinates : %s,%s", lat, lon)
|
||||
_LOG.debug("save_center : old coordinates : %s,%s", lat, lon)
|
||||
# osmgpsmap bug ? reset to prior values to avoid osmgpsmap problems.
|
||||
self.osm.set_center_and_zoom(config.get("geography.center-lat"),
|
||||
config.get("geography.center-lon"),
|
||||
config.get("geography.zoom") )
|
||||
config.get("geography.zoom"))
|
||||
|
||||
def activate_selection_zoom(self, osm, event):
|
||||
"""
|
||||
@ -383,7 +401,7 @@ class OsmGps():
|
||||
if self.no_show_places_in_status_bar:
|
||||
return mark_selected
|
||||
oldplace = ""
|
||||
_LOG.debug("%s" % time.strftime("start is_there_a_place_here : "
|
||||
_LOG.debug("%s", time.strftime("start is_there_a_place_here : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
for mark in self.places_found:
|
||||
# as we are not precise with our hand, reduce the precision
|
||||
@ -406,20 +424,20 @@ class OsmGps():
|
||||
14 : 0.0005, 15 : 0.0003, 16 : 0.0001,
|
||||
17 : 0.0001, 18 : 0.0001
|
||||
}.get(config.get("geography.zoom"), 5.0)
|
||||
latp = precision % lat
|
||||
lonp = precision % lon
|
||||
latp = precision % lat
|
||||
lonp = precision % lon
|
||||
mlatp = precision % float(mark[1])
|
||||
mlonp = precision % float(mark[2])
|
||||
latok = lonok = False
|
||||
if (float(mlatp) >= (float(latp) - shift) ) and \
|
||||
(float(mlatp) <= (float(latp) + shift) ):
|
||||
if (float(mlatp) >= (float(latp) - shift)) and \
|
||||
(float(mlatp) <= (float(latp) + shift)):
|
||||
latok = True
|
||||
if (float(mlonp) >= (float(lonp) - shift) ) and \
|
||||
(float(mlonp) <= (float(lonp) + shift) ):
|
||||
if (float(mlonp) >= (float(lonp) - shift)) and \
|
||||
(float(mlonp) <= (float(lonp) + shift)):
|
||||
lonok = True
|
||||
if latok and lonok:
|
||||
mark_selected.append(mark)
|
||||
_LOG.debug("%s" % time.strftime(" end is_there_a_place_here : "
|
||||
_LOG.debug("%s", time.strftime(" end is_there_a_place_here : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
return mark_selected
|
||||
|
||||
@ -441,9 +459,9 @@ class OsmGps():
|
||||
"""
|
||||
if active:
|
||||
self.osm.layer_remove(self.cross_map)
|
||||
self.cross_map = osmgpsmap.MapOsd( show_crosshair=True)
|
||||
self.osm.layer_add( self.cross_map )
|
||||
self.cross_map = osmgpsmap.MapOsd(show_crosshair=True)
|
||||
self.osm.layer_add(self.cross_map)
|
||||
else:
|
||||
self.osm.layer_remove(self.cross_map)
|
||||
self.cross_map = osmgpsmap.MapOsd( show_crosshair=False)
|
||||
self.osm.layer_add( self.cross_map )
|
||||
self.cross_map = osmgpsmap.MapOsd(show_crosshair=False)
|
||||
self.osm.layer_add(self.cross_map)
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -28,7 +28,6 @@
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.sgettext
|
||||
import re
|
||||
from gi.repository import GObject
|
||||
import math
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -56,7 +55,6 @@ from gramps.gui.managedwindow import ManagedWindow
|
||||
from .osmgps import OsmGps
|
||||
from gramps.gen.utils.location import get_main_location
|
||||
from gramps.gen.lib import PlaceType
|
||||
from gramps.gen.display.place import displayer as place_displayer
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -66,6 +64,9 @@ from gramps.gen.display.place import displayer as place_displayer
|
||||
PLACE_REGEXP = re.compile('<span background="green">(.*)</span>')
|
||||
PLACE_STRING = '<span background="green">%s</span>'
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
# pylint: disable=no-member
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# PlaceSelection
|
||||
@ -87,8 +88,10 @@ class PlaceSelection(ManagedWindow, OsmGps):
|
||||
ManagedWindow.__init__(self, uistate, [], PlaceSelection)
|
||||
except WindowActiveError:
|
||||
return
|
||||
OsmGps.__init__(self)
|
||||
self.uistate = uistate
|
||||
self.dbstate = dbstate
|
||||
self.places = []
|
||||
self.lat = lat
|
||||
self.lon = lon
|
||||
self.osm = maps
|
||||
@ -162,7 +165,8 @@ class PlaceSelection(ManagedWindow, OsmGps):
|
||||
|
||||
def slider_change(self, obj, lat, lon):
|
||||
"""
|
||||
Display on the map a circle in which we select all the places inside this region.
|
||||
Display on the map a circle in which we select all the places
|
||||
inside this region.
|
||||
"""
|
||||
self.radius = obj.get_value() if obj else 1.0
|
||||
self.show_the_region(self.radius)
|
||||
@ -183,14 +187,15 @@ class PlaceSelection(ManagedWindow, OsmGps):
|
||||
)
|
||||
for place in self.places:
|
||||
if not place[0]:
|
||||
_LOG.info('No hierarchy yet: %s' % place)
|
||||
_LOG.info('No hierarchy yet: %s', place)
|
||||
continue
|
||||
p = (place[0], place[1], place[2], place[3], place[4])
|
||||
self.plist.append(p)
|
||||
self.plist.append((place[0], place[1],
|
||||
place[2], place[3], place[4]))
|
||||
# here, we could add value from geography names services ...
|
||||
|
||||
# if we found no place, we must create a default place.
|
||||
self.plist.append((_("New place with empty fields"), "", "...", "", None))
|
||||
self.plist.append((_("New place with empty fields"), "",
|
||||
"...", "", None))
|
||||
|
||||
def hide_the_region(self):
|
||||
"""
|
||||
@ -251,7 +256,8 @@ class PlaceSelection(ManagedWindow, OsmGps):
|
||||
if (math.hypot(lat-float(entry[3]),
|
||||
lon-float(entry[4])) <= rds) == True:
|
||||
# Do we already have this place ? avoid duplicates
|
||||
country, state, county, place, other = self.get_location(entry[9])
|
||||
(country, state, county,
|
||||
place, other) = self.get_location(entry[9])
|
||||
if not [country, state, county, place, other] in self.places:
|
||||
self.places.append([country, state, county, place, other])
|
||||
for place in self.dbstate.db.iter_places():
|
||||
@ -260,9 +266,12 @@ class PlaceSelection(ManagedWindow, OsmGps):
|
||||
if latn and lonn:
|
||||
if (math.hypot(lat-float(latn),
|
||||
lon-float(lonn)) <= rds) == True:
|
||||
country, state, county, place, other = self.get_location(place.get_gramps_id())
|
||||
if not [country, state, county, place, other] in self.places:
|
||||
self.places.append([country, state, county, place, other])
|
||||
(country, state, county,
|
||||
place, other) = self.get_location(place.get_gramps_id())
|
||||
if not [country, state, county,
|
||||
place, other] in self.places:
|
||||
self.places.append([country, state, county,
|
||||
place, other])
|
||||
|
||||
def selection(self, obj, index, column, function):
|
||||
"""
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011-2012 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -25,7 +25,6 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
from math import pi
|
||||
from gi.repository import GObject
|
||||
|
||||
@ -56,7 +55,12 @@ try:
|
||||
except:
|
||||
raise
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
class SelectionLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
"""
|
||||
This class is used to select an area on the map
|
||||
"""
|
||||
def __init__(self):
|
||||
"""
|
||||
Initialize thz selection layer
|
||||
@ -108,16 +112,17 @@ class SelectionLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
crd_x, crd_y = gpsmap.convert_geographic_to_screen(top_left)
|
||||
crd_x2, crd_y2 = gpsmap.convert_geographic_to_screen(bottom_right)
|
||||
# be sure when can select a region in all case.
|
||||
if ( crd_x < crd_x2 ):
|
||||
if ( crd_y < crd_y2 ):
|
||||
if crd_x < crd_x2:
|
||||
if crd_y < crd_y2:
|
||||
ctx.rectangle(crd_x, crd_y, crd_x2 - crd_x, crd_y2 - crd_y)
|
||||
else:
|
||||
ctx.rectangle(crd_x, crd_y2, crd_x2 - crd_x, crd_y - crd_y2)
|
||||
else:
|
||||
if ( crd_y < crd_y2 ):
|
||||
if crd_y < crd_y2:
|
||||
ctx.rectangle(crd_x2, crd_y, crd_x - crd_x2, crd_y2 - crd_y)
|
||||
else:
|
||||
ctx.rectangle(crd_x2, crd_y2, crd_x - crd_x2, crd_y - crd_y2)
|
||||
ctx.rectangle(crd_x2, crd_y2, crd_x - crd_x2,
|
||||
crd_y - crd_y2)
|
||||
ctx.stroke()
|
||||
|
||||
def do_render(self, gpsmap):
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -32,7 +32,7 @@ from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
import operator
|
||||
from gi.repository import Gtk
|
||||
from math import *
|
||||
from math import hypot
|
||||
from html import escape
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -105,6 +105,9 @@ _UI_DEF = '''\
|
||||
</ui>
|
||||
'''
|
||||
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GeoView
|
||||
@ -163,6 +166,9 @@ class GeoClose(GeoGraphyView):
|
||||
self.place_list_ref = []
|
||||
self.cal = config.get('preferences.calendar-format-report')
|
||||
self.no_show_places_in_status_bar = False
|
||||
self.add_item = None
|
||||
self.newmenu = None
|
||||
self.config_meeting_slider = None
|
||||
|
||||
def get_title(self):
|
||||
"""
|
||||
@ -215,20 +221,22 @@ class GeoClose(GeoGraphyView):
|
||||
self.message_layer.clear_messages()
|
||||
active = self.get_active()
|
||||
if active:
|
||||
p1 = self.dbstate.db.get_person_from_handle(active)
|
||||
indiv1 = self.dbstate.db.get_person_from_handle(active)
|
||||
color = self._config.get('geography.color2')
|
||||
self._createmap(p1, color, self.place_list_active, False)
|
||||
self._createmap(indiv1, color, self.place_list_active, False)
|
||||
if self.refperson:
|
||||
color = self._config.get('geography.color1')
|
||||
self.message_layer.add_message(_("Reference : %(name)s ( %(birth)s - %(death)s )") % {
|
||||
'name': _nd.display(self.refperson),
|
||||
'birth': self.birth(self.refperson),
|
||||
'death': self.death(self.refperson)})
|
||||
if p1:
|
||||
self.message_layer.add_message(_("The other : %(name)s ( %(birth)s - %(death)s )") % {
|
||||
'name': _nd.display(p1),
|
||||
'birth': self.birth(p1),
|
||||
'death': self.death(p1)})
|
||||
self.message_layer.add_message(
|
||||
_("Reference : %(name)s ( %(birth)s - %(death)s )") % {
|
||||
'name': _nd.display(self.refperson),
|
||||
'birth': self.birth(self.refperson),
|
||||
'death': self.death(self.refperson)})
|
||||
if indiv1:
|
||||
self.message_layer.add_message(
|
||||
_("The other : %(name)s ( %(birth)s - %(death)s )") % {
|
||||
'name': _nd.display(indiv1),
|
||||
'birth': self.birth(indiv1),
|
||||
'death': self.death(indiv1)})
|
||||
else:
|
||||
self.message_layer.add_message(_("The other person is unknown"))
|
||||
self._createmap(self.refperson, color, self.place_list_ref, True)
|
||||
@ -236,10 +244,12 @@ class GeoClose(GeoGraphyView):
|
||||
self.refperson_bookmark = self.refperson.get_handle()
|
||||
self.add_bookmark_from_popup(None, self.refperson_bookmark)
|
||||
else:
|
||||
self.message_layer.add_message(_("You must choose one reference person."))
|
||||
self.message_layer.add_message(
|
||||
_("You must choose one reference person."))
|
||||
self.message_layer.add_message(_("Go to the person view and select "
|
||||
"the people you want to compare. "
|
||||
"Return to this view and use the history."))
|
||||
"Return to this view and use the"
|
||||
" history."))
|
||||
self.possible_meeting(self.place_list_ref, self.place_list_active)
|
||||
self.uistate.modify_statusbar(self.dbstate)
|
||||
|
||||
@ -286,13 +296,13 @@ class GeoClose(GeoGraphyView):
|
||||
self.define_print_actions()
|
||||
self.ref_person = Gtk.ActionGroup(name=self.title + '/Selection')
|
||||
self.ref_person.add_actions([
|
||||
('RefPerson', 'gramps-person', _('reference _Person'), None ,
|
||||
('RefPerson', 'gramps-person', _('reference _Person'), None,
|
||||
_("Select the person which is the reference for life ways"),
|
||||
self.selectPerson),
|
||||
self.select_person),
|
||||
])
|
||||
self._add_action_group(self.ref_person)
|
||||
|
||||
def selectPerson(self, obj):
|
||||
def select_person(self, obj):
|
||||
"""
|
||||
Open a selection box to choose the ref person.
|
||||
"""
|
||||
@ -300,8 +310,8 @@ class GeoClose(GeoGraphyView):
|
||||
self.skip_list = []
|
||||
self.refperson = None
|
||||
self.refperson_bookmark = None
|
||||
SelectPerson = SelectorFactory('Person')
|
||||
sel = SelectPerson(self.dbstate, self.uistate, self.track,
|
||||
selectperson = SelectorFactory('Person')
|
||||
sel = selectperson(self.dbstate, self.uistate, self.track,
|
||||
_("Select the person which will be our reference."),
|
||||
skip=self.skip_list)
|
||||
self.refperson = sel.run()
|
||||
@ -342,7 +352,7 @@ class GeoClose(GeoGraphyView):
|
||||
self.lifeway_layer.add_way(points, color)
|
||||
if reference:
|
||||
self.lifeway_layer.add_way_ref(points, 'orange',
|
||||
float(self._config.get("geography.maximum_meeting_zone")) / 10)
|
||||
float(self._config.get("geography.maximum_meeting_zone")) / 10)
|
||||
return False
|
||||
|
||||
def possible_meeting(self, place_list_ref, place_list_active):
|
||||
@ -405,7 +415,7 @@ class GeoClose(GeoGraphyView):
|
||||
# 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 ):
|
||||
if longitude and latitude:
|
||||
self._append_to_places_list(descr, evt,
|
||||
_nd.display(person),
|
||||
latitude, longitude,
|
||||
@ -433,7 +443,7 @@ class GeoClose(GeoGraphyView):
|
||||
handle = fam.get_mother_handle()
|
||||
mother = dbstate.db.get_person_from_handle(handle)
|
||||
if mother:
|
||||
descr1 = "%s%s" % ( descr1, _nd.display(mother))
|
||||
descr1 = "%s%s" % (descr1, _nd.display(mother))
|
||||
for event_ref in family.get_event_ref_list():
|
||||
if event_ref:
|
||||
event = dbstate.db.get_event_from_handle(
|
||||
@ -450,12 +460,12 @@ class GeoClose(GeoGraphyView):
|
||||
latitude, longitude = conv_lat_lon(
|
||||
latitude, longitude, "D.D8")
|
||||
descr = _pd.display(dbstate.db, place)
|
||||
evt = EventType(
|
||||
event.get_type())
|
||||
eyear = str("%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
if ( longitude and latitude ):
|
||||
evt = EventType(event.get_type())
|
||||
eyear = str(
|
||||
"%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
if longitude and latitude:
|
||||
self._append_to_places_list(descr,
|
||||
evt, _nd.display(person),
|
||||
latitude, longitude,
|
||||
@ -467,13 +477,14 @@ class GeoClose(GeoGraphyView):
|
||||
role
|
||||
)
|
||||
else:
|
||||
self._append_to_places_without_coord( place.gramps_id, descr)
|
||||
self._append_to_places_without_coord(place.gramps_id, descr)
|
||||
|
||||
sort1 = sorted(self.place_list, key=operator.itemgetter(6))
|
||||
self.draw(None, sort1, color, reference)
|
||||
# merge with the last results
|
||||
merge_list = []
|
||||
for the_list in self.sort, sort1 : merge_list += the_list
|
||||
for the_list in self.sort, sort1:
|
||||
merge_list += the_list
|
||||
self.sort = sorted(merge_list, key=operator.itemgetter(6))
|
||||
|
||||
def bubble_message(self, event, lat, lon, marks):
|
||||
@ -489,7 +500,7 @@ class GeoClose(GeoGraphyView):
|
||||
prevmark = None
|
||||
for mark in marks:
|
||||
for plce in self.all_place_list:
|
||||
if (plce[3] == mark[3] and plce[4] == mark[4]):
|
||||
if plce[3] == mark[3] and plce[4] == mark[4]:
|
||||
if plce[10] in events:
|
||||
continue
|
||||
else:
|
||||
@ -507,18 +518,19 @@ class GeoClose(GeoGraphyView):
|
||||
date = displayer.display(evt.get_date_object())
|
||||
if date == "":
|
||||
date = _("Unknown")
|
||||
if ( plce[11] == EventRoleType.PRIMARY ):
|
||||
message = "(%s) %s : %s" % ( date, plce[2], plce[1] )
|
||||
elif ( plce[11] == EventRoleType.FAMILY ):
|
||||
(father_name, mother_name) = self._get_father_and_mother_name(evt)
|
||||
if plce[11] == EventRoleType.PRIMARY:
|
||||
message = "(%s) %s : %s" % (date, plce[2], plce[1])
|
||||
elif plce[11] == EventRoleType.FAMILY:
|
||||
(father_name,
|
||||
mother_name) = self._get_father_and_mother_name(evt)
|
||||
message = "(%s) %s : %s - %s" % (date, plce[7],
|
||||
father_name,
|
||||
mother_name )
|
||||
mother_name)
|
||||
else:
|
||||
descr = evt.get_description()
|
||||
if descr == "":
|
||||
descr = _('No description')
|
||||
message = "(%s) %s => %s" % ( date, plce[11], descr)
|
||||
message = "(%s) %s => %s" % (date, plce[11], descr)
|
||||
prevmark = plce
|
||||
self.add_item = Gtk.MenuItem(label=message)
|
||||
add_item = self.add_item
|
||||
@ -551,8 +563,9 @@ class GeoClose(GeoGraphyView):
|
||||
add_item = Gtk.MenuItem()
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
add_item = Gtk.MenuItem(label=_("Choose and bookmark the new reference person"))
|
||||
add_item.connect("activate", self.selectPerson)
|
||||
add_item = Gtk.MenuItem(
|
||||
label=_("Choose and bookmark the new reference person"))
|
||||
add_item.connect("activate", self.select_person)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
return
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -28,12 +28,9 @@ Geography for events
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
import sys
|
||||
import operator
|
||||
from gi.repository import Gdk
|
||||
KEY_TAB = Gdk.KEY_Tab
|
||||
import socket
|
||||
from gi.repository import Gtk
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -57,11 +54,6 @@ from gramps.gen.datehandler import displayer
|
||||
from gramps.gen.display.name import displayer as _nd
|
||||
from gramps.gen.display.place import displayer as _pd
|
||||
from gramps.gen.utils.place import conv_lat_lon
|
||||
from gramps.gui.views.pageview import PageView
|
||||
from gramps.gui.editors import EditPlace
|
||||
from gramps.gui.selectors.selectplace import SelectPlace
|
||||
from gramps.gui.filters.sidebar import EventSidebarFilter
|
||||
from gramps.gui.views.navigationview import NavigationView
|
||||
from gramps.gui.views.bookmarks import EventBookmarks
|
||||
from gramps.plugins.lib.maps.geography import GeoGraphyView
|
||||
from gramps.gui.utils import ProgressMeter
|
||||
@ -106,6 +98,10 @@ _UI_DEF = '''\
|
||||
</ui>
|
||||
'''
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=maybe-no-member
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GeoView
|
||||
@ -136,6 +132,7 @@ class GeoEvents(GeoGraphyView):
|
||||
self.additional_uis.append(self.additional_ui())
|
||||
self.no_show_places_in_status_bar = False
|
||||
self.show_all = False
|
||||
self.cal = None
|
||||
|
||||
def get_title(self):
|
||||
"""
|
||||
@ -196,7 +193,7 @@ class GeoEvents(GeoGraphyView):
|
||||
else:
|
||||
self._createmap(None)
|
||||
|
||||
def _createmap_for_one_event(self,event):
|
||||
def _createmap_for_one_event(self, event):
|
||||
"""
|
||||
Create all markers for each people's event in the database which has
|
||||
a lat/lon.
|
||||
@ -204,7 +201,7 @@ class GeoEvents(GeoGraphyView):
|
||||
dbstate = self.dbstate
|
||||
if self.nbplaces >= self._config.get("geography.max_places"):
|
||||
return
|
||||
descr = descr2 = ""
|
||||
descr1 = descr2 = ""
|
||||
if event:
|
||||
place_handle = event.get_place_handle()
|
||||
eventyear = event.get_date_object().to_calendar(self.cal).get_year()
|
||||
@ -220,7 +217,7 @@ class GeoEvents(GeoGraphyView):
|
||||
# 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 ):
|
||||
if longitude and latitude:
|
||||
person_list = [
|
||||
dbstate.db.get_person_from_handle(ref_handle)
|
||||
for (ref_type, ref_handle) in
|
||||
@ -232,8 +229,8 @@ class GeoEvents(GeoGraphyView):
|
||||
if descr2 == "":
|
||||
descr2 = ("%s") % _nd.display(person)
|
||||
else:
|
||||
descr2 = ("%s - %s") % ( descr2,
|
||||
_nd.display(person))
|
||||
descr2 = ("%s - %s") % (descr2,
|
||||
_nd.display(person))
|
||||
else:
|
||||
# family list ?
|
||||
family_list = [
|
||||
@ -247,13 +244,15 @@ class GeoEvents(GeoGraphyView):
|
||||
father = mother = None
|
||||
hdle = family.get_father_handle()
|
||||
if hdle:
|
||||
father = dbstate.db.get_person_from_handle(hdle)
|
||||
father = dbstate.db.get_person_from_handle(
|
||||
hdle)
|
||||
hdle = family.get_mother_handle()
|
||||
if hdle:
|
||||
mother = dbstate.db.get_person_from_handle(hdle)
|
||||
mother = dbstate.db.get_person_from_handle(
|
||||
hdle)
|
||||
descr2 = ("%(father)s - %(mother)s") % {
|
||||
'father': _nd.display(father) if father is not None else "?",
|
||||
'mother': _nd.display(mother) if mother is not None else "?"
|
||||
'father': _nd.display(father) if father is not None else "?",
|
||||
'mother': _nd.display(mother) if mother is not None else "?"
|
||||
}
|
||||
else:
|
||||
descr2 = _("incomplete or unreferenced event ?")
|
||||
@ -269,7 +268,7 @@ class GeoEvents(GeoGraphyView):
|
||||
None
|
||||
)
|
||||
|
||||
def _createmap(self,obj):
|
||||
def _createmap(self, obj):
|
||||
"""
|
||||
Create all markers for each people's event in the database which has
|
||||
a lat/lon.
|
||||
@ -283,8 +282,6 @@ class GeoEvents(GeoGraphyView):
|
||||
self.maxyear = 0
|
||||
self.nbmarkers = 0
|
||||
self.nbplaces = 0
|
||||
latitude = ""
|
||||
longitude = ""
|
||||
self.without = 0
|
||||
self.cal = config.get('preferences.calendar-format-report')
|
||||
self.no_show_places_in_status_bar = False
|
||||
@ -317,7 +314,7 @@ class GeoEvents(GeoGraphyView):
|
||||
self.sort = sorted(self.place_list,
|
||||
key=operator.itemgetter(3, 4, 6)
|
||||
)
|
||||
if self.nbmarkers > 500 : # performance issue. Is it the good value ?
|
||||
if self.nbmarkers > 500: # performance issue. Is it the good value ?
|
||||
self.no_show_places_in_status_bar = True
|
||||
self._create_markers()
|
||||
|
||||
@ -362,7 +359,7 @@ class GeoEvents(GeoGraphyView):
|
||||
evt = self.dbstate.db.get_event_from_gramps_id(mark[10])
|
||||
# format the date as described in preferences.
|
||||
date = displayer.display(evt.get_date_object())
|
||||
message = "(%s) %s : %s" % (date, EventType( mark[7] ), mark[5] )
|
||||
message = "(%s) %s : %s" % (date, EventType(mark[7]), mark[5])
|
||||
prevmark = mark
|
||||
add_item = Gtk.MenuItem(label=message)
|
||||
add_item.show()
|
||||
@ -398,7 +395,7 @@ class GeoEvents(GeoGraphyView):
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
add_item = Gtk.MenuItem(label=_("Show all events"))
|
||||
add_item.connect("activate", self.show_all_events, event, lat , lon)
|
||||
add_item.connect("activate", self.show_all_events, event, lat, lon)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
add_item = Gtk.MenuItem(label=_("Centering on Place"))
|
||||
@ -415,7 +412,8 @@ class GeoEvents(GeoGraphyView):
|
||||
oldplace = mark[0]
|
||||
modify = Gtk.MenuItem(label=mark[0])
|
||||
modify.show()
|
||||
modify.connect("activate", self.goto_place, float(mark[3]), float(mark[4]))
|
||||
modify.connect("activate", self.goto_place,
|
||||
float(mark[3]), float(mark[4]))
|
||||
itemoption.append(modify)
|
||||
|
||||
def goto_place(self, obj, lat, lon):
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -32,7 +32,7 @@ from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
import operator
|
||||
from gi.repository import Gtk
|
||||
from math import *
|
||||
from math import hypot
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -103,6 +103,10 @@ _UI_DEF = '''\
|
||||
</ui>
|
||||
'''
|
||||
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=unused-variable
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GeoView
|
||||
@ -135,10 +139,10 @@ class GeoFamClose(GeoGraphyView):
|
||||
)
|
||||
|
||||
def __init__(self, pdata, dbstate, uistate, nav_group=0):
|
||||
GeoGraphyView.__init__(self, _("Have these two families been able to meet?"),
|
||||
pdata, dbstate, uistate,
|
||||
FamilyBookmarks,
|
||||
nav_group)
|
||||
GeoGraphyView.__init__(self,
|
||||
_("Have these two families been able to meet?"),
|
||||
pdata, dbstate, uistate,
|
||||
FamilyBookmarks, nav_group)
|
||||
self.dbstate = dbstate
|
||||
self.uistate = uistate
|
||||
self.place_list = []
|
||||
@ -161,6 +165,7 @@ class GeoFamClose(GeoGraphyView):
|
||||
self.place_list_ref = []
|
||||
self.cal = config.get('preferences.calendar-format-report')
|
||||
self.no_show_places_in_status_bar = False
|
||||
self.config_meeting_slider = None
|
||||
|
||||
def get_title(self):
|
||||
"""
|
||||
@ -195,30 +200,33 @@ class GeoFamClose(GeoGraphyView):
|
||||
"""
|
||||
return 'Family'
|
||||
|
||||
def family_label(self,family):
|
||||
def family_label(self, family):
|
||||
"""
|
||||
Create the family label depending on existence of father and mother
|
||||
"""
|
||||
if family is None:
|
||||
return "Unknown"
|
||||
f = m = None
|
||||
father = mother = None
|
||||
hdl = family.get_father_handle()
|
||||
if hdl:
|
||||
f = self.dbstate.db.get_person_from_handle(hdl)
|
||||
father = self.dbstate.db.get_person_from_handle(hdl)
|
||||
hdl = family.get_mother_handle()
|
||||
if hdl:
|
||||
m = self.dbstate.db.get_person_from_handle(hdl)
|
||||
if f and m:
|
||||
mother = self.dbstate.db.get_person_from_handle(hdl)
|
||||
if father and mother:
|
||||
label = _("%(gramps_id)s : %(father)s and %(mother)s") % {
|
||||
'father' : _nd.display(f),
|
||||
'mother' : _nd.display(m),
|
||||
'father' : _nd.display(father),
|
||||
'mother' : _nd.display(mother),
|
||||
'gramps_id' : family.gramps_id,
|
||||
}
|
||||
elif f:
|
||||
elif father:
|
||||
label = "%(gramps_id)s : %(father)s" % {
|
||||
'father' : _nd.display(f),
|
||||
'father' : _nd.display(father),
|
||||
'gramps_id' : family.gramps_id,
|
||||
}
|
||||
elif m:
|
||||
elif mother:
|
||||
label = "%(gramps_id)s : %(mother)s" % {
|
||||
'mother' : _nd.display(m),
|
||||
'mother' : _nd.display(mother),
|
||||
'gramps_id' : family.gramps_id,
|
||||
}
|
||||
else:
|
||||
@ -245,29 +253,35 @@ class GeoFamClose(GeoGraphyView):
|
||||
self.lifeway_layer.clear_ways()
|
||||
self.message_layer.clear_messages()
|
||||
active = self.get_active()
|
||||
f1 = None
|
||||
family = None
|
||||
if active:
|
||||
f1 = self.dbstate.db.get_family_from_handle(active)
|
||||
family = self.dbstate.db.get_family_from_handle(active)
|
||||
color = self._config.get('geography.color2')
|
||||
self._createmap(f1, color, self.place_list_active, False)
|
||||
self._createmap(family, color, self.place_list_active, False)
|
||||
if self.reffamily:
|
||||
color = self._config.get('geography.color1')
|
||||
self._createmap(self.reffamily, color, self.place_list_ref, True)
|
||||
self.message_layer.add_message(_("Family reference : %s" % self.family_label(self.reffamily)))
|
||||
if f1:
|
||||
self.message_layer.add_message(_("The other family : %s" % self.family_label(f1)))
|
||||
self.message_layer.add_message(
|
||||
_("Family reference : %s" % self.family_label(self.reffamily)))
|
||||
if family:
|
||||
self.message_layer.add_message(
|
||||
_("The other family : %s" % self.family_label(
|
||||
family)))
|
||||
else:
|
||||
self.message_layer.add_message(_("The other family : %s" % _("Unknown")))
|
||||
self.message_layer.add_message(
|
||||
_("The other family : %s" % _("Unknown")))
|
||||
if self.reffamily_bookmark is None:
|
||||
self.reffamily_bookmark = self.reffamily.get_handle()
|
||||
self.add_bookmark_from_popup(None, self.reffamily_bookmark)
|
||||
else:
|
||||
self.message_layer.add_message(_("You must choose one reference family."))
|
||||
self.message_layer.add_message(_("Go to the family view and select "
|
||||
"the families you want to compare. "
|
||||
"Return to this view and use the history."))
|
||||
if f1 is not None:
|
||||
self._possible_family_meeting(self.reffamily, f1)
|
||||
self.message_layer.add_message(
|
||||
_("You must choose one reference family."))
|
||||
self.message_layer.add_message(
|
||||
_("Go to the family view and select "
|
||||
"the families you want to compare. "
|
||||
"Return to this view and use the history."))
|
||||
if family is not None:
|
||||
self._possible_family_meeting(self.reffamily, family)
|
||||
self.uistate.modify_statusbar(self.dbstate)
|
||||
|
||||
def define_actions(self):
|
||||
@ -279,13 +293,13 @@ class GeoFamClose(GeoGraphyView):
|
||||
self.define_print_actions()
|
||||
self.ref_family = Gtk.ActionGroup(self.title + '/Selection')
|
||||
self.ref_family.add_actions([
|
||||
('RefFamily', 'gramps-family', _('reference _Family'), None ,
|
||||
('RefFamily', 'gramps-family', _('reference _Family'), None,
|
||||
_("Select the family which is the reference for life ways"),
|
||||
self.selectFamily),
|
||||
self.select_family),
|
||||
])
|
||||
self._add_action_group(self.ref_family)
|
||||
|
||||
def selectFamily(self, obj):
|
||||
def select_family(self, obj):
|
||||
"""
|
||||
Open a selection box to choose the ref family.
|
||||
"""
|
||||
@ -293,8 +307,8 @@ class GeoFamClose(GeoGraphyView):
|
||||
self.skip_list = []
|
||||
self.ref_family = None
|
||||
self.reffamily_bookmark = None
|
||||
selectFamily = SelectorFactory('Family')
|
||||
sel = selectFamily(self.dbstate, self.uistate)
|
||||
select_family = SelectorFactory('Family')
|
||||
sel = select_family(self.dbstate, self.uistate)
|
||||
self.reffamily = sel.run()
|
||||
self.goto_handle(None)
|
||||
|
||||
@ -332,18 +346,19 @@ class GeoFamClose(GeoGraphyView):
|
||||
self.lifeway_layer.add_way(points, color)
|
||||
if reference:
|
||||
self.lifeway_layer.add_way_ref(points, 'orange',
|
||||
float(self._config.get("geography.maximum_meeting_zone")) / 10)
|
||||
float(
|
||||
self._config.get("geography.maximum_meeting_zone")) / 10)
|
||||
return False
|
||||
|
||||
def _place_list_for_person(self, person):
|
||||
"""
|
||||
get place list for one person
|
||||
"""
|
||||
list = []
|
||||
place_list = []
|
||||
for event in self.sort:
|
||||
if ( event[1] == _nd.display(person)):
|
||||
list.append(event)
|
||||
return list
|
||||
if event[1] == _nd.display(person):
|
||||
place_list.append(event)
|
||||
return place_list
|
||||
|
||||
def possible_meeting(self, ref_person, person):
|
||||
"""
|
||||
@ -370,11 +385,13 @@ class GeoFamClose(GeoGraphyView):
|
||||
"""
|
||||
dbstate = self.dbstate
|
||||
try:
|
||||
person = dbstate.db.get_person_from_handle(family.get_father_handle())
|
||||
person = dbstate.db.get_person_from_handle(
|
||||
family.get_father_handle())
|
||||
except:
|
||||
return
|
||||
if person is None: # family without father ?
|
||||
person = dbstate.db.get_person_from_handle(family.get_mother_handle())
|
||||
person = dbstate.db.get_person_from_handle(
|
||||
family.get_mother_handle())
|
||||
if person is not None:
|
||||
family_list = person.get_family_handle_list()
|
||||
if len(family_list) > 0:
|
||||
@ -408,7 +425,8 @@ class GeoFamClose(GeoGraphyView):
|
||||
dbstate = self.dbstate
|
||||
person = None
|
||||
try:
|
||||
person = dbstate.db.get_person_from_handle(reference.get_father_handle())
|
||||
person = dbstate.db.get_person_from_handle(
|
||||
reference.get_father_handle())
|
||||
except:
|
||||
return
|
||||
if person is None: # family without father ?
|
||||
@ -464,8 +482,8 @@ class GeoFamClose(GeoGraphyView):
|
||||
except:
|
||||
continue
|
||||
eyear = str("%04d" % date.get_year()) + \
|
||||
str("%02d" % date.get_month()) + \
|
||||
str("%02d" % date.get_day())
|
||||
str("%02d" % date.get_month()) + \
|
||||
str("%02d" % date.get_day())
|
||||
place_handle = event.get_place_handle()
|
||||
if place_handle:
|
||||
place = dbstate.db.get_place_from_handle(place_handle)
|
||||
@ -482,7 +500,7 @@ class GeoFamClose(GeoGraphyView):
|
||||
# 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 ):
|
||||
if longitude and latitude:
|
||||
self._append_to_places_list(descr, evt,
|
||||
_nd.display(person),
|
||||
latitude, longitude,
|
||||
@ -513,7 +531,7 @@ class GeoFamClose(GeoGraphyView):
|
||||
if handle:
|
||||
mother = dbstate.db.get_person_from_handle(handle)
|
||||
if mother:
|
||||
descr1 = "%s%s" % ( descr1, _nd.display(mother))
|
||||
descr1 = "%s%s" % (descr1, _nd.display(mother))
|
||||
for event_ref in family.get_event_ref_list():
|
||||
if event_ref:
|
||||
event = dbstate.db.get_event_from_handle(
|
||||
@ -532,10 +550,11 @@ class GeoFamClose(GeoGraphyView):
|
||||
descr = _pd.display(dbstate.db, place)
|
||||
evt = EventType(
|
||||
event.get_type())
|
||||
eyear = str("%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
if ( longitude and latitude ):
|
||||
eyear = str(
|
||||
"%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
if longitude and latitude:
|
||||
self._append_to_places_list(descr,
|
||||
evt, _nd.display(person),
|
||||
latitude, longitude,
|
||||
@ -547,13 +566,14 @@ class GeoFamClose(GeoGraphyView):
|
||||
role
|
||||
)
|
||||
else:
|
||||
self._append_to_places_without_coord( place.gramps_id, descr)
|
||||
self._append_to_places_without_coord(place.gramps_id, descr)
|
||||
|
||||
sort1 = sorted(self.place_list, key=operator.itemgetter(6))
|
||||
self.draw(None, sort1, color, reference)
|
||||
# merge with the last results
|
||||
merge_list = []
|
||||
for the_list in self.sort, sort1 : merge_list += the_list
|
||||
for the_list in self.sort, sort1:
|
||||
merge_list += the_list
|
||||
self.sort = sorted(merge_list, key=operator.itemgetter(6))
|
||||
|
||||
def _createmap_for_one_family(self, family, color, place_list, reference):
|
||||
@ -563,7 +583,8 @@ class GeoFamClose(GeoGraphyView):
|
||||
dbstate = self.dbstate
|
||||
person = None
|
||||
try:
|
||||
person = dbstate.db.get_person_from_handle(family.get_father_handle())
|
||||
person = dbstate.db.get_person_from_handle(
|
||||
family.get_father_handle())
|
||||
except:
|
||||
return
|
||||
family_id = family.gramps_id
|
||||
@ -585,16 +606,20 @@ class GeoFamClose(GeoGraphyView):
|
||||
if handle:
|
||||
father = dbstate.db.get_person_from_handle(handle)
|
||||
if father:
|
||||
comment = _("Father : %(id)s : %(name)s") % {'id': father.gramps_id,
|
||||
'name': _nd.display(father)}
|
||||
self._createmap_for_one_person(father, color, place_list, reference)
|
||||
comment = _("Father : %(id)s : %(name)s") % {
|
||||
'id': father.gramps_id,
|
||||
'name': _nd.display(father)}
|
||||
self._createmap_for_one_person(father, color,
|
||||
place_list, reference)
|
||||
handle = fam.get_mother_handle()
|
||||
if handle:
|
||||
mother = dbstate.db.get_person_from_handle(handle)
|
||||
if mother:
|
||||
comment = _("Mother : %(id)s : %(name)s") % {'id': mother.gramps_id,
|
||||
'name': _nd.display(mother)}
|
||||
self._createmap_for_one_person(mother, color, place_list, reference)
|
||||
comment = _("Mother : %(id)s : %(name)s") % {
|
||||
'id': mother.gramps_id,
|
||||
'name': _nd.display(mother)}
|
||||
self._createmap_for_one_person(mother, color,
|
||||
place_list, reference)
|
||||
index = 0
|
||||
child_ref_list = fam.get_child_ref_list()
|
||||
if child_ref_list:
|
||||
@ -608,13 +633,16 @@ class GeoFamClose(GeoGraphyView):
|
||||
'index' : index,
|
||||
'name' : _nd.display(child)
|
||||
}
|
||||
self._createmap_for_one_person(child, color, place_list, reference)
|
||||
self._createmap_for_one_person(child, color,
|
||||
place_list,
|
||||
reference)
|
||||
else:
|
||||
comment = _("Person : %(id)s %(name)s has no family.") % {
|
||||
'id' : person.gramps_id ,
|
||||
'id' : person.gramps_id,
|
||||
'name' : _nd.display(person)
|
||||
}
|
||||
self._createmap_for_one_person(person, color, place_list, reference)
|
||||
self._createmap_for_one_person(person, color,
|
||||
place_list, reference)
|
||||
|
||||
def _createmap(self, family_x, color, place_list, reference):
|
||||
"""
|
||||
@ -646,7 +674,8 @@ class GeoFamClose(GeoGraphyView):
|
||||
for family_hdl in family_list:
|
||||
family = self.dbstate.db.get_family_from_handle(family_hdl)
|
||||
if family is not None:
|
||||
self._createmap_for_one_family(family, color, place_list, reference)
|
||||
self._createmap_for_one_family(family, color,
|
||||
place_list, reference)
|
||||
else:
|
||||
self._createmap_for_one_family(family, color, place_list, reference)
|
||||
#self._create_markers()
|
||||
@ -664,7 +693,7 @@ class GeoFamClose(GeoGraphyView):
|
||||
prevmark = None
|
||||
for mark in marks:
|
||||
for plce in self.all_place_list:
|
||||
if (plce[3] == mark[3] and plce[4] == mark[4]):
|
||||
if plce[3] == mark[3] and plce[4] == mark[4]:
|
||||
if plce[10] in events:
|
||||
continue
|
||||
else:
|
||||
@ -682,18 +711,19 @@ class GeoFamClose(GeoGraphyView):
|
||||
date = displayer.display(evt.get_date_object())
|
||||
if date == "":
|
||||
date = _("Unknown")
|
||||
if ( plce[11] == EventRoleType.PRIMARY ):
|
||||
message = "(%s) %s : %s" % ( date, plce[2], plce[1] )
|
||||
elif ( plce[11] == EventRoleType.FAMILY ):
|
||||
(father_name, mother_name) = self._get_father_and_mother_name(evt)
|
||||
if plce[11] == EventRoleType.PRIMARY:
|
||||
message = "(%s) %s : %s" % (date, plce[2], plce[1])
|
||||
elif plce[11] == EventRoleType.FAMILY:
|
||||
(father_name,
|
||||
mother_name) = self._get_father_and_mother_name(evt)
|
||||
message = "(%s) %s : %s - %s" % (date, plce[7],
|
||||
father_name,
|
||||
mother_name )
|
||||
mother_name)
|
||||
else:
|
||||
descr = evt.get_description()
|
||||
if descr == "":
|
||||
descr = _('No description')
|
||||
message = "(%s) %s => %s" % ( date, plce[11], descr)
|
||||
message = "(%s) %s => %s" % (date, plce[11], descr)
|
||||
prevmark = plce
|
||||
add_item = Gtk.MenuItem(label=message)
|
||||
add_item.show()
|
||||
@ -725,8 +755,9 @@ class GeoFamClose(GeoGraphyView):
|
||||
add_item = Gtk.MenuItem()
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
add_item = Gtk.MenuItem(label=_("Choose and bookmark the new reference family"))
|
||||
add_item.connect("activate", self.selectFamily)
|
||||
add_item = Gtk.MenuItem(
|
||||
label=_("Choose and bookmark the new reference family"))
|
||||
add_item.connect("activate", self.select_family)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
return
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -28,12 +28,9 @@ Geography for one family
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
import sys
|
||||
import operator
|
||||
from gi.repository import Gdk
|
||||
KEY_TAB = Gdk.KEY_Tab
|
||||
import socket
|
||||
from gi.repository import Gtk
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -57,11 +54,6 @@ from gramps.gen.datehandler import displayer
|
||||
from gramps.gen.display.name import displayer as _nd
|
||||
from gramps.gen.display.place import displayer as _pd
|
||||
from gramps.gen.utils.place import conv_lat_lon
|
||||
from gramps.gui.views.pageview import PageView
|
||||
from gramps.gui.editors import EditPlace
|
||||
from gramps.gui.selectors.selectplace import SelectPlace
|
||||
from gramps.gui.filters.sidebar import FamilySidebarFilter
|
||||
from gramps.gui.views.navigationview import NavigationView
|
||||
from gramps.gui.views.bookmarks import FamilyBookmarks
|
||||
from gramps.plugins.lib.maps.geography import GeoGraphyView
|
||||
|
||||
@ -105,6 +97,10 @@ _UI_DEF = '''\
|
||||
</ui>
|
||||
'''
|
||||
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=unused-variable
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GeoView
|
||||
@ -112,7 +108,7 @@ _UI_DEF = '''\
|
||||
#-------------------------------------------------------------------------
|
||||
class GeoFamily(GeoGraphyView):
|
||||
"""
|
||||
The view used to render person map.
|
||||
The view used to render family map.
|
||||
"""
|
||||
|
||||
def __init__(self, pdata, dbstate, uistate, nav_group=0):
|
||||
@ -132,6 +128,7 @@ class GeoFamily(GeoGraphyView):
|
||||
self.sort = []
|
||||
self.additional_uis.append(self.additional_ui())
|
||||
self.no_show_places_in_status_bar = False
|
||||
self.cal = None
|
||||
|
||||
def get_title(self):
|
||||
"""
|
||||
@ -213,8 +210,9 @@ class GeoFamily(GeoGraphyView):
|
||||
# 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 ):
|
||||
if not self._present_in_places_list(2, str(descr1 + descr + str(evt))):
|
||||
if longitude and latitude:
|
||||
if not self._present_in_places_list(2,
|
||||
str(descr1 + descr + str(evt))):
|
||||
self._append_to_places_list(descr,
|
||||
str(descr1 + descr + str(evt)),
|
||||
_nd.display(person),
|
||||
@ -235,63 +233,74 @@ class GeoFamily(GeoGraphyView):
|
||||
if family is not None:
|
||||
for event_ref in family.get_event_ref_list():
|
||||
if event_ref:
|
||||
event = dbstate.db.get_event_from_handle(event_ref.ref)
|
||||
event = dbstate.db.get_event_from_handle(
|
||||
event_ref.ref)
|
||||
role = event_ref.get_role()
|
||||
if event.get_place_handle():
|
||||
place_handle = event.get_place_handle()
|
||||
if place_handle:
|
||||
place = dbstate.db.get_place_from_handle(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")
|
||||
(latitude,
|
||||
longitude) = conv_lat_lon(latitude,
|
||||
longitude,
|
||||
"D.D8")
|
||||
descr = _pd.display(dbstate.db, place)
|
||||
evt = EventType(event.get_type())
|
||||
(father_name, mother_name) = self._get_father_and_mother_name(event)
|
||||
descr1 = "%s : %s - " % ( evt, father_name )
|
||||
descr1 = "%s%s" % ( descr1, mother_name )
|
||||
(father_name,
|
||||
mother_name) = self._get_father_and_mother_name(event)
|
||||
descr1 = "%s : %s - " % (evt,
|
||||
father_name)
|
||||
descr1 = "%s%s" % (descr1, mother_name)
|
||||
eyear = event.get_date_object().to_calendar(self.cal).get_year()
|
||||
if ( longitude and latitude ):
|
||||
if not self._present_in_places_list(2, str(descr1 + descr + str(evt))):
|
||||
self._append_to_places_list(descr,
|
||||
str(descr1 + descr + str(evt)),
|
||||
_nd.display(person),
|
||||
latitude, longitude,
|
||||
role, eyear,
|
||||
event.get_type(),
|
||||
person.gramps_id,
|
||||
place.gramps_id,
|
||||
event.gramps_id,
|
||||
family.gramps_id
|
||||
)
|
||||
if longitude and latitude:
|
||||
if not self._present_in_places_list(
|
||||
2, str(descr1 + descr + str(evt))):
|
||||
self._append_to_places_list(
|
||||
descr,
|
||||
str(descr1 + descr + str(evt)),
|
||||
_nd.display(person),
|
||||
latitude, longitude,
|
||||
role, eyear,
|
||||
event.get_type(),
|
||||
person.gramps_id,
|
||||
place.gramps_id,
|
||||
event.gramps_id,
|
||||
family.gramps_id
|
||||
)
|
||||
else:
|
||||
self._append_to_places_without_coord( place.gramps_id, descr)
|
||||
self._append_to_places_without_coord(place.gramps_id, descr)
|
||||
|
||||
def family_label(self,family):
|
||||
def family_label(self, family):
|
||||
"""
|
||||
Create the family label depending on existence of the father and mother
|
||||
"""
|
||||
if family is None:
|
||||
return "Unknown"
|
||||
f = m = None
|
||||
father = mother = None
|
||||
hdl = family.get_father_handle()
|
||||
if hdl:
|
||||
f = self.dbstate.db.get_person_from_handle(hdl)
|
||||
father = self.dbstate.db.get_person_from_handle(hdl)
|
||||
hdl = family.get_mother_handle()
|
||||
if hdl:
|
||||
m = self.dbstate.db.get_person_from_handle(hdl)
|
||||
if f and m:
|
||||
mother = self.dbstate.db.get_person_from_handle(hdl)
|
||||
if father and mother:
|
||||
label = _("%(gramps_id)s : %(father)s and %(mother)s") % {
|
||||
'father' : _nd.display(f),
|
||||
'mother' : _nd.display(m),
|
||||
'father' : _nd.display(father),
|
||||
'mother' : _nd.display(mother),
|
||||
'gramps_id' : family.gramps_id,
|
||||
}
|
||||
elif f:
|
||||
elif father:
|
||||
label = "%(gramps_id)s : %(father)s" % {
|
||||
'father' : _nd.display(f),
|
||||
'father' : _nd.display(father),
|
||||
'gramps_id' : family.gramps_id,
|
||||
}
|
||||
elif m:
|
||||
elif mother:
|
||||
label = "%(gramps_id)s : %(mother)s" % {
|
||||
'mother' : _nd.display(m),
|
||||
'mother' : _nd.display(mother),
|
||||
'gramps_id' : family.gramps_id,
|
||||
}
|
||||
else:
|
||||
@ -306,10 +315,12 @@ class GeoFamily(GeoGraphyView):
|
||||
Create all markers for one family : all event's places with a lat/lon.
|
||||
"""
|
||||
dbstate = self.dbstate
|
||||
self.message_layer.add_message(_("Family places for %s") % self.family_label(family))
|
||||
self.message_layer.add_message(
|
||||
_("Family places for %s") % self.family_label(family))
|
||||
person = None
|
||||
if family:
|
||||
person = dbstate.db.get_person_from_handle(family.get_father_handle())
|
||||
person = dbstate.db.get_person_from_handle(
|
||||
family.get_father_handle())
|
||||
else:
|
||||
return
|
||||
family_id = family.gramps_id
|
||||
@ -331,16 +342,18 @@ class GeoFamily(GeoGraphyView):
|
||||
if handle:
|
||||
father = dbstate.db.get_person_from_handle(handle)
|
||||
if father:
|
||||
comment = _("Father : %(id)s : %(name)s") % {'id': father.gramps_id,
|
||||
'name': _nd.display(father) }
|
||||
comment = _("Father : %(id)s : %(name)s") % {
|
||||
'id': father.gramps_id,
|
||||
'name': _nd.display(father)}
|
||||
self._createpersonmarkers(dbstate, father,
|
||||
comment, family_id)
|
||||
handle = fam.get_mother_handle()
|
||||
if handle:
|
||||
mother = dbstate.db.get_person_from_handle(handle)
|
||||
if mother:
|
||||
comment = _("Mother : %(id)s : %(name)s") % {'id': mother.gramps_id,
|
||||
'name': _nd.display(mother) }
|
||||
comment = _("Mother : %(id)s : %(name)s") % {
|
||||
'id': mother.gramps_id,
|
||||
'name': _nd.display(mother)}
|
||||
self._createpersonmarkers(dbstate, mother,
|
||||
comment, family_id)
|
||||
index = 0
|
||||
@ -360,7 +373,7 @@ class GeoFamily(GeoGraphyView):
|
||||
comment, family_id)
|
||||
else:
|
||||
comment = _("Person : %(id)s %(name)s has no family.") % {
|
||||
'id' : person.gramps_id ,
|
||||
'id' : person.gramps_id,
|
||||
'name' : _nd.display(person)
|
||||
}
|
||||
self._createpersonmarkers(dbstate, person, comment, family_id)
|
||||
@ -399,6 +412,9 @@ class GeoFamily(GeoGraphyView):
|
||||
self._create_markers()
|
||||
|
||||
def add_event_bubble_message(self, event, lat, lon, mark, menu):
|
||||
"""
|
||||
Add an item to the popup menu.
|
||||
"""
|
||||
self.itemoption = Gtk.Menu()
|
||||
itemoption = self.itemoption
|
||||
itemoption.show()
|
||||
@ -421,6 +437,9 @@ class GeoFamily(GeoGraphyView):
|
||||
itemoption.append(center)
|
||||
|
||||
def bubble_message(self, event, lat, lon, marks):
|
||||
"""
|
||||
Add the popup menu.
|
||||
"""
|
||||
self.menu = Gtk.Menu()
|
||||
menu = self.menu
|
||||
menu.set_title("family")
|
||||
@ -444,18 +463,20 @@ class GeoFamily(GeoGraphyView):
|
||||
date = displayer.display(evt.get_date_object())
|
||||
if date == "":
|
||||
date = _("Unknown")
|
||||
if ( mark[5] == EventRoleType.PRIMARY ):
|
||||
message = "(%s) %s : %s" % ( date, mark[7], mark[1] )
|
||||
elif ( mark[5] == EventRoleType.FAMILY ):
|
||||
if mark[5] == EventRoleType.PRIMARY:
|
||||
message = "(%s) %s : %s" % (date, mark[7], mark[1])
|
||||
elif mark[5] == EventRoleType.FAMILY:
|
||||
evt = self.dbstate.db.get_event_from_gramps_id(mark[10])
|
||||
(father_name, mother_name) = self._get_father_and_mother_name(evt)
|
||||
message = "(%s) %s : %s - %s" % ( date, mark[7], father_name, mother_name )
|
||||
(father_name,
|
||||
mother_name) = self._get_father_and_mother_name(evt)
|
||||
message = "(%s) %s : %s - %s" % (date, mark[7],
|
||||
father_name, mother_name)
|
||||
else:
|
||||
evt = self.dbstate.db.get_event_from_gramps_id(mark[10])
|
||||
descr = evt.get_description()
|
||||
if descr == "":
|
||||
descr = _('No description')
|
||||
message = "(%s) %s => %s" % ( date, mark[5], descr)
|
||||
message = "(%s) %s => %s" % (date, mark[5], descr)
|
||||
prevmark = mark
|
||||
add_item = Gtk.MenuItem(label=message)
|
||||
add_item.show()
|
||||
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -25,9 +25,15 @@
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
MODULE_VERSION="5.0"
|
||||
# pylint: disable=bad-whitespace
|
||||
# pylint: disable=bad-whitespace
|
||||
|
||||
MODULE_VERSION = "5.0"
|
||||
|
||||
from gi import Repository
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
from gramps.gen.plug._pluginreg import register, VIEW, STABLE #, END, START
|
||||
_ = glocale.translation.gettext
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -40,9 +46,9 @@ _LOG = logging.getLogger("Geography")
|
||||
# Attempting to import OsmGpsMap gives an error dialog if OsmGpsMap is not
|
||||
# available so test first and log just a warning to the console instead.
|
||||
OSMGPSMAP = False
|
||||
repository = Repository.get_default()
|
||||
if repository.enumerate_versions("OsmGpsMap"):
|
||||
try :
|
||||
REPOSITORY = Repository.get_default()
|
||||
if REPOSITORY.enumerate_versions("OsmGpsMap"):
|
||||
try:
|
||||
# current osmgpsmap support GTK3
|
||||
import gi
|
||||
gi.require_version('OsmGpsMap', '1.0')
|
||||
@ -58,22 +64,22 @@ if not OSMGPSMAP:
|
||||
if has_display():
|
||||
from gramps.gui.dialog import MessageHideDialog
|
||||
from gramps.gen.const import URL_WIKISTRING
|
||||
osmgps_dict = { 'gramps_wiki_build_osmgps_url' :
|
||||
OSMGPS_DICT = {'gramps_wiki_build_osmgps_url' :
|
||||
URL_WIKISTRING +
|
||||
"GEPS_029:_GTK3-GObject_introspection"
|
||||
"_Conversion#OsmGpsMap_for_Geography" }
|
||||
title = _("OsmGpsMap module not loaded.")
|
||||
message = _("Geography functionality will not be available.\n"
|
||||
"_Conversion#OsmGpsMap_for_Geography"}
|
||||
TITLE = _("OsmGpsMap module not loaded.")
|
||||
MESSAGE = _("Geography functionality will not be available.\n"
|
||||
"To build it for Gramps see "
|
||||
"%(gramps_wiki_build_osmgps_url)s") % osmgps_dict
|
||||
MessageHideDialog(title, message, 'interface.ignore-osmgpsmap')
|
||||
"%(gramps_wiki_build_osmgps_url)s") % OSMGPS_DICT
|
||||
MessageHideDialog(TITLE, MESSAGE, 'interface.ignore-osmgpsmap')
|
||||
else:
|
||||
# Load the view only if osmgpsmap library is present.
|
||||
register(VIEW,
|
||||
id = 'geo1',
|
||||
name = _("All known places for one Person"),
|
||||
description = _("A view showing the places visited by "
|
||||
"one person during his life."),
|
||||
id = 'geo1',
|
||||
name = _("All known places for one Person"),
|
||||
description = _("A view showing the places visited by "
|
||||
"one person during his life."),
|
||||
version = '1.0',
|
||||
gramps_target_version = MODULE_VERSION,
|
||||
status = STABLE,
|
||||
@ -87,10 +93,10 @@ else:
|
||||
)
|
||||
|
||||
register(VIEW,
|
||||
id = 'geo2',
|
||||
name = _("All known places for one Family"),
|
||||
description = _("A view showing the places visited by "
|
||||
"one family during all their life."),
|
||||
id = 'geo2',
|
||||
name = _("All known places for one Family"),
|
||||
description = _("A view showing the places visited by "
|
||||
"one family during all their life."),
|
||||
version = '1.0',
|
||||
gramps_target_version = MODULE_VERSION,
|
||||
status = STABLE,
|
||||
@ -104,12 +110,14 @@ else:
|
||||
)
|
||||
|
||||
register(VIEW,
|
||||
id = 'geo3',
|
||||
name = _("Every residence or move for a person and any descendants"),
|
||||
description = _("A view showing all the places visited by "
|
||||
"all persons during their life."
|
||||
"\nThis is for a person and any descendant."
|
||||
"\nYou can see the dates corresponding to the period."),
|
||||
id = 'geo3',
|
||||
name = _("Every residence or move for a person "
|
||||
"and any descendants"),
|
||||
description = _("A view showing all the places visited by "
|
||||
"all persons during their life."
|
||||
"\nThis is for a person and any descendant."
|
||||
"\nYou can see the dates corresponding to "
|
||||
"the period."),
|
||||
version = '1.0',
|
||||
gramps_target_version = MODULE_VERSION,
|
||||
status = STABLE,
|
||||
@ -123,11 +131,11 @@ else:
|
||||
)
|
||||
|
||||
register(VIEW,
|
||||
id = 'geo4',
|
||||
name = _("Have these two families been able to meet?"),
|
||||
description = _("A view showing the places visited by "
|
||||
"all family's members during their life: "
|
||||
"have these two people been able to meet?"),
|
||||
id = 'geo4',
|
||||
name = _("Have these two families been able to meet?"),
|
||||
description = _("A view showing the places visited by "
|
||||
"all family's members during their life: "
|
||||
"have these two people been able to meet?"),
|
||||
version = '1.0.1',
|
||||
gramps_target_version = MODULE_VERSION,
|
||||
status = STABLE,
|
||||
@ -141,11 +149,11 @@ else:
|
||||
)
|
||||
|
||||
register(VIEW,
|
||||
id = 'geo5',
|
||||
name = _("Have they been able to meet?"),
|
||||
description = _("A view showing the places visited by "
|
||||
"two persons during their life: "
|
||||
"have these two people been able to meet?"),
|
||||
id = 'geo5',
|
||||
name = _("Have they been able to meet?"),
|
||||
description = _("A view showing the places visited by "
|
||||
"two persons during their life: "
|
||||
"have these two people been able to meet?"),
|
||||
version = '1.0.1',
|
||||
gramps_target_version = MODULE_VERSION,
|
||||
status = STABLE,
|
||||
@ -159,9 +167,9 @@ else:
|
||||
)
|
||||
|
||||
register(VIEW,
|
||||
id = 'geo6',
|
||||
name = _("All known Places"),
|
||||
description = _("A view showing all places of the database."),
|
||||
id = 'geo6',
|
||||
name = _("All known Places"),
|
||||
description = _("A view showing all places of the database."),
|
||||
version = '1.0',
|
||||
gramps_target_version = MODULE_VERSION,
|
||||
status = STABLE,
|
||||
@ -175,10 +183,10 @@ else:
|
||||
)
|
||||
|
||||
register(VIEW,
|
||||
id = 'geo7',
|
||||
name = _("All places related to Events"),
|
||||
description = _("A view showing all the event "
|
||||
"places of the database."),
|
||||
id = 'geo7',
|
||||
name = _("All places related to Events"),
|
||||
description = _("A view showing all the event "
|
||||
"places of the database."),
|
||||
version = '1.0',
|
||||
gramps_target_version = MODULE_VERSION,
|
||||
status = STABLE,
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -33,10 +33,6 @@ _ = glocale.translation.gettext
|
||||
import operator
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import Gdk
|
||||
from gi.repository import GObject
|
||||
import time
|
||||
import threading
|
||||
from math import *
|
||||
from gi.repository import GLib
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -58,11 +54,9 @@ from gramps.gen.datehandler import displayer
|
||||
from gramps.gen.display.name import displayer as _nd
|
||||
from gramps.gen.display.place import displayer as _pd
|
||||
from gramps.gen.utils.place import conv_lat_lon
|
||||
from gramps.gui.views.navigationview import NavigationView
|
||||
from gramps.gui.views.bookmarks import PersonBookmarks
|
||||
from gramps.plugins.lib.maps import constants
|
||||
from gramps.plugins.lib.maps.geography import GeoGraphyView
|
||||
from gramps.gui.selectors import SelectorFactory
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -107,6 +101,11 @@ _UI_DEF = '''\
|
||||
</ui>
|
||||
'''
|
||||
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=unused-variable
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GeoView : GeoMoves
|
||||
@ -114,7 +113,8 @@ _UI_DEF = '''\
|
||||
#-------------------------------------------------------------------------
|
||||
class GeoMoves(GeoGraphyView):
|
||||
"""
|
||||
The view used to render all places visited by one person and all his descendants.
|
||||
The view used to render all places visited by one person and all
|
||||
his descendants.
|
||||
"""
|
||||
CONFIGSETTINGS = (
|
||||
('geography.path', constants.GEOGRAPHY_PATH),
|
||||
@ -164,6 +164,7 @@ class GeoMoves(GeoGraphyView):
|
||||
self.markers_by_level = dict()
|
||||
self.count = dict()
|
||||
self.no_show_places_in_status_bar = False
|
||||
self.person_list = []
|
||||
|
||||
def get_title(self):
|
||||
"""
|
||||
@ -213,8 +214,8 @@ class GeoMoves(GeoGraphyView):
|
||||
self.date_layer.clear_dates()
|
||||
active = self.get_active()
|
||||
if active:
|
||||
p1 = self.dbstate.db.get_person_from_handle(active)
|
||||
self._createmap(p1)
|
||||
person = self.dbstate.db.get_person_from_handle(active)
|
||||
self._createmap(person)
|
||||
self.uistate.modify_statusbar(self.dbstate)
|
||||
|
||||
def build_tree(self):
|
||||
@ -294,9 +295,9 @@ class GeoMoves(GeoGraphyView):
|
||||
# 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 ):
|
||||
if longitude and latitude:
|
||||
self._append_to_places_list(descr, evt,
|
||||
person.gramps_id, #_nd.display(person),
|
||||
person.gramps_id,
|
||||
latitude, longitude,
|
||||
descr1, eyear,
|
||||
event.get_type(),
|
||||
@ -325,7 +326,7 @@ class GeoMoves(GeoGraphyView):
|
||||
if handle:
|
||||
mother = dbstate.db.get_person_from_handle(handle)
|
||||
if mother:
|
||||
descr1 = "%s%s" % ( descr1, _nd.display(mother))
|
||||
descr1 = "%s%s" % (descr1, _nd.display(mother))
|
||||
for event_ref in family.get_event_ref_list():
|
||||
if event_ref:
|
||||
event = dbstate.db.get_event_from_handle(
|
||||
@ -344,12 +345,15 @@ class GeoMoves(GeoGraphyView):
|
||||
descr = _pd.display(dbstate.db, place)
|
||||
evt = EventType(
|
||||
event.get_type())
|
||||
eyear = str("%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
if ( longitude and latitude ):
|
||||
self._append_to_places_list(descr, evt,
|
||||
person.gramps_id, #_nd.display(person),
|
||||
eyear = str(
|
||||
"%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
if longitude and latitude:
|
||||
self._append_to_places_list(
|
||||
descr,
|
||||
evt,
|
||||
person.gramps_id,
|
||||
latitude, longitude,
|
||||
descr1, eyear,
|
||||
event.get_type(),
|
||||
@ -359,13 +363,13 @@ class GeoMoves(GeoGraphyView):
|
||||
role
|
||||
)
|
||||
else:
|
||||
self._append_to_places_without_coord( place.gramps_id, descr)
|
||||
self._append_to_places_without_coord(place.gramps_id, descr)
|
||||
|
||||
sort1 = sorted(self.place_list, key=operator.itemgetter(1,6))
|
||||
sort1 = sorted(self.place_list, key=operator.itemgetter(1, 6))
|
||||
self.draw(None, sort1, color)
|
||||
# merge with the last results
|
||||
merge_list = self.sort
|
||||
for the_event in sort1 :
|
||||
for the_event in sort1:
|
||||
if the_event not in merge_list:
|
||||
merge_list.append(the_event)
|
||||
self.sort = sorted(merge_list, key=operator.itemgetter(6))
|
||||
@ -388,7 +392,8 @@ class GeoMoves(GeoGraphyView):
|
||||
dbstate = self.dbstate
|
||||
person = None
|
||||
try:
|
||||
person = dbstate.db.get_person_from_handle(family.get_father_handle())
|
||||
person = dbstate.db.get_person_from_handle(
|
||||
family.get_father_handle())
|
||||
except:
|
||||
return
|
||||
family_id = family.gramps_id
|
||||
@ -425,7 +430,8 @@ class GeoMoves(GeoGraphyView):
|
||||
child = dbstate.db.get_person_from_handle(child_ref.ref)
|
||||
if child:
|
||||
index += 1
|
||||
self._createmap_for_next_level(child, level, curlevel)
|
||||
self._createmap_for_next_level(child, level,
|
||||
curlevel)
|
||||
self._add_person_to_list(child.gramps_id, curlevel)
|
||||
|
||||
def _createmap_for_one_level(self, family, level, curlevel):
|
||||
@ -480,81 +486,84 @@ class GeoMoves(GeoGraphyView):
|
||||
person = self.dbstate.db.get_person_from_handle(handle)
|
||||
if not person:
|
||||
return
|
||||
self.message_layer.add_message(_("All descendance for %s") % _nd.display(person))
|
||||
self.message_layer.add_message(
|
||||
_("All descendance for %s") % _nd.display(person))
|
||||
color = Gdk.color_parse(self._config.get('geography.color_base'))
|
||||
GLib.timeout_add(int(self._config.get("geography.generation_interval")),
|
||||
self.animate_moves, 0, person, color)
|
||||
|
||||
def animate_moves(self, index, person, color):
|
||||
"""
|
||||
Animate all moves for one generation.
|
||||
"""
|
||||
self.markers_by_level = dict()
|
||||
self._createmap_for_next_level(person, index, 0)
|
||||
try:
|
||||
persons = self.markers_by_level[index]
|
||||
except:
|
||||
return
|
||||
for people in persons:
|
||||
family_list = people.get_family_handle_list()
|
||||
for fhandle in family_list:
|
||||
family = self.dbstate.db.get_family_from_handle(fhandle)
|
||||
self._prepare_for_one_family(family, index, index+1)
|
||||
new_list = []
|
||||
for plx, level in self.person_list:
|
||||
plxp = self.dbstate.db.get_person_from_gramps_id(plx)
|
||||
birth = "0000"
|
||||
death = "0000"
|
||||
low_date = "9999"
|
||||
high_date = "0000"
|
||||
for event_ref in plxp.get_event_ref_list():
|
||||
if not event_ref:
|
||||
continue
|
||||
event = self.dbstate.db.get_event_from_handle(event_ref.ref)
|
||||
role = event_ref.get_role()
|
||||
try:
|
||||
date = event.get_date_object().to_calendar(self.cal)
|
||||
fyear = str("%04d" % date.get_year())
|
||||
if event.get_type() == EventType.BIRTH:
|
||||
birth = fyear
|
||||
if event.get_type() == EventType.DEATH:
|
||||
death = fyear
|
||||
if fyear < low_date:
|
||||
low_date = fyear
|
||||
if fyear > high_date:
|
||||
high_date = fyear
|
||||
"""
|
||||
Animate all moves for one generation.
|
||||
"""
|
||||
self.markers_by_level = dict()
|
||||
self._createmap_for_next_level(person, index, 0)
|
||||
try:
|
||||
persons = self.markers_by_level[index]
|
||||
except:
|
||||
return
|
||||
for people in persons:
|
||||
family_list = people.get_family_handle_list()
|
||||
for fhandle in family_list:
|
||||
family = self.dbstate.db.get_family_from_handle(fhandle)
|
||||
self._prepare_for_one_family(family, index, index+1)
|
||||
new_list = []
|
||||
for plx, level in self.person_list:
|
||||
plxp = self.dbstate.db.get_person_from_gramps_id(plx)
|
||||
birth = "0000"
|
||||
death = "0000"
|
||||
low_date = "9999"
|
||||
high_date = "0000"
|
||||
for event_ref in plxp.get_event_ref_list():
|
||||
if not event_ref:
|
||||
continue
|
||||
event = self.dbstate.db.get_event_from_handle(event_ref.ref)
|
||||
role = event_ref.get_role()
|
||||
try:
|
||||
date = event.get_date_object().to_calendar(self.cal)
|
||||
fyear = str("%04d" % date.get_year())
|
||||
if event.get_type() == EventType.BIRTH:
|
||||
birth = fyear
|
||||
if event.get_type() == EventType.DEATH:
|
||||
death = fyear
|
||||
if fyear < low_date:
|
||||
low_date = fyear
|
||||
if fyear > high_date:
|
||||
high_date = fyear
|
||||
|
||||
except:
|
||||
pass
|
||||
if birth == "0000":
|
||||
birth = low_date
|
||||
if death == "0000":
|
||||
death = high_date
|
||||
new_list.append([level, plxp, birth, death])
|
||||
pidx = 0;
|
||||
if isinstance(color, str) :
|
||||
color = Gdk.color_parse(color)
|
||||
for (level, plxp, birth, death) in sorted(new_list, key=operator.itemgetter(0,2)):
|
||||
if index == int(self._config.get("geography.maximum_generations")):
|
||||
break
|
||||
if level == index:
|
||||
pidx += 1
|
||||
self._createmap_for_one_person(plxp, color)
|
||||
color.red = (float(color.red - (index)*3000)%65535)
|
||||
if ( index % 2 ):
|
||||
color.green = float((color.green + (index)*3000)%65535)
|
||||
else:
|
||||
color.blue = float((color.blue + (index)*3000)%65535)
|
||||
self._createmap_for_one_person(person, color)
|
||||
if index < int(self._config.get("geography.maximum_generations")):
|
||||
time_to_wait = int(self._config.get("geography.generation_interval"))
|
||||
self._create_markers()
|
||||
# process next generation in a few milliseconds
|
||||
GLib.timeout_add(int(time_to_wait), self.animate_moves,
|
||||
index+1, person, color)
|
||||
else:
|
||||
self.started = False
|
||||
return False
|
||||
except:
|
||||
pass
|
||||
if birth == "0000":
|
||||
birth = low_date
|
||||
if death == "0000":
|
||||
death = high_date
|
||||
new_list.append([level, plxp, birth, death])
|
||||
pidx = 0
|
||||
if isinstance(color, str):
|
||||
color = Gdk.color_parse(color)
|
||||
for (level, plxp,
|
||||
birth, death) in sorted(new_list, key=operator.itemgetter(0, 2)):
|
||||
if index == int(self._config.get("geography.maximum_generations")):
|
||||
break
|
||||
if level == index:
|
||||
pidx += 1
|
||||
self._createmap_for_one_person(plxp, color)
|
||||
color.red = (float(color.red - (index)*3000)%65535)
|
||||
if index % 2:
|
||||
color.green = float((color.green + (index)*3000)%65535)
|
||||
else:
|
||||
color.blue = float((color.blue + (index)*3000)%65535)
|
||||
self._createmap_for_one_person(person, color)
|
||||
if index < int(self._config.get("geography.maximum_generations")):
|
||||
time_to_wait = int(
|
||||
self._config.get("geography.generation_interval"))
|
||||
self._create_markers()
|
||||
# process next generation in a few milliseconds
|
||||
GLib.timeout_add(int(time_to_wait), self.animate_moves,
|
||||
index+1, person, color)
|
||||
else:
|
||||
self.started = False
|
||||
return False
|
||||
|
||||
def bubble_message(self, event, lat, lon, marks):
|
||||
"""
|
||||
@ -568,7 +577,7 @@ class GeoMoves(GeoGraphyView):
|
||||
oldplace = ""
|
||||
prevmark = None
|
||||
# Be sure all markers are sorted by place then dates.
|
||||
for mark in sorted(marks, key=operator.itemgetter(0,6)):
|
||||
for mark in sorted(marks, key=operator.itemgetter(0, 6)):
|
||||
if mark[10] in events:
|
||||
continue # avoid duplicate events
|
||||
else:
|
||||
@ -585,19 +594,20 @@ class GeoMoves(GeoGraphyView):
|
||||
date = displayer.display(evt.get_date_object())
|
||||
if date == "":
|
||||
date = _("Unknown")
|
||||
if ( mark[11] == EventRoleType.PRIMARY ):
|
||||
if mark[11] == EventRoleType.PRIMARY:
|
||||
person = self.dbstate.db.get_person_from_gramps_id(mark[1])
|
||||
message = "(%s) %s : %s" % ( date, mark[2], _nd.display(person) )
|
||||
elif ( mark[11] == EventRoleType.FAMILY ):
|
||||
(father_name, mother_name) = self._get_father_and_mother_name(evt)
|
||||
message = "(%s) %s : %s" % (date, mark[2], _nd.display(person))
|
||||
elif mark[11] == EventRoleType.FAMILY:
|
||||
(father_name,
|
||||
mother_name) = self._get_father_and_mother_name(evt)
|
||||
message = "(%s) %s : %s - %s" % (date, mark[2],
|
||||
father_name,
|
||||
mother_name )
|
||||
mother_name)
|
||||
else:
|
||||
descr = evt.get_description()
|
||||
if descr == "":
|
||||
descr = _('No description')
|
||||
message = "(%s) %s => %s" % ( date, mark[11], descr)
|
||||
message = "(%s) %s => %s" % (date, mark[11], descr)
|
||||
prevmark = mark
|
||||
add_item = Gtk.MenuItem(label=message)
|
||||
add_item.show()
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -28,14 +28,10 @@ Geography for one person
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
import sys
|
||||
import operator
|
||||
from gi.repository import Gdk
|
||||
KEY_TAB = Gdk.KEY_Tab
|
||||
import socket
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GObject
|
||||
from gi.repository import GLib
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -59,11 +55,6 @@ from gramps.gen.datehandler import displayer
|
||||
from gramps.gen.display.name import displayer as _nd
|
||||
from gramps.gen.display.place import displayer as _pd
|
||||
from gramps.gen.utils.place import conv_lat_lon
|
||||
from gramps.gui.views.pageview import PageView
|
||||
from gramps.gui.editors import EditPlace
|
||||
from gramps.gui.selectors.selectplace import SelectPlace
|
||||
from gramps.gui.filters.sidebar import PersonSidebarFilter
|
||||
from gramps.gui.views.navigationview import NavigationView
|
||||
from gramps.gui.views.bookmarks import PersonBookmarks
|
||||
from gramps.plugins.lib.maps import constants
|
||||
from gramps.plugins.lib.maps.geography import GeoGraphyView
|
||||
@ -111,6 +102,11 @@ _UI_DEF = '''\
|
||||
</ui>
|
||||
'''
|
||||
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=maybe-no-member
|
||||
# pylint: disable=unused-variable
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GeoView
|
||||
@ -163,6 +159,9 @@ class GeoPerson(GeoGraphyView):
|
||||
self.sort = []
|
||||
self.additional_uis.append(self.additional_ui())
|
||||
self.no_show_places_in_status_bar = False
|
||||
self.already_started = False
|
||||
self.large_move = False
|
||||
self.cal = None
|
||||
|
||||
def get_title(self):
|
||||
"""
|
||||
@ -230,8 +229,8 @@ class GeoPerson(GeoGraphyView):
|
||||
self.already_started = False
|
||||
return False
|
||||
i = int(index)
|
||||
ni = i + 1
|
||||
if ni == len(marks) :
|
||||
next_i = i + 1
|
||||
if next_i == len(marks):
|
||||
self.already_started = False
|
||||
return False
|
||||
startlat = float(marks[i][3])
|
||||
@ -241,41 +240,41 @@ class GeoPerson(GeoGraphyView):
|
||||
self.remove_all_gps()
|
||||
self.large_move = False
|
||||
self.osm.gps_add(startlat, startlon, heading)
|
||||
endlat = float(marks[ni][3])
|
||||
endlon = float(marks[ni][4])
|
||||
endlat = float(marks[next_i][3])
|
||||
endlon = float(marks[next_i][4])
|
||||
max_lon_lat = float(self._config.get("geography.maximum_lon_lat")) / 10
|
||||
if stepyear < 9000:
|
||||
if (( abs(float(endlat) - float(startlat)) > max_lon_lat ) or
|
||||
( abs(float(endlon) - float(startlon)) > max_lon_lat )):
|
||||
if ((abs(float(endlat) - float(startlat)) > max_lon_lat) or
|
||||
(abs(float(endlon) - float(startlon)) > max_lon_lat)):
|
||||
self.large_move = True
|
||||
stepyear = 9000
|
||||
else:
|
||||
self.large_move = False
|
||||
# year format = YYYYMMDD ( for sort )
|
||||
startyear = str(marks[i][6])[0:4]
|
||||
endyear = str(marks[ni][6])[0:4]
|
||||
endyear = str(marks[next_i][6])[0:4]
|
||||
endmov = str(marks[len(marks)-1][6])[0:4]
|
||||
years = int(endyear) - int(startyear)
|
||||
if years < 1:
|
||||
years = 1
|
||||
if stepyear > 8999:
|
||||
latstep = ( endlat - startlat ) / self._config.get("geography.steps")
|
||||
lonstep = ( endlon - startlon ) / self._config.get("geography.steps")
|
||||
startlat += ( latstep * (stepyear - 8999) )
|
||||
startlon += ( lonstep * (stepyear - 8999) )
|
||||
latstep = (endlat - startlat) / self._config.get("geography.steps")
|
||||
lonstep = (endlon - startlon) / self._config.get("geography.steps")
|
||||
startlat += (latstep * (stepyear - 8999))
|
||||
startlon += (lonstep * (stepyear - 8999))
|
||||
else:
|
||||
latstep = ( endlat - startlat ) / years
|
||||
lonstep = ( endlon - startlon ) / years
|
||||
latstep = (endlat - startlat) / years
|
||||
lonstep = (endlon - startlon) / years
|
||||
stepyear = 1 if stepyear < 1 else stepyear
|
||||
startlat += ( latstep * stepyear )
|
||||
startlon += ( lonstep * stepyear )
|
||||
startlat += (latstep * stepyear)
|
||||
startlon += (lonstep * stepyear)
|
||||
self.osm.gps_add(startlat, startlon, heading)
|
||||
stepyear += 1
|
||||
difflat = round(( startlat - endlat ) if startlat > endlat else \
|
||||
( endlat - startlat ), 8)
|
||||
difflon = round(( startlon - endlon ) if startlon > endlon else \
|
||||
( endlon - startlon ), 8)
|
||||
if ( difflat == 0.0 and difflon == 0.0 ):
|
||||
difflat = round((startlat - endlat) if startlat > endlat else \
|
||||
(endlat - startlat), 8)
|
||||
difflon = round((startlon - endlon) if startlon > endlon else \
|
||||
(endlon - startlon), 8)
|
||||
if difflat == 0.0 and difflon == 0.0:
|
||||
i += 1
|
||||
self.large_move = False
|
||||
stepyear = 1
|
||||
@ -283,13 +282,12 @@ class GeoPerson(GeoGraphyView):
|
||||
# For a 100 years person, it takes 10 secondes.
|
||||
# if large_move, one step is the difflat or difflon / geography.steps
|
||||
# in this case, stepyear is >= 9000
|
||||
# large move means longitude or latitude differences greater than geography.maximum_lon_lat
|
||||
# degrees.
|
||||
# large move means longitude or latitude differences greater than
|
||||
# geography.maximum_lon_lat degrees.
|
||||
GLib.timeout_add(int(self._config.get("geography.speed")), self.animate,
|
||||
menu, marks, i, stepyear)
|
||||
return False
|
||||
|
||||
#def _createmap(self,obj):
|
||||
def _createmap(self):
|
||||
"""
|
||||
Create all markers for each people's event in the database which has
|
||||
@ -316,16 +314,18 @@ class GeoPerson(GeoGraphyView):
|
||||
if person is not None:
|
||||
# For each event, if we have a place, set a marker.
|
||||
self.load_kml_files(person)
|
||||
self.message_layer.add_message(_("Person places for %s") % _nd.display(person))
|
||||
self.message_layer.add_message(
|
||||
_("Person places for %s") % _nd.display(person))
|
||||
for event_ref in person.get_event_ref_list():
|
||||
if not event_ref:
|
||||
continue
|
||||
event = dbstate.db.get_event_from_handle(event_ref.ref)
|
||||
self.load_kml_files(event)
|
||||
role = event_ref.get_role()
|
||||
eyear = str("%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
eyear = str(
|
||||
"%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
place_handle = event.get_place_handle()
|
||||
if place_handle:
|
||||
place = dbstate.db.get_place_from_handle(place_handle)
|
||||
@ -343,7 +343,7 @@ class GeoPerson(GeoGraphyView):
|
||||
# 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 ):
|
||||
if longitude and latitude:
|
||||
self._append_to_places_list(descr, evt,
|
||||
_nd.display(person),
|
||||
latitude, longitude,
|
||||
@ -374,28 +374,33 @@ class GeoPerson(GeoGraphyView):
|
||||
if handle:
|
||||
mother = dbstate.db.get_person_from_handle(handle)
|
||||
if mother:
|
||||
descr1 = "%s%s" % ( descr1, _nd.display(mother))
|
||||
descr1 = "%s%s" % (descr1, _nd.display(mother))
|
||||
for event_ref in family.get_event_ref_list():
|
||||
if event_ref:
|
||||
event = dbstate.db.get_event_from_handle(event_ref.ref)
|
||||
event = dbstate.db.get_event_from_handle(
|
||||
event_ref.ref)
|
||||
self.load_kml_files(event)
|
||||
role = event_ref.get_role()
|
||||
if event.get_place_handle():
|
||||
place_handle = event.get_place_handle()
|
||||
if place_handle:
|
||||
place = dbstate.db.get_place_from_handle(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")
|
||||
(latitude,
|
||||
longitude) = conv_lat_lon(latitude,
|
||||
longitude,
|
||||
"D.D8")
|
||||
descr = _pd.display(dbstate.db, place)
|
||||
evt = EventType(event.get_type())
|
||||
eyear = str("%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
eyear = str(
|
||||
"%04d" % event.get_date_object().to_calendar(self.cal).get_year()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_month()) + \
|
||||
str("%02d" % event.get_date_object().to_calendar(self.cal).get_day())
|
||||
self.load_kml_files(place)
|
||||
if ( longitude and latitude ):
|
||||
if longitude and latitude:
|
||||
self._append_to_places_list(descr,
|
||||
evt, _nd.display(person),
|
||||
latitude, longitude,
|
||||
@ -407,7 +412,7 @@ class GeoPerson(GeoGraphyView):
|
||||
role
|
||||
)
|
||||
else:
|
||||
self._append_to_places_without_coord( place.gramps_id, descr)
|
||||
self._append_to_places_without_coord(place.gramps_id, descr)
|
||||
|
||||
self.sort = sorted(self.place_list,
|
||||
key=operator.itemgetter(6)
|
||||
@ -473,16 +478,18 @@ class GeoPerson(GeoGraphyView):
|
||||
date = displayer.display(evt.get_date_object())
|
||||
if date == "":
|
||||
date = _("Unknown")
|
||||
if ( mark[11] == EventRoleType.PRIMARY ):
|
||||
message = "(%s) %s : %s" % ( date, mark[2], mark[1] )
|
||||
elif ( mark[11] == EventRoleType.FAMILY ):
|
||||
(father_name, mother_name) = self._get_father_and_mother_name(evt)
|
||||
message = "(%s) %s : %s - %s" % ( date, mark[7], father_name, mother_name )
|
||||
if mark[11] == EventRoleType.PRIMARY:
|
||||
message = "(%s) %s : %s" % (date, mark[2], mark[1])
|
||||
elif mark[11] == EventRoleType.FAMILY:
|
||||
(father_name,
|
||||
mother_name) = self._get_father_and_mother_name(evt)
|
||||
message = "(%s) %s : %s - %s" % (date, mark[7],
|
||||
father_name, mother_name)
|
||||
else:
|
||||
descr = evt.get_description()
|
||||
if descr == "":
|
||||
descr = _('No description')
|
||||
message = "(%s) %s => %s" % ( date, mark[11], descr)
|
||||
message = "(%s) %s => %s" % (date, mark[11], descr)
|
||||
prevmark = mark
|
||||
add_item = Gtk.MenuItem(label=message)
|
||||
add_item.show()
|
||||
@ -541,9 +548,10 @@ class GeoPerson(GeoGraphyView):
|
||||
"",
|
||||
2, 'geography.speed',
|
||||
(100, 1000))
|
||||
configdialog.add_text(grid,
|
||||
_('How many steps between two markers when we are on large move ?'),
|
||||
3, line_wrap=False)
|
||||
configdialog.add_text(
|
||||
grid,
|
||||
_('How many steps between two markers when we are on large move ?'),
|
||||
3, line_wrap=False)
|
||||
configdialog.add_slider(grid,
|
||||
"",
|
||||
4, 'geography.steps',
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2011 Serge Noiraud
|
||||
# Copyright (C) 2011-2016 Serge Noiraud
|
||||
#
|
||||
# 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
|
||||
@ -28,13 +28,10 @@ Geography for places
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import operator
|
||||
from gi.repository import Gdk
|
||||
KEY_TAB = Gdk.KEY_Tab
|
||||
import socket
|
||||
from gi.repository import Gtk
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -54,14 +51,8 @@ from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
from gramps.gen.lib import EventType
|
||||
from gramps.gen.config import config
|
||||
from gramps.gen.display.name import displayer as _nd
|
||||
from gramps.gen.display.place import displayer as _pd
|
||||
from gramps.gen.utils.place import conv_lat_lon
|
||||
from gramps.gui.views.pageview import PageView
|
||||
from gramps.gui.editors import EditPlace
|
||||
from gramps.gui.selectors.selectplace import SelectPlace
|
||||
from gramps.gui.filters.sidebar import PlaceSidebarFilter
|
||||
from gramps.gui.views.navigationview import NavigationView
|
||||
from gramps.gui.views.bookmarks import PlaceBookmarks
|
||||
from gramps.plugins.lib.maps.geography import GeoGraphyView
|
||||
from gramps.gui.utils import ProgressMeter
|
||||
@ -106,6 +97,11 @@ _UI_DEF = '''\
|
||||
</ui>
|
||||
'''
|
||||
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=maybe-no-member
|
||||
# pylint: disable=unused-variable
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GeoView
|
||||
@ -136,6 +132,9 @@ class GeoPlaces(GeoGraphyView):
|
||||
self.additional_uis.append(self.additional_ui())
|
||||
self.no_show_places_in_status_bar = False
|
||||
self.show_all = False
|
||||
self.itemoption = None
|
||||
self.menu = None
|
||||
self.cal = config.get('preferences.calendar-format-report')
|
||||
|
||||
def get_title(self):
|
||||
"""
|
||||
@ -197,7 +196,7 @@ class GeoPlaces(GeoGraphyView):
|
||||
else:
|
||||
self._createmap(None)
|
||||
|
||||
def _create_one_place(self,place):
|
||||
def _create_one_place(self, place):
|
||||
"""
|
||||
Create one entry for one place with a lat/lon.
|
||||
"""
|
||||
@ -212,7 +211,7 @@ class GeoPlaces(GeoGraphyView):
|
||||
# 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 ):
|
||||
if longitude and latitude:
|
||||
self._append_to_places_list(descr, None, "",
|
||||
latitude, longitude,
|
||||
None, None,
|
||||
@ -223,13 +222,12 @@ class GeoPlaces(GeoGraphyView):
|
||||
None # family.gramps_id
|
||||
)
|
||||
|
||||
def _createmap(self,place_x):
|
||||
def _createmap(self, place_x):
|
||||
"""
|
||||
Create all markers for each people's event in the database which has
|
||||
a lat/lon.
|
||||
"""
|
||||
dbstate = self.dbstate
|
||||
self.cal = config.get('preferences.calendar-format-report')
|
||||
self.place_list = []
|
||||
self.places_found = []
|
||||
self.place_without_coordinates = []
|
||||
@ -252,13 +250,17 @@ class GeoPlaces(GeoGraphyView):
|
||||
# base "villes de france" : 38101 places :
|
||||
# createmap : 8'50"; create_markers : 0'07" with pixbuf optimization
|
||||
# base "villes de france" : 38101 places :
|
||||
# gramps 3.4 python 2.7 ( draw_markers are estimated when we move the map)
|
||||
# 38101 places : createmap : 04'32"; create_markers : 0'04"; draw markers : N/A :: 0'03"
|
||||
# 65598 places : createmap : 10'03"; create_markers : 0'07"; draw markers : N/A :: 0'05"
|
||||
# gramps 3.4 python 2.7 (draw_markers are estimated when moving the map)
|
||||
# 38101 places: createmap: 04'32";
|
||||
# create_markers: 0'04"; draw markers: N/A :: 0'03"
|
||||
# 65598 places: createmap: 10'03";
|
||||
# create_markers: 0'07"; draw markers: N/A :: 0'05"
|
||||
# gramps 3.5 python 2.7 new marker layer
|
||||
# 38101 places : createmap : 03'09"; create_markers : 0'01"; draw markers : 0'04"
|
||||
# 65598 places : createmap : 08'48"; create_markers : 0'01"; draw markers : 0'07"
|
||||
_LOG.debug("%s" % time.strftime("start createmap : "
|
||||
# 38101 places: createmap: 03'09";
|
||||
# create_markers: 0'01"; draw markers: 0'04"
|
||||
# 65598 places: createmap: 08'48";
|
||||
# create_markers: 0'01"; draw markers: 0'07"
|
||||
_LOG.debug("%s", time.strftime("start createmap : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
if self.show_all:
|
||||
self.show_all = False
|
||||
@ -287,27 +289,29 @@ class GeoPlaces(GeoGraphyView):
|
||||
progress.step()
|
||||
progress.close()
|
||||
elif place_x:
|
||||
place = dbstate.db.get_place_from_handle(place_x)
|
||||
self._create_one_place(place)
|
||||
if ( place.get_latitude() != "" and place.get_longitude() != "" ):
|
||||
latitude, longitude = conv_lat_lon(place.get_latitude(),
|
||||
place.get_longitude(), "D.D8")
|
||||
self.osm.set_center_and_zoom(float(latitude), float(longitude),
|
||||
int(config.get("geography.zoom_when_center")))
|
||||
place = dbstate.db.get_place_from_handle(place_x)
|
||||
self._create_one_place(place)
|
||||
if place.get_latitude() != "" and place.get_longitude() != "":
|
||||
latitude, longitude = conv_lat_lon(place.get_latitude(),
|
||||
place.get_longitude(),
|
||||
"D.D8")
|
||||
self.osm.set_center_and_zoom(float(latitude), float(longitude),
|
||||
int(config.get(
|
||||
"geography.zoom_when_center")))
|
||||
_LOG.debug(" stop createmap.")
|
||||
_LOG.debug("%s" % time.strftime("begin sort : "
|
||||
_LOG.debug("%s", time.strftime("begin sort : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
self.sort = sorted(self.place_list,
|
||||
key=operator.itemgetter(0)
|
||||
)
|
||||
_LOG.debug("%s" % time.strftime(" end sort : "
|
||||
_LOG.debug("%s", time.strftime(" end sort : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
if self.nbmarkers > 500 : # performance issue. Is it the good value ?
|
||||
if self.nbmarkers > 500: # performance issue. Is it the good value ?
|
||||
self.message_layer.add_message(
|
||||
_("The place name in the status bar is disabled."))
|
||||
self.no_show_places_in_status_bar = True
|
||||
if self.nbplaces >= self._config.get("geography.max_places") :
|
||||
self.message_layer.set_font_attributes(None,None,"red")
|
||||
if self.nbplaces >= self._config.get("geography.max_places"):
|
||||
self.message_layer.set_font_attributes(None, None, "red")
|
||||
self.message_layer.add_message(
|
||||
_("The maximum number of places is reached (%d)." %
|
||||
self._config.get("geography.max_places")))
|
||||
@ -390,7 +394,7 @@ class GeoPlaces(GeoGraphyView):
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
add_item = Gtk.MenuItem(label=_("Show all places"))
|
||||
add_item.connect("activate", self.show_all_places, event, lat , lon)
|
||||
add_item.connect("activate", self.show_all_places, event, lat, lon)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
add_item = Gtk.MenuItem(label=_("Centering on Place"))
|
||||
|
Loading…
Reference in New Issue
Block a user