Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Francis <francis@sugarlabs.org>2012-10-02 01:20:34 (GMT)
committer Daniel Francis <francis@sugarlabs.org>2012-10-02 01:20:34 (GMT)
commite1a599bb8508e1a0607e052a2f086289844dee60 (patch)
tree20473626eef9a8891cd4a77769d0e0dd81c3fd04
Initial commit
-rw-r--r--.gitignore4
-rw-r--r--Makefile19
-rw-r--r--activity.info9
-rw-r--r--activity.py71
-rw-r--r--activity/activity-sudoku.sugar.svg29
-rw-r--r--activity/activity-sudoku.svg29
-rw-r--r--activity/activity.info9
-rwxr-xr-xapplication.py267
-rw-r--r--canvas.py39
-rw-r--r--data/appicon.svg3183
-rw-r--r--desktop/sweetener/__init__.py19
-rw-r--r--desktop/sweetener/basic_options.py71
-rw-r--r--desktop/sweetener/item.py87
-rw-r--r--desktop/sweetener/itembox.py33
-rw-r--r--desktop/sweetener/itemgroup.py85
-rw-r--r--desktop/sweetener/stock.py75
-rw-r--r--info.py70
-rw-r--r--makesripts/activity_luncher.py44
-rw-r--r--makesripts/svg2png.py30
-rw-r--r--options.py34
-rwxr-xr-xsetup.py21
-rwxr-xr-xsudoku35
-rw-r--r--sugar/sweetener/__init__.py19
-rw-r--r--sugar/sweetener/basic_options.py45
-rw-r--r--sugar/sweetener/item.py87
-rw-r--r--sugar/sweetener/itembox.py36
-rw-r--r--sugar/sweetener/stock.py77
27 files changed, 4527 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9f68a4d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+*~
+*.pyc
+sudoku.desktop
+sudoku.png
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..04eca7b
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,19 @@
+N=`python -c "import info; print info.lower_name"`
+M=`python -c "import info; print info.file_filter_mime.replace('/', '-')"`
+P=`python -c "import info; print info.file_filter_patterns"`
+activity.info:
+ python makescripts/activity_luncher.py
+activity: activity.info mimetypes.xml
+ cp activity.info activity/
+ if [ -f mimetypes.xml ]; then cp mimetypes.xml activity; fi
+app-entry.desktop: app-icon
+ python makescripts/desktop_luncher.py
+install: app-entry.desktop mimetypes.xml
+ python makescripts/systeminstall.py
+ mv app-entry.desktop $N.desktop
+ xdg-desktop-menu install $N.desktop
+ if [ -f mimetypes.xml ]; then cp mimetypes.xml $M.xml; xdg-mime install $M.xml; python makescripts/svg2png.py activity/$M.svg ./mimetype.png; xdg-icon-resource install --context mimetypes --size 48 mimetype.png $M; fi
+app-icon:
+ python makescripts/svg2png.py data/appicon.svg $N.png
+mimetypes.xml:
+ if [ "$P" = "[]" ]; then echo "No mime types"; else python makescripts/mime_type.py; fi
diff --git a/activity.info b/activity.info
new file mode 100644
index 0000000..475641f
--- /dev/null
+++ b/activity.info
@@ -0,0 +1,9 @@
+[Activity]
+name = Sudoku
+activity_version = 1
+show_launcher = 1
+bundle_id = org.gnome.Sudoku
+exec = sugar-activity activity.Activity -s
+icon = activity-sudoku
+license = GPLv3
+
diff --git a/activity.py b/activity.py
new file mode 100644
index 0000000..c868c66
--- /dev/null
+++ b/activity.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import tempfile
+import os
+os.environ['PROGRAMRUNNING'] = 'SUGAR'
+import logging
+logging.basicConfig(level=logging.DEBUG)
+logger = logging.getLogger('graph-plotter')
+from gettext import gettext as _
+
+import gtk
+
+from sugar.datastore import datastore
+from sugar.activity import activity
+
+try:
+ import sweetener
+except ImportError:
+ import sys
+ sys.path.append(os.path.abspath('./sugar'))
+ import sweetener
+
+os.environ['DATA_DIR'] = os.path.abspath('./data')
+
+from options import Options
+from canvas import Canvas
+
+
+class Activity(activity.Activity):
+ def __init__(self, handle):
+ activity.Activity.__init__(self, handle)
+ self.options = Options(self)
+ self.options.show()
+ self.set_toolbar_box(self.options)
+ self.canvas = Canvas(self.options, self)
+ self.canvas.show()
+ self.set_canvas(self.canvas)
+
+ def export(self, widget, data):
+ jobject = datastore.create()
+ jobject.metadata['title'] = self.metadata['title']
+ mime_type = data[1]
+ jobject.metadata['mime_type'] = mime_type
+ file_path = tempfile.mktemp()
+ self.canvas.exports[mime_type](file_path)
+ jobject.set_file_path(file_path)
+ datastore.write(jobject)
+
+ def read_file(self, path):
+ return self.canvas.read_file(path)
+
+ def write_file(self, path):
+ return self.canvas.write_file(path)
diff --git a/activity/activity-sudoku.sugar.svg b/activity/activity-sudoku.sugar.svg
new file mode 100644
index 0000000..066871c
--- /dev/null
+++ b/activity/activity-sudoku.sugar.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#666666">
+ <!ENTITY fill_color "#FFFFFF">
+]><svg height="48" id="svg3539" version="1.1" width="48" xmlns="http://www.w3.org/2000/svg">
+ <g id="layer1">
+ <path d="M 9.7583524,9.0657498 C 8.9697682,9.8527968 0.69251087,38.994211 1.6223611,39.922253 c 0.9532282,0.95137 43.8577119,0.888505 44.7479519,0 0.9153,-0.913515 -7.396072,-30.1180252 -8.135991,-30.8565032 -0.716813,-0.715417 -27.734711,-0.739814 -28.4759696,0 z" id="path4736" style="fill:&fill_color;;fill-opacity:1;fill-rule:evenodd;stroke:&stroke_color;;stroke-width:1.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:12;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="M 10.236395,9.7634508 C 9.4765551,10.514403 1.9932492,38.487872 2.3807047,39.221096 c 0.3666403,0.693833 42.5448923,0.660093 43.1493393,0.01624 0.627684,-0.668611 -7.142741,-28.769275 -7.85569,-29.4738852 -0.690681,-0.682609 -26.723721,-0.705887 -27.437959,0 z" id="path4754" style="fill:none;stroke:&stroke_color;;stroke-width:1.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:12;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="M 11.877407,12.019609 36.174019,12.04192 40.81915,36.055482 7.2177193,36.099676 11.877407,12.019609 z" id="path4818" style="fill:&fill_color;;fill-opacity:1;fill-rule:evenodd;stroke:&stroke_color;;stroke-width:1.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="m 11.002802,19.470126 26.116221,0.05075 1.339748,6.966618 -28.8740169,0 1.4180479,-7.017368 z" id="path4820" style="fill:none;stroke:&stroke_color;;stroke-width:0.9999997px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+ <path d="m 20.009702,12.553803 -1.728898,22.985142 11.408693,-0.0155 -1.576348,-22.969646 -8.103447,0 z" id="path4822" style="fill:none;stroke:&stroke_color;;stroke-width:0.9999997px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+ <path d="m 12.307324,12.504444 23.440806,0.05748 4.452301,22.983231 -32.3639933,0.0442 4.4708863,-23.084902 z" id="path8451" style="fill:none;stroke:&stroke_color;;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="m 14.93714,13.974525 2.016388,0 0,0.479153 -1.605442,0 c 0,0 -0.342881,0.982266 -0.260202,0.96817 0.08268,-0.01409 0.165353,-0.02114 0.248032,-0.02114 0.469755,3e-6 0.841803,0.128717 1.116144,0.386141 0.274336,0.257429 0.411505,0.461679 0.411508,0.901371 -3e-6,0.452847 -0.140931,0.660386 -0.422782,0.911236 -0.281857,0.25085 -0.679272,0.376276 -1.192244,0.376276 -0.176631,0 -0.356548,-0.01503 -0.539752,-0.0451 -0.183206,-0.03007 -0.372518,-0.07516 -0.567937,-0.135291 l 0,-0.572165 c 0.169112,0.09207 0.343862,0.160658 0.52425,0.205754 0.180384,0.0451 0.371106,0.06764 0.572165,0.06764 0.32507,0 0.582496,-0.0855 0.77228,-0.256487 0.18978,-0.170991 0.284671,-0.258742 0.284674,-0.551871 -3e-6,-0.293128 -0.09489,-0.380878 -0.284674,-0.551871 -0.189784,-0.17099 -0.44721,-0.256486 -0.77228,-0.256489 -0.152204,3e-6 -0.303936,0.01691 -0.455196,0.05073 -0.151263,0.03382 -0.305813,0.08644 -0.46365,0.157838 l 0.618718,-2.113909 z" id="text6059" style="font-size:8px;font-style:normal;font-weight:normal;fill:&stroke_color;;stroke:none;font-family:Bitstream Vera Sans"/>
+ <path d="m 31.688229,33.009728 0.109375,-0.265625 c 0.197915,0.09375 0.575213,0.518919 0.778339,0.568397 0.203124,0.04948 1.418808,0.07422 1.614122,0.07422 0.520831,0 0.918617,-0.17513 1.19336,-0.525391 0.274736,-0.350259 0.203084,-0.931715 0.11715,-1.551509 -0.151045,0.223961 -0.563422,0.351642 -0.79519,0.471431 -0.231774,0.119794 -0.488284,0.179689 -0.769531,0.179688 -0.583335,1e-6 -1.044923,-0.176431 -1.384766,-0.529297 -0.339844,-0.352862 -0.509766,-0.835283 -0.509765,-1.447266 -10e-7,-0.598954 0.177082,-1.079422 0.53125,-1.441406 0.354165,-0.361974 0.825519,-0.542963 1.414062,-0.542969 0.674476,6e-6 1.18945,0.258469 1.544922,0.775391 0.355464,0.516931 0.506209,1.18598 0.621591,2.163565 0.09375,0.794273 0.268033,1.741384 -0.168161,2.28956 -0.436201,0.548177 -0.913414,0.83789 -1.65039,0.83789 -0.197919,0 -1.327263,0.02524 -1.727404,-0.07422 -0.453898,-0.112814 -0.637715,-0.32621 -0.840839,-0.498085 l -0.07813,-0.484375 z m 2.298406,-1.665978 c 0.354164,3e-6 0.634763,-0.121091 0.841797,-0.363281 0.207028,-0.242185 0.310543,-0.574215 0.310547,-0.996094 -4e-6,-0.419266 -0.103519,-0.750646 -0.310547,-0.994141 -0.207034,-0.243484 -0.487633,-0.365229 -0.841797,-0.365234 -0.354169,5e-6 -0.634767,0.12175 -0.841797,0.365234 -0.207032,0.243495 -0.310548,0.574875 -0.310547,0.994141 -10e-7,0.421879 0.103515,0.753909 0.310547,0.996094 0.20703,0.24219 0.487628,0.363284 0.841797,0.363281 l 0,0 z" id="text6067" style="font-size:8px;font-style:normal;font-weight:normal;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"/>
+ <path d="m 21.242802,26.586927 c 0.313708,0.06707 0.558727,0.206619 0.735057,0.418642 0.176324,0.212028 0.264487,0.473814 0.264491,0.78536 -4e-6,0.478139 -0.164431,0.848102 -0.493284,1.109887 -0.328858,0.261787 -0.796179,0.39268 -1.401963,0.39268 -0.203373,0 -0.412694,-0.02001 -0.627963,-0.06004 -0.215272,-0.04002 -0.437574,-0.100063 -0.666906,-0.180113 l 0,-0.632831 c 0.181735,0.106013 0.380779,0.186064 0.597132,0.240151 0.216351,0.05409 0.442439,0.08113 0.678265,0.08113 0.411068,1e-6 0.724237,-0.08113 0.93951,-0.243396 0.215268,-0.162263 0.322903,-0.398087 0.322906,-0.707472 -3e-6,-0.285584 -0.100065,-0.508968 -0.300189,-0.670152 -0.200128,-0.16118 -0.478682,-0.241772 -0.835661,-0.241774 l -0.56468,0 0,-0.538717 0.590643,0 c 0.322362,3e-6 0.381869,-0.02783 0.55279,-0.156566 0.170915,-0.128726 0.256374,-0.314248 0.256377,-0.556566 -3e-6,-0.248802 -0.08817,-0.439733 -0.26449,-0.572793 -0.17633,-0.133053 -0.241786,-0.23611 -0.57064,-0.236115 -0.179574,5e-6 -0.158258,-0.01705 -0.363792,0.02189 -0.205536,0.03895 -0.431624,0.09953 -0.678264,0.181736 l 0,-0.584152 c 0.248804,-0.06923 0.481923,-0.121152 0.699359,-0.155774 0.217432,-0.03461 0.208557,-0.01539 0.401112,-0.01539 0.497609,5e-6 0.704235,0.149578 0.99415,0.375661 0.289908,0.226093 0.434864,0.53169 0.434868,0.916794 -4e-6,0.26828 -0.07681,0.494909 -0.230415,0.679887 -0.153614,0.184984 -0.184994,0.276644 -0.468413,0.348037 l 0,0 z" id="text6063" style="font-size:6.64634609px;font-style:normal;font-weight:normal;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" transform="scale(1.168941,0.855475)"/>
+ <path d="m 23.358116,17.359619 2.721366,0.03125 -0.03125,0.609009 -3.931044,0.03125 0,-0.452759 c 0.204185,-0.211286 0.63753,-0.374059 1.02244,-0.694669 0.53994,-0.449741 0.948936,-0.741727 1.039489,-0.844709 0.172224,-0.19353 0.292516,-0.357322 0.360876,-0.491376 0.06836,-0.13405 0.102534,-0.265882 0.102536,-0.395498 -2e-6,-0.211284 -0.07413,-0.38351 -0.222384,-0.516677 -0.148258,-0.133161 -0.341346,-0.199743 -0.579265,-0.199747 -0.168676,4e-6 -0.346672,0.0293 -0.533988,0.08789 -0.187319,0.0586 -0.387509,0.147371 -0.600571,0.266328 l 0,-0.54331 c 0.216613,-0.087 0.419022,-0.152691 0.607229,-0.197083 0.188204,-0.04438 0.36043,-0.06658 0.516677,-0.06658 0.41192,4e-6 0.740391,0.102984 0.985416,0.308941 0.245019,0.205964 0.36753,0.48117 0.367533,0.825618 -3e-6,0.163351 -0.03063,0.318265 -0.09188,0.464743 -0.06126,0.146483 -0.172673,0.319153 -0.334243,0.518009 -0.04439,0.05149 -0.185544,0.200192 -0.423462,0.446101 -0.237922,0.245911 -0.573496,0.589918 -1.006722,1.032022 l 0.03125,-0.21875 z" id="text6075" style="font-size:5.45440769px;font-style:normal;font-weight:normal;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"/>
+ <g id="g3501" transform="matrix(-0.905612,0.243597,0.243597,0.905612,6.124608,-36.67182)">
+ <g id="layer3" style="display:inline" transform="translate(-142,164.875)">
+ <g id="g2369" transform="translate(119.4063,-108.7494)">
+ <g id="g2321" transform="translate(-0.15625,-0.25)">
+ <path d="m 19.5,18 17,-17 3.5,3.5 -17,17 -5.5,1.5 2,-5 z" id="path2273" style="fill:&fill_color;;fill-opacity:1;fill-rule:evenodd;stroke:&stroke_color;;stroke-width:1.06632352;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="m 18.34633,22.276561 1.59781,-4.008434 c 0,0 1.150216,0.235272 1.852735,0.934998 0.702519,0.699726 0.957342,1.863907 0.957342,1.863907 l -4.407887,1.209529 z" id="path2298" style="fill:none;stroke:&stroke_color;"/>
+ <path d="M 17.5625,21.5 16.65625,23.75 19,23.09375 c 0.002,-0.03184 0,-0.06141 0,-0.09375 0,-0.802125 -0.645308,-1.459801 -1.4375,-1.5 z" id="path2283" style="fill:&stroke_color;;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"/>
+ </g>
+ </g>
+ </g>
+ <path d="m 14.44,56.18 c 0,0 2.8125,-2.71875 2.8125,-2.71875 1.875,-1.59375 4.9375,1.21875 3.4375,3.40625 0.03125,0 -2.75,2.8125 -2.75,2.8125 l -3.5,-3.5 z" id="path3443" style="fill:&stroke_color;;fill-opacity:1;fill-rule:evenodd;stroke:&stroke_color;;stroke-width:1.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"/>
+ </g>
+ </g>
+</svg>
diff --git a/activity/activity-sudoku.svg b/activity/activity-sudoku.svg
new file mode 100644
index 0000000..640ea6d
--- /dev/null
+++ b/activity/activity-sudoku.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#552287">
+ <!ENTITY fill_color "#349845">
+]><svg height="48" id="svg3539" version="1.1" width="48" xmlns="http://www.w3.org/2000/svg">
+ <g id="layer1">
+ <path d="M 9.7583524,9.0657498 C 8.9697682,9.8527968 0.69251087,38.994211 1.6223611,39.922253 c 0.9532282,0.95137 43.8577119,0.888505 44.7479519,0 0.9153,-0.913515 -7.396072,-30.1180252 -8.135991,-30.8565032 -0.716813,-0.715417 -27.734711,-0.739814 -28.4759696,0 z" id="path4736" style="fill:&fill_color;;fill-opacity:1;fill-rule:evenodd;stroke:&stroke_color;;stroke-width:1.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:12;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="M 10.236395,9.7634508 C 9.4765551,10.514403 1.9932492,38.487872 2.3807047,39.221096 c 0.3666403,0.693833 42.5448923,0.660093 43.1493393,0.01624 0.627684,-0.668611 -7.142741,-28.769275 -7.85569,-29.4738852 -0.690681,-0.682609 -26.723721,-0.705887 -27.437959,0 z" id="path4754" style="fill:none;stroke:&stroke_color;;stroke-width:1.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:12;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="M 11.877407,12.019609 36.174019,12.04192 40.81915,36.055482 7.2177193,36.099676 11.877407,12.019609 z" id="path4818" style="fill:&fill_color;;fill-opacity:1;fill-rule:evenodd;stroke:&stroke_color;;stroke-width:1.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="m 11.002802,19.470126 26.116221,0.05075 1.339748,6.966618 -28.8740169,0 1.4180479,-7.017368 z" id="path4820" style="fill:none;stroke:&stroke_color;;stroke-width:0.9999997px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+ <path d="m 20.009702,12.553803 -1.728898,22.985142 11.408693,-0.0155 -1.576348,-22.969646 -8.103447,0 z" id="path4822" style="fill:none;stroke:&stroke_color;;stroke-width:0.9999997px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+ <path d="m 12.307324,12.504444 23.440806,0.05748 4.452301,22.983231 -32.3639933,0.0442 4.4708863,-23.084902 z" id="path8451" style="fill:none;stroke:&stroke_color;;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="m 14.93714,13.974525 2.016388,0 0,0.479153 -1.605442,0 c 0,0 -0.342881,0.982266 -0.260202,0.96817 0.08268,-0.01409 0.165353,-0.02114 0.248032,-0.02114 0.469755,3e-6 0.841803,0.128717 1.116144,0.386141 0.274336,0.257429 0.411505,0.461679 0.411508,0.901371 -3e-6,0.452847 -0.140931,0.660386 -0.422782,0.911236 -0.281857,0.25085 -0.679272,0.376276 -1.192244,0.376276 -0.176631,0 -0.356548,-0.01503 -0.539752,-0.0451 -0.183206,-0.03007 -0.372518,-0.07516 -0.567937,-0.135291 l 0,-0.572165 c 0.169112,0.09207 0.343862,0.160658 0.52425,0.205754 0.180384,0.0451 0.371106,0.06764 0.572165,0.06764 0.32507,0 0.582496,-0.0855 0.77228,-0.256487 0.18978,-0.170991 0.284671,-0.258742 0.284674,-0.551871 -3e-6,-0.293128 -0.09489,-0.380878 -0.284674,-0.551871 -0.189784,-0.17099 -0.44721,-0.256486 -0.77228,-0.256489 -0.152204,3e-6 -0.303936,0.01691 -0.455196,0.05073 -0.151263,0.03382 -0.305813,0.08644 -0.46365,0.157838 l 0.618718,-2.113909 z" id="text6059" style="font-size:8px;font-style:normal;font-weight:normal;fill:&stroke_color;;stroke:none;font-family:Bitstream Vera Sans"/>
+ <path d="m 31.688229,33.009728 0.109375,-0.265625 c 0.197915,0.09375 0.575213,0.518919 0.778339,0.568397 0.203124,0.04948 1.418808,0.07422 1.614122,0.07422 0.520831,0 0.918617,-0.17513 1.19336,-0.525391 0.274736,-0.350259 0.203084,-0.931715 0.11715,-1.551509 -0.151045,0.223961 -0.563422,0.351642 -0.79519,0.471431 -0.231774,0.119794 -0.488284,0.179689 -0.769531,0.179688 -0.583335,1e-6 -1.044923,-0.176431 -1.384766,-0.529297 -0.339844,-0.352862 -0.509766,-0.835283 -0.509765,-1.447266 -10e-7,-0.598954 0.177082,-1.079422 0.53125,-1.441406 0.354165,-0.361974 0.825519,-0.542963 1.414062,-0.542969 0.674476,6e-6 1.18945,0.258469 1.544922,0.775391 0.355464,0.516931 0.506209,1.18598 0.621591,2.163565 0.09375,0.794273 0.268033,1.741384 -0.168161,2.28956 -0.436201,0.548177 -0.913414,0.83789 -1.65039,0.83789 -0.197919,0 -1.327263,0.02524 -1.727404,-0.07422 -0.453898,-0.112814 -0.637715,-0.32621 -0.840839,-0.498085 l -0.07813,-0.484375 z m 2.298406,-1.665978 c 0.354164,3e-6 0.634763,-0.121091 0.841797,-0.363281 0.207028,-0.242185 0.310543,-0.574215 0.310547,-0.996094 -4e-6,-0.419266 -0.103519,-0.750646 -0.310547,-0.994141 -0.207034,-0.243484 -0.487633,-0.365229 -0.841797,-0.365234 -0.354169,5e-6 -0.634767,0.12175 -0.841797,0.365234 -0.207032,0.243495 -0.310548,0.574875 -0.310547,0.994141 -10e-7,0.421879 0.103515,0.753909 0.310547,0.996094 0.20703,0.24219 0.487628,0.363284 0.841797,0.363281 l 0,0 z" id="text6067" style="font-size:8px;font-style:normal;font-weight:normal;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"/>
+ <path d="m 21.242802,26.586927 c 0.313708,0.06707 0.558727,0.206619 0.735057,0.418642 0.176324,0.212028 0.264487,0.473814 0.264491,0.78536 -4e-6,0.478139 -0.164431,0.848102 -0.493284,1.109887 -0.328858,0.261787 -0.796179,0.39268 -1.401963,0.39268 -0.203373,0 -0.412694,-0.02001 -0.627963,-0.06004 -0.215272,-0.04002 -0.437574,-0.100063 -0.666906,-0.180113 l 0,-0.632831 c 0.181735,0.106013 0.380779,0.186064 0.597132,0.240151 0.216351,0.05409 0.442439,0.08113 0.678265,0.08113 0.411068,1e-6 0.724237,-0.08113 0.93951,-0.243396 0.215268,-0.162263 0.322903,-0.398087 0.322906,-0.707472 -3e-6,-0.285584 -0.100065,-0.508968 -0.300189,-0.670152 -0.200128,-0.16118 -0.478682,-0.241772 -0.835661,-0.241774 l -0.56468,0 0,-0.538717 0.590643,0 c 0.322362,3e-6 0.381869,-0.02783 0.55279,-0.156566 0.170915,-0.128726 0.256374,-0.314248 0.256377,-0.556566 -3e-6,-0.248802 -0.08817,-0.439733 -0.26449,-0.572793 -0.17633,-0.133053 -0.241786,-0.23611 -0.57064,-0.236115 -0.179574,5e-6 -0.158258,-0.01705 -0.363792,0.02189 -0.205536,0.03895 -0.431624,0.09953 -0.678264,0.181736 l 0,-0.584152 c 0.248804,-0.06923 0.481923,-0.121152 0.699359,-0.155774 0.217432,-0.03461 0.208557,-0.01539 0.401112,-0.01539 0.497609,5e-6 0.704235,0.149578 0.99415,0.375661 0.289908,0.226093 0.434864,0.53169 0.434868,0.916794 -4e-6,0.26828 -0.07681,0.494909 -0.230415,0.679887 -0.153614,0.184984 -0.184994,0.276644 -0.468413,0.348037 l 0,0 z" id="text6063" style="font-size:6.64634609px;font-style:normal;font-weight:normal;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" transform="scale(1.168941,0.855475)"/>
+ <path d="m 23.358116,17.359619 2.721366,0.03125 -0.03125,0.609009 -3.931044,0.03125 0,-0.452759 c 0.204185,-0.211286 0.63753,-0.374059 1.02244,-0.694669 0.53994,-0.449741 0.948936,-0.741727 1.039489,-0.844709 0.172224,-0.19353 0.292516,-0.357322 0.360876,-0.491376 0.06836,-0.13405 0.102534,-0.265882 0.102536,-0.395498 -2e-6,-0.211284 -0.07413,-0.38351 -0.222384,-0.516677 -0.148258,-0.133161 -0.341346,-0.199743 -0.579265,-0.199747 -0.168676,4e-6 -0.346672,0.0293 -0.533988,0.08789 -0.187319,0.0586 -0.387509,0.147371 -0.600571,0.266328 l 0,-0.54331 c 0.216613,-0.087 0.419022,-0.152691 0.607229,-0.197083 0.188204,-0.04438 0.36043,-0.06658 0.516677,-0.06658 0.41192,4e-6 0.740391,0.102984 0.985416,0.308941 0.245019,0.205964 0.36753,0.48117 0.367533,0.825618 -3e-6,0.163351 -0.03063,0.318265 -0.09188,0.464743 -0.06126,0.146483 -0.172673,0.319153 -0.334243,0.518009 -0.04439,0.05149 -0.185544,0.200192 -0.423462,0.446101 -0.237922,0.245911 -0.573496,0.589918 -1.006722,1.032022 l 0.03125,-0.21875 z" id="text6075" style="font-size:5.45440769px;font-style:normal;font-weight:normal;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"/>
+ <g id="g3501" transform="matrix(-0.905612,0.243597,0.243597,0.905612,6.124608,-36.67182)">
+ <g id="layer3" style="display:inline" transform="translate(-142,164.875)">
+ <g id="g2369" transform="translate(119.4063,-108.7494)">
+ <g id="g2321" transform="translate(-0.15625,-0.25)">
+ <path d="m 19.5,18 17,-17 3.5,3.5 -17,17 -5.5,1.5 2,-5 z" id="path2273" style="fill:&fill_color;;fill-opacity:1;fill-rule:evenodd;stroke:&stroke_color;;stroke-width:1.06632352;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
+ <path d="m 18.34633,22.276561 1.59781,-4.008434 c 0,0 1.150216,0.235272 1.852735,0.934998 0.702519,0.699726 0.957342,1.863907 0.957342,1.863907 l -4.407887,1.209529 z" id="path2298" style="fill:none;stroke:&stroke_color;"/>
+ <path d="M 17.5625,21.5 16.65625,23.75 19,23.09375 c 0.002,-0.03184 0,-0.06141 0,-0.09375 0,-0.802125 -0.645308,-1.459801 -1.4375,-1.5 z" id="path2283" style="fill:&stroke_color;;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"/>
+ </g>
+ </g>
+ </g>
+ <path d="m 14.44,56.18 c 0,0 2.8125,-2.71875 2.8125,-2.71875 1.875,-1.59375 4.9375,1.21875 3.4375,3.40625 0.03125,0 -2.75,2.8125 -2.75,2.8125 l -3.5,-3.5 z" id="path3443" style="fill:&stroke_color;;fill-opacity:1;fill-rule:evenodd;stroke:&stroke_color;;stroke-width:1.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"/>
+ </g>
+ </g>
+</svg>
diff --git a/activity/activity.info b/activity/activity.info
new file mode 100644
index 0000000..475641f
--- /dev/null
+++ b/activity/activity.info
@@ -0,0 +1,9 @@
+[Activity]
+name = Sudoku
+activity_version = 1
+show_launcher = 1
+bundle_id = org.gnome.Sudoku
+exec = sugar-activity activity.Activity -s
+icon = activity-sudoku
+license = GPLv3
+
diff --git a/application.py b/application.py
new file mode 100755
index 0000000..fe11039
--- /dev/null
+++ b/application.py
@@ -0,0 +1,267 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import os
+import logging
+logging.basicConfig(level=logging.DEBUG)
+import glib
+import info
+logger = logging.getLogger(info.lower_name)
+appname = info.name
+# Some desktops like Gnome3-Shell show the Glib Prgname
+glib.set_prgname(appname)
+glib.set_application_name(appname)
+
+import gtk
+from options import Options
+from canvas import Canvas
+
+this_dir = os.path.split('__file__')[:-1]
+if len(this_dir) == 1 and this_dir[0] == '':
+ this_dir = os.path.abspath('./')
+else:
+ this_dir = os.path.join(this_dir)
+os.chdir(this_dir)
+
+from gettext import gettext as _
+
+if 'programabspath' in os.environ['DATADIR']:
+ datadir = os.environ['DATADIR'].replace('programabspath',
+ this_dir)
+else:
+ datadir = os.environ['DATADIR']
+
+if os.environ['ICONDIR'] != 'SYSTEM':
+ logger.debug(this_dir)
+ icondir = os.environ['ICONDIR'].replace('programabspath',
+ this_dir)
+ icon_theme = gtk.icon_theme_get_for_screen(gtk.gdk.screen_get_default())
+ icon_theme.append_search_path(icondir)
+
+
+class UnfullscreenButton(gtk.Window):
+
+ def __init__(self):
+ gtk.Window.__init__(self)
+
+ self.set_decorated(False)
+ self.set_resizable(False)
+ self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
+
+ self.set_border_width(0)
+
+ self.props.accept_focus = False
+
+ #Setup estimate of width, height
+ w, h = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR)
+ self._width = w
+ self._height = h
+
+ self.connect('size-request', self._size_request_cb)
+
+ screen = self.get_screen()
+ screen.connect('size-changed', self._screen_size_changed_cb)
+
+ self._button = gtk.Button(stock=gtk.STOCK_LEAVE_FULLSCREEN)
+ self._button.set_relief(gtk.RELIEF_NONE)
+ self._button.show()
+ self.add(self._button)
+
+ def connect_button_press(self, cb):
+ self._button.connect('button-press-event', cb)
+
+ def _reposition(self):
+ x = gtk.gdk.screen_width() - self._width
+ self.move(x, 0)
+
+ def _size_request_cb(self, widget, req):
+ self._width = req.width
+ self._height = req.height
+ self._reposition()
+
+ def _screen_size_changed_cb(self, screen):
+ self._reposition()
+
+
+class Application(gtk.Window):
+ def __init__(self):
+ gtk.Window.__init__(self)
+ self.save_type = info.io_mode
+ self.started = False
+ self.file_path = None
+ if info.file_filter_name:
+ self.filter = gtk.FileFilter()
+ self.filter.set_name(info.file_filter_name)
+ if info.file_filter_mime:
+ self.filter.add_mime_type(info.file_filter_mime)
+ for i in info.file_filter_patterns:
+ self.filter.add_pattern(i)
+ self.accel_group = gtk.AccelGroup()
+ self.add_accel_group(self.accel_group)
+ self.set_title(appname)
+ logger.debug(info.lower_name)
+ self.set_icon(gtk.gdk.pixbuf_new_from_file(os.path.join(datadir,
+ 'appicon.svg')))
+ self.connect('delete-event', lambda w, e: self.stop())
+ self.maximize()
+ self._vbox = gtk.VBox()
+ self.options = Options(self)
+ self.options.show()
+ self._vbox.pack_start(self.options, False, True, 0)
+ self.canvas = Canvas(self.options, self)
+ self.canvas.show()
+ self._vbox.pack_start(self.canvas, True, True, 0)
+ self.add(self._vbox)
+ self._vbox.show()
+
+ self._is_fullscreen = False
+ self.set_events(gtk.gdk.ALL_EVENTS_MASK)
+ self.connect('motion-notify-event', self.motion_cb)
+ self.canvas.connect('expose-event', self.expose_event)
+
+ def expose_event(self, widget, event):
+ logger.debug('Exposing')
+ if not self.started:
+ if self.file_path != None:
+ self.canvas.read_file(self.file_path)
+ self.set_title(os.path.abspath('%s - %s' % (self.file_path,
+ appname)))
+ else:
+ self.new()
+ self.started = True
+
+ def motion_cb(self, widget, event):
+ if self._is_fullscreen:
+ x, y, state = self.get_window().get_pointer()
+ width, height = self.get_size()
+ button_width, button_height = self._unfullscreen_button.get_size()
+ if x >= width - button_width or y <= button_height:
+ self._unfullscreen_button.show()
+ else:
+ self._unfullscreen_button.hide()
+
+ def fullscreen(self):
+ self.options.hide()
+ self._is_fullscreen = True
+ self._unfullscreen_button = UnfullscreenButton()
+ self._unfullscreen_button.set_transient_for(self)
+ self._unfullscreen_button.connect_button_press(
+ lambda w, e: self.unfullscreen())
+ self._unfullscreen_button.show()
+ gtk.Window.fullscreen(self)
+
+ def unfullscreen(self):
+ self.options.show()
+ self._is_fullscreen = False
+ self._unfullscreen_button.destroy()
+ gtk.Window.unfullscreen(self)
+
+ def export(self, widget, data):
+ format_name = data[3]
+ filter_mime = data[2]
+ mime_type = data[1]
+ filechooser = gtk.FileChooserDialog(_("Export..."), self,
+ gtk.FILE_CHOOSER_ACTION_SAVE,
+ (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ file_filter = gtk.FileFilter()
+ file_filter.set_name(format_name)
+ file_filter.add_mime_type(filter_mime)
+ filechooser.add_filter(file_filter)
+ filechooser.set_do_overwrite_confirmation(True)
+ filechooser.run()
+ file_path = filechooser.get_filename()
+ filechooser.destroy()
+ self.canvas.exports[mime_type](file_path)
+
+ def new(self):
+ self.file_path = None
+ self.canvas.new()
+ self.set_title(appname)
+
+ def stop(self):
+ if info.io_mode == info.CONFIG:
+ self.file_path = os.path.join(os.environ['HOME'], '.' + info.lower_name)
+ self.save()
+ gtk.main_quit()
+
+ def open(self):
+ filechooser = gtk.FileChooserDialog(_('Open...'), self,
+ gtk.FILE_CHOOSER_ACTION_OPEN,
+ (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OPEN, gtk.RESPONSE_OK))
+ filechooser.add_filter(self.filter)
+ response = filechooser.run()
+ self.file_path = filechooser.get_filename()
+ filechooser.destroy()
+ if response == gtk.RESPONSE_OK:
+ logger.debug('Read file %s' % self.file_path)
+ self.canvas.read_file(self.file_path)
+ self.set_title('%s - %s' % (self.file_path, appname))
+
+ def save(self):
+ if self.file_path == None:
+ self.save_as()
+ else:
+ logger.debug('Write file %s' % self.file_path)
+ self.canvas.write_file(self.file_path)
+
+ def save_as(self):
+ filechooser = gtk.FileChooserDialog(_('Save...'), self,
+ gtk.FILE_CHOOSER_ACTION_SAVE,
+ (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ filechooser.add_filter(self.filter)
+ filechooser.set_do_overwrite_confirmation(True)
+ response = filechooser.run()
+ self.file_path = filechooser.get_filename()
+ filechooser.destroy()
+ if response == gtk.RESPONSE_OK:
+ logger.debug('Save file as %s' % self.file_path)
+ self.canvas.write_file(self.file_path)
+ self.set_title('%s - %s' % (self.file_path, appname))
+
+
+if __name__ == '__main__':
+ logger.debug('Initializing Graph Plotter')
+ import sys
+ if info.io_mode == info.DOCUMENT:
+ if len(sys.argv) > 1:
+ logger.debug('Open from args %s' % sys.argv[1])
+ if os.path.exists(sys.argv[1]):
+ file_path = sys.argv[1]
+ logger.debug('Found file')
+ else:
+ file_path = None
+ logger.error('Could not find file')
+ else:
+ file_path = None
+ logger.debug('Create new file')
+ else:
+ if os.path.exists(os.path.join(os.environ['HOME'], '.' + info.lower_name)):
+ file_path = os.path.join(os.environ['HOME'], '.' + info.lower_name)
+ else:
+ file_path = None
+ window = Application()
+ window.file_path = file_path
+ window.show()
+ gtk.main()
+ logger.debug('Closing Graph Plotter')
+ exit()
diff --git a/canvas.py b/canvas.py
new file mode 100644
index 0000000..34eb00e
--- /dev/null
+++ b/canvas.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import logging
+logger = logging.getLogger('canvas')
+import gtk
+
+
+class Canvas(gtk.AspectFrame):
+ def __init__(self, toolbar_box, activity):
+ gtk.AspectFrame.__init__(self)
+ self.activity = activity
+
+ def write_file(self, path):
+ pass
+
+ def read_file(self, path):
+ pass
+
+
+ def new(self):
+ pass
diff --git a/data/appicon.svg b/data/appicon.svg
new file mode 100644
index 0000000..b332a6d
--- /dev/null
+++ b/data/appicon.svg
@@ -0,0 +1,3183 @@
+<?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://web.resource.org/cc/"
+ 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="svg3539"
+ sodipodi:version="0.32"
+ inkscape:version="0.44.1"
+ sodipodi:docbase="C:\Documents and Settings\Stephen\My Documents\My Projects\Tango Icons\Sudoku"
+ sodipodi:docname="sudoku.svg"
+ inkscape:export-filename="C:\Documents and Settings\Stephen\My Documents\My Projects\Tango Icons\Sudoku\sudoku48.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3541">
+ <linearGradient
+ id="linearGradient3560">
+ <stop
+ style="stop-color:red;stop-opacity:1;"
+ offset="0"
+ id="stop3562" />
+ <stop
+ style="stop-color:#ffdfdf;stop-opacity:1;"
+ offset="1"
+ id="stop3564" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3485">
+ <stop
+ style="stop-color:#434542;stop-opacity:1;"
+ offset="0"
+ id="stop3487" />
+ <stop
+ style="stop-color:#cdcfcc;stop-opacity:1;"
+ offset="1"
+ id="stop3489" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3470">
+ <stop
+ style="stop-color:#a40000;stop-opacity:1;"
+ offset="0"
+ id="stop3472" />
+ <stop
+ style="stop-color:#db0000;stop-opacity:1;"
+ offset="1"
+ id="stop3474" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3462">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3464" />
+ <stop
+ style="stop-color:#cc0f0f;stop-opacity:1;"
+ offset="1"
+ id="stop3466" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3452">
+ <stop
+ id="stop3454"
+ offset="0"
+ style="stop-color:#fce94f;stop-opacity:1;" />
+ <stop
+ id="stop3456"
+ offset="1"
+ style="stop-color:#c4a000" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3428">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3430" />
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="1"
+ id="stop3432" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6905">
+ <stop
+ style="stop-color:#b388af;stop-opacity:1;"
+ offset="0"
+ id="stop6907" />
+ <stop
+ style="stop-color:#dcc7d9;stop-opacity:1;"
+ offset="1"
+ id="stop6909" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6897">
+ <stop
+ style="stop-color:#ff860f;stop-opacity:1;"
+ offset="0"
+ id="stop6899" />
+ <stop
+ style="stop-color:#ffd593;stop-opacity:1;"
+ offset="1"
+ id="stop6901" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6889">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop6891" />
+ <stop
+ style="stop-color:#f3f5f2;stop-opacity:1;"
+ offset="1"
+ id="stop6893" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3112">
+ <stop
+ style="stop-color:#ffc268;stop-opacity:1;"
+ offset="0"
+ id="stop3114" />
+ <stop
+ style="stop-color:#ffefd3;stop-opacity:1;"
+ offset="1"
+ id="stop3116" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10179">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:0.3203125;"
+ offset="0"
+ id="stop10181" />
+ <stop
+ style="stop-color:#97b8dc;stop-opacity:0.3359375;"
+ offset="1"
+ id="stop10183" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient12640">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop12642" />
+ <stop
+ style="stop-color:white;stop-opacity:0.4921875;"
+ offset="1"
+ id="stop12644" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6709">
+ <stop
+ style="stop-color:#f3c200;stop-opacity:1;"
+ offset="0"
+ id="stop6711" />
+ <stop
+ style="stop-color:#fff8af;stop-opacity:1;"
+ offset="1"
+ id="stop6713" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3315"
+ id="linearGradient8452"
+ gradientUnits="userSpaceOnUse"
+ x1="22.083143"
+ y1="5.7665539"
+ x2="26.537226"
+ y2="57.613148"
+ gradientTransform="translate(-38.7026,-24.20737)" />
+ <linearGradient
+ id="linearGradient11445">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop11447" />
+ <stop
+ style="stop-color:white;stop-opacity:0.4296875;"
+ offset="1"
+ id="stop11449" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11445"
+ id="linearGradient11453"
+ x1="-23.419615"
+ y1="34.165112"
+ x2="-55.004295"
+ y2="-17.18852"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(32.33301,3.930809)" />
+ <linearGradient
+ id="linearGradient11436">
+ <stop
+ style="stop-color:#d4d4cf;stop-opacity:1;"
+ offset="0"
+ id="stop11438" />
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="1"
+ id="stop11440" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11436"
+ id="linearGradient11442"
+ x1="-43.564564"
+ y1="10.586685"
+ x2="-45.94725"
+ y2="-23.984529"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,-32.33301,3.830809)" />
+ <linearGradient
+ id="linearGradient3315">
+ <stop
+ style="stop-color:#fdc16a;stop-opacity:1;"
+ offset="0"
+ id="stop3317" />
+ <stop
+ style="stop-color:#f09003;stop-opacity:1;"
+ offset="1"
+ id="stop3319" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8467">
+ <stop
+ style="stop-color:white;stop-opacity:0.609375;"
+ offset="0"
+ id="stop8469" />
+ <stop
+ style="stop-color:white;stop-opacity:0.6171875;"
+ offset="1"
+ id="stop8471" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8459">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop8461" />
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="1"
+ id="stop8463" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2873"
+ id="radialGradient4312"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ id="linearGradient4858">
+ <stop
+ style="stop-color:#f1f1f1;stop-opacity:1;"
+ offset="0"
+ id="stop4860" />
+ <stop
+ style="stop-color:#d7d7d7;stop-opacity:1;"
+ offset="1"
+ id="stop4862" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4850">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4852" />
+ <stop
+ style="stop-color:#f4f4f3;stop-opacity:1;"
+ offset="1"
+ id="stop4854" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4842">
+ <stop
+ style="stop-color:#94b6db;stop-opacity:1;"
+ offset="0"
+ id="stop4844" />
+ <stop
+ style="stop-color:#4f88c4;stop-opacity:1;"
+ offset="1"
+ id="stop4846" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3568">
+ <stop
+ style="stop-color:#7b3d00;stop-opacity:1;"
+ offset="0"
+ id="stop3570" />
+ <stop
+ id="stop3576"
+ offset="0"
+ style="stop-color:#f57900;stop-opacity:1;" />
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="1"
+ id="stop3572" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(156.1887,-121.9111)"
+ y2="16.560732"
+ x2="24.511713"
+ y1="5.8732319"
+ x1="24.511713"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3780"
+ xlink:href="#linearGradient2622"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="7.8678756"
+ x2="60.071049"
+ y1="7.9206076"
+ x1="32.827568"
+ gradientTransform="matrix(0.750458,0,0,1.33252,156.1887,-121.9111)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3776"
+ xlink:href="#linearGradient2580"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(156.1887,-121.9111)"
+ y2="15.191534"
+ x2="22.435516"
+ y1="39.066536"
+ x1="24.588383"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3773"
+ xlink:href="#linearGradient2614"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(156.1887,-121.9111)"
+ y2="26.625"
+ x2="25.375"
+ y1="20.3125"
+ x1="21.530331"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3770"
+ xlink:href="#linearGradient2630"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(156.1887,-121.9111)"
+ y2="25.25"
+ x2="24.996323"
+ y1="37.625"
+ x1="25.850664"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3766"
+ xlink:href="#linearGradient2339"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="25.25"
+ x2="24.996323"
+ y1="37.625"
+ x1="25.850664"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3762"
+ xlink:href="#linearGradient2339"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.625"
+ x2="25.375"
+ y1="20.3125"
+ x1="21.530331"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3760"
+ xlink:href="#linearGradient2630"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="15.191534"
+ x2="22.435516"
+ y1="39.066536"
+ x1="24.588383"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3758"
+ xlink:href="#linearGradient2614"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="7.8678756"
+ x2="60.071049"
+ y1="7.9206076"
+ x1="32.827568"
+ gradientTransform="scale(0.750458,1.33252)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3756"
+ xlink:href="#linearGradient2580"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="16.560732"
+ x2="24.511713"
+ y1="5.8732319"
+ x1="24.511713"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3754"
+ xlink:href="#linearGradient2622"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient2630">
+ <stop
+ style="stop-color:white;stop-opacity:0.265625;"
+ offset="0"
+ id="stop2632" />
+ <stop
+ style="stop-color:white;stop-opacity:0.703125;"
+ offset="1"
+ id="stop2634" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2622">
+ <stop
+ style="stop-color:#e4a05d;stop-opacity:1;"
+ offset="0"
+ id="stop2624" />
+ <stop
+ style="stop-color:#af651d;stop-opacity:1;"
+ offset="1"
+ id="stop2626" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2614">
+ <stop
+ style="stop-color:#e3aa57;stop-opacity:1;"
+ offset="0"
+ id="stop2616" />
+ <stop
+ style="stop-color:#eabd7c;stop-opacity:1;"
+ offset="1"
+ id="stop2618" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2580">
+ <stop
+ id="stop2582"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop2586"
+ offset="1"
+ style="stop-color:#729fcf;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2339">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop2341" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop2343" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2580"
+ id="linearGradient320"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.750458,1.33252)"
+ x1="32.827568"
+ y1="7.9206076"
+ x2="60.071049"
+ y2="7.8678756" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2339"
+ id="linearGradient2345"
+ x1="25.850664"
+ y1="37.625"
+ x2="24.996323"
+ y2="25.25"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2614"
+ id="linearGradient2620"
+ x1="24.588383"
+ y1="39.066536"
+ x2="22.435516"
+ y2="15.191534"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2622"
+ id="linearGradient2628"
+ x1="24.511713"
+ y1="5.8732319"
+ x2="24.511713"
+ y2="16.560732"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2630"
+ id="linearGradient2636"
+ x1="21.530331"
+ y1="20.3125"
+ x2="25.375"
+ y2="26.625"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="32.409008"
+ x2="25.355263"
+ y1="34.006802"
+ x1="25.355263"
+ id="linearGradient4622"
+ xlink:href="#linearGradient4616"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-1.487184e-8,1.425535e-8,0.958546,22.7158,1.575973)"
+ r="9.90625"
+ fy="32.837029"
+ fx="-6.0070167"
+ cy="32.837029"
+ cx="-6.0070167"
+ id="radialGradient4915"
+ xlink:href="#linearGradient4928"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.917623,-1.354978e-3,3.632022e-4,0.148463,1.926889,37.03865)"
+ r="22.728432"
+ fy="43.636444"
+ fx="23.583666"
+ cy="43.636444"
+ cx="23.583666"
+ id="radialGradient2823"
+ xlink:href="#linearGradient2817"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="17.396523"
+ x2="17.160702"
+ y1="33.725819"
+ x1="34.197105"
+ id="linearGradient2813"
+ xlink:href="#linearGradient2807"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(36,2.980232e-8)"
+ gradientUnits="userSpaceOnUse"
+ y2="29.726542"
+ x2="-11.986486"
+ y1="13.122552"
+ x1="-11.986486"
+ id="linearGradient2071"
+ xlink:href="#linearGradient2065"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient2065"
+ inkscape:collect="always">
+ <stop
+ id="stop2067"
+ offset="0"
+ style="stop-color:#555753" />
+ <stop
+ id="stop2069"
+ offset="1"
+ style="stop-color:#fcaf3e" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2807"
+ inkscape:collect="always">
+ <stop
+ id="stop2809"
+ offset="0"
+ style="stop-color:#d3d7cf" />
+ <stop
+ id="stop2811"
+ offset="1"
+ style="stop-color:#eeeeec" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2817"
+ inkscape:collect="always">
+ <stop
+ id="stop2819"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop2821"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4928">
+ <stop
+ style="stop-color:#fce94f;stop-opacity:1;"
+ offset="0"
+ id="stop4930" />
+ <stop
+ style="stop-color:#fce94f;stop-opacity:0;"
+ offset="1"
+ id="stop4932" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4616"
+ inkscape:collect="always">
+ <stop
+ id="stop4618"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ id="stop4620"
+ offset="1"
+ style="stop-color:#2e3436;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ y2="39.999443"
+ x2="25.058096"
+ y1="47.027729"
+ x1="25.058096"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2098"
+ xlink:href="#linearGradient3702"
+ inkscape:collect="always" />
+ <radialGradient
+ r="2.5"
+ fy="43.5"
+ fx="4.9929786"
+ cy="43.5"
+ cx="4.9929786"
+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2096"
+ xlink:href="#linearGradient3688"
+ inkscape:collect="always" />
+ <radialGradient
+ r="2.5"
+ fy="43.5"
+ fx="4.9929786"
+ cy="43.5"
+ cx="4.9929786"
+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2094"
+ xlink:href="#linearGradient3688"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="38.070381"
+ x2="34.170048"
+ y1="36.921333"
+ x1="33.396004"
+ gradientTransform="matrix(-3.277938e-2,-0.999463,0.999463,-3.277938e-2,-0.709646,45.06274)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2078"
+ xlink:href="#linearGradient2251"
+ inkscape:collect="always" />
+ <radialGradient
+ r="37.751713"
+ fy="2.3667307"
+ fx="31.863327"
+ cy="2.3667307"
+ cx="31.863327"
+ gradientTransform="matrix(0.331735,0,0,0.353831,20.10526,9.5823)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2076"
+ xlink:href="#linearGradient269"
+ inkscape:collect="always" />
+ <radialGradient
+ r="86.708450"
+ fy="14.9373"
+ fx="30.653816"
+ cy="14.9373"
+ cx="30.653816"
+ gradientTransform="matrix(0.148355,1.009137e-2,-1.104438e-2,0.162365,25.06011,12.81706)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2074"
+ xlink:href="#linearGradient259"
+ inkscape:collect="always" />
+ <radialGradient
+ r="4.2929165"
+ fy="12.98915"
+ fx="37.030354"
+ cy="12.98915"
+ cx="37.030354"
+ gradientTransform="matrix(1.744653,0,0,1.283833,-26.58256,-3.478359)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2072"
+ xlink:href="#linearGradient4790"
+ inkscape:collect="always" />
+ <radialGradient
+ r="38.158695"
+ fy="7.2678967"
+ fx="8.1435566"
+ cy="7.2678967"
+ cx="8.1435566"
+ gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2070"
+ xlink:href="#linearGradient15662"
+ inkscape:collect="always" />
+ <radialGradient
+ r="37.751713"
+ fy="3.7561285"
+ fx="8.8244190"
+ cy="3.7561285"
+ cx="8.8244190"
+ gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2068"
+ xlink:href="#linearGradient269"
+ inkscape:collect="always" />
+ <radialGradient
+ r="86.708450"
+ fy="35.736916"
+ fx="33.966679"
+ cy="35.736916"
+ cx="33.966679"
+ gradientTransform="scale(0.960493,1.041132)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2066"
+ xlink:href="#linearGradient259"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3688"
+ inkscape:collect="always">
+ <stop
+ id="stop3690"
+ offset="0"
+ style="stop-color:black;stop-opacity:1;" />
+ <stop
+ id="stop3692"
+ offset="1"
+ style="stop-color:black;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3702">
+ <stop
+ id="stop3704"
+ offset="0"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0.5"
+ id="stop3710" />
+ <stop
+ id="stop3706"
+ offset="1"
+ style="stop-color:black;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3688"
+ id="radialGradient2091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
+ cx="4.9929786"
+ cy="43.5"
+ fx="4.9929786"
+ fy="43.5"
+ r="2.5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3688"
+ id="radialGradient2093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
+ cx="4.9929786"
+ cy="43.5"
+ fx="4.9929786"
+ fy="43.5"
+ r="2.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3702"
+ id="linearGradient2095"
+ gradientUnits="userSpaceOnUse"
+ x1="25.058096"
+ y1="47.027729"
+ x2="25.058096"
+ y2="39.999443" />
+ <linearGradient
+ id="linearGradient4367">
+ <stop
+ id="stop4369"
+ offset="0"
+ style="stop-color:#fce94f;stop-opacity:1;" />
+ <stop
+ id="stop4371"
+ offset="1"
+ style="stop-color:#fce94f;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.284916,-6.340414e-16,30.08928)"
+ r="15.821514"
+ fy="42.07798"
+ fx="24.306795"
+ cy="42.07798"
+ cx="24.306795"
+ id="radialGradient4548"
+ xlink:href="#linearGradient4542"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient259">
+ <stop
+ style="stop-color:#fafafa;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop260" />
+ <stop
+ style="stop-color:#bbbbbb;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop261" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient269">
+ <stop
+ style="stop-color:#a3a3a3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop270" />
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1;"
+ offset="1"
+ id="stop271" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15662">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop15664" />
+ <stop
+ style="stop-color:#f8f8f8;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop15666" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4542"
+ inkscape:collect="always">
+ <stop
+ id="stop4544"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop4546"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2251"
+ inkscape:collect="always">
+ <stop
+ id="stop2253"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop2255"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4790"
+ inkscape:collect="always">
+ <stop
+ id="stop4792"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop4794"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ y2="39.999443"
+ x2="25.058096"
+ y1="47.027729"
+ x1="25.058096"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2175"
+ xlink:href="#linearGradient3702"
+ inkscape:collect="always" />
+ <radialGradient
+ r="2.5"
+ fy="43.5"
+ fx="4.9929786"
+ cy="43.5"
+ cx="4.9929786"
+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2173"
+ xlink:href="#linearGradient3688"
+ inkscape:collect="always" />
+ <radialGradient
+ r="2.5"
+ fy="43.5"
+ fx="4.9929786"
+ cy="43.5"
+ cx="4.9929786"
+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2171"
+ xlink:href="#linearGradient3688"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="38.070381"
+ x2="34.170048"
+ y1="36.921333"
+ x1="33.396004"
+ gradientTransform="matrix(-3.277938e-2,-0.999463,0.999463,-3.277938e-2,-0.709646,45.06274)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2155"
+ xlink:href="#linearGradient2251"
+ inkscape:collect="always" />
+ <radialGradient
+ r="37.751713"
+ fy="2.3667307"
+ fx="31.863327"
+ cy="2.3667307"
+ cx="31.863327"
+ gradientTransform="matrix(0.331735,0,0,0.353831,20.10526,9.5823)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2153"
+ xlink:href="#linearGradient269"
+ inkscape:collect="always" />
+ <radialGradient
+ r="86.708450"
+ fy="14.9373"
+ fx="30.653816"
+ cy="14.9373"
+ cx="30.653816"
+ gradientTransform="matrix(0.148355,1.009137e-2,-1.104438e-2,0.162365,25.06011,12.81706)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2151"
+ xlink:href="#linearGradient259"
+ inkscape:collect="always" />
+ <radialGradient
+ r="4.2929165"
+ fy="12.98915"
+ fx="37.030354"
+ cy="12.98915"
+ cx="37.030354"
+ gradientTransform="matrix(1.744653,0,0,1.283833,-26.58256,-3.478359)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2149"
+ xlink:href="#linearGradient4790"
+ inkscape:collect="always" />
+ <radialGradient
+ r="38.158695"
+ fy="7.2678967"
+ fx="8.1435566"
+ cy="7.2678967"
+ cx="8.1435566"
+ gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2147"
+ xlink:href="#linearGradient15662"
+ inkscape:collect="always" />
+ <radialGradient
+ r="37.751713"
+ fy="3.7561285"
+ fx="8.8244190"
+ cy="3.7561285"
+ cx="8.8244190"
+ gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2145"
+ xlink:href="#linearGradient269"
+ inkscape:collect="always" />
+ <radialGradient
+ r="86.708450"
+ fy="35.736916"
+ fx="33.966679"
+ cy="35.736916"
+ cx="33.966679"
+ gradientTransform="scale(0.960493,1.041132)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient2143"
+ xlink:href="#linearGradient259"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4948">
+ <stop
+ id="stop4950"
+ offset="0"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0.5"
+ id="stop4952" />
+ <stop
+ id="stop4954"
+ offset="1"
+ style="stop-color:black;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3688"
+ id="radialGradient4946"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
+ cx="4.9929786"
+ cy="43.5"
+ fx="4.9929786"
+ fy="43.5"
+ r="2.5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3688"
+ id="radialGradient4944"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
+ cx="4.9929786"
+ cy="43.5"
+ fx="4.9929786"
+ fy="43.5"
+ r="2.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3702"
+ id="linearGradient4942"
+ gradientUnits="userSpaceOnUse"
+ x1="25.058096"
+ y1="47.027729"
+ x2="25.058096"
+ y2="39.999443" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.744653,2.313551e-22,-1.663e-22,1.283833,-26.58256,-3.478359)"
+ r="4.2929165"
+ fy="12.98915"
+ fx="37.030354"
+ cy="12.98915"
+ cx="37.030354"
+ id="radialGradient4940"
+ xlink:href="#linearGradient4790"
+ inkscape:collect="always" />
+ <radialGradient
+ r="86.708450"
+ fy="14.9373"
+ fx="30.653816"
+ cy="14.9373"
+ cx="30.653816"
+ gradientTransform="matrix(0.148355,1.009137e-2,-1.104438e-2,0.162365,25.06011,12.81706)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4938"
+ xlink:href="#linearGradient259"
+ inkscape:collect="always" />
+ <radialGradient
+ r="37.751713"
+ fy="2.3667307"
+ fx="31.863327"
+ cy="2.3667307"
+ cx="31.863327"
+ gradientTransform="matrix(0.331735,-2.3449e-17,2.501087e-17,0.353831,20.10526,9.5823)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4936"
+ xlink:href="#linearGradient269"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.284916,-6.340414e-16,30.08928)"
+ r="15.821514"
+ fy="42.07798"
+ fx="24.306795"
+ cy="42.07798"
+ cx="24.306795"
+ id="radialGradient4934"
+ xlink:href="#linearGradient4542"
+ inkscape:collect="always" />
+ <radialGradient
+ r="38.158695"
+ fy="7.2678967"
+ fx="8.1435566"
+ cy="7.2678967"
+ cx="8.1435566"
+ gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4932"
+ xlink:href="#linearGradient15662"
+ inkscape:collect="always" />
+ <radialGradient
+ r="86.708450"
+ fy="35.736916"
+ fx="33.966679"
+ cy="35.736916"
+ cx="33.966679"
+ gradientTransform="scale(0.960493,1.041132)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4930"
+ xlink:href="#linearGradient259"
+ inkscape:collect="always" />
+ <radialGradient
+ r="37.751713"
+ fy="3.7561285"
+ fx="8.8244190"
+ cy="3.7561285"
+ cx="8.8244190"
+ gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4928"
+ xlink:href="#linearGradient269"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4922">
+ <stop
+ style="stop-color:#fafafa;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4924" />
+ <stop
+ style="stop-color:#bbbbbb;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop4926" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4916">
+ <stop
+ style="stop-color:#a3a3a3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4918" />
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1;"
+ offset="1"
+ id="stop4920" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4910">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4912" />
+ <stop
+ style="stop-color:#f8f8f8;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop4914" />
+ </linearGradient>
+ <linearGradient
+ y2="38.070381"
+ x2="34.170048"
+ y1="36.921333"
+ x1="33.396004"
+ gradientTransform="matrix(-3.277938e-2,-0.999463,0.999463,-3.277938e-2,-0.709646,45.06274)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4902"
+ xlink:href="#linearGradient2251"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient259"
+ id="radialGradient5113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.960493,1.041132)"
+ cx="33.966679"
+ cy="35.736916"
+ fx="33.966679"
+ fy="35.736916"
+ r="86.708450" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient269"
+ id="radialGradient5115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
+ cx="8.8244190"
+ cy="3.7561285"
+ fx="8.8244190"
+ fy="3.7561285"
+ r="37.751713" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15662"
+ id="radialGradient5117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
+ cx="8.1435566"
+ cy="7.2678967"
+ fx="8.1435566"
+ fy="7.2678967"
+ r="38.158695" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4790"
+ id="radialGradient5119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.744653,0,0,1.283833,-26.58256,-3.478359)"
+ cx="37.030354"
+ cy="12.98915"
+ fx="37.030354"
+ fy="12.98915"
+ r="4.2929165" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient259"
+ id="radialGradient5121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.148355,1.009137e-2,-1.104438e-2,0.162365,25.06011,12.81706)"
+ cx="30.653816"
+ cy="14.9373"
+ fx="30.653816"
+ fy="14.9373"
+ r="86.708450" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient269"
+ id="radialGradient5123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.331735,0,0,0.353831,20.10526,9.5823)"
+ cx="31.863327"
+ cy="2.3667307"
+ fx="31.863327"
+ fy="2.3667307"
+ r="37.751713" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2251"
+ id="linearGradient5125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-3.277938e-2,-0.999463,0.999463,-3.277938e-2,-0.709646,45.06274)"
+ x1="33.396004"
+ y1="36.921333"
+ x2="34.170048"
+ y2="38.070381" />
+ <radialGradient
+ r="19.5625"
+ fy="40.4375"
+ fx="23.5625"
+ cy="40.4375"
+ cx="23.5625"
+ gradientTransform="matrix(1,0,0,0.348243,0,26.35543)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3010"
+ xlink:href="#linearGradient2865"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(-5.825542,0.125)"
+ gradientUnits="userSpaceOnUse"
+ y2="30.703125"
+ x2="25.514589"
+ y1="31.046875"
+ x1="25.71875"
+ id="linearGradient3000"
+ xlink:href="#linearGradient2994"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.923565,0,0,2.029717,-61.55532,-27.88417)"
+ r="3.2408544"
+ fy="27.640751"
+ fx="29.053354"
+ cy="27.640751"
+ cx="29.053354"
+ id="radialGradient2990"
+ xlink:href="#linearGradient2984"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(-5.669292,0)"
+ gradientUnits="userSpaceOnUse"
+ y2="22.625"
+ x2="47.6875"
+ y1="19.8125"
+ x1="46"
+ id="linearGradient2980"
+ xlink:href="#linearGradient2974"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(-5.669292,0)"
+ gradientUnits="userSpaceOnUse"
+ y2="22.250591"
+ x2="50.988335"
+ y1="17.376184"
+ x1="48.90625"
+ id="linearGradient2972"
+ xlink:href="#linearGradient2966"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="7.5624999"
+ x2="40.984375"
+ y1="7.5624999"
+ x1="6"
+ id="linearGradient2925"
+ xlink:href="#linearGradient2919"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="42.83337"
+ x2="26.228401"
+ y1="28.083368"
+ x1="26.612417"
+ id="linearGradient2879"
+ xlink:href="#linearGradient2873"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.348243,0.000000,26.35543)"
+ r="19.5625"
+ fy="40.4375"
+ fx="23.5625"
+ cy="40.4375"
+ cx="23.5625"
+ id="radialGradient2871"
+ xlink:href="#linearGradient2865"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="matrix(1.137871,0,0,1,-2.660884,0)"
+ gradientUnits="userSpaceOnUse"
+ y2="6.8333683"
+ x2="14.283642"
+ y1="42.83337"
+ x1="21.043484"
+ id="linearGradient2861"
+ xlink:href="#linearGradient2855"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient2855">
+ <stop
+ id="stop2857"
+ offset="0"
+ style="stop-color:#dfdfdf;stop-opacity:1;" />
+ <stop
+ id="stop2859"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2865">
+ <stop
+ id="stop2867"
+ offset="0"
+ style="stop-color:black;stop-opacity:0.1953125;" />
+ <stop
+ id="stop2869"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2873">
+ <stop
+ id="stop2875"
+ offset="0"
+ style="stop-color:#939393;stop-opacity:1;" />
+ <stop
+ id="stop2877"
+ offset="1"
+ style="stop-color:white;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2919">
+ <stop
+ id="stop2921"
+ offset="0"
+ style="stop-color:#a3a4a0;stop-opacity:1;" />
+ <stop
+ id="stop2923"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2966">
+ <stop
+ id="stop2968"
+ offset="0"
+ style="stop-color:#ffd1d1;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ff1d1d;stop-opacity:1;"
+ offset="0.5"
+ id="stop3006" />
+ <stop
+ id="stop2970"
+ offset="1"
+ style="stop-color:#6f0000;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2974">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#c1c1c1;stop-opacity:1;" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#acacac;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2984">
+ <stop
+ id="stop2986"
+ offset="0"
+ style="stop-color:#e7e2b8;stop-opacity:1;" />
+ <stop
+ id="stop2988"
+ offset="1"
+ style="stop-color:#bdbb1e;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2994">
+ <stop
+ id="stop2996"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop2998"
+ offset="1"
+ style="stop-color:#c9c9c9;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ y2="609.50507"
+ x2="302.85715"
+ y1="366.64789"
+ x1="302.85715"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6715"
+ xlink:href="#linearGradient5048"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5048">
+ <stop
+ id="stop5050"
+ offset="0"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0.5"
+ id="stop5056" />
+ <stop
+ id="stop5052"
+ offset="1"
+ style="stop-color:black;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ r="117.14286"
+ fy="486.64789"
+ fx="605.71429"
+ cy="486.64789"
+ cx="605.71429"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient6717"
+ xlink:href="#linearGradient5060"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5060"
+ inkscape:collect="always">
+ <stop
+ id="stop5062"
+ offset="0"
+ style="stop-color:black;stop-opacity:1;" />
+ <stop
+ id="stop5064"
+ offset="1"
+ style="stop-color:black;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ r="117.14286"
+ fy="486.64789"
+ fx="605.71429"
+ cy="486.64789"
+ cx="605.71429"
+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient6719"
+ xlink:href="#linearGradient5060"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+ y2="68.224884"
+ x2="28.244684"
+ y1="60.445503"
+ x1="28.244684"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9972"
+ xlink:href="#linearGradient9910"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+ y2="68.224884"
+ x2="28.244684"
+ y1="60.445503"
+ x1="28.244684"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9968"
+ xlink:href="#linearGradient9920"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+ y2="68.224884"
+ x2="28.244684"
+ y1="60.445503"
+ x1="28.244684"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9965"
+ xlink:href="#linearGradient9910"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+ y2="62.827091"
+ x2="38.061356"
+ y1="62.401989"
+ x1="55.876038"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9961"
+ xlink:href="#linearGradient9952"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="44.110912"
+ x2="20.682873"
+ y1="27.140348"
+ x1="20.064156"
+ id="linearGradient6401"
+ xlink:href="#linearGradient6395"
+ inkscape:collect="always" />
+ <radialGradient
+ r="14.875"
+ fy="37.75"
+ fx="23.25"
+ cy="37.75"
+ cx="23.25"
+ gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient6353"
+ xlink:href="#linearGradient5048"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="30.703125"
+ x2="25.514589"
+ y1="31.046875"
+ x1="25.71875"
+ gradientTransform="matrix(5.259571e-3,0.999987,0.999987,-5.259571e-3,48.6929,-14.14491)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6349"
+ xlink:href="#linearGradient2994"
+ inkscape:collect="always" />
+ <radialGradient
+ r="3.2408545"
+ fy="27.640751"
+ fx="29.053354"
+ cy="27.640751"
+ cx="29.053354"
+ gradientTransform="matrix(1.53767e-2,2.923527,2.029691,-1.067544e-2,20.39098,-69.72665)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient6347"
+ xlink:href="#linearGradient2984"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="22.625"
+ x2="47.6875"
+ y1="19.8125"
+ x1="46"
+ gradientTransform="matrix(5.259571e-3,0.999987,0.999987,-5.259571e-3,42.99552,-2.496241)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6345"
+ xlink:href="#linearGradient2974"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="22.250591"
+ x2="50.988335"
+ y1="17.376184"
+ x1="48.90625"
+ gradientTransform="matrix(5.259571e-3,0.999987,0.999987,-5.259571e-3,42.9955,-2.496241)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6343"
+ xlink:href="#linearGradient2966"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="14.1875"
+ x2="37.625"
+ y1="14.1875"
+ x1="11.75"
+ id="linearGradient5074"
+ xlink:href="#linearGradient5068"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(0,5.625)"
+ gradientUnits="userSpaceOnUse"
+ y2="19.0846"
+ x2="15.625"
+ y1="19.4596"
+ x1="30.875"
+ id="linearGradient5064"
+ xlink:href="#linearGradient5058"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+ r="14.875"
+ fy="37.75"
+ fx="23.25"
+ cy="37.75"
+ cx="23.25"
+ id="radialGradient5054"
+ xlink:href="#linearGradient5048"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(0,5.625)"
+ gradientUnits="userSpaceOnUse"
+ y2="26.0846"
+ x2="34.250416"
+ y1="26.0846"
+ x1="15.375"
+ id="linearGradient5042"
+ xlink:href="#linearGradient5036"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5036">
+ <stop
+ id="stop5038"
+ offset="0"
+ style="stop-color:#f5f5f5;stop-opacity:0.09;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.89999998;"
+ offset="0.2631579"
+ id="stop5044" />
+ <stop
+ id="stop5088"
+ offset="0.74792242"
+ style="stop-color:#c7c7c7;stop-opacity:0.46000001;" />
+ <stop
+ id="stop5040"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0.78039217;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5058">
+ <stop
+ id="stop5060"
+ offset="0"
+ style="stop-color:#959791;stop-opacity:1;" />
+ <stop
+ style="stop-color:#f8f8f8;stop-opacity:1;"
+ offset="0.5"
+ id="stop5066" />
+ <stop
+ id="stop5716"
+ offset="1"
+ style="stop-color:#8c8c8c;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5068">
+ <stop
+ id="stop5070"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.69;"
+ offset="0.32894737"
+ id="stop5078" />
+ <stop
+ style="stop-color:#c2c2c2;stop-opacity:0.34;"
+ offset="0.65789473"
+ id="stop5076" />
+ <stop
+ id="stop5072"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5700">
+ <stop
+ id="stop5702"
+ offset="0"
+ style="stop-color:#ffd1d1;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ff1d1d;stop-opacity:1;"
+ offset="0.5"
+ id="stop5704" />
+ <stop
+ id="stop5706"
+ offset="1"
+ style="stop-color:#6f0000;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5694">
+ <stop
+ id="stop5696"
+ offset="0"
+ style="stop-color:#c1c1c1;stop-opacity:1;" />
+ <stop
+ id="stop5698"
+ offset="1"
+ style="stop-color:#acacac;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5682">
+ <stop
+ id="stop5684"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop5686"
+ offset="1"
+ style="stop-color:#c9c9c9;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6395"
+ inkscape:collect="always">
+ <stop
+ id="stop6397"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6399"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9910">
+ <stop
+ id="stop9912"
+ offset="0"
+ style="stop-color:#b58ab7;stop-opacity:1;" />
+ <stop
+ style="stop-color:#d2add1;stop-opacity:1;"
+ offset="0.31578946"
+ id="stop9918" />
+ <stop
+ id="stop9914"
+ offset="1"
+ style="stop-color:#684b66;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9920">
+ <stop
+ style="stop-color:#ae75a8;stop-opacity:1;"
+ offset="0"
+ id="stop9922" />
+ <stop
+ id="stop9924"
+ offset="0.31578946"
+ style="stop-color:#bda2bf;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7a4d83;stop-opacity:1;"
+ offset="1"
+ id="stop9926" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9952"
+ inkscape:collect="always">
+ <stop
+ id="stop9954"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop9956"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15662"
+ id="radialGradient5886"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.968273,0,0,1.032767,-47.93217,28.86677)"
+ cx="8.1435566"
+ cy="7.2678967"
+ fx="8.1435566"
+ fy="7.2678967"
+ r="38.158695" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient259"
+ id="radialGradient5889"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.960493,0,0,1.041132,-51.28572,28.22032)"
+ cx="33.966679"
+ cy="35.736916"
+ fx="33.966679"
+ fy="35.736916"
+ r="86.708450" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient269"
+ id="radialGradient5891"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.968273,0,0,1.032767,-47.93217,28.86677)"
+ cx="8.8244190"
+ cy="3.7561285"
+ fx="8.8244190"
+ fy="3.7561285"
+ r="37.751713" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2251"
+ id="linearGradient5931"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-3.277938e-2,-0.999463,0.999463,-3.277938e-2,-52.05639,81.10815)"
+ x1="33.396004"
+ y1="36.921333"
+ x2="34.170048"
+ y2="38.070381" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient259"
+ id="radialGradient5934"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.148355,1.009137e-2,-1.104438e-2,0.162365,-26.28663,48.86247)"
+ cx="30.653816"
+ cy="14.9373"
+ fx="30.653816"
+ fy="14.9373"
+ r="86.708450" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient269"
+ id="radialGradient5936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.331735,0,0,0.353831,-31.24148,45.62771)"
+ cx="31.863327"
+ cy="2.3667307"
+ fx="31.863327"
+ fy="2.3667307"
+ r="37.751713" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4790"
+ id="radialGradient5939"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.744653,0,0,1.283833,-77.92929,32.56705)"
+ cx="37.030354"
+ cy="12.98915"
+ fx="37.030354"
+ fy="12.98915"
+ r="4.2929165" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3688"
+ id="radialGradient5996"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
+ cx="4.9929786"
+ cy="43.5"
+ fx="4.9929786"
+ fy="43.5"
+ r="2.5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3688"
+ id="radialGradient5998"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
+ cx="4.9929786"
+ cy="43.5"
+ fx="4.9929786"
+ fy="43.5"
+ r="2.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3702"
+ id="linearGradient6000"
+ gradientUnits="userSpaceOnUse"
+ x1="25.058096"
+ y1="47.027729"
+ x2="25.058096"
+ y2="39.999443" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient259"
+ id="radialGradient6002"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.960493,0,0,1.041132,-51.28572,28.22032)"
+ cx="33.966679"
+ cy="35.736916"
+ fx="33.966679"
+ fy="35.736916"
+ r="86.708450" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient269"
+ id="radialGradient6004"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.968273,0,0,1.032767,-47.93217,28.86677)"
+ cx="8.8244190"
+ cy="3.7561285"
+ fx="8.8244190"
+ fy="3.7561285"
+ r="37.751713" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15662"
+ id="radialGradient6006"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.968273,0,0,1.032767,-47.93217,28.86677)"
+ cx="8.1435566"
+ cy="7.2678967"
+ fx="8.1435566"
+ fy="7.2678967"
+ r="38.158695" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4790"
+ id="radialGradient6008"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.744653,0,0,1.283833,-77.92929,32.56705)"
+ cx="37.030354"
+ cy="12.98915"
+ fx="37.030354"
+ fy="12.98915"
+ r="4.2929165" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient259"
+ id="radialGradient6010"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.148355,1.009137e-2,-1.104438e-2,0.162365,-26.28663,48.86247)"
+ cx="30.653816"
+ cy="14.9373"
+ fx="30.653816"
+ fy="14.9373"
+ r="86.708450" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient269"
+ id="radialGradient6012"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.331735,0,0,0.353831,-31.24148,45.62771)"
+ cx="31.863327"
+ cy="2.3667307"
+ fx="31.863327"
+ fy="2.3667307"
+ r="37.751713" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2251"
+ id="linearGradient6014"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-3.277938e-2,-0.999463,0.999463,-3.277938e-2,-52.05639,81.10815)"
+ x1="33.396004"
+ y1="36.921333"
+ x2="34.170048"
+ y2="38.070381" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048"
+ id="radialGradient6288"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+ cx="23.25"
+ cy="37.75"
+ fx="23.25"
+ fy="37.75"
+ r="14.875" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048"
+ id="radialGradient6290"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+ cx="23.25"
+ cy="37.75"
+ fx="23.25"
+ fy="37.75"
+ r="14.875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5068"
+ id="linearGradient6292"
+ gradientUnits="userSpaceOnUse"
+ x1="11.75"
+ y1="14.1875"
+ x2="37.625"
+ y2="14.1875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2966"
+ id="linearGradient6294"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.259571e-3,0.999987,0.999987,-5.259571e-3,42.9955,-2.496241)"
+ x1="48.90625"
+ y1="17.376184"
+ x2="50.988335"
+ y2="22.250591" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient6296"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.259571e-3,0.999987,0.999987,-5.259571e-3,42.99552,-2.496241)"
+ x1="46"
+ y1="19.8125"
+ x2="47.6875"
+ y2="22.625" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2984"
+ id="radialGradient6298"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.53767e-2,2.923527,2.029691,-1.067544e-2,20.39098,-69.72665)"
+ cx="29.053354"
+ cy="27.640751"
+ fx="29.053354"
+ fy="27.640751"
+ r="3.2408545" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2994"
+ id="linearGradient6300"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.259571e-3,0.999987,0.999987,-5.259571e-3,48.6929,-14.14491)"
+ x1="25.71875"
+ y1="31.046875"
+ x2="25.514589"
+ y2="30.703125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9910"
+ id="linearGradient6302"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+ x1="28.244684"
+ y1="60.445503"
+ x2="28.244684"
+ y2="68.224884" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9920"
+ id="linearGradient6304"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+ x1="28.244684"
+ y1="60.445503"
+ x2="28.244684"
+ y2="68.224884" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9910"
+ id="linearGradient6306"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+ x1="28.244684"
+ y1="60.445503"
+ x2="28.244684"
+ y2="68.224884" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9952"
+ id="linearGradient6308"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+ x1="55.876038"
+ y1="62.401989"
+ x2="38.061356"
+ y2="62.827091" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5036"
+ id="linearGradient6310"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,5.625)"
+ x1="15.375"
+ y1="26.0846"
+ x2="34.250416"
+ y2="26.0846" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5058"
+ id="linearGradient6312"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,5.625)"
+ x1="30.875"
+ y1="19.4596"
+ x2="15.625"
+ y2="19.0846" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6395"
+ id="linearGradient6314"
+ gradientUnits="userSpaceOnUse"
+ x1="20.064156"
+ y1="27.140348"
+ x2="20.682873"
+ y2="44.110912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6395"
+ id="linearGradient6317"
+ gradientUnits="userSpaceOnUse"
+ x1="20.064156"
+ y1="27.140348"
+ x2="20.682873"
+ y2="44.110912"
+ gradientTransform="translate(85.31031,-94.5)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5036"
+ id="linearGradient6322"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(85.31031,-88.875)"
+ x1="15.375"
+ y1="26.0846"
+ x2="34.250416"
+ y2="26.0846" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5058"
+ id="linearGradient6324"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(85.31031,-88.875)"
+ x1="30.875"
+ y1="19.4596"
+ x2="15.625"
+ y2="19.0846" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9910"
+ id="linearGradient6449"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.708664,-0.504715,0.504715,-0.708664,97.48731,-9.155563)"
+ x1="28.244684"
+ y1="60.445503"
+ x2="28.244684"
+ y2="68.224884" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9920"
+ id="linearGradient6451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.708664,-0.504715,0.504715,-0.708664,97.48731,-9.155563)"
+ x1="28.244684"
+ y1="60.445503"
+ x2="28.244684"
+ y2="68.224884" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9910"
+ id="linearGradient6453"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.708664,-0.504715,0.504715,-0.708664,97.48731,-9.155563)"
+ x1="28.244684"
+ y1="60.445503"
+ x2="28.244684"
+ y2="68.224884" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9952"
+ id="linearGradient6455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.708664,-0.504715,0.504715,-0.708664,97.48731,-9.155563)"
+ x1="55.876038"
+ y1="62.401989"
+ x2="38.061356"
+ y2="62.827091" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2865"
+ id="radialGradient2623"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.348243,0,26.35543)"
+ cx="23.5625"
+ cy="40.4375"
+ fx="23.5625"
+ fy="40.4375"
+ r="19.5625" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2994"
+ id="linearGradient2638"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(41.61372,71.53595)"
+ x1="25.71875"
+ y1="31.046875"
+ x2="25.514589"
+ y2="30.703125" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2984"
+ id="radialGradient2641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.923565,0,0,2.029717,-14.11606,43.52678)"
+ cx="29.053354"
+ cy="27.640751"
+ fx="29.053354"
+ fy="27.640751"
+ r="3.2408544" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient2644"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(41.76997,71.41095)"
+ x1="46"
+ y1="19.8125"
+ x2="47.6875"
+ y2="22.625" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3568"
+ id="linearGradient3574"
+ x1="91.691986"
+ y1="93.07132"
+ x2="89.732887"
+ y2="88.787132"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2865"
+ id="radialGradient6693"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.348243,0,26.35543)"
+ cx="23.5625"
+ cy="40.4375"
+ fx="23.5625"
+ fy="40.4375"
+ r="19.5625" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2630"
+ id="linearGradient4770"
+ x1="75.414223"
+ y1="96.991127"
+ x2="129.51151"
+ y2="96.991127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.813599,0,0,0.812013,-59.39757,-54.27127)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2251"
+ id="linearGradient4797"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-3.862925e-2,-1.15308,1.177829,-3.781757e-2,175.8394,20.89895)"
+ x1="33.396004"
+ y1="36.921333"
+ x2="34.170048"
+ y2="38.070381" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient259"
+ id="radialGradient4800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.174831,1.164241e-2,-1.301538e-2,0.187321,206.2081,-16.30289)"
+ cx="30.653816"
+ cy="14.9373"
+ fx="30.653816"
+ fy="14.9373"
+ r="86.708450" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient269"
+ id="radialGradient4802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.390937,0,0,0.408215,200.369,-20.03483)"
+ cx="31.863327"
+ cy="2.3667307"
+ fx="31.863327"
+ fy="2.3667307"
+ r="37.751713" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4790"
+ id="radialGradient4805"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.056007,0,0,1.481158,145.3492,-35.10291)"
+ cx="37.030354"
+ cy="12.98915"
+ fx="37.030354"
+ fy="12.98915"
+ r="4.2929165" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15662"
+ id="radialGradient4811"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.141073,0,0,1.191503,180.6997,-39.37193)"
+ cx="8.1435566"
+ cy="7.2678967"
+ fx="8.1435566"
+ fy="7.2678967"
+ r="38.158695" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient259"
+ id="radialGradient4814"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.131905,0,0,1.201154,176.7476,-40.11774)"
+ cx="33.966679"
+ cy="35.736916"
+ fx="33.966679"
+ fy="35.736916"
+ r="86.708450" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient269"
+ id="radialGradient4816"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.141073,0,0,1.191503,180.6997,-39.37193)"
+ cx="8.8244190"
+ cy="3.7561285"
+ fx="8.8244190"
+ fy="3.7561285"
+ r="37.751713" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12640"
+ id="linearGradient12646"
+ x1="-0.3030136"
+ y1="-1.129197"
+ x2="29.716986"
+ y2="-1.129197"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6889"
+ id="linearGradient6895"
+ x1="23.27667"
+ y1="11.019609"
+ x2="45.266293"
+ y2="60.122086"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6905"
+ id="linearGradient6911"
+ x1="23.995117"
+ y1="41.112408"
+ x2="22.898987"
+ y2="8.0200005"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ y2="18.51421"
+ x2="21.875"
+ y1="7.6059465"
+ x1="21.875"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1867"
+ xlink:href="#linearGradient2268"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="3.4829895"
+ x2="37.625"
+ y1="7.625"
+ x1="37.625"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1865"
+ xlink:href="#linearGradient2249"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42.125"
+ x2="27.375"
+ y1="35"
+ x1="20.484835"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1863"
+ xlink:href="#linearGradient2319"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42"
+ x2="31"
+ y1="27.996471"
+ x1="10"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1861"
+ xlink:href="#linearGradient2356"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="36.774681"
+ x2="18.826717"
+ y1="27.654568"
+ x1="18.75"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1859"
+ xlink:href="#linearGradient2294"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="29"
+ x2="30.685976"
+ y1="38.464149"
+ x1="34.840229"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1857"
+ xlink:href="#linearGradient2238"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="47.375"
+ x2="47"
+ y1="11.5"
+ x1="10.875"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1855"
+ xlink:href="#linearGradient2207"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="33.049397"
+ x2="35.974056"
+ y1="28.69302"
+ x1="33.349056"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1853"
+ xlink:href="#linearGradient2388"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="31.75"
+ x2="21.125"
+ y1="-9.375"
+ x1="43.375"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1851"
+ xlink:href="#linearGradient2223"
+ inkscape:collect="always" />
+ <radialGradient
+ r="24.25"
+ fy="39.75"
+ fx="26"
+ cy="39.75"
+ cx="26"
+ gradientTransform="matrix(1,0,0,0.175258,1.230802e-13,32.78351)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1849"
+ xlink:href="#linearGradient2453"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="18.51421"
+ x2="21.875"
+ y1="7.6059465"
+ x1="21.875"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1814"
+ xlink:href="#linearGradient2268"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="3.4829895"
+ x2="37.625"
+ y1="7.625"
+ x1="37.625"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1812"
+ xlink:href="#linearGradient2249"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42.125"
+ x2="27.375"
+ y1="35"
+ x1="20.484835"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1810"
+ xlink:href="#linearGradient2319"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42"
+ x2="31"
+ y1="27.996471"
+ x1="10"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1808"
+ xlink:href="#linearGradient2356"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="36.774681"
+ x2="18.826717"
+ y1="27.654568"
+ x1="18.75"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1806"
+ xlink:href="#linearGradient2294"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="29"
+ x2="30.685976"
+ y1="38.464149"
+ x1="34.840229"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1804"
+ xlink:href="#linearGradient2238"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="47.375"
+ x2="47"
+ y1="11.5"
+ x1="10.875"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1802"
+ xlink:href="#linearGradient2207"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="33.049397"
+ x2="35.974056"
+ y1="28.69302"
+ x1="33.349056"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1800"
+ xlink:href="#linearGradient2388"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="31.75"
+ x2="21.125"
+ y1="-9.375"
+ x1="43.375"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1798"
+ xlink:href="#linearGradient2223"
+ inkscape:collect="always" />
+ <radialGradient
+ r="24.25"
+ fy="39.75"
+ fx="26"
+ cy="39.75"
+ cx="26"
+ gradientTransform="matrix(1,0,0,0.175258,4.198521e-14,32.78351)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1796"
+ xlink:href="#linearGradient2453"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="31.75"
+ x2="21.125"
+ y1="-9.375"
+ x1="43.375"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1743"
+ xlink:href="#linearGradient2223"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="33.049397"
+ x2="35.974056"
+ y1="28.69302"
+ x1="33.349056"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1740"
+ xlink:href="#linearGradient2388"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="47.375"
+ x2="47"
+ y1="11.5"
+ x1="10.875"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1737"
+ xlink:href="#linearGradient2207"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="29"
+ x2="30.685976"
+ y1="38.464149"
+ x1="34.840229"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1734"
+ xlink:href="#linearGradient2238"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="36.774681"
+ x2="18.826717"
+ y1="27.654568"
+ x1="18.75"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1731"
+ xlink:href="#linearGradient2294"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42"
+ x2="31"
+ y1="27.996471"
+ x1="10"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1728"
+ xlink:href="#linearGradient2356"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42.125"
+ x2="27.375"
+ y1="35"
+ x1="20.484835"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1721"
+ xlink:href="#linearGradient2319"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="3.4829895"
+ x2="37.625"
+ y1="7.625"
+ x1="37.625"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1718"
+ xlink:href="#linearGradient2249"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="18.51421"
+ x2="21.875"
+ y1="7.6059465"
+ x1="21.875"
+ gradientTransform="translate(53.99999,-1.8e-5)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1715"
+ xlink:href="#linearGradient2268"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="18.51421"
+ x2="21.875"
+ y1="7.6059465"
+ x1="21.875"
+ gradientTransform="translate(2,0)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1700"
+ xlink:href="#linearGradient2268"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="3.4829895"
+ x2="37.625"
+ y1="7.625"
+ x1="37.625"
+ gradientTransform="translate(2,0)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1698"
+ xlink:href="#linearGradient2249"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42.125"
+ x2="27.375"
+ y1="35"
+ x1="20.484835"
+ gradientTransform="translate(2,0)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1696"
+ xlink:href="#linearGradient2319"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42"
+ x2="31"
+ y1="27.996471"
+ x1="10"
+ gradientTransform="translate(2,0)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1694"
+ xlink:href="#linearGradient2356"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="36.774681"
+ x2="18.826717"
+ y1="27.654568"
+ x1="18.75"
+ gradientTransform="translate(2,0)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1692"
+ xlink:href="#linearGradient2294"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="29"
+ x2="30.685976"
+ y1="38.464149"
+ x1="34.840229"
+ gradientTransform="translate(2,0)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1690"
+ xlink:href="#linearGradient2238"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="47.375"
+ x2="47"
+ y1="11.5"
+ x1="10.875"
+ gradientTransform="translate(2,0)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1688"
+ xlink:href="#linearGradient2207"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="33.049397"
+ x2="35.974056"
+ y1="28.69302"
+ x1="33.349056"
+ gradientTransform="translate(2,0)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1686"
+ xlink:href="#linearGradient2388"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="31.75"
+ x2="21.125"
+ y1="-9.375"
+ x1="43.375"
+ gradientTransform="translate(2,0)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1684"
+ xlink:href="#linearGradient2223"
+ inkscape:collect="always" />
+ <radialGradient
+ r="24.25"
+ fy="39.75"
+ fx="26"
+ cy="39.75"
+ cx="26"
+ gradientTransform="matrix(1,0,0,0.175258,-3.631318e-14,32.78351)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1682"
+ xlink:href="#linearGradient2453"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2361">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop2363" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop2365" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2301">
+ <stop
+ style="stop-color:#c4a000;stop-opacity:1;"
+ offset="0"
+ id="stop2303" />
+ <stop
+ style="stop-color:#edd400"
+ offset="1"
+ id="stop2305" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2275">
+ <stop
+ style="stop-color:#fce94f;stop-opacity:1;"
+ offset="0"
+ id="stop2277" />
+ <stop
+ style="stop-color:#c4a000"
+ offset="1"
+ id="stop2279" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2361"
+ id="linearGradient2377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.5,-0.5)"
+ x1="27.25279"
+ y1="14.353221"
+ x2="30.443666"
+ y2="17.544096" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2275"
+ id="linearGradient2379"
+ gradientUnits="userSpaceOnUse"
+ x1="26.993084"
+ y1="11.252465"
+ x2="30.432114"
+ y2="14.691495" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2301"
+ id="linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ x1="29.03377"
+ y1="14.298466"
+ x2="25.991804"
+ y2="11.2565" />
+ <linearGradient
+ id="linearGradient2207"
+ inkscape:collect="always">
+ <stop
+ id="stop2209"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop2211"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2223"
+ inkscape:collect="always">
+ <stop
+ id="stop2225"
+ offset="0"
+ style="stop-color:#3465a4" />
+ <stop
+ id="stop2227"
+ offset="1"
+ style="stop-color:#729fcf" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2238"
+ inkscape:collect="always">
+ <stop
+ id="stop2240"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop2242"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2249"
+ inkscape:collect="always">
+ <stop
+ id="stop2251"
+ offset="0"
+ style="stop-color:#204a87;stop-opacity:1;" />
+ <stop
+ id="stop2394"
+ offset="1"
+ style="stop-color:#204a87;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2268"
+ inkscape:collect="always">
+ <stop
+ id="stop2270"
+ offset="0"
+ style="stop-color:#eeeeec" />
+ <stop
+ id="stop2272"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2294"
+ inkscape:collect="always">
+ <stop
+ id="stop2296"
+ offset="0"
+ style="stop-color:#3465a4" />
+ <stop
+ id="stop2298"
+ offset="1"
+ style="stop-color:#3465a4;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2319"
+ inkscape:collect="always">
+ <stop
+ id="stop2321"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop2323"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2356">
+ <stop
+ id="stop2358"
+ offset="0"
+ style="stop-color:#8a9580;stop-opacity:1;" />
+ <stop
+ style="stop-color:#dcded9;stop-opacity:1;"
+ offset="0.38488522"
+ id="stop2364" />
+ <stop
+ id="stop2366"
+ offset="0.6339286"
+ style="stop-color:#b8bcb4;stop-opacity:1;" />
+ <stop
+ style="stop-color:#d7d9d5;stop-opacity:1;"
+ offset="0.8214286"
+ id="stop2368" />
+ <stop
+ id="stop2360"
+ offset="1"
+ style="stop-color:#babdb6" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2388">
+ <stop
+ style="stop-color:#204a87"
+ offset="0"
+ id="stop2390" />
+ <stop
+ style="stop-color:#204a87;stop-opacity:0.3984375"
+ offset="1"
+ id="stop2392" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2453"
+ inkscape:collect="always">
+ <stop
+ id="stop2455"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop2457"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2275"
+ id="linearGradient3513"
+ gradientUnits="userSpaceOnUse"
+ x1="26.993084"
+ y1="11.252465"
+ x2="30.432114"
+ y2="14.691495" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3428"
+ id="linearGradient3517"
+ gradientUnits="userSpaceOnUse"
+ x1="18.158854"
+ y1="22.890165"
+ x2="16.65625"
+ y2="21.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3485"
+ id="linearGradient3523"
+ gradientUnits="userSpaceOnUse"
+ x1="18.940001"
+ y1="59.778126"
+ x2="12.72125"
+ y2="55.200001" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2966"
+ id="linearGradient3534"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,73.28042,-73.82425)"
+ x1="90.441986"
+ y1="89.57132"
+ x2="92.357887"
+ y2="93.162132" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient3536"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,31.51045,-2.413303)"
+ x1="46"
+ y1="19.8125"
+ x2="47.6875"
+ y2="22.625" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2984"
+ id="radialGradient3538"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-2.923565,0,0,2.029717,87.39648,-30.29747)"
+ cx="29.053354"
+ cy="27.640751"
+ fx="29.053354"
+ fy="27.640751"
+ r="3.2408544" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2994"
+ id="linearGradient3540"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,31.6667,-2.288303)"
+ x1="25.71875"
+ y1="31.046875"
+ x2="25.514589"
+ y2="30.703125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3560"
+ id="linearGradient3566"
+ x1="19.773296"
+ y1="57.101055"
+ x2="16.770073"
+ y2="54.226151"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="45.699667"
+ inkscape:cy="22.300932"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="994"
+ inkscape:window-x="-4"
+ inkscape:window-y="-4" />
+ <metadata
+ id="metadata3544">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>This icon follows the Tango visual guidelines.
+http://tango.freedesktop.org/
+
+The pencil is based on the pencil created by Lapo Calamandrei for the GNOME icon theme.</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <cc:license
+ rdf:resource="http://www.gnu.org/copyleft/gpl.html" />
+ <dc:title>GNOME Sudoku</dc:title>
+ <dc:date />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Stephen Brandt</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title></dc:title>
+ </cc:Agent>
+ </dc:rights>
+ <dc:identifier>http://www.stephenbrandt.com/</dc:identifier>
+ <dc:relation>http://gnome-sudoku.sourceforge.net/</dc:relation>
+ <dc:description></dc:description>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ transform="matrix(1.565915,0,0,1.279986,-7.565521,-3.434433)"
+ d="M 35.443728 33.636894 A 15.291184 3.9332814 0 1 1 4.8613596,33.636894 A 15.291184 3.9332814 0 1 1 35.443728 33.636894 z"
+ sodipodi:ry="3.9332814"
+ sodipodi:rx="15.291184"
+ sodipodi:cy="33.636894"
+ sodipodi:cx="20.152544"
+ id="path4310"
+ style="opacity:1;color:black;fill:url(#radialGradient4312);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#linearGradient6911);fill-opacity:1.0;fill-rule:evenodd;stroke:#75507b;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:12;stroke-dasharray:none;stroke-opacity:1"
+ d="M 9.7583524,9.0657498 C 8.9697682,9.8527968 0.69251087,38.994211 1.6223611,39.922253 C 2.5755893,40.873623 45.480073,40.810758 46.370313,39.922253 C 47.285613,39.008738 38.974241,9.8042278 38.234322,9.0657498 C 37.517509,8.3503328 10.499611,8.3259358 9.7583524,9.0657498 z "
+ id="path4736"
+ sodipodi:nodetypes="czzzz" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient4770);stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:12;stroke-dasharray:none;stroke-opacity:1"
+ d="M 10.236395,9.7634508 C 9.4765551,10.514403 1.9932492,38.487872 2.3807047,39.221096 C 2.747345,39.914929 44.925597,39.881189 45.530044,39.237336 C 46.157728,38.568725 38.387303,10.468061 37.674354,9.7634508 C 36.983673,9.0808418 10.950633,9.0575638 10.236395,9.7634508 z "
+ id="path4754"
+ sodipodi:nodetypes="czzzz" />
+ <path
+ style="fill:url(#linearGradient6895);fill-opacity:1.0;fill-rule:evenodd;stroke:#9b6fa2;stroke-width:1.9999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.877407,12.019609 L 36.174019,12.04192 L 40.81915,36.055482 L 7.2177193,36.099676 L 11.877407,12.019609 z "
+ id="path4818"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#babdb6;stroke-width:0.9999997px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11.002802,19.470126 L 37.119023,19.520876 L 38.458771,26.487494 L 9.5847541,26.487494 L 11.002802,19.470126 z "
+ id="path4820"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#babdb6;stroke-width:0.9999997px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 20.009702,12.553803 L 18.280804,35.538945 L 29.689497,35.523449 L 28.113149,12.553803 L 20.009702,12.553803 z "
+ id="path4822"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 12.307324,12.504444 L 35.74813,12.56192 L 40.200431,35.545151 L 7.8364377,35.589346 L 12.307324,12.504444 z "
+ id="path8451"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:black;fill:url(#radialGradient6693);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path2554"
+ sodipodi:cx="23.5625"
+ sodipodi:cy="40.4375"
+ sodipodi:rx="19.5625"
+ sodipodi:ry="6.8125"
+ d="M 43.125 40.4375 A 19.5625 6.8125 0 1 1 4,40.4375 A 19.5625 6.8125 0 1 1 43.125 40.4375 z"
+ transform="matrix(-0.69968,0,0,0.499691,36.92371,12.80796)" />
+ <path
+ style="font-size:8px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ d="M 14.93714,13.974525 L 16.953528,13.974525 L 16.953528,14.453678 L 15.348086,14.453678 C 15.348086,14.453678 15.005205,15.435944 15.087884,15.421848 C 15.17056,15.407758 15.253237,15.400712 15.335916,15.400709 C 15.805671,15.400712 16.177719,15.529426 16.45206,15.78685 C 16.726396,16.044279 16.863565,16.248529 16.863568,16.688221 C 16.863565,17.141068 16.722637,17.348607 16.440786,17.599457 C 16.158929,17.850307 15.761514,17.975733 15.248542,17.975733 C 15.071911,17.975733 14.891994,17.9607 14.70879,17.930636 C 14.525584,17.900571 14.336272,17.855475 14.140853,17.795345 L 14.140853,17.22318 C 14.309965,17.315254 14.484715,17.383838 14.665103,17.428934 C 14.845487,17.474031 15.036209,17.496579 15.237268,17.496579 C 15.562338,17.496579 15.819764,17.411084 16.009548,17.240092 C 16.199328,17.069101 16.294219,16.98135 16.294222,16.688221 C 16.294219,16.395093 16.199328,16.307343 16.009548,16.13635 C 15.819764,15.96536 15.562338,15.879864 15.237268,15.879861 C 15.085064,15.879864 14.933332,15.896775 14.782072,15.930596 C 14.630809,15.96442 14.476259,16.017032 14.318422,16.088434 L 14.93714,13.974525 z "
+ id="text6059"
+ sodipodi:nodetypes="ccccsssssssccssssssscc" />
+ <path
+ style="font-size:8px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ d="M 31.688229,33.009728 L 31.797604,32.744103 C 31.995519,32.837854 32.372817,33.263022 32.575943,33.3125 C 32.779067,33.36198 33.994751,33.386719 34.190065,33.386719 C 34.710896,33.386719 35.108682,33.211589 35.383425,32.861328 C 35.658161,32.511069 35.586509,31.929613 35.500575,31.309819 C 35.34953,31.53378 34.937153,31.661461 34.705385,31.78125 C 34.473611,31.901044 34.217101,31.960939 33.935854,31.960938 C 33.352519,31.960939 32.890931,31.784507 32.551088,31.431641 C 32.211244,31.078779 32.041322,30.596358 32.041323,29.984375 C 32.041322,29.385421 32.218405,28.904953 32.572573,28.542969 C 32.926738,28.180995 33.398092,28.000006 33.986635,28 C 34.661111,28.000006 35.176085,28.258469 35.531557,28.775391 C 35.887021,29.292322 36.037766,29.961371 36.153148,30.938956 C 36.246894,31.733229 36.421181,32.68034 35.984987,33.228516 C 35.548786,33.776693 35.071573,34.066406 34.334597,34.066406 C 34.136678,34.066406 33.007334,34.091641 32.607193,33.992188 C 32.153295,33.879374 31.969478,33.665978 31.766354,33.494103 L 31.688229,33.009728 z M 33.986635,31.34375 C 34.340799,31.343753 34.621398,31.222659 34.828432,30.980469 C 35.03546,30.738284 35.138975,30.406254 35.138979,29.984375 C 35.138975,29.565109 35.03546,29.233729 34.828432,28.990234 C 34.621398,28.74675 34.340799,28.625005 33.986635,28.625 C 33.632466,28.625005 33.351868,28.74675 33.144838,28.990234 C 32.937806,29.233729 32.83429,29.565109 32.834291,29.984375 C 32.83429,30.406254 32.937806,30.738284 33.144838,30.980469 C 33.351868,31.222659 33.632466,31.343753 33.986635,31.34375 L 33.986635,31.34375 z "
+ id="text6067"
+ sodipodi:nodetypes="ccssscssssssssssscccssssssscc" />
+ <path
+ style="font-size:6.64634609px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ d="M 21.242802,26.586927 C 21.55651,26.653999 21.801529,26.793546 21.977859,27.005569 C 22.154183,27.217597 22.242346,27.479383 22.24235,27.790929 C 22.242346,28.269068 22.077919,28.639031 21.749066,28.900816 C 21.420208,29.162603 20.952887,29.293496 20.347103,29.293496 C 20.14373,29.293496 19.934409,29.273483 19.71914,29.233458 C 19.503868,29.193433 19.281566,29.133395 19.052234,29.053345 L 19.052234,28.420514 C 19.233969,28.526527 19.433013,28.606578 19.649366,28.660665 C 19.865717,28.714754 20.091805,28.741798 20.327631,28.741797 C 20.738699,28.741798 21.051868,28.660666 21.267141,28.498401 C 21.482409,28.336138 21.590044,28.100314 21.590047,27.790929 C 21.590044,27.505345 21.489982,27.281961 21.289858,27.120777 C 21.08973,26.959597 20.811176,26.879005 20.454197,26.879003 L 19.889517,26.879003 L 19.889517,26.340286 L 20.48016,26.340286 C 20.802522,26.340289 20.862029,26.312453 21.03295,26.18372 C 21.203865,26.054994 21.289324,25.869472 21.289327,25.627154 C 21.289324,25.378352 21.201161,25.187421 21.024837,25.054361 C 20.848507,24.921308 20.783051,24.818251 20.454197,24.818246 C 20.274623,24.818251 20.295939,24.801194 20.090405,24.840133 C 19.884869,24.87908 19.658781,24.939659 19.412141,25.021869 L 19.412141,24.437717 C 19.660945,24.368489 19.894064,24.316565 20.1115,24.281943 C 20.328932,24.247332 20.320057,24.266553 20.512612,24.266548 C 21.010221,24.266553 21.216847,24.416126 21.506762,24.642209 C 21.79667,24.868302 21.941626,25.173899 21.94163,25.559003 C 21.941626,25.827283 21.864821,26.053912 21.711215,26.23889 C 21.557601,26.423874 21.526221,26.515534 21.242802,26.586927 L 21.242802,26.586927 z "
+ id="text6063"
+ sodipodi:nodetypes="csssssccsssssccccsssssccssssscc"
+ transform="scale(1.168941,0.855475)" />
+ <path
+ style="font-size:5.45440769px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ d="M 23.358116,17.359619 L 26.079482,17.390869 L 26.048232,17.999878 L 22.117188,18.031128 L 22.117188,17.578369 C 22.321373,17.367083 22.754718,17.20431 23.139628,16.8837 C 23.679568,16.433959 24.088564,16.141973 24.179117,16.038991 C 24.351341,15.845461 24.471633,15.681669 24.539993,15.547615 C 24.608348,15.413565 24.642527,15.281733 24.642529,15.152117 C 24.642527,14.940833 24.568399,14.768607 24.420145,14.63544 C 24.271887,14.502279 24.078799,14.435697 23.84088,14.435693 C 23.672204,14.435697 23.494208,14.464993 23.306892,14.523582 C 23.119573,14.582177 22.919383,14.670953 22.706321,14.78991 L 22.706321,14.2466 C 22.922934,14.159603 23.125343,14.093909 23.31355,14.049517 C 23.501754,14.005133 23.67398,13.982939 23.830227,13.982935 C 24.242147,13.982939 24.570618,14.085919 24.815643,14.291876 C 25.060662,14.49784 25.183173,14.773046 25.183176,15.117494 C 25.183173,15.280845 25.152545,15.435759 25.091293,15.582237 C 25.030034,15.72872 24.91862,15.90139 24.75705,16.100246 C 24.71266,16.151738 24.571506,16.300438 24.333588,16.546347 C 24.095666,16.792258 23.760092,17.136265 23.326866,17.578369 L 23.358116,17.359619 z "
+ id="text6075"
+ sodipodi:nodetypes="cccccsssssssccssssssscc" />
+ <g
+ id="g3501"
+ transform="matrix(-0.905612,0.243597,0.243597,0.905612,6.124608,-36.67182)">
+ <g
+ transform="translate(-142,164.875)"
+ id="layer3"
+ inkscape:label="Floppy"
+ style="display:inline">
+ <g
+ transform="translate(119.4063,-108.7494)"
+ id="g2369">
+ <g
+ transform="translate(-0.15625,-0.25)"
+ id="g2321">
+ <path
+ style="fill:url(#linearGradient3513);fill-opacity:1;fill-rule:evenodd;stroke:#c4a000;stroke-width:1.06632352;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 19.5,18 L 36.5,1 L 40,4.5 L 23,21.5 L 17.5,23 L 19.5,18 z "
+ id="path2273"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="opacity:0.28235294;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.06632411;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 20.399998,18.5 L 36.5,2.5 L 38.5,4.5 L 22.5,20.600002 L 19.199997,21.500003 L 20.399998,18.5 z "
+ id="path2313"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="opacity:0.50196078;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.31200001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 18.34633,22.276561 L 19.94414,18.268127 C 19.94414,18.268127 21.094356,18.503399 21.796875,19.203125 C 22.499394,19.902851 22.754217,21.067032 22.754217,21.067032 L 18.34633,22.276561 z "
+ id="path2298"
+ sodipodi:nodetypes="cczcc" />
+ <path
+ sodipodi:nodetypes="cccsc"
+ style="fill:url(#linearGradient3517);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 17.5625,21.5 L 16.65625,23.75 L 19,23.09375 C 19.00202,23.061913 19,23.032344 19,23 C 19,22.197875 18.354692,21.540199 17.5625,21.5 z "
+ id="path2283" />
+ </g>
+ </g>
+ </g>
+ <path
+ style="fill:url(#linearGradient3566);fill-opacity:1.0;fill-rule:evenodd;stroke:#c00;stroke-width:1.06632352;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 14.44,56.18 C 14.44,56.18 17.2525,53.46125 17.2525,53.46125 C 19.1275,51.8675 22.19,54.68 20.69,56.8675 C 20.72125,56.8675 17.94,59.68 17.94,59.68 L 14.44,56.18 z "
+ id="path3443"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:0.28235294;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.06632411;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 15.839998,56.1175 C 15.839998,56.1175 17.6025,54.3675 17.69,54.43 C 18.84,53.2425 20.90875,55.123749 19.7525,56.39875 C 19.47125,56.798751 17.94,58.217502 17.94,58.217502 L 15.839998,56.1175 z "
+ id="path3445"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3523);stroke-width:2.13264704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 13.72125,56.2 L 17.94,60.35625 L 13.72125,56.2 z "
+ id="path3479"
+ sodipodi:nodetypes="ccc" />
+ </g>
+ </g>
+</svg>
diff --git a/desktop/sweetener/__init__.py b/desktop/sweetener/__init__.py
new file mode 100644
index 0000000..22ff499
--- /dev/null
+++ b/desktop/sweetener/__init__.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
diff --git a/desktop/sweetener/basic_options.py b/desktop/sweetener/basic_options.py
new file mode 100644
index 0000000..83636e1
--- /dev/null
+++ b/desktop/sweetener/basic_options.py
@@ -0,0 +1,71 @@
+"""
+This module provides a "File" menu at desktops and an ActivityToolbar at Sugar.
+See class BasicOptions.
+"""
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+from gettext import gettext as _
+import gtk
+
+import stock
+from item import Item
+from itemgroup import ItemGroup
+
+DOCUMENT = 0
+CONFIG = 1
+
+
+class BasicOptions(ItemGroup):
+ """This class has the basic options for your program."""
+ def __init__(self, activity, box, export_formats=None):
+ """Create and append the basic items to a ItemBox.
+ activity -- The activity used as argument at Canvas and Options.
+ box -- sweetener.itembox.ItemBox of the activity.
+ export_formats -- list of tuples or none. Each tuple should have:
+ ['generic_type', 'mime_type', 'mime_filter', 'filter_name']
+ """
+ ItemGroup.__init__(self, box, _('_File'), None)
+
+ if activity.save_type != CONFIG:
+ new = Item(gtk.STOCK_NEW, True)
+ new.connect('activate', lambda w: activity.new())
+ self.append_item(new)
+ _open = Item(gtk.STOCK_OPEN, True)
+ _open.connect('activate', lambda w: activity.open())
+ self.append_item(_open)
+ self.append_separator()
+ save_option = Item(gtk.STOCK_SAVE, True)
+ save_option.connect('activate', lambda w: activity.save())
+ self.append_item(save_option)
+ save_as_option = Item(gtk.STOCK_SAVE_AS)
+ save_as_option.connect('activate', lambda w: activity.save_as())
+ self.append_item(save_as_option)
+ if export_formats != None:
+ if len(export_formats) == 1:
+ stock.register('sweetener-%s' % export_formats[0][1],
+ _('Export as %s') % export_formats[0][0],
+ None, export_formats[0][1].replace('/',
+ '-'))
+ export = Item('sweetener-%s' % export_formats[0][1])
+ export.connect('activate', activity.export,
+ export_formats[0])
+ self.append_item(export)
+ self.append_separator()
+ _quit = Item(gtk.STOCK_QUIT)
+ _quit.connect('activate', lambda w: activity.stop())
+ self.append_item(_quit)
diff --git a/desktop/sweetener/item.py b/desktop/sweetener/item.py
new file mode 100644
index 0000000..1b5fc8e
--- /dev/null
+++ b/desktop/sweetener/item.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import logging
+logger = logging.getLogger('option')
+
+import gobject
+import gtk
+
+import stock
+
+
+class Item(gobject.GObject):
+ __gsignals__ = {'activate': (gobject.SIGNAL_RUN_LAST,
+ gobject.TYPE_NONE,
+ tuple())}
+ menuitem = None
+ toolitem = None
+
+ def __init__(self, stock_id=None, important=False):
+ gobject.GObject.__init__(self)
+ self._stock_id = stock_id
+ self.accel_group = None
+ self.important = important
+ self.connection = None
+ self.connection_data = None
+ self.tooltip = None
+
+ def set_stock_id(self, stock_id):
+ self._stock_id = stock_id
+
+ def get_stock_id(self):
+ return self._stock_id
+
+ stock_id = property(get_stock_id, set_stock_id)
+
+ def get_menu_item(self):
+ self.menuitem = gtk.ImageMenuItem(self._stock_id)
+ self.menuitem.connect('activate', self.activate_cb)
+ self.setup_accelerator()
+ return self.menuitem
+
+ def activate_cb(self, widget):
+ self.emit('activate')
+
+ def setup_accelerator(self):
+ accelerator = stock.get_accelerator(self.stock_id)
+ logger.debug(str(accelerator))
+ if accelerator[1] > 0:
+ self.menuitem.add_accelerator('activate',
+ self.accel_group, accelerator[1], accelerator[0],
+ gtk.ACCEL_VISIBLE)
+
+ def get_tool_item(self):
+ self.toolitem = gtk.ToolButton(self._stock_id)
+ self.toolitem.connect('clicked', self.activate_cb)
+ self.setup_tooltip()
+ return self.toolitem
+
+ def setup_tooltip(self):
+ if self.tooltip:
+ self.toolitem.set_tooltip_text(self.tooltip)
+ else:
+ text = gtk.stock_lookup(self.stock_id)[1]
+ self.toolitem.set_tooltip_text(text.replace('_', ''))
+
+ def emit_signal(self, widget, signal_name):
+ print self.stock_id
+ print self.get_stock_id()
+ self.emit(signal_name)
diff --git a/desktop/sweetener/itembox.py b/desktop/sweetener/itembox.py
new file mode 100644
index 0000000..b7ff60d
--- /dev/null
+++ b/desktop/sweetener/itembox.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import gtk
+
+
+class ItemBox(gtk.VBox):
+ def __init__(self, activity):
+ gtk.VBox.__init__(self)
+ self._parent = activity
+ self.menubar = gtk.MenuBar()
+ self.toolbar = gtk.Toolbar()
+ self.pack_start(self.menubar, False, True, 0)
+ self.pack_start(self.toolbar, False, True, 0)
+ self.menubar.show()
+ self.toolbar.show()
diff --git a/desktop/sweetener/itemgroup.py b/desktop/sweetener/itemgroup.py
new file mode 100644
index 0000000..3e4780e
--- /dev/null
+++ b/desktop/sweetener/itemgroup.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import gobject
+import gtk
+
+
+class ItemGroup(gobject.GObject):
+ def __init__(self, box, name=None, icon=None):
+ gobject.GObject.__init__(self)
+ self.items = []
+ self.first_important = True
+ self.item = gtk.MenuItem(name)
+ box.menubar.append(self.item)
+ self.menu = gtk.Menu()
+ self.item.set_submenu(self.menu)
+ self.menu.show()
+ self.item.show()
+ self.activity = box._parent
+ self.accel_group = box._parent.accel_group
+ self.toolbar = box.toolbar
+
+ def append_item(self, item):
+ item.accel_group = self.accel_group
+ menuitem = item.get_menu_item()
+ menuitem.show()
+ self.menu.append(menuitem)
+ if item.important:
+ if self.first_important and len(self.toolbar):
+ separator = gtk.SeparatorToolItem()
+ separator.show()
+ self.toolbar.insert(separator, -1)
+ self.first_important = False
+ tool_item = item.get_tool_item()
+ self.toolbar.insert(tool_item, -1)
+ tool_item.show()
+ self.items.append(item)
+
+ def append_separator(self, important=False):
+ menuitem = gtk.SeparatorMenuItem()
+ menuitem.show()
+ self.menu.append(menuitem)
+ if important:
+ toolitem = gtk.SeparatorToolItem()
+ toolitem.show()
+ self.toolbar.insert(toolitem, -1)
+ return toolitem
+
+
+class GhostGroup(ItemGroup):
+
+ def __init__(self, box, name):
+ ItemGroup.__init__(self, box, name)
+
+
+class SubGroup(ItemGroup):
+ def __init__(self, group, name=None):
+ gobject.GObject.__init__(self)
+ self.items = []
+ self.item = gtk.MenuItem(name)
+ group.menu.append(self.item)
+ self.menu = gtk.Menu()
+ self.item.set_submenu(self.menu)
+ self.menu.show()
+ self.item.show()
+ self.accel_group = group.accel_group
+ self.toolbar = group.toolbar
+ self.first_important = True
diff --git a/desktop/sweetener/stock.py b/desktop/sweetener/stock.py
new file mode 100644
index 0000000..4f3b213
--- /dev/null
+++ b/desktop/sweetener/stock.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import logging
+logger = logging.getLogger('stock')
+import gtk
+
+icon_factory = gtk.IconFactory()
+
+
+def register(name, label, accelerator, icon_name):
+ if accelerator == None:
+ keyval = 0
+ mask = 0
+ else:
+ keyval, mask = gtk.accelerator_parse(accelerator)
+ gtk.stock_add([(name, label, mask, keyval, '')])
+ if icon_name:
+ icon_source = gtk.IconSource()
+ icon_source.set_icon_name(icon_name)
+ icon = gtk.IconSet()
+ icon.add_source(icon_source)
+ icon_factory.add(name, icon)
+ icon_factory.add_default()
+
+
+def overwrite_stock(stock_id, new_accelerator):
+ info = list(gtk.stock_lookup(stock_id))
+ keyval, mask = gtk.accelerator_parse(new_accelerator)
+ info[2] = mask
+ info[3] = keyval
+ logger.debug(str(info))
+ gtk.stock_add([(info[0], info[1], info[2], info[3], info[4])])
+
+# Here we overwrite the key accelerators for some stock ids.
+# Feel free to add here any other stock id if you need it at your activity,
+# and send us a patch.
+
+overwrite_stock(gtk.STOCK_SAVE_AS, '<Shift><Ctrl>S')
+overwrite_stock(gtk.STOCK_ZOOM_IN, '<Ctrl>plus')
+overwrite_stock(gtk.STOCK_ZOOM_OUT, '<Ctrl>minus')
+overwrite_stock(gtk.STOCK_ZOOM_100, '<Ctrl>0')
+# Key accelerator will be F11 on desktops and <Alt>return on Sugar.
+overwrite_stock(gtk.STOCK_FULLSCREEN, 'F11')
+overwrite_stock(gtk.STOCK_ADD, '<Ctrl>A')
+overwrite_stock(gtk.STOCK_REMOVE, '<Shift>Delete')
+overwrite_stock(gtk.STOCK_SELECT_COLOR, '<Ctrl>L')
+
+
+def get_label(stock, underline):
+ text = gtk.stock_lookup(stock)[1]
+ if underline:
+ text = text.replace('_', '')
+ return text
+
+
+def get_accelerator(stock):
+ return gtk.stock_lookup(stock)[2:-1]
diff --git a/info.py b/info.py
new file mode 100644
index 0000000..03410b3
--- /dev/null
+++ b/info.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import logging
+logger = logging.getLogger('info')
+
+from gettext import gettext as _
+
+service_name = 'org.gnome.Sudoku'
+
+import os
+this_dir = os.path.abspath('./')
+
+import gettext
+if 'PROGRAMRUNNING' in os.environ:
+ if os.environ['PROGRAMRUNNING'] == 'DESKTOP':
+ # init gettext
+ locale_path = os.environ['TRANSLATIONDIR'].replace('programabspath',
+ this_dir)
+ logger.debug(locale_path)
+ gettext.bindtextdomain(service_name, locale_path)
+ gettext.textdomain(service_name)
+_ = gettext.gettext
+
+
+DOCUMENT = 0
+CONFIG = 1
+io_mode = CONFIG
+
+generic_name = _('Sudoku puzzle')
+name = _('Sudoku')
+lower_name = 'sudoku'
+copyright = 'Copyright © 2012 Daniel Francis'
+version = '1'
+description = _('Logic-based combinatorial number-placement puzzle.')
+authors = ['Daniel Francis <francis@sugarlabs.org>']
+url = None
+documentation = None
+categories = ['GNOME', 'GTK', 'Game', 'LogicGame']
+
+file_filter_name = None
+file_filter_mime = None
+file_filter_patterns = []
+
+# Refer to the COPYING
+license = 'GPLv3'
+try:
+ license_file = open(os.path.join(os.environ['DATADIR'].replace(
+ 'programabspath', this_dir), 'COPYING'))
+ license_content = license_file.read()
+ license_file.close()
+except:
+ license_content = None
diff --git a/makesripts/activity_luncher.py b/makesripts/activity_luncher.py
new file mode 100644
index 0000000..378cf84
--- /dev/null
+++ b/makesripts/activity_luncher.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import ConfigParser
+import sys
+import os
+appdir = os.path.abspath('./')
+sys.path.append(appdir)
+
+import info
+
+activity_file_stream = open('activity.info', 'w')
+activity_file = ConfigParser.RawConfigParser()
+activity_file.add_section('Activity')
+activity_file.set('Activity', 'name', info.name)
+activity_file.set('Activity', 'activity_version',
+ info.version)
+activity_file.set('Activity', 'show_launcher', '1')
+activity_file.set('Activity', 'bundle_id', info.service_name)
+activity_file.set('Activity', 'exec',
+ 'sugar-activity activity.Activity -s')
+activity_file.set('Activity', 'icon', 'activity-' + info.lower_name)
+activity_file.set('Activity', 'license', info.license)
+if info.file_filter_mime:
+ activity_file.set('Activity', 'mime_types', info.file_filter_mime)
+activity_file.write(activity_file_stream)
+activity_file_stream.close()
diff --git a/makesripts/svg2png.py b/makesripts/svg2png.py
new file mode 100644
index 0000000..06eab59
--- /dev/null
+++ b/makesripts/svg2png.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import sys
+import os
+appdir = os.path.abspath('./')
+sys.path.append(appdir)
+import gtk
+
+import info
+
+pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(sys.argv[1], 48, 48)
+pixbuf.save(sys.argv[2], 'png')
diff --git a/options.py b/options.py
new file mode 100644
index 0000000..9e06358
--- /dev/null
+++ b/options.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+from gettext import gettext as _
+import gobject
+import gtk
+
+from sweetener.itembox import ItemBox
+from sweetener.basic_options import BasicOptions
+
+
+class Options(ItemBox):
+ def __init__(self, activity):
+ ItemBox.__init__(self, activity)
+ self.activity = activity
+ self.basic = BasicOptions(activity, self,
+ None)
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..530f97c
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2006, Red Hat, Inc.
+#
+# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+from sugar.activity import bundlebuilder
+
+bundlebuilder.start()
diff --git a/sudoku b/sudoku
new file mode 100755
index 0000000..aede908
--- /dev/null
+++ b/sudoku
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+#
+# Copyright 2012 Daniel Francis <francis@sugarlabs.org>
+#
+# 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+import sys
+import os
+self_path = os.path.abspath(__file__)
+print self_path
+current_list_dir = os.path.split(self_path)[:-1][0]
+print current_list_dir
+os.chdir(current_list_dir)
+sys.path.append(os.path.join(current_list_dir, 'desktop'))
+os.environ['PYTHONPATH'] = ':'.join(sys.path)
+os.environ['DATADIR'] = 'programabspath/data'
+os.environ['TRANSLATIONDIR'] = 'programabspath/locale'
+os.environ['PROGRAMRUNNING'] = 'DESKTOP'
+os.environ['ICONDIR'] = 'programabspath/desktop/icons'
+os.system('python application.py %s' % (('"%s"' % sys.argv[1])
+ if len(sys.argv) > 1 else ''))
diff --git a/sugar/sweetener/__init__.py b/sugar/sweetener/__init__.py
new file mode 100644
index 0000000..22ff499
--- /dev/null
+++ b/sugar/sweetener/__init__.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
diff --git a/sugar/sweetener/basic_options.py b/sugar/sweetener/basic_options.py
new file mode 100644
index 0000000..52f4ebd
--- /dev/null
+++ b/sugar/sweetener/basic_options.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+from gettext import gettext as _
+
+from sugar.activity.widgets import ActivityToolbarButton
+
+import stock
+from item import Item
+
+DOCUMENT = 0
+CONFIG = 1
+
+
+class BasicOptions(ActivityToolbarButton):
+ def __init__(self, activity, box, export_formats=None):
+ ActivityToolbarButton.__init__(self, activity)
+ box.toolbar.insert(self, 0)
+ self.show()
+ if export_formats != None:
+ if len(export_formats) == 1:
+ stock.register('sweetener-%s' % export_formats[0][1],
+ _('Export as %s') % export_formats[0][0],
+ None, export_formats[0][1].replace('/',
+ '-'))
+ export = Item('sweetener-%s' % export_formats[0][1])
+ export.connect('activate', activity.export,
+ export_formats[0])
+ self.page.insert(export.get_tool_item(), -1)
diff --git a/sugar/sweetener/item.py b/sugar/sweetener/item.py
new file mode 100644
index 0000000..291204a
--- /dev/null
+++ b/sugar/sweetener/item.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import logging
+logger = logging.getLogger('option')
+
+import gobject
+import gtk
+from sugar.graphics.toolbutton import ToolButton
+
+import stock
+
+
+class Item(gobject.GObject):
+ __gsignals__ = {'activate': (gobject.SIGNAL_RUN_LAST,
+ gobject.TYPE_NONE,
+ tuple())}
+ toolitem = None
+
+ def __init__(self, stock_id=gtk.STOCK_CLEAR, important=False):
+ gobject.GObject.__init__(self)
+ self._stock_id = stock_id
+ self.accel_group = None
+ self.important = important
+ self.connection = None
+ self.connection_data = None
+ self.tooltip = None
+
+ def set_stock_id(self, stock_id):
+ self._stock_id = stock_id
+
+ def get_stock_id(self):
+ return self._stock_id
+
+ stock_id = property(get_stock_id, set_stock_id)
+
+ def get_menu_item(self):
+ return None
+
+ def activate_cb(self, widget):
+ self.emit('activate')
+
+ def setup_accelerator(self):
+ accelerator = stock.get_accelerator(self._stock_id)
+ logger.debug(str(accelerator))
+ try:
+ if accelerator[1] > 0:
+ self.toolitem.props.accelerator = gtk.accelerator_name(
+ accelerator[1], accelerator[0])
+ except:
+ logger.error(
+'Could not set up accelerator; if toogletoolbutton, update your sugar version')
+
+ def get_tool_item(self):
+ if self._stock_id in stock.icons:
+ icon_name = stock.icons[self._stock_id]
+ else:
+ icon_name = self._stock_id
+ self.toolitem = ToolButton(icon_name)
+ self.toolitem.connect('clicked', self.activate_cb)
+ self.setup_tooltip()
+ return self.toolitem
+
+ def setup_tooltip(self):
+ if self.tooltip:
+ self.toolitem.set_tooltip(self.tooltip)
+ else:
+ text = gtk.stock_lookup(self._stock_id)[1]
+ self.toolitem.set_tooltip(text.replace('_', ''))
+ self.setup_accelerator()
diff --git a/sugar/sweetener/itembox.py b/sugar/sweetener/itembox.py
new file mode 100644
index 0000000..d861c52
--- /dev/null
+++ b/sugar/sweetener/itembox.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import gtk
+from sugar.graphics.toolbarbox import ToolbarBox
+from sugar.activity.widgets import StopButton
+
+
+class ItemBox(ToolbarBox):
+ def __init__(self, activity):
+ ToolbarBox.__init__(self)
+ self._parent = activity
+ separator = gtk.SeparatorToolItem()
+ separator.set_draw(False)
+ separator.set_expand(True)
+ separator.show()
+ self.toolbar.insert(separator, -1)
+ self.stopbutton = StopButton(activity)
+ self.toolbar.insert(self.stopbutton, -1)
+ self.stopbutton.show()
diff --git a/sugar/sweetener/stock.py b/sugar/sweetener/stock.py
new file mode 100644
index 0000000..a6451a7
--- /dev/null
+++ b/sugar/sweetener/stock.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
+#
+# 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 3 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., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import logging
+logger = logging.getLogger('stock')
+import gtk
+
+icon_factory = gtk.IconFactory()
+
+# Set the icon name for the stock items, this is used only in Sugar.
+icons = {gtk.STOCK_ADD: 'list-add'}
+
+
+def register(name, label, accelerator, icon_name):
+ if accelerator == None:
+ keyval = 0
+ mask = 0
+ else:
+ keyval, mask = gtk.accelerator_parse(accelerator)
+ gtk.stock_add([(name, label, mask, keyval, '')])
+ if icon_name:
+ icon_source = gtk.IconSource()
+ icon_source.set_icon_name(icon_name)
+ icon = gtk.IconSet()
+ icon.add_source(icon_source)
+ icon_factory.add(name, icon)
+ icon_factory.add_default()
+ icons[name] = icon_name
+
+
+def overwrite_stock(stock_id, new_accelerator):
+ info = list(gtk.stock_lookup(stock_id))
+ keyval, mask = gtk.accelerator_parse(new_accelerator)
+ info[2] = mask
+ info[3] = keyval
+ logger.debug(str(info))
+ gtk.stock_add([(info[0], info[1], info[2], info[3], info[4])])
+
+# Here we overwrite the key accelerators for some stock ids.
+# Feel free to add here any other stock id if you need it at your activity,
+# and send us a patch.
+
+overwrite_stock(gtk.STOCK_ZOOM_IN, '<Ctrl>plus')
+overwrite_stock(gtk.STOCK_ZOOM_OUT, '<Ctrl>minus')
+overwrite_stock(gtk.STOCK_ZOOM_100, '<Ctrl>0')
+# Key accelerator will be F11 on desktops and <Alt>return on Sugar.
+overwrite_stock(gtk.STOCK_FULLSCREEN, '<Alt>Return')
+overwrite_stock(gtk.STOCK_ADD, '<Ctrl>A')
+overwrite_stock(gtk.STOCK_REMOVE, '<Ctrl>R')
+overwrite_stock(gtk.STOCK_SELECT_COLOR, '<Ctrl>L')
+
+
+def get_label(stock, underline):
+ text = gtk.stock_lookup(stock)[1]
+ if underline:
+ text = text.replace('_', '')
+ return text
+
+
+def get_accelerator(stock):
+ return gtk.stock_lookup(stock)[2:-1]