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
@ -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",
|
||||
}
|
||||
|
664
src/DataViews/HtmlRenderer.py
Normal 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)),
|
||||
'', ''))
|
||||
|
@ -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, ''),
|
||||
|
@ -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 \
|
||||
|
BIN
src/images/16x16/gramps-geo-altmap.png
Normal file
After Width: | Height: | Size: 654 B |
BIN
src/images/16x16/gramps-geo-mainmap.png
Normal file
After Width: | Height: | Size: 678 B |
@ -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 \
|
||||
|
BIN
src/images/22x22/gramps-geo-altmap.png
Normal file
After Width: | Height: | Size: 914 B |
BIN
src/images/22x22/gramps-geo-mainmap.png
Normal file
After Width: | Height: | Size: 985 B |
@ -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 \
|
||||
|
BIN
src/images/48x48/gramps-geo-altmap.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
src/images/48x48/gramps-geo-mainmap.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
@ -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 \
|
||||
|
177
src/images/scalable/gramps-geo-altmap.svg
Normal 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 |
162
src/images/scalable/gramps-geo-mainmap.svg
Normal 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 |