GeoView : Split in two parts : HtmlRenderer and GeoView.

Adding two icons for map provider selection.
          We now can zoom in and out with the wheel mouse.
          It's possible to save the zoom between the maps.
          The zoom, latitude, longitude and map is now saved
          when we quit gramps:
          only if you use the save zoom between maps.
          Issue 3150, 3152 included.


svn: r13166
This commit is contained in:
Serge Noiraud 2009-09-07 21:13:38 +00:00
parent f3931f0168
commit 5b2ed0dafa
16 changed files with 1251 additions and 602 deletions

View File

@ -203,6 +203,11 @@ GEOVIEW_GOOGLEMAPS = ('preferences', 'googlemap', 0)
GEOVIEW_OPENLAYERS = ('preferences', 'openlayers', 0)
GEOVIEW_YAHOO = ('preferences', 'yahoo', 0)
GEOVIEW_MICROSOFT = ('preferences', 'microsoft', 0)
GEOVIEW_LOCKZOOM = ('geoview', 'lock', 0)
GEOVIEW_ZOOM = ('geoview', 'zoom', 1)
GEOVIEW_LATITUDE = ('geoview', 'latitude', 2)
GEOVIEW_LONGITUDE = ('geoview', 'longitude', 2)
GEOVIEW_MAP = ('geoview', 'map', 2)
default_value = {
DEFAULT_SOURCE : False,
@ -358,4 +363,9 @@ default_value = {
GEOVIEW_OPENLAYERS : False,
GEOVIEW_YAHOO : False,
GEOVIEW_MICROSOFT : False,
GEOVIEW_LOCKZOOM : False,
GEOVIEW_ZOOM : 0,
GEOVIEW_LATITUDE : "0.0",
GEOVIEW_LONGITUDE : "0.0",
GEOVIEW_MAP : "person",
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,664 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2007-2009 Serge Noiraud
# Copyright (C) 2008 Benny Malengier
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id: GeoView.py 12995 2009-08-13 21:59:59Z noirauds $
"""
Html Renderer
Can use the Webkit or Gecko ( Mozilla ) library
"""
#-------------------------------------------------------------------------
#
# Python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
import os
import locale
import urlparse
#-------------------------------------------------------------------------
#
# GTK/Gnome modules
#
#-------------------------------------------------------------------------
import gtk
#-------------------------------------------------------------------------
#
# Gramps Modules
#
#-------------------------------------------------------------------------
import PageView
import Utils
import Config
from const import TEMP_DIR
#-------------------------------------------------------------------------
#
# Functions
#
#-------------------------------------------------------------------------
def get_identity():
if Utils.lin:
platform = "X11"
elif Utils.win:
platform = "Windows"
elif Utils.mac:
platform = "Macintosh"
else:
platform = "Unknown"
(lang_country, modifier ) = locale.getlocale()
lang = lang_country.replace('_','-')
#lang += ", " + lang_country.split('_')[0]
return "Mozilla/5.0 (%s; U; %s) Gramps/3.2" % ( platform, lang)
#-------------------------------------------------------------------------
#
# Constants
#
#-------------------------------------------------------------------------
# I think we should set the two following variable in const.py
# They are used only with gtkmozembed.
MOZEMBED_PATH = TEMP_DIR
MOZEMBED_SUBPATH = Utils.get_empty_tempdir('mozembed_gramps')
GEOVIEW_SUBPATH = Utils.get_empty_tempdir('geoview')
NOWEB = 0
WEBKIT = 1
MOZILLA = 2
KITNAME = [ "None", "WebKit", "Mozilla" ]
URL_SEP = '/'
#-------------------------------------------------------------------------
#
# What Web interfaces ?
#
# We use firstly webkit if it is present. If not, we use gtkmozembed.
# If no web interface is present, we don't register GeoView in the gui.
#-------------------------------------------------------------------------
TOOLKIT = NOWEB
try:
import webkit
TOOLKIT = WEBKIT
except:
try:
import gtkmozembed
TOOLKIT = MOZILLA
except:
pass
#no interfaces present, raise Error so that options for GeoView do not show
if TOOLKIT == NOWEB :
Config.set(Config.GEOVIEW, False)
raise ImportError, 'No GTK html plugin found'
#-------------------------------------------------------------------------
#
# Renderer
#
#-------------------------------------------------------------------------
#class Renderer(object):
class Renderer():
"""
Renderer renders the webpage. Several backend implementations are
possible
"""
def __init__(self):
self.window = None
def get_window(self):
"""
Returns a container class with the widget that contains browser
window
"""
return self.window
def get_uri(self):
"""
Get the current url
"""
raise NotImplementedError
def show_all(self):
"""
show all in the main window.
"""
self.window.show_all()
def open(self, url):
"""
open the webpage at url
"""
raise NotImplementedError
def refresh(self):
"""
We need to reload the page.
"""
raise NotImplementedError
def go_back(self):
"""
Go to the previous page.
"""
self.window.go_back()
def can_go_back(self):
"""
is the browser able to go backward ?
"""
return self.window.can_go_back()
def go_forward(self):
"""
Go to the next page.
"""
self.window.go_forward()
def can_go_forward(self):
"""
is the browser able to go forward ?
"""
return self.window.can_go_forward()
def get_title(self):
"""
We need to get the html title page.
"""
raise NotImplementedError
def execute_script(self, url):
"""
execute javascript in the current html page
"""
raise NotImplementedError
def page_loaded(self, *args):
"""
The page is completely loaded.
"""
raise NotImplementedError
def set_button_sensitivity(self):
"""
We must set the back and forward button in the HtmlView class.
"""
raise NotImplementedError
#-------------------------------------------------------------------------
#
# Renderer with WebKit
#
#-------------------------------------------------------------------------
class RendererWebkit(Renderer):
"""
Implementation of Renderer with Webkit
"""
def __init__(self):
Renderer.__init__(self)
self.window = webkit.WebView()
settings = self.window.get_settings()
try:
proxy = os.environ['http_proxy']
# webkit use libsoup instead of libcurl.
#if proxy:
# settings.set_property("use-proxy", True)
except:
pass
#settings.set_property("ident-string", get_identity())
# do we need it ? Yes if webkit avoid to use local files for security
## The following available starting from WebKitGTK+ 1.1.13
#settings.set_property("enable-universal-access-from-file-uris", True)
self.browser = WEBKIT
self.title = None
self.frame = self.window.get_main_frame()
self.frame.connect("load-done", self.page_loaded)
self.frame.connect("title-changed", self.get_title)
self.fct = None
def page_loaded(self, *args):
"""
We just loaded one page in the browser.
Set the button sensitivity
"""
self.set_button_sensitivity()
def set_button_sensitivity(self):
"""
We must set the back and forward button in the HtmlView class.
"""
self.fct()
def open(self, url):
"""
We need to load the page in the browser.
"""
self.window.open(url)
def refresh(self):
"""
We need to reload the page in the browser.
"""
self.window.reload()
def get_title(self, *args):
"""
We need to get the html title page.
"""
self.title = self.frame.get_title()
def execute_script(self, url):
"""
We need to execute a javascript function into the browser
"""
self.window.execute_script(url)
def get_uri(self):
"""
What is the uri loaded in the browser ?
"""
return self.window.get_main_frame().get_uri()
#-------------------------------------------------------------------------
#
# The Mozilla or Gecko Renderer class
#
#-------------------------------------------------------------------------
class RendererMozilla(Renderer):
"""
Implementation of Renderer with gtkmozembed
"""
def __init__(self):
Renderer.__init__(self)
if hasattr(gtkmozembed, 'set_profile_path'):
set_profile_path = gtkmozembed.set_profile_path
else:
set_profile_path = gtkmozembed.gtk_moz_embed_set_profile_path
set_profile_path(MOZEMBED_PATH, MOZEMBED_SUBPATH)
self.__set_mozembed_proxy()
self.window = gtkmozembed.MozEmbed()
self.browser = MOZILLA
self.title = None
self.handler = self.window.connect("net-stop", self.page_loaded)
self.window.connect("title", self.get_title)
self.fct = None
def page_loaded(self, *args):
"""
We just loaded one page in the browser.
Set the button sensitivity
"""
self.set_button_sensitivity()
def set_button_sensitivity(self):
"""
We must set the back and forward button in the HtmlView class.
"""
self.fct()
def open(self, url):
"""
We need to load the page in the browser.
"""
self.window.load_url(url)
def get_title(self, *args):
"""
We need to get the html title page.
"""
self.title = self.window.get_title()
def execute_script(self, url):
"""
We need to execute a javascript function into the browser
"""
self.window.load_url(url)
def get_uri(self):
"""
What is the uri loaded in the browser ?
"""
return self.window.get_location()
def refresh(self):
"""
We need to reload the page in the browser.
"""
self.window.reload(0)
def __set_mozembed_proxy(self):
"""
Try to see if we have some proxy environment variable.
http_proxy in our case.
The standard format is : http://[user:password@]proxy:port/
"""
try:
proxy = os.environ['http_proxy']
if proxy:
host_port = None
prefs = open(os.path.join(MOZEMBED_SUBPATH,
"prefs.js"),
"w+")
parts = urlparse.urlparse(proxy)
if not parts[0] or parts[0] == 'http':
host_port = parts[1]
hport = host_port.split(':')
host = hport[0].strip()
if host:
try:
port = int(hport[1])
except:
user = host
uprox = hport[1].split('@')
password = uprox[0]
host = uprox[1]
port = int(hport[2])
if port and host:
port = str(port)
prefs.write('user_pref("network.proxy')
prefs.write('.type", 1);\r\n')
prefs.write('user_pref("network.proxy')
prefs.write('.http", "'+host+'");\r\n')
prefs.write('user_pref("network.proxy')
prefs.write('.http_port", '+port+');\r\n')
prefs.write('user_pref("network.proxy')
prefs.write('.no_proxies_on",')
prefs.write(' "127.0.0.1,localhost,localhost')
prefs.write('.localdomain");\r\n')
prefs.write('user_pref("network.proxy')
prefs.write('.share_proxy_settings", true);\r\n')
prefs.write('user_pref("network.http')
prefs.write('.proxy.pipelining", true);\r\n')
prefs.write('user_pref("network.http')
prefs.write('.proxy.keep-alive", true);\r\n')
prefs.write('user_pref("network.http')
prefs.write('.proxy.version", 1.1);\r\n')
prefs.write('user_pref("network.http')
prefs.write('.sendRefererHeader, 0);\r\n')
prefs.write('user_pref("general.useragent')
prefs.write('.extra.firefox, "Mozilla/5.0");\r\n')
prefs.write('user_pref("general.useragent')
prefs.write('.locale, "fr");\r\n')
prefs.close()
except:
try: # trying to remove pref.js in case of proxy change.
os.remove(os.path.join(MOZEMBED_SUBPATH, "prefs.js"))
except:
pass
#-------------------------------------------------------------------------
#
# HtmlView
#
#-------------------------------------------------------------------------
class HtmlView(PageView.PageView):
"""
HtmlView is a view showing a top widget with controls, and a bottom part
with an embedded webbrowser showing a given URL
"""
def __init__(self, dbstate, uistate, title=_('HtmlView')):
PageView.PageView.__init__(self, title, dbstate, uistate)
self.dbstate = dbstate
self.external_url = False
self.need_to_resize = False
self.back_action = None
self.forward_action = None
self.renderer = None
self.urlfield = ""
self.htmlfile = ""
self.table = ""
self.browser = NOWEB
self.bootstrap_handler = None
self.box = None
def build_widget(self):
"""
Builds the interface and returns a gtk.Container type that
contains the interface. This containter will be inserted into
a gtk.Notebook page.
"""
self.box = gtk.VBox(False, 4)
#top widget at the top
self.box.pack_start(self.top_widget(), False, False, 0 )
#web page under it in a scrolled window
self.table = gtk.Table(1, 1, False)
frame = gtk.ScrolledWindow(None, None)
frame.set_shadow_type(gtk.SHADOW_NONE)
frame.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
frame.add_with_viewport(self.table)
self.bootstrap_handler = self.box.connect("size-request",
self.init_parent_signals_for_map)
self.table.get_parent().set_shadow_type(gtk.SHADOW_NONE)
self.table.set_row_spacings(1)
self.table.set_col_spacings(0)
if (TOOLKIT == WEBKIT) :
# We use webkit
self.renderer = RendererWebkit()
elif (TOOLKIT == MOZILLA) :
# We use gtkmozembed
self.renderer = RendererMozilla()
self.table.add(self.renderer.get_window())
self.box.pack_start(frame, True, True, 0)
# this is used to activate the back and forward button
# from the renderer class.
self.renderer.fct = self.set_button_sensitivity
self.renderer.show_all()
#load a welcome html page
urlhelp = self._create_start_page()
self.open(urlhelp)
return self.box
def top_widget(self):
"""
The default class gives a widget where user can type an url
"""
hbox = gtk.HBox(False, 4)
self.urlfield = gtk.Entry()
self.urlfield.set_text("http://gramps-project.org")
self.urlfield.connect('activate', self._on_activate)
hbox.pack_start(self.urlfield, True, True, 4)
button = gtk.Button(stock=gtk.STOCK_APPLY)
button.connect('clicked', self._on_activate)
hbox.pack_start(button, False, False, 4)
return hbox
def set_button_sensitivity(self):
"""
Set the backward and forward button in accordance to the browser.
"""
self.forward_action.set_sensitive(self.renderer.can_go_forward())
self.back_action.set_sensitive(self.renderer.can_go_back())
def open(self, url):
"""
open an url
"""
self.renderer.open(url)
def go_back(self, button):
"""
Go to the previous loaded url.
"""
self.renderer.go_back()
self.set_button_sensitivity()
self.external_uri()
def go_forward(self, button):
"""
Go to the next loaded url.
"""
self.renderer.go_forward()
self.set_button_sensitivity()
self.external_uri()
def refresh(self, button):
"""
Force to reload the page.
"""
self.renderer.refresh()
def external_uri(self):
"""
used to resize or not resize depending on external or local file.
"""
uri = self.renderer.get_uri()
if self.external_url:
self.external_url = False
self.need_to_resize = True
else:
try:
if uri.find(self.htmlfile) == -1:
# external web page or start_page
self.need_to_resize = True
else:
self.need_to_resize = False
except:
pass
def _on_activate(self, nobject):
"""
Here when we activate the url button.
"""
url = self.urlfield.get_text()
if url.find('://') == -1:
url = 'http://'+ url
self.external_url = True
self.open(url)
def build_tree(self):
"""
Rebuilds the current display. Called from ViewManager
"""
pass #htmlview is build on click and startup
def get_stock(self):
"""
Returns the name of the stock icon to use for the display.
This assumes that this icon has already been registered with
GNOME as a stock icon.
"""
return 'gramps-geo'
def ui_definition(self):
"""
Specifies the UIManager XML code that defines the menus and buttons
associated with the interface.
"""
return '''<ui>
<toolbar name="ToolBar">
<placeholder name="CommonNavigation">
<toolitem action="Back"/>
<toolitem action="Forward"/>
<toolitem action="Refresh"/>
</placeholder>
</toolbar>
</ui>'''
def define_actions(self):
"""
Required define_actions function for PageView. Builds the action
group information required.
"""
HtmlView._define_actions_fw_bw(self)
def _define_actions_fw_bw(self):
"""
prepare the forward and backward buttons.
add the Backward action to handle the Backward button
accel doesn't work in webkit and gtkmozembed !
we must do that ...
"""
self.back_action = gtk.ActionGroup(self.title + '/Back')
self.back_action.add_actions([
('Back', gtk.STOCK_GO_BACK, _("_Back"),
"<ALT>Left", _("Go to the previous page in the history"),
self.go_back)
])
self._add_action_group(self.back_action)
# add the Forward action to handle the Forward button
self.forward_action = gtk.ActionGroup(self.title + '/Forward')
self.forward_action.add_actions([
('Forward', gtk.STOCK_GO_FORWARD, _("_Forward"),
"<ALT>Right", _("Go to the next page in the history"),
self.go_forward)
])
self._add_action_group(self.forward_action)
# add the Refresh action to handle the Refresh button
self._add_action('Refresh', gtk.STOCK_REFRESH, _("_Refresh"),
callback=self.refresh,
accel="<Ctl>R",
tip=_("Stop and reload the page."))
def init_parent_signals_for_map(self, widget, event):
"""
Required to properly bootstrap the signal handlers.
This handler is connected by build_widget.
After the outside ViewManager has placed this widget we are
able to access the parent container.
"""
pass
def get_renderer(self):
"""
return the renderer : Webkit, Mozilla or None
"""
#return self.browser
return KITNAME[self.browser]
def _create_start_page(self):
"""
This command creates a default start page, and returns the URL of
this page.
"""
tmpdir = GEOVIEW_SUBPATH
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>
</body>
</html>
""" % { 'height' : 600,
'title' : _('Start page for the Html View'),
'content': _('Type a webpage address at the top, and hit'
' the execute button to load a webpage in this'
' page\n<br>\n'
'For example: <b>http://gramps-project.org</p>')
}
filename = os.path.join(tmpdir, 'startpage.html')
ufd = file(filename, "w+")
ufd.write(data)
ufd.close()
return urlparse.urlunsplit(('file', '',
URL_SEP.join(filename.split(os.sep)),
'', ''))

View File

@ -115,6 +115,8 @@ def register_stock_icons ():
('gramps-font-bgcolor', _('Font Background Color'), gtk.gdk.CONTROL_MASK, 0, ''),
('gramps-gramplet', _('Gramplets'), gtk.gdk.CONTROL_MASK, 0, ''),
('gramps-geo', _('GeoView'), gtk.gdk.CONTROL_MASK, 0, ''),
('gramps-geo-mainmap', _('GeoView'), gtk.gdk.CONTROL_MASK, 0, ''),
('gramps-geo-altmap', _('GeoView'), gtk.gdk.CONTROL_MASK, 0, ''),
('gramps-lock', _('Public'), gtk.gdk.CONTROL_MASK, 0, ''),
('gramps-media', _('Media'), gtk.gdk.CONTROL_MASK, 0, ''),
('gramps-notes', _('Notes'), gtk.gdk.CONTROL_MASK, 0, ''),

View File

@ -19,6 +19,8 @@ dist_pkgdata_DATA = \
gramps-font-color.png \
gramps-font.png \
gramps-geo.png \
gramps-geo-mainmap.png \
gramps-geo-altmap.png \
gramps-gramplet.png \
gramps-lock.png \
gramps-media.png \

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

View File

@ -19,6 +19,8 @@ dist_pkgdata_DATA = \
gramps-font-color.png \
gramps-font.png \
gramps-geo.png \
gramps-geo-mainmap.png \
gramps-geo-altmap.png \
gramps-gramplet.png \
gramps-lock.png \
gramps-media.png \

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 B

View File

@ -19,6 +19,8 @@ dist_pkgdata_DATA = \
gramps-font-color.png \
gramps-font.png \
gramps-geo.png \
gramps-geo-mainmap.png \
gramps-geo-altmap.png \
gramps-gramplet.png \
gramps-lock.png \
gramps-media.png \

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -19,6 +19,8 @@ dist_pkgdata_DATA = \
gramps-font-color.svg \
gramps-font.svg \
gramps-geo.svg \
gramps-geo-mainmap.svg \
gramps-geo-altmap.svg \
gramps-gramplet.svg \
gramps-lock.svg \
gramps-media.svg \

View File

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg3906"
version="1.1"
inkscape:version="0.47pre0 r21549"
sodipodi:docname="gramps-geo-altmap.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<title
id="title2916">gramps-geo-altmap</title>
<defs
id="defs3908">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective3914" />
<inkscape:perspective
id="perspective3891"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3668"
id="linearGradient6262"
gradientUnits="userSpaceOnUse"
x1="288.36801"
y1="423.65311"
x2="359.15457"
y2="423.65311" />
<linearGradient
inkscape:collect="always"
id="linearGradient3668">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3670" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3672" />
</linearGradient>
<inkscape:perspective
id="perspective4035"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3668-1"
id="linearGradient2933"
gradientUnits="userSpaceOnUse"
x1="288.36801"
y1="423.65311"
x2="359.15457"
y2="423.65311" />
<linearGradient
inkscape:collect="always"
id="linearGradient3668-1">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3670-0" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3672-6" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7"
inkscape:cx="32.471316"
inkscape:cy="23.449345"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1078"
inkscape:window-height="707"
inkscape:window-x="260"
inkscape:window-y="117"
inkscape:window-maximized="0" />
<metadata
id="metadata3911">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>gramps-geo-altmap</dc:title>
<cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
<dc:date>2009-09-07</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Serge Noiraud</dc:title>
</cc:Agent>
</dc:creator>
<dc:description>used to select the proprietary map.</dc:description>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
d="m 20.680283,39.12631 c 10.271495,2.159013 8.307555,-3.123848 8.307555,-3.123848 l 5.071932,-3.401433 c 0,0 2.637138,0.21373 4.387829,0.09533 0.999233,-0.06758 2.680145,-1.046411 2.357227,-2.201648 -1.218455,-4.359011 -7.427195,-6.950657 -11.550556,-7.138293 -2.033311,-0.09253 -2.952564,0.696822 -2.952564,0.696822 -1.539345,0.969216 0.08748,3.894222 0.08748,3.894222 l -4.049411,4.019562 c -9.725562,-0.791858 -4.950964,4.931448 -4.950964,4.931448 l -9.8557157,9.159757 c 0,0 -0.087216,1.528401 2.7064097,-0.01094 l 10.440776,-6.920977 0,-6e-6 z"
id="path2453-3"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17199267px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cccssscccccccc" />
<g
id="g2893-2"
style="fill:#ef2929;fill-opacity:1"
transform="matrix(0.17199268,0,0,0.17199268,-43.009698,-36.289865)">
<path
sodipodi:nodetypes="ccccc"
style="fill:#ef2929;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path3225-0"
d="M 319.44354,366.56878 292.72208,469.6616 c -2.1317,22.81794 12.07963,3.30695 12.07963,3.30695 l 50.2167,-93.83671 -35.57487,-12.56306 z" />
</g>
<path
d="m 26.452623,25.877284 c -0.54896,1.377469 -2.093603,2.400406 -4.197855,2.780016 -2.10425,0.37961 -4.742193,0.111221 -7.169094,-0.729399 C 12.658773,27.087284 10.472803,25.68479 9.1448974,24.116365 7.8169918,22.547941 7.3635056,20.832901 7.912465,19.455432 c 0.5489593,-1.37747 2.496221,-2.014627 4.624013,-2.098162 2.502928,-0.09826 4.54825,0.12749 6.413449,0.75797 1.865198,0.630481 3.550276,1.665691 5.332716,3.186344 1.562225,1.33278 2.718939,3.198232 2.16998,4.5757 z"
id="path3227-6"
style="fill:#ef2929;fill-opacity:1;stroke:#000000;stroke-width:1.03195608000000005;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:nodetypes="csssssssc" />
<path
d="m 14.977112,10.44911 -3.106086,10.037413 c 0.969617,3.707123 8.377748,6.060349 10.998278,3.660376 l 3.733123,-8.867937"
id="path3233-1"
style="fill:#ef2929;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.04616748999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="cccc" />
<path
d="M 14.235182,3.0499825 12.793997,6.865199 c 0.1135,5.058298 13.043976,10.582035 18.529149,7.01257 l 1.653369,-3.9908943"
id="path3231-5"
style="fill:#ef2929;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.03195608000000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="cccc" />
<path
d="M 32.671194,10.721426 C 32.017559,11.57151 30.3835,12.0047 28.23049,11.898659 26.077481,11.792617 23.432054,11.148649 21.041311,10.148622 18.650568,9.1485944 16.543969,7.8048294 15.316445,6.4968233 14.08892,5.1888156 13.585133,4.0179161 14.240144,3.1684081 14.893779,2.3183239 16.698302,1.7999036 18.851311,1.905944 c 2.15301,0.1060421 4.798436,0.7500102 7.189179,1.7500375 2.390743,1.0000274 4.497342,2.3437933 5.724866,3.6517994 1.227526,1.3080077 1.560849,2.5641373 0.905838,3.4136451 z"
id="path3229-5"
style="fill:#ef2929;fill-opacity:1;stroke:#000000;stroke-width:1.03195608000000005;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:nodetypes="cssscsssc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg2885"
version="1.1"
inkscape:version="0.47pre0 r21549"
sodipodi:docname="gramps-geo-mainmap.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<title
id="title2826">gramps-geo-mainmap</title>
<defs
id="defs2887">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective2893" />
<inkscape:perspective
id="perspective2870"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3668"
id="linearGradient3678"
x1="288.36801"
y1="423.65311"
x2="359.15457"
y2="423.65311"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient3668">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3670" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3672" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3668"
id="linearGradient2933"
gradientUnits="userSpaceOnUse"
x1="288.36801"
y1="423.65311"
x2="359.15457"
y2="423.65311" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7"
inkscape:cx="24"
inkscape:cy="35.428571"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1078"
inkscape:window-height="778"
inkscape:window-x="49"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata2890">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>gramps-geo-mainmap</dc:title>
<dc:date>2009-09-07</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Serge Noiraud</dc:title>
</cc:Agent>
</dc:creator>
<dc:description>used to select the openstreetmap map.</dc:description>
<cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g2924"
transform="matrix(0.17199268,0,0,0.17199268,22.498415,21.978915)">
<path
sodipodi:nodetypes="cccssscccccccc"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path2453"
d="M -7.3280437,99.688239 C 52.392489,112.24117 40.973749,81.525559 40.973749,81.525559 l 29.48923,-19.77662 c 0,0 15.33285,1.24267 25.51172,0.55428 5.809741,-0.39292 15.582901,-6.08404 13.705391,-12.80082 C 102.59575,24.158229 66.496889,9.0898787 42.522839,7.9989287 c -11.82208,-0.53797 -17.1668,4.0514603 -17.1668,4.0514603 -8.95006,5.63522 0.50864,22.64179 0.50864,22.64179 L 2.3205863,58.062719 c -56.5463703,-4.60402 -28.7859003,28.67243 -28.7859003,28.67243 l -57.30311,53.256671 c 0,0 -0.50709,8.88643 15.73561,-0.0636 l 60.7047703,-40.239951 0,-3e-5 z" />
<g
transform="translate(-377.63439,-338.79656)"
style="fill:url(#linearGradient2933);fill-opacity:1"
id="g2893">
<path
d="M 319.44354,366.56878 292.72208,469.6616 c -2.1317,22.81794 12.07963,3.30695 12.07963,3.30695 l 50.2167,-93.83671 -35.57487,-12.56306 z"
id="path3225"
style="fill:#8ae234;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="ccccc" />
</g>
<path
sodipodi:nodetypes="csssssssc"
style="fill:#8ae234;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3227"
d="m 26.233499,22.655739 c -3.19176,8.00888 -12.17263,13.95644 -24.4071727,16.16357 -12.2345303,2.20713 -27.5720603,0.64666 -41.6825503,-4.24087 -14.11049,-4.88752 -26.82016,-13.0419 -34.54087,-22.16104 -7.72071,-9.1191303 -10.35737,-19.0907203 -7.16561,-27.0996 3.19176,-8.008884 14.51353,-11.713444 26.88494,-12.199134 14.55253,-0.57132 26.44444,0.74125 37.28908,4.40699 10.8446403,3.665744 20.6420203,9.684664 31.005483,18.5260437 9.08309,7.74905 15.80846,18.5951603 12.6167,26.6040403 z" />
<path
sodipodi:nodetypes="cccc"
style="fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.08262777;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path3233"
d="m -40.487424,-67.046765 -18.05941,58.3595337 C -52.909284,12.866729 -9.8369237,26.548859 5.3993663,12.594929 L 27.104489,-38.965035" />
<path
sodipodi:nodetypes="cccc"
style="fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path3231"
d="m -44.801154,-110.06678 -8.37934,22.182435 c 0.65991,29.40996 75.840293,61.52608 107.732193,40.77249 l 9.61302,-23.20386" />
<path
sodipodi:nodetypes="cssscsssc"
style="fill:#8ae234;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3229"
d="m 62.389519,-65.463465 c -3.80036,4.94256 -13.30111,7.46121 -25.81914,6.84467 -12.51803,-0.61655 -27.8990727,-4.36071 -41.7993327,-10.17507 -13.9002603,-5.81436 -26.1484503,-13.62728 -33.2855203,-21.23229 -7.13708,-7.60502 -10.0662,-14.412865 -6.25783,-19.352075 3.80036,-4.94256 14.29222,-7.95676 26.81025,-7.34022 12.5180303,0.61655 27.8990703,4.36071 41.799333,10.17507 13.90026,5.81436 26.14845,13.627285 33.28552,21.232295 7.13708,7.60502 9.07509,14.90841 5.26672,19.84762 z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB