diff options
author | Daniel Francis <francis@sugarlabs.org> | 2012-10-02 01:20:34 (GMT) |
---|---|---|
committer | Daniel Francis <francis@sugarlabs.org> | 2012-10-02 01:20:34 (GMT) |
commit | e1a599bb8508e1a0607e052a2f086289844dee60 (patch) | |
tree | 20473626eef9a8891cd4a77769d0e0dd81c3fd04 |
Initial commit
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | Makefile | 19 | ||||
-rw-r--r-- | activity.info | 9 | ||||
-rw-r--r-- | activity.py | 71 | ||||
-rw-r--r-- | activity/activity-sudoku.sugar.svg | 29 | ||||
-rw-r--r-- | activity/activity-sudoku.svg | 29 | ||||
-rw-r--r-- | activity/activity.info | 9 | ||||
-rwxr-xr-x | application.py | 267 | ||||
-rw-r--r-- | canvas.py | 39 | ||||
-rw-r--r-- | data/appicon.svg | 3183 | ||||
-rw-r--r-- | desktop/sweetener/__init__.py | 19 | ||||
-rw-r--r-- | desktop/sweetener/basic_options.py | 71 | ||||
-rw-r--r-- | desktop/sweetener/item.py | 87 | ||||
-rw-r--r-- | desktop/sweetener/itembox.py | 33 | ||||
-rw-r--r-- | desktop/sweetener/itemgroup.py | 85 | ||||
-rw-r--r-- | desktop/sweetener/stock.py | 75 | ||||
-rw-r--r-- | info.py | 70 | ||||
-rw-r--r-- | makesripts/activity_luncher.py | 44 | ||||
-rw-r--r-- | makesripts/svg2png.py | 30 | ||||
-rw-r--r-- | options.py | 34 | ||||
-rwxr-xr-x | setup.py | 21 | ||||
-rwxr-xr-x | sudoku | 35 | ||||
-rw-r--r-- | sugar/sweetener/__init__.py | 19 | ||||
-rw-r--r-- | sugar/sweetener/basic_options.py | 45 | ||||
-rw-r--r-- | sugar/sweetener/item.py | 87 | ||||
-rw-r--r-- | sugar/sweetener/itembox.py | 36 | ||||
-rw-r--r-- | sugar/sweetener/stock.py | 77 |
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] @@ -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() @@ -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] |