GeoView : Cleaning some parts of code.

In some cases, bad centering of the map.
          Add one page for places found without coordinates.
          Modify some texts to be more precise. 


svn: r11755
This commit is contained in:
Serge Noiraud 2009-01-28 23:56:32 +00:00
parent 4d5c5375bc
commit 711b5f2ba8

View File

@ -53,6 +53,8 @@ import gtk
#
#-------------------------------------------------------------------------
import logging
LOG = logging.getLogger(".GeoView")
#LOG.setLevel(logging.DEBUG)
#-------------------------------------------------------------------------
#
@ -172,6 +174,9 @@ class Renderer():
def page_loaded(self):
raise NotImplementedError
def page_begin_load(self):
raise NotImplementedError
def set_button_sensitivity(self):
"""
We must set the back and forward button in the HtmlView class.
@ -193,10 +198,14 @@ class RendererWebkit(Renderer):
self.window = webkit.WebView()
self.browser = WEBKIT
self.window.get_main_frame().connect("load-done", self.page_loaded)
self.window.connect("load-started", self.page_begin_load)
def page_loaded(self,obj,status):
self.set_button_sensitivity()
def page_begin_load(self,obj,stat):
pass
def open(self, url):
self.window.open(url)
@ -224,10 +233,14 @@ class RendererMozilla(Renderer):
self.window = gtkmozembed.MozEmbed()
self.browser = MOZIL
self.handler = self.window.connect("net-stop", self.page_loaded)
self.handler = self.window.connect("net-start", self.page_begin_load)
def page_loaded(self,obj):
self.set_button_sensitivity()
def page_begin_load(self,obj):
pass
def open(self, url):
self.window.load_url(url)
@ -520,6 +533,7 @@ class GeoView(HtmlView):
self.usedmap = "openstreetmap"
self.displaytype = "person"
self.nbmarkers = 0
self.without = 0
self.nbpages = 0
def top_widget(self):
@ -694,6 +708,7 @@ class GeoView(HtmlView):
"""
self.external_url = False
self.nbmarkers = 0
self.without = 0
self.createMapstraction(displaytype)
self.open("file://"+self.htmlfile)
@ -759,6 +774,42 @@ class GeoView(HtmlView):
pass
pass # We don't use a proxy or the http_proxy variable is not set.
def create_page_for_places_without_coordinates(self):
"""
This command creates a page with the list of all places without coordinates
page.
"""
data = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" \
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>%(title)s</title>
</head>
<body >
<H4>%(content)s</H4>
""" % { 'title' : _('List of places without coordinates'),
'content': _('Here is the list of all places in the databases'
' for which we have no coordinates.<br>'
' This means no longitude or latitude.<p>')
}
end = """
</table>
</body>
</html>
"""
fd = open(self.without_coord_file,"w+")
fd.write(data)
self.places = sorted(self.place_without_coordinates)
i = 1
fd.write("<table border=1 ><th width=10%>NB</th><th width=20%>Gramps ID</th><th>Place</th>")
for place in self.places:
fd.write("<tr><td>%d</td><td>%s</td><td>%s</td>" % ( i, place[0], place[1] ))
i += 1
fd.write(end)
fd.close()
def createMapstractionPostHeader(self,h3mess,h4mess,maxpages,curpage,ftype):
self.maxgen=Config.get(Config.GENERATION_DEPTH)
if self.maxyear == 0:
@ -802,6 +853,11 @@ class GeoView(HtmlView):
else:
self.mapview.write(" ++")
self.mapview.write("\n</div>\n")
if self.without != 0:
self.without_coord_file = GEOVIEW_SUBPATH+"/without_coord.html"
self.mapview.write("<div id='coord' font=-4 >You have <a href=\"%s\" >%d<a>" % ( self.without_coord_file, self.without ) )
self.mapview.write(" places without coordinates</div>\n" )
self.create_page_for_places_without_coordinates()
if self.displaytype != "places":
self.mapview.write(" <Div id='btns' font=-4 >\n")
self.mapview.write(" <form method='POST'>\n")
@ -972,6 +1028,8 @@ class GeoView(HtmlView):
else:
self.zoom = zoomlong
self.zoom -= 1
if self.zoom < 1:
self.zoom = 1
# We center the map on a point at the center of all markers
self.centerlat = maxlat/2
self.centerlon = maxlong/2
@ -981,18 +1039,41 @@ class GeoView(HtmlView):
cent = int(mark[6])
if cent:
self.centered = True
if ( signminlat == 1 and signmaxlat == 1 ):
latit = self.maxlat+self.centerlat
elif ( signminlat == 0 and signmaxlat == 0 ):
if ( signminlat == signmaxlat ):
if self.maxlat > self.centerlat:
latit = self.maxlat-self.centerlat
else:
latit = self.maxlat+self.centerlat
elif self.maxlat > self.centerlat:
latit = self.maxlat-self.centerlat
else:
latit = self.maxlat+self.centerlat
if ( signminlon == 1 and signmaxlon == 1 ):
if ( signminlon == signmaxlon ):
if self.maxlon > self.centerlon:
longt = self.maxlon-self.centerlon
else:
longt = self.maxlon+self.centerlon
elif self.maxlon > self.centerlon:
longt = self.maxlon-self.centerlon
elif ( signminlon == 0 and signmaxlon == 0 ):
longt = self.maxlon+self.centerlon
else:
longt = self.maxlon-self.centerlon
longt = self.maxlon+self.centerlon
LOG.debug( "self.maxlon = %f\n" % self.maxlon)
LOG.debug("self.minlon = %f\n" % self.minlon)
LOG.debug("self.maxlat = %f\n" % self.maxlat)
LOG.debug("self.minlat = %f\n" % self.minlat)
LOG.debug("signminlon = %f\n" % signminlon )
LOG.debug("signmaxlon = %f\n" % signmaxlon )
LOG.debug("signminlat = %f\n" % signminlat )
LOG.debug("signmaxlat = %f\n" % signmaxlat )
LOG.debug("maxlong = %f\n" % maxlong)
LOG.debug("maxlat = %f\n" % maxlat)
LOG.debug("zoomlat = %f\n" % zoomlat)
LOG.debug("zoomlong = %f\n" % zoomlong)
LOG.debug("latit = %f\n" % latit)
LOG.debug("longt = %f\n" % longt)
self.mustcenter = False
if latit != 0.0 or longt != 0.0:
self.latit = latit
@ -1036,6 +1117,10 @@ class GeoView(HtmlView):
self.createMapstractionNotImplemented(self.dbstate)
self.createMapstractionTrailer()
def append_to_places_without_coordinates(self, ID, Place):
self.place_without_coordinates.append([ID, Place])
self.without += 1
def append_to_places_list(self, Place, evttype, name, lat, long, descr, center, year):
self.place_list.append([Place, name, evttype, lat, long, descr, int(center), year])
self.nbmarkers += 1
@ -1195,11 +1280,15 @@ class GeoView(HtmlView):
descr = place.get_title()
city = place.get_main_location().get_city()
country = place.get_main_location().get_country()
if ( cmp(longitude,"") == 1 | cmp(latitude,"") == 1 ):
self.append_to_places_list(descr, gen.lib.EventType.BIRTH,
_nd.display(person), latitude, longitude,
descr1, int(self.center), birthyear)
self.center = False
# 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 ):
self.append_to_places_list(descr, gen.lib.EventType.BIRTH,
_nd.display(person), latitude, longitude,
descr1, int(self.center), birthyear)
self.center = False
else:
self.append_to_places_without_coordinates(place.gramps_id,descr)
latitude = ""
longitude = ""
death_ref = person.get_death_ref()
@ -1220,11 +1309,15 @@ class GeoView(HtmlView):
descr1=_("death place.")
city = place.get_main_location().get_city()
country = place.get_main_location().get_country()
if ( cmp(longitude,"") == 1 | cmp(latitude,"") == 1 ):
self.append_to_places_list(descr, gen.lib.EventType.DEATH,
_nd.display(person), latitude, longitude,
descr1, int(self.center), deathyear)
self.center = False
# 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 ):
self.append_to_places_list(descr, gen.lib.EventType.DEATH,
_nd.display(person), latitude, longitude,
descr1, int(self.center), deathyear)
self.center = False
else:
self.append_to_places_without_coordinates(place.gramps_id,descr)
def createMapstractionPlaces(self,db):
"""
@ -1232,6 +1325,7 @@ class GeoView(HtmlView):
which has a lat/lon.
"""
self.place_list = []
self.place_without_coordinates = []
self.minlat = float(0.0)
self.maxlat = float(0.0)
self.minlon = float(0.0)
@ -1252,12 +1346,16 @@ class GeoView(HtmlView):
latitude, longitude = conv_lat_lon(latitude, longitude, "D.D8")
city = place.get_main_location().get_city()
country = place.get_main_location().get_country()
if ( cmp(longitude,"") == 1 | cmp(latitude,"") == 1 ):
# 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 ):
self.append_to_places_list(descr, None,
"",
latitude, longitude,
descr1, self.center, None)
self.center = False
else:
self.append_to_places_without_coordinates(place.gramps_id,descr)
if self.center:
mess = _("Cannot center the map. No location with coordinates.")
else:
@ -1270,6 +1368,7 @@ class GeoView(HtmlView):
which has a lat/lon.
"""
self.place_list = []
self.place_without_coordinates = []
self.minlat = float(0.0)
self.maxlat = float(0.0)
self.minlon = float(0.0)
@ -1295,7 +1394,9 @@ class GeoView(HtmlView):
city = place.get_main_location().get_city()
country = place.get_main_location().get_country()
descr2 = "%s; %s" % (city,country)
if ( cmp(longitude,"") == 1 | cmp(latitude,"") == 1 ):
# 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 ):
person_list = [ db.db.get_person_from_handle(ref_handle)
for (ref_type, ref_handle) in db.db.find_backlink_handles(event_handle)
if ref_type == 'Person'
@ -1312,6 +1413,8 @@ class GeoView(HtmlView):
latitude, longitude,
descr2, self.center, eventyear)
self.center = False
else:
self.append_to_places_without_coordinates(place.gramps_id,descr)
if self.center:
mess = _("Cannot center the map. No location with coordinates.")
else:
@ -1324,6 +1427,7 @@ class GeoView(HtmlView):
in the database which has a lat/lon.
"""
self.place_list = []
self.place_without_coordinates = []
self.minlat = float(0.0)
self.maxlat = float(0.0)
self.minlon = float(0.0)
@ -1361,8 +1465,10 @@ class GeoView(HtmlView):
self.createPersonMarkers(db,child,comment)
if self.center:
mess = _("Cannot center the map. No location with coordinates.")
self.create_pages(3, _("You have no active person to see this person's family places."),
mess)
if person is not None:
self.create_pages(3, _("The active person's family members have no places with coordinates."), mess)
else:
self.create_pages(3, _("You have no active person to see this person's family places."), mess)
else:
mess = ""
self.create_pages(3, ( _("All %s people's family places in the database with coordinates.") %
@ -1375,6 +1481,7 @@ class GeoView(HtmlView):
in the database which has a lat/lon.
"""
self.place_list = []
self.place_without_coordinates = []
self.minlat = float(0.0)
self.maxlat = float(0.0)
self.minlon = float(0.0)
@ -1410,15 +1517,22 @@ class GeoView(HtmlView):
country = place.get_main_location().get_country()
evt=gen.lib.EventType(event.get_type())
descr1=_("%s : %s")%(evt,_nd.display(person))
if ( cmp(longitude,"") == 1 | cmp(latitude,"") == 1 ):
# 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 ):
self.append_to_places_list(descr, evt,
_nd.display(person),
latitude, longitude,
descr1, self.center, eventyear)
self.center = False
else:
self.append_to_places_without_coordinates(place.gramps_id,descr)
if self.center:
mess = _("Cannot center the map. No location with coordinates.")
self.create_pages(4, _("You have no active person to see this person's places."), mess)
if person is not None:
self.create_pages(4, _("The active person has no places with coordinates."), mess)
else:
self.create_pages(4, _("You have no active person to see this person's places."), mess)
else:
mess = ""
self.create_pages(4,( _("All event places for %s.") % _nd.display(person) ), mess)