Merge lp:~meese/pantheon-photos/fix-1273847 into lp:~pantheon-photos/pantheon-photos/trunk

Proposed by meese
Status: Work in progress
Proposed branch: lp:~meese/pantheon-photos/fix-1273847
Merge into: lp:~pantheon-photos/pantheon-photos/trunk
Diff against target: 152741 lines (+151513/-109)
43 files modified
Makefile (+27/-4)
icons/earth_map.svg (+230/-0)
icons/gps-marker-selected.svg (+1388/-0)
icons/gps-marker.svg (+941/-0)
icons/import.svg (+55/-0)
icons/places.svg (+679/-0)
src/CheckerboardLayout.vala (+4/-1)
src/CollectionPage.vala (+4/-0)
src/MediaDataRepresentation.vala (+51/-1)
src/MediaPage.vala (+67/-43)
src/Page.vala (+24/-10)
src/Photo.vala (+74/-14)
src/PhotoPage.vala (+4/-0)
src/Resources.vala (+9/-1)
src/SearchFilter.vala (+98/-1)
src/Thumbnail.vala (+11/-10)
src/camera/ImportPage.vala (+1/-1)
src/core/SourceInterfaces.vala (+16/-0)
src/db/DatabaseTable.vala (+13/-1)
src/db/Db.vala (+16/-0)
src/db/GeoLocationTable.vala (+205/-0)
src/db/PhotoTable.vala (+68/-15)
src/db/mk/db.mk (+2/-1)
src/library/Branch.vala (+78/-0)
src/library/LibraryWindow.vala (+47/-0)
src/library/TrashSidebarEntry.vala (+2/-0)
src/library/mk/library.mk (+1/-0)
src/libshotwell.deps (+6/-0)
src/main.vala (+2/-2)
src/maps/CountryCodes.vala (+4189/-0)
src/maps/LocationSearchEntry.vala (+201/-0)
src/maps/MapMarkerPage.vala (+54/-0)
src/maps/MapPage.vala (+307/-0)
src/maps/MapWidget.vala (+563/-0)
src/maps/Maps.vala (+16/-0)
src/maps/PositionMarker.vala (+115/-0)
src/maps/mk/maps.mk (+33/-0)
src/photos/PhotoMetadata.vala (+13/-0)
src/sidebar/metadata/LibraryProperties.vala (+97/-2)
src/sidebar/metadata/MetadataSidebar.vala (+5/-1)
ui/locations.dat (+141768/-0)
ui/map.ui (+27/-0)
units.mk (+2/-1)
To merge this branch: bzr merge lp:~meese/pantheon-photos/fix-1273847
Reviewer Review Type Date Requested Status
Danielle Foré Needs Fixing
Cody Garver Pending
Review via email: mp+232955@code.launchpad.net

This proposal supersedes a proposal from 2014-08-30.

Description of the change

Adds maps to photos.
-Metadata sidebar map widget that can be double clicked to set a GPS location in the photo's DB

-Interactive map page that can be accessed from the library sidebar. Automagically groups photo markers that overlap locations and displays thumbnails when markers are clicked. Clicking the thumbnails will switch to a collection view of all the photos in the group.

-libchamplain and clutter are required to build/use

To post a comment you must log in.
Revision history for this message
Cody Garver (codygarver) wrote : Posted in a previous version of this proposal

Breaks Photo Viewer for me, refuses to launch when I try to open an image with it.

Can you lock the map min height to the height of its area in the window? Here's are 2 screenshots, the first one is current minimum dimensions of the map, the second is closer to what I propose.

review: Needs Fixing
Revision history for this message
Cody Garver (codygarver) wrote : Posted in a previous version of this proposal

Maybe it's more elegant to lock the min width instead, so the map is always covering all of its area

Revision history for this message
Cody Garver (codygarver) wrote : Posted in a previous version of this proposal

Toggling the search causes the map to flash and sometimes go completely black until I toggle a few more times

Revision history for this message
Cody Garver (codygarver) wrote : Posted in a previous version of this proposal

I think aerial map is a better default than geographical

Revision history for this message
meese (meese) wrote : Posted in a previous version of this proposal

>Can you lock the map min height to the height of its area in the window? Here's are 2 screenshots, >the first one is current minimum dimensions of the map, the second is closer to what I propose.
I think you forgot to attach the screenshots.

The problem with locking to height is the view size will change while you're clicking through photos because of different amounts of exif information. What would be best I think is to lock to both with a ratio with a Gtk.AspectFrame, which I tried and it kinda worked but champlain did not play nice with it and would keep adding giant amounts of padding to both sides, I'll try to figure it out..

Still working on the flicker issues.

Revision history for this message
Danielle Foré (danrabbit) wrote :

Can we default to "Geographical" view instead of "Aerial" view?

I think we should ditch "relief" view. I'm not sure that's useful. Also all these extra views in the right click menu. I don't think "cloud" view is relevant to photos.

It looks like there is an extra frame around the view. Can we remove that?

The default view is zoomed out to the whole world. That's a little much. We should do like Facebook and zoom just so that we show all the places you have photos. And I guess if you have 0 locations we should not show the "Places" item like we don't show "Flagged" etc.

If a photo doesn't have a location, we should ask them to add a location by searching for its name (ie: Yosemite National Park) instead of trying to click a location (which will always be inaccurate).

review: Needs Fixing
Revision history for this message
meese (meese) wrote :

All are fixed now.

Revision history for this message
meese (meese) wrote :

Also the geo locations are loaded into the db on the first run which takes about 10-20 seconds. Not something a new user will be likely to run into but for a tester the geo search completion won't be fully loaded until it's done.

Revision history for this message
Danielle Foré (danrabbit) wrote :

Hm, is it possible to get the names of places (restaurants, buildings, etc) in addition to just cities? It looks like Maya can do this.

Also, once we've confirmed a location we should probably zoom in more on that location. I can see almost my whole state from the current zoom level :p

Can we also get the same location marker image from Maya?

Revision history for this message
meese (meese) wrote :

Ohh did not know Maya had maps too. Will do.

2578. By meese

change gps markers to icons from Maya. Make default zoom in closer

Revision history for this message
meese (meese) wrote :

Hey it looks like Maya is actually going searching through your contacts list to find address information to give you things like restaurants and such. Dunno if we want to add something like that to photos?

I just fixed the other two though.

2579. By meese

add places icon for sidebar

Revision history for this message
Danielle Foré (danrabbit) wrote :

Yeah I think it makes sense that anything you can search for in one place we should be able to search in another place.

Revision history for this message
meese (meese) wrote :

And I was wrong actually it will do straight street addresses. Auto complete in Maya doesn't seem to bring anything up for me though does it for you?

2580. By meese

search changes from review

Revision history for this message
meese (meese) wrote :

Fixed hitting enter in the entry box does what Maya does and uses the Geocode lib that hits the web and grabs the closest match and contacts addresses are added to the auto complete. Slightly different though it still uses an offline location list for non contacts auto complete instead of using the geocode lib as I found the lookup was generally too slow and made it feel unresponsive.

Revision history for this message
Danielle Foré (danrabbit) wrote :

It looks like it does find the place on hitting enter. Is there are way to have locations appear in the auto-complete? If not, maybe we should ditch the auto-complete. As you're typing in a location it kind of feels like you're being told that it can't find what you're looking for even though it will find it on pressing enter.

Can we zoom in more in the sidebar? I feel like we're still really far away from a specific location.

I've also noticed that once a location is set, hitting "clear" clears the entry but doesn't remove that location tag. It doesn't appear to be possible to untag a photo's location.

It also looks like the location marker is positioned incorrectly. The location appears to be under the top/left (maybe?) of the marker instead of bottom center.

2581. By meese

fixes

Revision history for this message
meese (meese) wrote :

Fixed.

For the search stuff, yeah I had already written it for grabbing the locations from the geocode library for auto complete and I changed it back and it falls back to the offline auto complete now. It can be a little slow to come up but it sounds like that's better than using a different list for hitting enter vs auto complete.

2582. By meese

merge

2583. By meese

merge fix

Revision history for this message
Danielle Foré (danrabbit) wrote :

Hm there seems to be no indication (in the sidebar) that a search for the location is in progress. Can we either show the map sooner or have a gtk.spinner or something?

Also, the sidebar map needs to be WAY more zoomed in if it's matching to a building. It's showing at like half a European country size instead of at like a city block size

The map view is still super zoomed out by default and nowhere near where my photos are :p

Yay that it finds places now :D

Unmerged revisions

2583. By meese

merge fix

2582. By meese

merge

2581. By meese

fixes

2580. By meese

search changes from review

2579. By meese

add places icon for sidebar

2578. By meese

change gps markers to icons from Maya. Make default zoom in closer

2577. By meese

adds location search entry for setting gps markers and other fixes from review

2576. By meese

change back to geographic map for default, make page not visible if no photos have gps data, remove page border, trim down extra map options

2575. By meese

merge from trunk

2574. By meese

spelling fix

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Makefile'
2--- Makefile 2014-09-27 09:20:58 +0000
3+++ Makefile 2014-10-18 00:49:47 +0000
4@@ -143,7 +143,9 @@
5 tag_sidebar_context.ui \
6 tags.ui \
7 top.ui \
8- trash.ui
9+ trash.ui \
10+ locations.dat \
11+ map.ui
12
13 SYS_INTEGRATION_FILES = \
14 shotwell.appdata.xml \
15@@ -171,10 +173,13 @@
16
17 ICON_FILES = \
18 drag_nub.png \
19+ gps-marker.svg \
20+ gps-marker-selected.svg \
21 image-adjust.svg \
22 noninterpretable-video.png \
23 pin-toolbar.svg \
24- sprocket.png
25+ sprocket.png \
26+ places.svg
27
28 HELP_FILES = \
29 edit-adjustments.page \
30@@ -236,6 +241,10 @@
31
32 EXT_PKGS = \
33 atk \
34+ champlain-0.12 \
35+ champlain-gtk-0.12 \
36+ clutter-1.0 \
37+ clutter-gtk-1.0 \
38 gdk-3.0 \
39 gee-0.8 \
40 gexiv2 \
41@@ -255,7 +264,9 @@
42 libsoup-2.4 \
43 libxml-2.0 \
44 sqlite3 \
45- webkitgtk-3.0
46+ webkitgtk-3.0 \
47+ geocode-glib-1.0 \
48+ folks
49
50 ifdef UNITY_SUPPORT
51 EXT_PKGS += unity
52@@ -270,6 +281,10 @@
53 DIRECT_LIBS =
54
55 EXT_PKG_VERSIONS = \
56+ champlain-0.12 >= 0.12.3 \
57+ champlain-gtk-0.12 >= 0.12.3 \
58+ clutter-1.0 >= 1.12.0 \
59+ clutter-gtk-1.0 >= 1.0.0 \
60 gee-0.8 >= 0.8.5 \
61 gexiv2 >= 0.4.90 \
62 gio-unix-2.0 >= 2.20 \
63@@ -288,7 +303,9 @@
64 libxml-2.0 >= 2.6.32 \
65 rest-0.7 >= 0.7 \
66 sqlite3 >= 3.5.9 \
67- webkitgtk-3.0 >= 1.4.0
68+ webkitgtk-3.0 >= 1.4.0 \
69+ geocode-glib-1.0 >= 1.0
70+ folks >= 0.9.0
71
72 DIRECT_LIBS_VERSIONS =
73
74@@ -640,6 +657,12 @@
75 $(PROGRAM): $(EXPANDED_OBJ_FILES) $(RESOURCES) $(LANG_STAMP) $(THUMBNAILER_BIN) misc/gschemas.compiled
76 $(CC) $(EXPANDED_OBJ_FILES) $(CFLAGS) $(LDFLAGS) $(RESOURCES) $(VALA_LDFLAGS) $(EXPORT_FLAGS) -o $@
77
78+FASTFLAGS = --target-glib=2.32 --thread --enable-experimental --disable-warnings
79+fast: CFLAGS = -w -pipe -O0
80+fast: VALAFLAGS = $(FASTFLAGS)
81+-j3 fast: $(EXPANDED_OBJ_FILES) $(RESOURCES) $(LANG_STAMP) misc/gschemas.compiled
82+ $(CC) $(EXPANDED_OBJ_FILES) $(CFLAGS) $(LDFLAGS) $(RESOURCES) $(VALA_LDFLAGS) $(EXPORT_FLAGS) -o $(PROGRAM)
83+
84 misc/gschemas.compiled: $(SCHEMA_FILES)
85 rm -f misc/gschemas.compiled
86 glib-compile-schemas misc
87
88=== added file 'icons/earth_map.svg'
89--- icons/earth_map.svg 1970-01-01 00:00:00 +0000
90+++ icons/earth_map.svg 2014-10-18 00:49:47 +0000
91@@ -0,0 +1,230 @@
92+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
93+<!-- Created with Inkscape (http://www.inkscape.org/) -->
94+
95+<svg
96+ xmlns:dc="http://purl.org/dc/elements/1.1/"
97+ xmlns:cc="http://creativecommons.org/ns#"
98+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
99+ xmlns:svg="http://www.w3.org/2000/svg"
100+ xmlns="http://www.w3.org/2000/svg"
101+ xmlns:xlink="http://www.w3.org/1999/xlink"
102+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
103+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
104+ version="1.1"
105+ width="48"
106+ height="48"
107+ id="svg3759"
108+ inkscape:version="0.48.4 r9939"
109+ sodipodi:docname="internet-web-browser.svg">
110+ <sodipodi:namedview
111+ pagecolor="#ffffff"
112+ bordercolor="#666666"
113+ borderopacity="1"
114+ objecttolerance="10"
115+ gridtolerance="10"
116+ guidetolerance="10"
117+ inkscape:pageopacity="0"
118+ inkscape:pageshadow="2"
119+ inkscape:window-width="640"
120+ inkscape:window-height="480"
121+ id="namedview36"
122+ showgrid="false"
123+ inkscape:zoom="4.9166667"
124+ inkscape:cx="24"
125+ inkscape:cy="24"
126+ inkscape:window-x="0"
127+ inkscape:window-y="30"
128+ inkscape:window-maximized="0"
129+ inkscape:current-layer="svg3759" />
130+ <metadata
131+ id="metadata37">
132+ <rdf:RDF>
133+ <cc:Work
134+ rdf:about="">
135+ <dc:format>image/svg+xml</dc:format>
136+ <dc:type
137+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
138+ </cc:Work>
139+ </rdf:RDF>
140+ </metadata>
141+ <defs
142+ id="defs3761">
143+ <radialGradient
144+ cx="17.81411"
145+ cy="24.149399"
146+ r="9.125"
147+ fx="17.81411"
148+ fy="24.149399"
149+ id="radialGradient2418"
150+ xlink:href="#linearGradient4845"
151+ gradientUnits="userSpaceOnUse"
152+ gradientTransform="matrix(-2.643979,0,2.93653e-8,2.534421,78.72514,-37.986139)" />
153+ <linearGradient
154+ id="linearGradient4845">
155+ <stop
156+ id="stop4847"
157+ style="stop-color:#ffffff;stop-opacity:1"
158+ offset="0" />
159+ <stop
160+ id="stop4849"
161+ style="stop-color:#b6b6b6;stop-opacity:1"
162+ offset="1" />
163+ </linearGradient>
164+ <linearGradient
165+ x1="62.200409"
166+ y1="-12.489107"
167+ x2="62.200409"
168+ y2="-1.4615115"
169+ id="linearGradient3697"
170+ xlink:href="#linearGradient4873"
171+ gradientUnits="userSpaceOnUse"
172+ gradientTransform="matrix(2.1153734,0,0,2.1153252,-107.57708,31.426557)" />
173+ <linearGradient
174+ id="linearGradient4873">
175+ <stop
176+ id="stop4875"
177+ style="stop-color:#ffffff;stop-opacity:1"
178+ offset="0" />
179+ <stop
180+ id="stop4877"
181+ style="stop-color:#ffffff;stop-opacity:0"
182+ offset="1" />
183+ </linearGradient>
184+ <radialGradient
185+ cx="61.240059"
186+ cy="-8.7256308"
187+ r="9.7552834"
188+ fx="61.240059"
189+ fy="-8.7256308"
190+ id="radialGradient3705"
191+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148"
192+ gradientUnits="userSpaceOnUse"
193+ gradientTransform="matrix(0,3.5234091,-3.5234073,0,-6.7439676,-205.79862)" />
194+ <linearGradient
195+ id="linearGradient2867-449-88-871-390-598-476-591-434-148">
196+ <stop
197+ id="stop4627"
198+ style="stop-color:#51cfee;stop-opacity:1"
199+ offset="0" />
200+ <stop
201+ id="stop4629"
202+ style="stop-color:#49a3d2;stop-opacity:1"
203+ offset="0.26238" />
204+ <stop
205+ id="stop4631"
206+ style="stop-color:#3470b4;stop-opacity:1"
207+ offset="0.704952" />
208+ <stop
209+ id="stop4633"
210+ style="stop-color:#273567;stop-opacity:1"
211+ offset="1" />
212+ </linearGradient>
213+ <linearGradient
214+ x1="20"
215+ y1="43"
216+ x2="20"
217+ y2="2.6887112"
218+ id="linearGradient3713"
219+ xlink:href="#linearGradient3707-319-631"
220+ gradientUnits="userSpaceOnUse"
221+ gradientTransform="matrix(0.98001402,0,0,0.97999168,0.08994011,0.8703621)" />
222+ <linearGradient
223+ id="linearGradient3707-319-631">
224+ <stop
225+ id="stop4637"
226+ style="stop-color:#254b6d;stop-opacity:1"
227+ offset="0" />
228+ <stop
229+ id="stop4639"
230+ style="stop-color:#415b73;stop-opacity:1"
231+ offset="0.5" />
232+ <stop
233+ id="stop4641"
234+ style="stop-color:#6195b5;stop-opacity:1"
235+ offset="1" />
236+ </linearGradient>
237+ <linearGradient
238+ id="linearGradient8838">
239+ <stop
240+ id="stop8840"
241+ style="stop-color:#000000;stop-opacity:1"
242+ offset="0" />
243+ <stop
244+ id="stop8842"
245+ style="stop-color:#000000;stop-opacity:0"
246+ offset="1" />
247+ </linearGradient>
248+ <radialGradient
249+ cx="62.625"
250+ cy="4.625"
251+ r="10.625"
252+ fx="62.625"
253+ fy="4.625"
254+ id="radialGradient3757"
255+ xlink:href="#linearGradient8838"
256+ gradientUnits="userSpaceOnUse"
257+ gradientTransform="matrix(1,0,0,0.341176,0,3.047059)" />
258+ <linearGradient
259+ inkscape:collect="always"
260+ xlink:href="#linearGradient4873"
261+ id="linearGradient3017"
262+ gradientUnits="userSpaceOnUse"
263+ gradientTransform="matrix(2.1153734,0,0,2.1153252,-107.57708,31.426557)"
264+ x1="62.200409"
265+ y1="-12.489107"
266+ x2="62.200409"
267+ y2="-1.4615115" />
268+ <radialGradient
269+ inkscape:collect="always"
270+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148"
271+ id="radialGradient3021"
272+ gradientUnits="userSpaceOnUse"
273+ gradientTransform="matrix(0,3.5234091,-3.5234073,0,-6.7439676,-205.79862)"
274+ cx="61.240059"
275+ cy="-8.7256308"
276+ fx="61.240059"
277+ fy="-8.7256308"
278+ r="9.7552834" />
279+ <linearGradient
280+ inkscape:collect="always"
281+ xlink:href="#linearGradient3707-319-631"
282+ id="linearGradient3023"
283+ gradientUnits="userSpaceOnUse"
284+ gradientTransform="matrix(0.98001402,0,0,0.97999168,0.08994011,0.8703621)"
285+ x1="20"
286+ y1="43"
287+ x2="20"
288+ y2="2.6887112" />
289+ <radialGradient
290+ inkscape:collect="always"
291+ xlink:href="#linearGradient8838"
292+ id="radialGradient3026"
293+ gradientUnits="userSpaceOnUse"
294+ gradientTransform="matrix(2.1647059,0,0,0.87466073,-111.56471,34.661405)"
295+ cx="62.625"
296+ cy="4.625"
297+ fx="62.625"
298+ fy="4.625"
299+ r="10.625" />
300+ </defs>
301+ <path
302+ style="opacity:0.4;fill:url(#radialGradient3026);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible"
303+ id="path8836"
304+ inkscape:connector-curvature="0"
305+ d="m 46.999997,38.706716 a 23,9.2932831 0 0 1 -46.0000002,0 23,9.2932831 0 1 1 46.0000002,0 z" />
306+ <path
307+ style="fill:url(#radialGradient3021);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3023);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
308+ id="path6495"
309+ inkscape:connector-curvature="0"
310+ d="M 43.500003,23.999309 C 43.500003,34.769208 34.768912,43.5 24.000248,43.5 13.230599,43.5 4.5000032,34.769109 4.5000032,23.999309 4.5000032,13.229904 13.230599,4.5 24.000248,4.5 c 10.768664,0 19.499755,8.729904 19.499755,19.499309 l 0,0 z" />
311+ <path
312+ style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
313+ id="path6534"
314+ inkscape:connector-curvature="0"
315+ d="m 24.329633,5.218182 -2.362344,0.2704567 -2.59858,0.7099494 c 0.221353,-0.077615 0.445595,-0.1623374 0.674956,-0.2366499 L 19.739934,5.4210246 18.727501,5.5900601 18.221284,6.0633596 17.445085,6.1647809 16.736382,6.502852 16.398905,6.6718876 16.29766,6.807116 15.791444,6.9085373 15.487716,7.5508723 15.08274,6.7395017 l -0.134989,0.3380711 0.0675,0.9127919 -0.641208,0.5409137 -0.371225,0.9804061 0.7762,0 0.303728,-0.642335 0.101245,-0.2366498 c 0.341288,-0.241775 0.66483,-0.5110331 1.012433,-0.7437563 l 0.809946,0.2704568 c 0.527335,0.3588995 1.058376,0.7234732 1.586147,1.0818274 L 19.368709,8.5312784 18.491266,8.1594002 18.086294,7.3480297 16.601391,7.1789941 16.567641,7.0099586 17.208847,7.145187 17.580075,6.7733087 18.390021,6.6042734 C 18.581694,6.5108897 18.770243,6.44363 18.963732,6.3676236 l -0.506216,0.4732995 1.82238,1.250863 0,0.7437562 -0.708703,0.7099493 0.944937,1.8931994 0.641208,-0.371881 0.809948,-1.2508614 c 1.138725,-0.3526792 2.165016,-0.7630693 3.239789,-1.2508632 l -0.0675,0.4732995 0.539963,0.3718782 0.944939,-0.6423349 -0.47247,-0.5409137 -0.641209,0.3718781 -0.202486,-0.067613 c 0.04651,-0.02129 0.08828,-0.045973 0.13499,-0.067613 L 26.388247,6.0295525 24.329633,5.218182 z m -9.246893,3.6511675 0.776199,0.5409136 0.641209,0 0,-0.6423349 L 15.72395,8.429857 15.08274,8.8693495 z M 33.002811,8.429857 31.619153,8.7679282 30.741712,9.342649 l 0,0.5071058 -1.383659,0.8789842 0.269983,1.31848 0.809946,-0.574723 0.506216,0.574723 0.573714,0.338071 0.371224,-0.980408 -0.202486,-0.57472 0.202486,-0.405687 0.809948,-0.7437548 0.371225,0 -0.371225,0.8113728 0,0.743754 c 0.333836,-0.09103 0.6708,-0.126483 1.012433,-0.169037 l -0.944938,0.676145 -0.0675,0.405683 -1.079929,0.912794 -1.113678,-0.270459 0,-0.642335 -0.506216,0.338072 0.236235,0.574722 -0.809947,0 -0.438721,0.743756 -0.539965,0.608528 -0.978685,0.202842 0.573712,0.574721 0.134991,0.57472 -0.708703,0 -0.944938,0.507108 0,1.48751 0.438721,0 0.404973,0.439494 0.91119,-0.439494 0.337478,-0.912791 0.674956,-0.405685 0.134991,-0.338071 1.079928,-0.270457 0.60746,0.676142 0.641209,0.338071 -0.371227,0.743758 0.573715,-0.169037 0.303728,-0.743757 -0.74245,-0.845177 0.303729,0 0.742451,0.608528 0.134992,0.811371 0.641207,0.743757 0.168739,-1.081827 0.337478,-0.169037 c 0.359225,0.373574 0.642383,0.83043 0.944938,1.250864 l 1.113677,0.06762 0.641207,0.405686 -0.303729,0.439492 -0.641208,0.574721 -0.944939,0 -1.248667,-0.405684 -0.641208,0.06762 -0.472469,0.540915 -1.349912,-1.352286 -0.944937,-0.270456 -1.383659,0.169036 -1.21492,0.33807 c -0.693063,0.7871 -1.402636,1.582869 -2.058616,2.400307 l -0.776198,1.893195 0.371226,0.405687 -0.674956,0.980406 0.742451,1.724162 c 0.617799,0.700089 1.239228,1.395452 1.856128,2.09604 l 0.91119,-0.777564 0.371226,0.473301 0.978687,-0.642335 0.337477,0.371878 0.978685,0 0.573713,0.642335 -0.337478,1.149442 0.674955,0.777564 -0.03375,1.352283 0.506216,0.980406 -0.371225,0.845178 c -0.03619,0.60617 -0.0675,1.18551 -0.0675,1.791777 0.297757,0.821342 0.59628,1.640668 0.877443,2.467918 l 0.202487,1.318476 0,0.676143 0.539963,0 0.7762,-0.507106 0.944939,0 1.417406,-1.588934 -0.168739,-0.540915 0.944939,-0.845177 -0.708705,-0.777563 0.843694,-0.676141 0.809948,-0.507109 0.371225,-0.405685 -0.236234,-0.912791 c 0,-0.768475 2e-6,-1.530306 0,-2.298884 l 0.641209,-1.419897 0.809945,-0.878985 0.877443,-2.163655 0,-0.574721 c -0.436643,0.0551 -0.855168,0.10478 -1.282416,0.13523 l 0.877442,-0.878986 1.21492,-0.81137 0.641209,-0.743758 0,-0.811369 C 41.631793,22.01604 41.484928,21.720356 41.338501,21.44561 l -0.573712,0.676141 -0.438721,-0.507105 -0.641209,-0.507107 0,-1.048021 0.742452,0.845178 0.843696,-0.101421 c 0.380615,0.346139 0.746089,0.65392 1.079927,1.04802 l 0.539978,-0.608545 c 0,-0.655131 -0.736573,-3.889319 -2.328596,-6.626192 -1.592024,-2.735972 -4.387213,-5.240102 -4.387211,-5.240102 l -0.202488,0.3718783 -0.742451,0.8113707 -0.944937,-0.9804063 0.944937,0 L 35.668888,9.1059992 33.914003,8.7679282 33.002811,8.429857 z M 12.720395,8.8693495 12.382918,9.7483343 c 0,0 -0.590841,0.097717 -0.74245,0.1352286 -1.9362043,1.7873441 -5.8406714,5.6641681 -6.7495557,12.9481221 0.035987,0.168879 0.6412078,1.14944 0.6412078,1.14944 l 1.4849023,0.878986 1.4849024,0.405684 0.6412079,0.777564 0.9786853,0.743756 0.573712,-0.101421 0.404974,0.202844 0,0.135226 -0.539965,1.521321 -0.438721,0.642336 0.134991,0.304263 -0.3374777,1.217057 1.2486677,2.298882 1.282416,1.115635 0.573711,0.81137 -0.0675,1.690355 0.404974,0.946598 -0.404974,1.825586 c 0,0 -0.05404,-0.01501 0,0.169036 0.05452,0.184134 2.25593,1.422835 2.396091,1.318476 0.139681,-0.106305 0.269983,-0.202843 0.269983,-0.202843 l -0.13499,-0.405685 0.573712,-0.540913 0.202486,-0.574722 0.911191,-0.304265 0.708702,-1.757968 -0.202486,-0.4733 0.472468,-0.743756 1.07993,-0.236649 0.539965,-1.28467 -0.134992,-1.588935 0.843695,-1.183247 0.13499,-1.217056 c -1.15759,-0.575052 -2.293316,-1.165913 -3.442272,-1.75797 l -0.573713,-1.115634 -1.046181,-0.23665 -0.573712,-1.521321 -1.383659,0.169035 -1.214921,-0.878983 -1.282415,1.115634 0,0.169036 C 10.716387,26.202752 10.261353,26.186409 9.9193333,25.975746 l -0.2699819,-0.811371 0,-0.878985 -0.8774423,0.101421 c 0.070612,-0.559892 0.1651315,-1.13056 0.2362324,-1.690355 l -0.5062167,0 -0.5062167,0.642335 -0.4724689,0.23665 -0.7087034,-0.405685 -0.067496,-0.878985 0.1349912,-0.946599 1.0461812,-0.811371 0.8436945,0 0.1687389,-0.473299 1.0461817,0.236648 0.7761987,0.980407 0.134991,-1.622742 1.349911,-1.115633 0.472468,-1.183248 1.012435,-0.405685 0.539964,-0.811372 1.282416,-0.23665 0.641208,-0.946599 c -0.634667,0 -1.288957,0 -1.923624,0 l 1.214921,-0.574721 0.843693,0 1.07993,-0.371877 0.202487,1.04802 0.472469,-0.743757 -0.539966,-0.371878 0.134992,-0.439491 -0.438721,-0.405687 -0.47247,-0.135228 0.134992,-0.507106 -0.371226,-0.709948 -0.843695,0.33807 0.134992,-0.642334 -0.978686,-0.574722 -0.776198,1.352284 0.0675,0.4733 -0.776198,0.338071 -0.472469,1.04802 -0.236234,-0.980407 -1.316164,-0.540913 -0.236234,-0.743756 1.788632,-1.014213 0.776198,-0.743757 0.0675,-0.8789846 -0.438721,-0.2366498 -0.573713,-0.067613 z m 14.477799,1.6227435 0,0.54091 0.30373,0.338072 0,0.811371 -0.168739,1.081827 0.877442,-0.169036 0.641209,-0.642334 -0.573713,-0.540915 c -0.186049,-0.496308 -0.3746,-0.943871 -0.607459,-1.419895 l -0.47247,0 z m -0.742452,1.081824 -0.539963,0.169038 0.13499,0.980405 0.708703,-0.371881 -0.30373,-0.777562 z m 9.888101,8.89127 0.809946,0.946598 0.978686,2.096042 0.607459,0.67614 -0.303728,0.709952 0.539964,0.642335 c -0.247792,0.01643 -0.487764,0.03381 -0.742451,0.03381 -0.462673,-0.973935 -0.828843,-1.956133 -1.181173,-2.975025 l -0.60746,-0.676142 -0.337478,-1.217056 0.236235,-0.23665 z" />
316+ <path
317+ style="opacity:0.4;fill:none;stroke:url(#linearGradient3017);stroke-width:1.0000006;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
318+ id="path8655"
319+ inkscape:connector-curvature="0"
320+ d="m 42.500001,23.999343 c 0,10.217597 -8.283342,18.500655 -18.499766,18.500655 -10.217359,0 -18.5002317,-8.283152 -18.5002317,-18.500655 0,-10.217125 8.2828727,-18.4993427 18.5002317,-18.4993427 10.216424,0 18.499766,8.2822177 18.499766,18.4993427 l 0,0 z" />
321+</svg>
322
323=== added file 'icons/gps-marker-selected.svg'
324--- icons/gps-marker-selected.svg 1970-01-01 00:00:00 +0000
325+++ icons/gps-marker-selected.svg 2014-10-18 00:49:47 +0000
326@@ -0,0 +1,1388 @@
327+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
328+<!-- Created with Inkscape (http://www.inkscape.org/) -->
329+
330+<svg
331+ xmlns:dc="http://purl.org/dc/elements/1.1/"
332+ xmlns:cc="http://creativecommons.org/ns#"
333+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
334+ xmlns:svg="http://www.w3.org/2000/svg"
335+ xmlns="http://www.w3.org/2000/svg"
336+ xmlns:xlink="http://www.w3.org/1999/xlink"
337+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
338+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
339+ version="1.1"
340+ width="23"
341+ height="33"
342+ id="svg2"
343+ inkscape:version="0.48.4 r9939"
344+ sodipodi:docname="gps-marker selected.svg">
345+ <sodipodi:namedview
346+ pagecolor="#ffffff"
347+ bordercolor="#666666"
348+ borderopacity="1"
349+ objecttolerance="10"
350+ gridtolerance="10"
351+ guidetolerance="10"
352+ inkscape:pageopacity="0"
353+ inkscape:pageshadow="2"
354+ inkscape:window-width="2560"
355+ inkscape:window-height="1335"
356+ id="namedview189"
357+ showgrid="false"
358+ inkscape:zoom="10.11377"
359+ inkscape:cx="44.615873"
360+ inkscape:cy="25.262848"
361+ inkscape:window-x="0"
362+ inkscape:window-y="30"
363+ inkscape:window-maximized="1"
364+ inkscape:current-layer="svg2" />
365+ <defs
366+ id="defs4">
367+ <linearGradient
368+ id="linearGradient4291">
369+ <stop
370+ offset="0"
371+ style="stop-color:#242424;stop-opacity:1"
372+ id="stop4293" />
373+ <stop
374+ offset="1"
375+ style="stop-color:#242424;stop-opacity:0"
376+ id="stop4295" />
377+ </linearGradient>
378+ <linearGradient
379+ id="linearGradient4279">
380+ <stop
381+ offset="0"
382+ style="stop-color:#006390;stop-opacity:1"
383+ id="stop4281" />
384+ <stop
385+ offset="1"
386+ style="stop-color:#004667;stop-opacity:0.99795502"
387+ id="stop4283" />
388+ </linearGradient>
389+ <linearGradient
390+ id="linearGradient4269">
391+ <stop
392+ offset="0"
393+ style="stop-color:#4bc7fe;stop-opacity:1"
394+ id="stop4271" />
395+ <stop
396+ offset="0.19700792"
397+ style="stop-color:#4bc7fe;stop-opacity:0.23529412"
398+ id="stop4273" />
399+ <stop
400+ offset="0.6310662"
401+ style="stop-color:#4bc7fe;stop-opacity:0.15686275"
402+ id="stop4275" />
403+ <stop
404+ offset="1"
405+ style="stop-color:#4bc7fe;stop-opacity:0.39215687"
406+ id="stop4277" />
407+ </linearGradient>
408+ <linearGradient
409+ id="linearGradient4873">
410+ <stop
411+ offset="0"
412+ style="stop-color:#4bc7fe;stop-opacity:1"
413+ id="stop4875" />
414+ <stop
415+ offset="1"
416+ style="stop-color:#4bc7fe;stop-opacity:0"
417+ id="stop4877" />
418+ </linearGradient>
419+ <linearGradient
420+ gradientTransform="matrix(0.51455032,0,0,0.51453856,-24.005236,9.8064595)"
421+ gradientUnits="userSpaceOnUse"
422+ xlink:href="#linearGradient4873"
423+ id="linearGradient3683"
424+ y2="5.4675598"
425+ x2="63.397362"
426+ y1="-12.489107"
427+ x1="63.397362" />
428+ <linearGradient
429+ id="linearGradient3603">
430+ <stop
431+ offset="0"
432+ style="stop-color:#00b063;stop-opacity:1"
433+ id="stop3605" />
434+ <stop
435+ offset="1"
436+ style="stop-color:#00f246;stop-opacity:1"
437+ id="stop3607" />
438+ </linearGradient>
439+ <linearGradient
440+ gradientTransform="matrix(0.2703533,0,0,0.27035337,1.5115215,1.5115197)"
441+ gradientUnits="userSpaceOnUse"
442+ xlink:href="#linearGradient3603"
443+ id="linearGradient3730"
444+ y2="3.0816143"
445+ x2="18.379412"
446+ y1="44.980297"
447+ x1="18.379412" />
448+ <linearGradient
449+ id="linearGradient3690">
450+ <stop
451+ offset="0"
452+ style="stop-color:#37fff7;stop-opacity:1"
453+ id="stop3692" />
454+ <stop
455+ offset="0.26238"
456+ style="stop-color:#21fee4;stop-opacity:1"
457+ id="stop3694" />
458+ <stop
459+ offset="0.66093999"
460+ style="stop-color:#08fea6;stop-opacity:1"
461+ id="stop3696" />
462+ <stop
463+ offset="1"
464+ style="stop-color:#00dd65;stop-opacity:1"
465+ id="stop3698" />
466+ </linearGradient>
467+ <radialGradient
468+ gradientTransform="matrix(0,0.64524082,-0.85170617,0,11.39831,-13.333564)"
469+ gradientUnits="userSpaceOnUse"
470+ xlink:href="#linearGradient3690"
471+ id="radialGradient3728"
472+ fy="3.9900031"
473+ fx="23.895569"
474+ r="20.397499"
475+ cy="3.9900031"
476+ cx="23.895569" />
477+ <radialGradient
478+ gradientTransform="matrix(0,117.18262,-143.86282,0,1693.1125,-1069.0711)"
479+ gradientUnits="userSpaceOnUse"
480+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7"
481+ id="radialGradient4065"
482+ fy="9.9571075"
483+ fx="7.1183534"
484+ r="12.671875"
485+ cy="9.9571075"
486+ cx="7.1183534" />
487+ <linearGradient
488+ id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7">
489+ <stop
490+ offset="0"
491+ style="stop-color:#00699b;stop-opacity:1"
492+ id="stop3750-1-0-7-6-6-1-3-9-3-7" />
493+ <stop
494+ offset="0.26238"
495+ style="stop-color:#005176;stop-opacity:1"
496+ id="stop3752-3-7-4-0-32-8-923-0-7-3" />
497+ <stop
498+ offset="0.704952"
499+ style="stop-color:#002955;stop-opacity:1"
500+ id="stop3754-1-8-5-2-7-6-7-1-9-6" />
501+ <stop
502+ offset="1"
503+ style="stop-color:#242424;stop-opacity:1"
504+ id="stop3756-1-6-2-6-6-1-96-6-0-1" />
505+ </linearGradient>
506+ <radialGradient
507+ gradientTransform="matrix(0,117.18262,-143.86282,0,1693.1125,-1069.0711)"
508+ gradientUnits="userSpaceOnUse"
509+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7"
510+ id="radialGradient3249-0"
511+ fy="9.9571075"
512+ fx="7.1183534"
513+ r="12.671875"
514+ cy="9.9571075"
515+ cx="7.1183534" />
516+ <linearGradient
517+ id="linearGradient3895">
518+ <stop
519+ offset="0"
520+ style="stop-color:#4bc7fe;stop-opacity:1"
521+ id="stop3897" />
522+ <stop
523+ offset="0.05263157"
524+ style="stop-color:#4bc7fe;stop-opacity:0.23529412"
525+ id="stop3899" />
526+ <stop
527+ offset="0.95056331"
528+ style="stop-color:#4bc7fe;stop-opacity:0.15686275"
529+ id="stop3901" />
530+ <stop
531+ offset="1"
532+ style="stop-color:#4bc7fe;stop-opacity:0.39215687"
533+ id="stop3903" />
534+ </linearGradient>
535+ <linearGradient
536+ gradientTransform="translate(0,0.9999922)"
537+ gradientUnits="userSpaceOnUse"
538+ xlink:href="#linearGradient3680-6-6-6-3"
539+ id="linearGradient4183"
540+ y2="13.000008"
541+ x2="20"
542+ y1="26.000008"
543+ x1="20" />
544+ <linearGradient
545+ id="linearGradient3680-6-6-6-3">
546+ <stop
547+ offset="0"
548+ style="stop-color:#28bbfe;stop-opacity:1"
549+ id="stop3682-4-6-1-3" />
550+ <stop
551+ offset="1"
552+ style="stop-color:#4bc7fe;stop-opacity:1"
553+ id="stop3684-8-5-8-0" />
554+ </linearGradient>
555+ <linearGradient
556+ gradientTransform="translate(4e-6,1.0000062)"
557+ gradientUnits="userSpaceOnUse"
558+ xlink:href="#linearGradient3924-1"
559+ id="linearGradient3982"
560+ y2="43"
561+ x2="23.99999"
562+ y1="4.999989"
563+ x1="23.99999" />
564+ <linearGradient
565+ id="linearGradient3924-1">
566+ <stop
567+ offset="0"
568+ style="stop-color:#4bc7fe;stop-opacity:1"
569+ id="stop3926-3" />
570+ <stop
571+ offset="0.06316455"
572+ style="stop-color:#4bc7fe;stop-opacity:0.23529412"
573+ id="stop3928-91" />
574+ <stop
575+ offset="0.95056331"
576+ style="stop-color:#4bc7fe;stop-opacity:0.15686275"
577+ id="stop3930-6" />
578+ <stop
579+ offset="1"
580+ style="stop-color:#4bc7fe;stop-opacity:0.39215687"
581+ id="stop3932-6" />
582+ </linearGradient>
583+ <radialGradient
584+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
585+ gradientUnits="userSpaceOnUse"
586+ xlink:href="#linearGradient3688-166-749-4"
587+ id="radialGradient3963"
588+ fy="43.5"
589+ fx="4.9929786"
590+ r="2.5"
591+ cy="43.5"
592+ cx="4.9929786" />
593+ <linearGradient
594+ id="linearGradient3688-166-749-4">
595+ <stop
596+ offset="0"
597+ style="stop-color:#004063;stop-opacity:1"
598+ id="stop2883-3" />
599+ <stop
600+ offset="1"
601+ style="stop-color:#004063;stop-opacity:0"
602+ id="stop2885-2" />
603+ </linearGradient>
604+ <radialGradient
605+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
606+ gradientUnits="userSpaceOnUse"
607+ xlink:href="#linearGradient3688-464-309-3"
608+ id="radialGradient3965"
609+ fy="43.5"
610+ fx="4.9929786"
611+ r="2.5"
612+ cy="43.5"
613+ cx="4.9929786" />
614+ <linearGradient
615+ id="linearGradient3688-464-309-3">
616+ <stop
617+ offset="0"
618+ style="stop-color:#004063;stop-opacity:1"
619+ id="stop2889-6" />
620+ <stop
621+ offset="1"
622+ style="stop-color:#004063;stop-opacity:0"
623+ id="stop2891-2" />
624+ </linearGradient>
625+ <linearGradient
626+ gradientUnits="userSpaceOnUse"
627+ xlink:href="#linearGradient3702-501-757-2"
628+ id="linearGradient3967"
629+ y2="39.999443"
630+ x2="25.058096"
631+ y1="47.027729"
632+ x1="25.058096" />
633+ <linearGradient
634+ id="linearGradient3702-501-757-2">
635+ <stop
636+ offset="0"
637+ style="stop-color:#004063;stop-opacity:0"
638+ id="stop2895-3" />
639+ <stop
640+ offset="0.5"
641+ style="stop-color:#004063;stop-opacity:1"
642+ id="stop2897-0" />
643+ <stop
644+ offset="1"
645+ style="stop-color:#004063;stop-opacity:0"
646+ id="stop2899-1" />
647+ </linearGradient>
648+ <linearGradient
649+ gradientTransform="translate(0,0.9999922)"
650+ gradientUnits="userSpaceOnUse"
651+ xlink:href="#linearGradient3680-6-6-6-3"
652+ id="linearGradient3018"
653+ y2="13.000008"
654+ x2="20"
655+ y1="26.000008"
656+ x1="20" />
657+ <radialGradient
658+ gradientTransform="matrix(0,9.4975523,-11.65996,0,140.93055,-79.160978)"
659+ gradientUnits="userSpaceOnUse"
660+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8"
661+ id="radialGradient3031"
662+ fy="9.9571075"
663+ fx="6.2001843"
664+ r="12.671875"
665+ cy="9.9571075"
666+ cx="6.7304144" />
667+ <linearGradient
668+ id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8">
669+ <stop
670+ offset="0"
671+ style="stop-color:#19ffe8;stop-opacity:1"
672+ id="stop3750-1-0-7-6-6-1-3-9" />
673+ <stop
674+ offset="0.26238"
675+ style="stop-color:#00da8e;stop-opacity:1"
676+ id="stop3752-3-7-4-0-32-8-923-0" />
677+ <stop
678+ offset="0.704952"
679+ style="stop-color:#008545;stop-opacity:1"
680+ id="stop3754-1-8-5-2-7-6-7-1" />
681+ <stop
682+ offset="1"
683+ style="stop-color:#008f68;stop-opacity:1"
684+ id="stop3756-1-6-2-6-6-1-96-6" />
685+ </linearGradient>
686+ <linearGradient
687+ id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5">
688+ <stop
689+ offset="0"
690+ style="stop-color:#00699b;stop-opacity:1"
691+ id="stop3750-1-0-7-6-6-1-3-9-3" />
692+ <stop
693+ offset="0.26238"
694+ style="stop-color:#005176;stop-opacity:1"
695+ id="stop3752-3-7-4-0-32-8-923-0-7" />
696+ <stop
697+ offset="0.704952"
698+ style="stop-color:#002955;stop-opacity:1"
699+ id="stop3754-1-8-5-2-7-6-7-1-9" />
700+ <stop
701+ offset="1"
702+ style="stop-color:#242424;stop-opacity:1"
703+ id="stop3756-1-6-2-6-6-1-96-6-0" />
704+ </linearGradient>
705+ <radialGradient
706+ gradientTransform="matrix(0,9.4975523,-11.65996,0,136.43054,-84.660973)"
707+ gradientUnits="userSpaceOnUse"
708+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5"
709+ id="radialGradient3077"
710+ fy="9.9571075"
711+ fx="6.2001843"
712+ r="12.671875"
713+ cy="9.9571075"
714+ cx="6.7304144" />
715+ <linearGradient
716+ id="linearGradient3680-6-6-6-3-7">
717+ <stop
718+ offset="0"
719+ style="stop-color:#28bbfe;stop-opacity:1"
720+ id="stop3682-4-6-1-3-7" />
721+ <stop
722+ offset="1"
723+ style="stop-color:#4bc7fe;stop-opacity:1"
724+ id="stop3684-8-5-8-0-2" />
725+ </linearGradient>
726+ <linearGradient
727+ gradientTransform="translate(-20,-24.000008)"
728+ gradientUnits="userSpaceOnUse"
729+ xlink:href="#linearGradient3680-6-6-6-3-7"
730+ id="linearGradient3950"
731+ y2="13.000008"
732+ x2="20"
733+ y1="26.000008"
734+ x1="20" />
735+ <radialGradient
736+ gradientTransform="matrix(0,85.484079,-104.94714,0,1299.7805,-832.8559)"
737+ gradientUnits="userSpaceOnUse"
738+ xlink:href="#linearGradient3242"
739+ id="radialGradient3104"
740+ fy="9.9941158"
741+ fx="8.276144"
742+ r="12.671875"
743+ cy="9.9941158"
744+ cx="8.276144" />
745+ <linearGradient
746+ gradientTransform="translate(5.3e-6,1.0000015)"
747+ gradientUnits="userSpaceOnUse"
748+ xlink:href="#linearGradient3924-3"
749+ id="linearGradient4181"
750+ y2="43"
751+ x2="23.99999"
752+ y1="4.999989"
753+ x1="23.99999" />
754+ <linearGradient
755+ id="linearGradient3924-3">
756+ <stop
757+ offset="0"
758+ style="stop-color:#4bc7fe;stop-opacity:1"
759+ id="stop3926-7" />
760+ <stop
761+ offset="0.06316455"
762+ style="stop-color:#4bc7fe;stop-opacity:0.23529412"
763+ id="stop3928-3" />
764+ <stop
765+ offset="0.95056331"
766+ style="stop-color:#4bc7fe;stop-opacity:0.15686275"
767+ id="stop3930-7" />
768+ <stop
769+ offset="1"
770+ style="stop-color:#4bc7fe;stop-opacity:0.39215687"
771+ id="stop3932-1" />
772+ </linearGradient>
773+ <linearGradient
774+ gradientTransform="matrix(0.7037037,0,0,0.7037037,-39.333369,2.4814295)"
775+ gradientUnits="userSpaceOnUse"
776+ xlink:href="#linearGradient5803-2-7"
777+ id="linearGradient4907-4"
778+ y2="54.780239"
779+ x2="167.98311"
780+ y1="8.50811"
781+ x1="167.98311" />
782+ <linearGradient
783+ id="linearGradient5803-2-7">
784+ <stop
785+ offset="0"
786+ style="stop-color:#49cefe;stop-opacity:1"
787+ id="stop5805-3-6" />
788+ <stop
789+ offset="1"
790+ style="stop-color:#37c1ff;stop-opacity:1"
791+ id="stop5807-0-0" />
792+ </linearGradient>
793+ <radialGradient
794+ gradientTransform="matrix(0,6.6677582,-8.1858766,0,105.8829,-59.462774)"
795+ gradientUnits="userSpaceOnUse"
796+ xlink:href="#linearGradient3242"
797+ id="radialGradient6305"
798+ fy="9.9941158"
799+ fx="8.276144"
800+ r="12.671875"
801+ cy="9.9941158"
802+ cx="8.276144" />
803+ <linearGradient
804+ id="linearGradient3242">
805+ <stop
806+ offset="0"
807+ style="stop-color:#00cbe6;stop-opacity:1"
808+ id="stop3244" />
809+ <stop
810+ offset="0.26238"
811+ style="stop-color:#008ea8;stop-opacity:1"
812+ id="stop3246" />
813+ <stop
814+ offset="0.66093999"
815+ style="stop-color:#003b79;stop-opacity:1"
816+ id="stop3248" />
817+ <stop
818+ offset="1"
819+ style="stop-color:#050077;stop-opacity:1"
820+ id="stop3250" />
821+ </linearGradient>
822+ <radialGradient
823+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
824+ gradientUnits="userSpaceOnUse"
825+ xlink:href="#linearGradient3688-166-749"
826+ id="radialGradient3013"
827+ fy="43.5"
828+ fx="4.9929786"
829+ r="2.5"
830+ cy="43.5"
831+ cx="4.9929786" />
832+ <linearGradient
833+ id="linearGradient3688-166-749">
834+ <stop
835+ offset="0"
836+ style="stop-color:#004063;stop-opacity:1"
837+ id="stop2883" />
838+ <stop
839+ offset="1"
840+ style="stop-color:#004063;stop-opacity:0"
841+ id="stop2885" />
842+ </linearGradient>
843+ <radialGradient
844+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
845+ gradientUnits="userSpaceOnUse"
846+ xlink:href="#linearGradient3688-464-309"
847+ id="radialGradient3015"
848+ fy="43.5"
849+ fx="4.9929786"
850+ r="2.5"
851+ cy="43.5"
852+ cx="4.9929786" />
853+ <linearGradient
854+ id="linearGradient3688-464-309">
855+ <stop
856+ offset="0"
857+ style="stop-color:#004063;stop-opacity:1"
858+ id="stop2889" />
859+ <stop
860+ offset="1"
861+ style="stop-color:#004063;stop-opacity:0"
862+ id="stop2891" />
863+ </linearGradient>
864+ <linearGradient
865+ id="linearGradient3702-501-757">
866+ <stop
867+ offset="0"
868+ style="stop-color:#004063;stop-opacity:0"
869+ id="stop2895" />
870+ <stop
871+ offset="0.5"
872+ style="stop-color:#004063;stop-opacity:1"
873+ id="stop2897" />
874+ <stop
875+ offset="1"
876+ style="stop-color:#004063;stop-opacity:0"
877+ id="stop2899" />
878+ </linearGradient>
879+ <linearGradient
880+ gradientUnits="userSpaceOnUse"
881+ xlink:href="#linearGradient3702-501-757"
882+ id="linearGradient3141"
883+ y2="39.999443"
884+ x2="25.058096"
885+ y1="47.027729"
886+ x1="25.058096" />
887+ <linearGradient
888+ spreadMethod="pad"
889+ gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,158.172)"
890+ gradientUnits="userSpaceOnUse"
891+ xlink:href="#linearGradient152"
892+ id="linearGradient3288"
893+ y2="0"
894+ x2="1"
895+ y1="0"
896+ x1="0" />
897+ <linearGradient
898+ spreadMethod="pad"
899+ gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,158.172)"
900+ gradientUnits="userSpaceOnUse"
901+ id="linearGradient152"
902+ y2="0"
903+ x2="1"
904+ y1="0"
905+ x1="0">
906+ <stop
907+ offset="0"
908+ style="stop-color:#00f086;stop-opacity:1"
909+ id="stop154" />
910+ <stop
911+ offset="1"
912+ style="stop-color:#007079;stop-opacity:1"
913+ id="stop156" />
914+ </linearGradient>
915+ <clipPath
916+ id="clipPath148">
917+ <path
918+ id="path150"
919+ d="m 73.0625,1288.75 0,-1064.57 3694.7075,0 0,1075.02 c 0,0 -615.78,365.29 -1742.98,365.29 -1127.2,0 -1951.7275,-375.74 -1951.7275,-375.74" />
920+ </clipPath>
921+ <linearGradient
922+ spreadMethod="pad"
923+ gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,508.172)"
924+ gradientUnits="userSpaceOnUse"
925+ id="linearGradient22"
926+ y2="0"
927+ x2="1"
928+ y1="0"
929+ x1="0">
930+ <stop
931+ offset="0"
932+ style="stop-color:#00f086;stop-opacity:1"
933+ id="stop24" />
934+ <stop
935+ offset="1"
936+ style="stop-color:#007079;stop-opacity:1"
937+ id="stop26" />
938+ </linearGradient>
939+ <clipPath
940+ id="clipPath18">
941+ <path
942+ id="path20"
943+ d="m 73.0625,4788.75 0,-1064.57 3694.7075,0 0,1075.02 c 0,0 -615.78,365.29 -1742.98,365.29 -1127.2,0 -1951.7275,-375.74 -1951.7275,-375.74" />
944+ </clipPath>
945+ <linearGradient
946+ id="linearGradient3702-501-757-5">
947+ <stop
948+ offset="0"
949+ style="stop-color:#004063;stop-opacity:0"
950+ id="stop2895-5" />
951+ <stop
952+ offset="0.5"
953+ style="stop-color:#004063;stop-opacity:1"
954+ id="stop2897-1" />
955+ <stop
956+ offset="1"
957+ style="stop-color:#004063;stop-opacity:0"
958+ id="stop2899-4" />
959+ </linearGradient>
960+ <linearGradient
961+ gradientUnits="userSpaceOnUse"
962+ xlink:href="#linearGradient3702-501-757-5"
963+ id="linearGradient3086"
964+ y2="39.999443"
965+ x2="25.058096"
966+ y1="47.027729"
967+ x1="25.058096" />
968+ <linearGradient
969+ id="linearGradient3688-464-309-87">
970+ <stop
971+ offset="0"
972+ style="stop-color:#004063;stop-opacity:1"
973+ id="stop2889-5" />
974+ <stop
975+ offset="1"
976+ style="stop-color:#004063;stop-opacity:0"
977+ id="stop2891-5" />
978+ </linearGradient>
979+ <radialGradient
980+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
981+ gradientUnits="userSpaceOnUse"
982+ xlink:href="#linearGradient3688-464-309-87"
983+ id="radialGradient3084"
984+ fy="43.5"
985+ fx="4.9929786"
986+ r="2.5"
987+ cy="43.5"
988+ cx="4.9929786" />
989+ <linearGradient
990+ id="linearGradient3688-166-749-1">
991+ <stop
992+ offset="0"
993+ style="stop-color:#004063;stop-opacity:1"
994+ id="stop2883-79" />
995+ <stop
996+ offset="1"
997+ style="stop-color:#004063;stop-opacity:0"
998+ id="stop2885-4" />
999+ </linearGradient>
1000+ <radialGradient
1001+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
1002+ gradientUnits="userSpaceOnUse"
1003+ xlink:href="#linearGradient3688-166-749-1"
1004+ id="radialGradient3082"
1005+ fy="43.5"
1006+ fx="4.9929786"
1007+ r="2.5"
1008+ cy="43.5"
1009+ cx="4.9929786" />
1010+ <linearGradient
1011+ id="linearGradient3242-6">
1012+ <stop
1013+ offset="0"
1014+ style="stop-color:#00cbe6;stop-opacity:1"
1015+ id="stop3244-9" />
1016+ <stop
1017+ offset="0.26238"
1018+ style="stop-color:#008ea8;stop-opacity:1"
1019+ id="stop3246-9" />
1020+ <stop
1021+ offset="0.66093999"
1022+ style="stop-color:#003b79;stop-opacity:1"
1023+ id="stop3248-9" />
1024+ <stop
1025+ offset="1"
1026+ style="stop-color:#050077;stop-opacity:1"
1027+ id="stop3250-9" />
1028+ </linearGradient>
1029+ <radialGradient
1030+ gradientTransform="matrix(0,3.248395,-3.9879912,0,51.891669,-37.148511)"
1031+ gradientUnits="userSpaceOnUse"
1032+ xlink:href="#linearGradient3242-6"
1033+ id="radialGradient4680-7"
1034+ fy="9.9941158"
1035+ fx="8.276144"
1036+ r="12.671875"
1037+ cy="9.9941158"
1038+ cx="8.276144" />
1039+ <linearGradient
1040+ id="linearGradient5803-2-7-5">
1041+ <stop
1042+ offset="0"
1043+ style="stop-color:#49cefe;stop-opacity:1"
1044+ id="stop5805-3-6-4" />
1045+ <stop
1046+ offset="1"
1047+ style="stop-color:#37c1ff;stop-opacity:1"
1048+ id="stop5807-0-0-9" />
1049+ </linearGradient>
1050+ <linearGradient
1051+ gradientTransform="matrix(0.33333333,0,0,0.33333333,-18.000021,-6.6666402)"
1052+ gradientUnits="userSpaceOnUse"
1053+ xlink:href="#linearGradient5803-2-7-5"
1054+ id="linearGradient5041-7"
1055+ y2="54.780239"
1056+ x2="167.98311"
1057+ y1="8.50811"
1058+ x1="167.98311" />
1059+ <linearGradient
1060+ id="linearGradient3924-1-2">
1061+ <stop
1062+ offset="0"
1063+ style="stop-color:#4bc7fe;stop-opacity:1"
1064+ id="stop3926-5" />
1065+ <stop
1066+ offset="0.06316455"
1067+ style="stop-color:#4bc7fe;stop-opacity:0.23529412"
1068+ id="stop3928-32" />
1069+ <stop
1070+ offset="0.95056331"
1071+ style="stop-color:#4bc7fe;stop-opacity:0.15686275"
1072+ id="stop3930-1" />
1073+ <stop
1074+ offset="1"
1075+ style="stop-color:#4bc7fe;stop-opacity:0.39215687"
1076+ id="stop3932-3" />
1077+ </linearGradient>
1078+ <linearGradient
1079+ gradientTransform="matrix(0.45945947,0,0,0.45945947,0.9729689,-7.0270212)"
1080+ gradientUnits="userSpaceOnUse"
1081+ xlink:href="#linearGradient3924-1-2"
1082+ id="linearGradient4160"
1083+ y2="43"
1084+ x2="23.99999"
1085+ y1="4.999989"
1086+ x1="23.99999" />
1087+ <linearGradient
1088+ gradientTransform="matrix(0.45945947,0,0,0.45945947,0.9729689,-7.0270212)"
1089+ gradientUnits="userSpaceOnUse"
1090+ xlink:href="#linearGradient3924-1-2-6"
1091+ id="linearGradient4160-4"
1092+ y2="43"
1093+ x2="23.99999"
1094+ y1="4.999989"
1095+ x1="23.99999" />
1096+ <linearGradient
1097+ id="linearGradient3924-1-2-6">
1098+ <stop
1099+ offset="0"
1100+ style="stop-color:#4bc7fe;stop-opacity:1"
1101+ id="stop3926-5-5" />
1102+ <stop
1103+ offset="0.06316455"
1104+ style="stop-color:#4bc7fe;stop-opacity:0.23529412"
1105+ id="stop3928-32-3" />
1106+ <stop
1107+ offset="0.95056331"
1108+ style="stop-color:#4bc7fe;stop-opacity:0.15686275"
1109+ id="stop3930-1-7" />
1110+ <stop
1111+ offset="1"
1112+ style="stop-color:#4bc7fe;stop-opacity:0.39215687"
1113+ id="stop3932-3-0" />
1114+ </linearGradient>
1115+ <linearGradient
1116+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1117+ gradientUnits="userSpaceOnUse"
1118+ xlink:href="#linearGradient4269"
1119+ id="linearGradient4207-1"
1120+ y2="57.674179"
1121+ x2="23.99999"
1122+ y1="-1.9506749"
1123+ x1="23.99999" />
1124+ <linearGradient
1125+ id="linearGradient3924-1-2-6-0">
1126+ <stop
1127+ offset="0"
1128+ style="stop-color:#4bc7fe;stop-opacity:1"
1129+ id="stop3926-5-5-3" />
1130+ <stop
1131+ offset="0.06316455"
1132+ style="stop-color:#4bc7fe;stop-opacity:0.23529412"
1133+ id="stop3928-32-3-6" />
1134+ <stop
1135+ offset="0.95056331"
1136+ style="stop-color:#4bc7fe;stop-opacity:0.15686275"
1137+ id="stop3930-1-7-2" />
1138+ <stop
1139+ offset="1"
1140+ style="stop-color:#4bc7fe;stop-opacity:0.39215687"
1141+ id="stop3932-3-0-9" />
1142+ </linearGradient>
1143+ <linearGradient
1144+ gradientTransform="matrix(0.45945947,0,0,0.45945947,-2.0270504,-2.0270449)"
1145+ gradientUnits="userSpaceOnUse"
1146+ xlink:href="#linearGradient3924-1-2-6-0"
1147+ id="linearGradient4247"
1148+ y2="43"
1149+ x2="23.99999"
1150+ y1="4.999989"
1151+ x1="23.99999" />
1152+ <linearGradient
1153+ gradientUnits="userSpaceOnUse"
1154+ xlink:href="#linearGradient4279"
1155+ id="linearGradient4285"
1156+ y2="662.89178"
1157+ x2="674.99536"
1158+ y1="635.92169"
1159+ x1="674.99536" />
1160+ <radialGradient
1161+ gradientTransform="matrix(1,0,0,0.25,0,23.248598)"
1162+ gradientUnits="userSpaceOnUse"
1163+ xlink:href="#linearGradient4291"
1164+ id="radialGradient4297"
1165+ fy="30.998131"
1166+ fx="11.325233"
1167+ r="7.0953269"
1168+ cy="30.998131"
1169+ cx="11.325233" />
1170+ <filter
1171+ id="filter4345"
1172+ color-interpolation-filters="sRGB"
1173+ height="1.1956567"
1174+ width="1.3103333"
1175+ y="-0.097828373"
1176+ x="-0.15516667">
1177+ <feGaussianBlur
1178+ stdDeviation="0.4655"
1179+ id="feGaussianBlur4347" />
1180+ </filter>
1181+ <linearGradient
1182+ gradientUnits="userSpaceOnUse"
1183+ xlink:href="#linearGradient4279-2"
1184+ id="linearGradient4285-7"
1185+ y2="662.89178"
1186+ x2="674.99536"
1187+ y1="635.92169"
1188+ x1="674.99536" />
1189+ <linearGradient
1190+ id="linearGradient4279-2">
1191+ <stop
1192+ offset="0"
1193+ style="stop-color:#006390;stop-opacity:1"
1194+ id="stop4281-4" />
1195+ <stop
1196+ offset="1"
1197+ style="stop-color:#004667;stop-opacity:0.99795502"
1198+ id="stop4283-7" />
1199+ </linearGradient>
1200+ <linearGradient
1201+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1202+ gradientUnits="userSpaceOnUse"
1203+ xlink:href="#linearGradient4269-9"
1204+ id="linearGradient4207-1-1"
1205+ y2="57.674179"
1206+ x2="23.99999"
1207+ y1="-1.9506749"
1208+ x1="23.99999" />
1209+ <linearGradient
1210+ id="linearGradient4269-9">
1211+ <stop
1212+ offset="0"
1213+ style="stop-color:#4bc7fe;stop-opacity:1"
1214+ id="stop4271-5" />
1215+ <stop
1216+ offset="0.19700792"
1217+ style="stop-color:#4bc7fe;stop-opacity:0.23529412"
1218+ id="stop4273-3" />
1219+ <stop
1220+ offset="0.6310662"
1221+ style="stop-color:#4bc7fe;stop-opacity:0.15686275"
1222+ id="stop4275-1" />
1223+ <stop
1224+ offset="1"
1225+ style="stop-color:#4bc7fe;stop-opacity:0.39215687"
1226+ id="stop4277-8" />
1227+ </linearGradient>
1228+ <linearGradient
1229+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1230+ gradientUnits="userSpaceOnUse"
1231+ xlink:href="#linearGradient4269-9"
1232+ id="linearGradient4027"
1233+ y2="57.674179"
1234+ x2="23.99999"
1235+ y1="-1.9506749"
1236+ x1="23.99999" />
1237+ <linearGradient
1238+ gradientUnits="userSpaceOnUse"
1239+ xlink:href="#linearGradient4279-304"
1240+ id="linearGradient4285-683"
1241+ y2="662.89178"
1242+ x2="674.99536"
1243+ y1="635.92169"
1244+ x1="674.99536" />
1245+ <linearGradient
1246+ id="linearGradient4279-304">
1247+ <stop
1248+ offset="0"
1249+ style="stop-color:#006390;stop-opacity:1"
1250+ id="stop10506" />
1251+ <stop
1252+ offset="1"
1253+ style="stop-color:#004667;stop-opacity:0.99795502"
1254+ id="stop10508" />
1255+ </linearGradient>
1256+ <linearGradient
1257+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1258+ gradientUnits="userSpaceOnUse"
1259+ xlink:href="#linearGradient4269-9-0"
1260+ id="linearGradient4027-1"
1261+ y2="57.674179"
1262+ x2="23.99999"
1263+ y1="-1.9506749"
1264+ x1="23.99999" />
1265+ <linearGradient
1266+ id="linearGradient4269-9-0">
1267+ <stop
1268+ offset="0"
1269+ style="stop-color:#4bc7fe;stop-opacity:1"
1270+ id="stop10512" />
1271+ <stop
1272+ offset="0.19700792"
1273+ style="stop-color:#4bc7fe;stop-opacity:0.23529412"
1274+ id="stop10514" />
1275+ <stop
1276+ offset="0.6310662"
1277+ style="stop-color:#4bc7fe;stop-opacity:0.15686275"
1278+ id="stop10516" />
1279+ <stop
1280+ offset="1"
1281+ style="stop-color:#4bc7fe;stop-opacity:0.39215687"
1282+ id="stop10518" />
1283+ </linearGradient>
1284+ <linearGradient
1285+ gradientUnits="userSpaceOnUse"
1286+ xlink:href="#linearGradient4279-304-762"
1287+ id="linearGradient4285-683-622"
1288+ y2="662.89178"
1289+ x2="674.99536"
1290+ y1="635.92169"
1291+ x1="674.99536" />
1292+ <linearGradient
1293+ id="linearGradient4279-304-762">
1294+ <stop
1295+ offset="0"
1296+ style="stop-color:#00908b;stop-opacity:1"
1297+ id="stop10916" />
1298+ <stop
1299+ offset="1"
1300+ style="stop-color:#00675f;stop-opacity:0.99795502"
1301+ id="stop10918" />
1302+ </linearGradient>
1303+ <linearGradient
1304+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1305+ gradientUnits="userSpaceOnUse"
1306+ xlink:href="#linearGradient4269-9-0-801"
1307+ id="linearGradient4027-1-210"
1308+ y2="57.674179"
1309+ x2="23.99999"
1310+ y1="-1.9506749"
1311+ x1="23.99999" />
1312+ <linearGradient
1313+ id="linearGradient4269-9-0-801">
1314+ <stop
1315+ offset="0"
1316+ style="stop-color:#4bfefd;stop-opacity:1"
1317+ id="stop10922" />
1318+ <stop
1319+ offset="0.19700792"
1320+ style="stop-color:#4bfefd;stop-opacity:0.23529412"
1321+ id="stop10924" />
1322+ <stop
1323+ offset="0.6310662"
1324+ style="stop-color:#4bfefd;stop-opacity:0.15686275"
1325+ id="stop10926" />
1326+ <stop
1327+ offset="1"
1328+ style="stop-color:#4bfefd;stop-opacity:0.39215687"
1329+ id="stop10928" />
1330+ </linearGradient>
1331+ <linearGradient
1332+ gradientUnits="userSpaceOnUse"
1333+ xlink:href="#linearGradient4279-304-762-109"
1334+ id="linearGradient4285-683-622-67"
1335+ y2="662.89178"
1336+ x2="674.99536"
1337+ y1="635.92169"
1338+ x1="674.99536" />
1339+ <linearGradient
1340+ id="linearGradient4279-304-762-109">
1341+ <stop
1342+ offset="0"
1343+ style="stop-color:#006790;stop-opacity:1"
1344+ id="stop11346" />
1345+ <stop
1346+ offset="1"
1347+ style="stop-color:#004a67;stop-opacity:0.99795502"
1348+ id="stop11348" />
1349+ </linearGradient>
1350+ <linearGradient
1351+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1352+ gradientUnits="userSpaceOnUse"
1353+ xlink:href="#linearGradient4269-9-0-801-68"
1354+ id="linearGradient4027-1-210-223"
1355+ y2="57.674179"
1356+ x2="23.99999"
1357+ y1="-1.9506749"
1358+ x1="23.99999" />
1359+ <linearGradient
1360+ id="linearGradient4269-9-0-801-68">
1361+ <stop
1362+ offset="0"
1363+ style="stop-color:#4bc8fe;stop-opacity:1"
1364+ id="stop11352" />
1365+ <stop
1366+ offset="0.19700792"
1367+ style="stop-color:#4bc8fe;stop-opacity:0.23529412"
1368+ id="stop11354" />
1369+ <stop
1370+ offset="0.6310662"
1371+ style="stop-color:#4bc8fe;stop-opacity:0.15686275"
1372+ id="stop11356" />
1373+ <stop
1374+ offset="1"
1375+ style="stop-color:#4bc8fe;stop-opacity:0.39215687"
1376+ id="stop11358" />
1377+ </linearGradient>
1378+ <linearGradient
1379+ gradientUnits="userSpaceOnUse"
1380+ xlink:href="#linearGradient4279-304-762-109-461"
1381+ id="linearGradient4285-683-622-67-149"
1382+ y2="662.89178"
1383+ x2="674.99536"
1384+ y1="635.92169"
1385+ x1="674.99536" />
1386+ <linearGradient
1387+ id="linearGradient4279-304-762-109-461">
1388+ <stop
1389+ offset="0"
1390+ style="stop-color:#003a90;stop-opacity:1"
1391+ id="stop11796" />
1392+ <stop
1393+ offset="1"
1394+ style="stop-color:#002967;stop-opacity:0.99795502"
1395+ id="stop11798" />
1396+ </linearGradient>
1397+ <linearGradient
1398+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1399+ gradientUnits="userSpaceOnUse"
1400+ xlink:href="#linearGradient4269-9-0-801-68-899"
1401+ id="linearGradient4027-1-210-223-322"
1402+ y2="57.674179"
1403+ x2="23.99999"
1404+ y1="-1.9506749"
1405+ x1="23.99999" />
1406+ <linearGradient
1407+ id="linearGradient4269-9-0-801-68-899">
1408+ <stop
1409+ offset="0"
1410+ style="stop-color:#4b93fe;stop-opacity:1"
1411+ id="stop11802" />
1412+ <stop
1413+ offset="0.19700792"
1414+ style="stop-color:#4b93fe;stop-opacity:0.23529412"
1415+ id="stop11804" />
1416+ <stop
1417+ offset="0.6310662"
1418+ style="stop-color:#4b93fe;stop-opacity:0.15686275"
1419+ id="stop11806" />
1420+ <stop
1421+ offset="1"
1422+ style="stop-color:#4b93fe;stop-opacity:0.39215687"
1423+ id="stop11808" />
1424+ </linearGradient>
1425+ <linearGradient
1426+ gradientUnits="userSpaceOnUse"
1427+ xlink:href="#linearGradient4279-304-762-109-461-207"
1428+ id="linearGradient4285-683-622-67-149-611"
1429+ y2="662.89178"
1430+ x2="674.99536"
1431+ y1="635.92169"
1432+ x1="674.99536" />
1433+ <linearGradient
1434+ id="linearGradient4279-304-762-109-461-207">
1435+ <stop
1436+ offset="0"
1437+ style="stop-color:#000e90;stop-opacity:1"
1438+ id="stop12266" />
1439+ <stop
1440+ offset="1"
1441+ style="stop-color:#000967;stop-opacity:0.99795502"
1442+ id="stop12268" />
1443+ </linearGradient>
1444+ <linearGradient
1445+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1446+ gradientUnits="userSpaceOnUse"
1447+ xlink:href="#linearGradient4269-9-0-801-68-899-19"
1448+ id="linearGradient4027-1-210-223-322-570"
1449+ y2="57.674179"
1450+ x2="23.99999"
1451+ y1="-1.9506749"
1452+ x1="23.99999" />
1453+ <linearGradient
1454+ id="linearGradient4269-9-0-801-68-899-19">
1455+ <stop
1456+ offset="0"
1457+ style="stop-color:#4b5dfe;stop-opacity:1"
1458+ id="stop12272" />
1459+ <stop
1460+ offset="0.19700792"
1461+ style="stop-color:#4b5dfe;stop-opacity:0.23529412"
1462+ id="stop12274" />
1463+ <stop
1464+ offset="0.6310662"
1465+ style="stop-color:#4b5dfe;stop-opacity:0.15686275"
1466+ id="stop12276" />
1467+ <stop
1468+ offset="1"
1469+ style="stop-color:#4b5dfe;stop-opacity:0.39215687"
1470+ id="stop12278" />
1471+ </linearGradient>
1472+ <linearGradient
1473+ gradientUnits="userSpaceOnUse"
1474+ xlink:href="#linearGradient4279-304-762-109-461-207-402"
1475+ id="linearGradient4285-683-622-67-149-611-28"
1476+ y2="662.89178"
1477+ x2="674.99536"
1478+ y1="635.92169"
1479+ x1="674.99536" />
1480+ <linearGradient
1481+ id="linearGradient4279-304-762-109-461-207-402">
1482+ <stop
1483+ offset="0"
1484+ style="stop-color:#003a90;stop-opacity:1"
1485+ id="stop12756" />
1486+ <stop
1487+ offset="1"
1488+ style="stop-color:#002967;stop-opacity:0.99795502"
1489+ id="stop12758" />
1490+ </linearGradient>
1491+ <linearGradient
1492+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1493+ gradientUnits="userSpaceOnUse"
1494+ xlink:href="#linearGradient4269-9-0-801-68-899-19-280"
1495+ id="linearGradient4027-1-210-223-322-570-921"
1496+ y2="57.674179"
1497+ x2="23.99999"
1498+ y1="-1.9506749"
1499+ x1="23.99999" />
1500+ <linearGradient
1501+ id="linearGradient4269-9-0-801-68-899-19-280">
1502+ <stop
1503+ offset="0"
1504+ style="stop-color:#4b93fe;stop-opacity:1"
1505+ id="stop12762" />
1506+ <stop
1507+ offset="0.19700792"
1508+ style="stop-color:#4b93fe;stop-opacity:0.23529412"
1509+ id="stop12764" />
1510+ <stop
1511+ offset="0.6310662"
1512+ style="stop-color:#4b93fe;stop-opacity:0.15686275"
1513+ id="stop12766" />
1514+ <stop
1515+ offset="1"
1516+ style="stop-color:#4b93fe;stop-opacity:0.39215687"
1517+ id="stop12768" />
1518+ </linearGradient>
1519+ <linearGradient
1520+ gradientUnits="userSpaceOnUse"
1521+ xlink:href="#linearGradient4279-304-762-109-461-207-402-134"
1522+ id="linearGradient4285-683-622-67-149-611-28-936"
1523+ y2="662.89178"
1524+ x2="674.99536"
1525+ y1="635.92169"
1526+ x1="674.99536" />
1527+ <linearGradient
1528+ id="linearGradient4279-304-762-109-461-207-402-134">
1529+ <stop
1530+ offset="0"
1531+ style="stop-color:#0044a9;stop-opacity:1"
1532+ id="stop13266" />
1533+ <stop
1534+ offset="1"
1535+ style="stop-color:#003380;stop-opacity:0.99795502"
1536+ id="stop13268" />
1537+ </linearGradient>
1538+ <linearGradient
1539+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1540+ gradientUnits="userSpaceOnUse"
1541+ xlink:href="#linearGradient4269-9-0-801-68-899-19-280-51"
1542+ id="linearGradient4027-1-210-223-322-570-921-60"
1543+ y2="57.674179"
1544+ x2="23.99999"
1545+ y1="-1.9506749"
1546+ x1="23.99999" />
1547+ <linearGradient
1548+ id="linearGradient4269-9-0-801-68-899-19-280-51">
1549+ <stop
1550+ offset="0"
1551+ style="stop-color:#64a2fe;stop-opacity:1"
1552+ id="stop13272" />
1553+ <stop
1554+ offset="0.19700792"
1555+ style="stop-color:#64a2fe;stop-opacity:0.23529412"
1556+ id="stop13274" />
1557+ <stop
1558+ offset="0.6310662"
1559+ style="stop-color:#64a2fe;stop-opacity:0.15686275"
1560+ id="stop13276" />
1561+ <stop
1562+ offset="1"
1563+ style="stop-color:#64a2fe;stop-opacity:0.39215687"
1564+ id="stop13278" />
1565+ </linearGradient>
1566+ <linearGradient
1567+ gradientUnits="userSpaceOnUse"
1568+ xlink:href="#linearGradient4279-304-762-109-461-207-402-134-290"
1569+ id="linearGradient4285-683-622-67-149-611-28-936-389"
1570+ y2="662.89178"
1571+ x2="674.99536"
1572+ y1="635.92169"
1573+ x1="674.99536" />
1574+ <linearGradient
1575+ id="linearGradient4279-304-762-109-461-207-402-134-290">
1576+ <stop
1577+ offset="0"
1578+ style="stop-color:#004ec2;stop-opacity:1"
1579+ id="stop13796" />
1580+ <stop
1581+ offset="1"
1582+ style="stop-color:#003d99;stop-opacity:0.99795502"
1583+ id="stop13798" />
1584+ </linearGradient>
1585+ <linearGradient
1586+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1587+ gradientUnits="userSpaceOnUse"
1588+ xlink:href="#linearGradient4269-9-0-801-68-899-19-280-51-372"
1589+ id="linearGradient4027-1-210-223-322-570-921-60-51"
1590+ y2="57.674179"
1591+ x2="23.99999"
1592+ y1="-1.9506749"
1593+ x1="23.99999" />
1594+ <linearGradient
1595+ id="linearGradient4269-9-0-801-68-899-19-280-51-372">
1596+ <stop
1597+ offset="0"
1598+ style="stop-color:#7db1fe;stop-opacity:1"
1599+ id="stop13802" />
1600+ <stop
1601+ offset="0.19700792"
1602+ style="stop-color:#7db1fe;stop-opacity:0.23529412"
1603+ id="stop13804" />
1604+ <stop
1605+ offset="0.6310662"
1606+ style="stop-color:#7db1fe;stop-opacity:0.15686275"
1607+ id="stop13806" />
1608+ <stop
1609+ offset="1"
1610+ style="stop-color:#7db1fe;stop-opacity:0.39215687"
1611+ id="stop13808" />
1612+ </linearGradient>
1613+ <linearGradient
1614+ gradientUnits="userSpaceOnUse"
1615+ xlink:href="#linearGradient4279-304-762-109-461-207-402-134-290-162"
1616+ id="linearGradient4285-683-622-67-149-611-28-936-389-459"
1617+ y2="662.89178"
1618+ x2="674.99536"
1619+ y1="635.92169"
1620+ x1="674.99536" />
1621+ <linearGradient
1622+ id="linearGradient4279-304-762-109-461-207-402-134-290-162">
1623+ <stop
1624+ offset="0"
1625+ style="stop-color:#0058db;stop-opacity:1"
1626+ id="stop14346" />
1627+ <stop
1628+ offset="1"
1629+ style="stop-color:#0047b2;stop-opacity:0.99795502"
1630+ id="stop14348" />
1631+ </linearGradient>
1632+ <linearGradient
1633+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1634+ gradientUnits="userSpaceOnUse"
1635+ xlink:href="#linearGradient4269-9-0-801-68-899-19-280-51-372-537"
1636+ id="linearGradient4027-1-210-223-322-570-921-60-51-139"
1637+ y2="57.674179"
1638+ x2="23.99999"
1639+ y1="-1.9506749"
1640+ x1="23.99999" />
1641+ <linearGradient
1642+ id="linearGradient4269-9-0-801-68-899-19-280-51-372-537">
1643+ <stop
1644+ offset="0"
1645+ style="stop-color:#96c0fe;stop-opacity:1"
1646+ id="stop14352" />
1647+ <stop
1648+ offset="0.19700792"
1649+ style="stop-color:#96c0fe;stop-opacity:0.23529412"
1650+ id="stop14354" />
1651+ <stop
1652+ offset="0.6310662"
1653+ style="stop-color:#96c0fe;stop-opacity:0.15686275"
1654+ id="stop14356" />
1655+ <stop
1656+ offset="1"
1657+ style="stop-color:#96c0fe;stop-opacity:0.39215687"
1658+ id="stop14358" />
1659+ </linearGradient>
1660+ </defs>
1661+ <metadata
1662+ id="metadata7">
1663+ <rdf:RDF>
1664+ <cc:Work
1665+ rdf:about="">
1666+ <dc:format>image/svg+xml</dc:format>
1667+ <dc:type
1668+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
1669+ <dc:title />
1670+ </cc:Work>
1671+ </rdf:RDF>
1672+ </metadata>
1673+ <g
1674+ id="layer1"
1675+ transform="translate(-662.78571,-633.50507)">
1676+ <path
1677+ style="opacity:0.05;color:#000000;fill:#242424;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
1678+ id="path3974"
1679+ transform="matrix(1,0,0,0.8490188,0,102.82045)"
1680+ d="m 674.28125,647.84375 c -2.94458,0 -5.58673,0.68985 -7.46875,1.78125 -1.85693,1.07685 -2.90625,2.48274 -2.90625,3.96875 0,1.47223 1.05058,2.80953 2.84375,3.875 a 1.1774629,1.1774629 0 0 0 0.0937,0.0625 l -0.0312,0.0312 6.5625,5.53125 a 1.1774629,1.1774629 0 0 0 1.5,0 l 6.625,-5.375 -0.0312,-0.0312 a 1.1774629,1.1774629 0 0 0 0.0937,-0.0312 c 1.96355,-1.08113 3.09375,-2.51482 3.09375,-4.0625 0,-1.48601 -1.04932,-2.8919 -2.90625,-3.96875 -1.88202,-1.0914 -4.52417,-1.78125 -7.46875,-1.78125 z m -6.03125,7.875 c 0.008,0.007 0.0613,0.0268 0.0312,0 -0.12018,-0.10724 0.14927,0.14086 0.0312,0.0312 -0.11802,-0.10961 0.14706,0.1432 0.0312,0.0312 -0.11581,-0.11195 0.17606,0.14548 0.0625,0.0312 l -0.0625,0.0625 a 1.1774629,1.1774629 0 0 0 -0.0937,-0.15625 z m 11.875,0.0937 A 1.1774629,1.1774629 0 0 0 680,655.96875 l -0.0312,-0.0312 c -0.11976,0.10718 0.1533,-0.13581 0.0312,-0.0312 -0.12205,0.10456 0.18678,-0.1644 0.0625,-0.0625 -0.12428,0.1019 0.18896,-0.13044 0.0625,-0.0312 z" />
1681+ <path
1682+ style="opacity:0.1;color:#000000;fill:#242424;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
1683+ id="path3966"
1684+ transform="matrix(1,0,0,0.8490188,0,102.82045)"
1685+ d="m 674.28125,649.03125 c -2.75342,0 -5.2292,0.67059 -6.875,1.625 -1.6458,0.95441 -2.3125,2.0249 -2.3125,2.9375 0,0.8922 0.65933,1.92985 2.25,2.875 a 1.808614,1.808614 0 0 1 0.21875,0.1875 l 6.5625,5.53125 6.625,-5.375 A 1.808614,1.808614 0 0 1 681,656.625 c 1.74512,-0.96086 2.46875,-2.08177 2.46875,-3.03125 0,-0.9126 -0.6667,-1.98309 -2.3125,-2.9375 -1.6458,-0.95441 -4.12158,-1.625 -6.875,-1.625 z" />
1686+ <path
1687+ style="opacity:0.15;color:#000000;fill:#242424;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
1688+ id="path3974-5"
1689+ transform="matrix(1,0,0,0.8490188,0,102.82045)"
1690+ d="m 674.28125,650.21875 c -2.5594,0 -4.87521,0.65338 -6.28125,1.46875 -1.43151,0.83014 -1.71875,1.57563 -1.71875,1.90625 0,0.30349 0.30235,1.02072 1.6875,1.84375 l -0.0625,0.0937 a 1.1950764,1.1950764 0 0 1 0.4375,0.21875 l 5.78125,4.875 5.875,-4.75 a 1.1950764,1.1950764 0 0 1 0.46875,-0.21875 l -0.0312,-0.0625 c 1.52342,-0.83879 1.84375,-1.65766 1.84375,-2 0,-0.33062 -0.28724,-1.07611 -1.71875,-1.90625 -1.40604,-0.81537 -3.72185,-1.46875 -6.28125,-1.46875 z" />
1691+ <path
1692+ style="color:#000000;fill:url(#linearGradient4285-683-622-67-149-611-28-936-389-459);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
1693+ id="path3007"
1694+ d="m 674.28571,634.52389 c -6.07452,0 -11,4.94494 -11,11.04347 0,2.9962 1.18846,5.71492 3.11811,7.70436 l 7.69134,11.25217 7.77144,-10.95851 c 2.10521,-2.01125 3.41911,-4.85027 3.41911,-7.99802 0,-6.09853 -4.92547,-11.04347 -11,-11.04347 z" />
1695+ <path
1696+ style="color:#000000;fill:none;stroke:#004667;stroke-width:0.99999994;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
1697+ id="path3007-6"
1698+ d="m 674.28571,634.52389 c -6.07452,0 -11,4.94494 -11,11.04347 0,2.9962 1.18846,5.71492 3.11811,7.70436 l 7.69134,11.25217 7.77144,-10.95851 c 2.10521,-2.01125 3.41911,-4.85027 3.41911,-7.99802 0,-6.09853 -4.92547,-11.04347 -11,-11.04347 z" />
1699+ <path
1700+ style="opacity:0.4;color:#000000;fill:none;stroke:url(#linearGradient4027-1-210-223-322-570-921-60-51-139);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
1701+ id="path4093"
1702+ d="m 674.28125,635.5 c -5.54209,0 -10.03125,4.49352 -10.03125,10.0625 0,2.73462 1.11745,5.21924 2.875,7.03125 a 0.98360133,0.98360133 0 0 1 0.0937,0.125 l 6.875,10.09375 L 681.0625,653 a 0.98360133,0.98360133 0 0 1 0.125,-0.15625 c 1.91706,-1.8315 3.125,-4.4045 3.125,-7.28125 0,-5.56898 -4.48914,-10.0625 -10.03125,-10.0625 z" />
1703+ <path
1704+ style="opacity:0.15;color:#000000;fill:#4bc7fe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
1705+ id="path3168-7"
1706+ transform="matrix(1.1239496,0,0,1.1239496,662.5,632.36221)"
1707+ d="m 14.934579,12.583178 a 4.4485979,4.4485979 0 1 1 -8.8971959,0 4.4485979,4.4485979 0 1 1 8.8971959,0 z" />
1708+ <path
1709+ style="color:#000000;fill:#003c5d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
1710+ id="path3168"
1711+ transform="matrix(1.1239496,0,0,1.1239496,662.5,631.36221)"
1712+ d="m 14.934579,12.583178 a 4.4485979,4.4485979 0 1 1 -8.8971959,0 4.4485979,4.4485979 0 1 1 8.8971959,0 z" />
1713+ </g>
1714+</svg>
1715
1716=== added file 'icons/gps-marker.svg'
1717--- icons/gps-marker.svg 1970-01-01 00:00:00 +0000
1718+++ icons/gps-marker.svg 2014-10-18 00:49:47 +0000
1719@@ -0,0 +1,941 @@
1720+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1721+<!-- Created with Inkscape (http://www.inkscape.org/) -->
1722+
1723+<svg
1724+ xmlns:dc="http://purl.org/dc/elements/1.1/"
1725+ xmlns:cc="http://creativecommons.org/ns#"
1726+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
1727+ xmlns:svg="http://www.w3.org/2000/svg"
1728+ xmlns="http://www.w3.org/2000/svg"
1729+ xmlns:xlink="http://www.w3.org/1999/xlink"
1730+ version="1.1"
1731+ width="23"
1732+ height="33"
1733+ id="svg2">
1734+ <defs
1735+ id="defs4">
1736+ <linearGradient
1737+ id="linearGradient4291">
1738+ <stop
1739+ id="stop4293"
1740+ style="stop-color:#000000;stop-opacity:1"
1741+ offset="0" />
1742+ <stop
1743+ id="stop4295"
1744+ style="stop-color:#000000;stop-opacity:0"
1745+ offset="1" />
1746+ </linearGradient>
1747+ <linearGradient
1748+ id="linearGradient4279">
1749+ <stop
1750+ id="stop4281"
1751+ style="stop-color:#e74545;stop-opacity:1"
1752+ offset="0" />
1753+ <stop
1754+ id="stop4283"
1755+ style="stop-color:#da1c1c;stop-opacity:0.99795502"
1756+ offset="1" />
1757+ </linearGradient>
1758+ <linearGradient
1759+ id="linearGradient4269">
1760+ <stop
1761+ id="stop4271"
1762+ style="stop-color:#ffffff;stop-opacity:1"
1763+ offset="0" />
1764+ <stop
1765+ id="stop4273"
1766+ style="stop-color:#ffffff;stop-opacity:0.23529412"
1767+ offset="0.19700792" />
1768+ <stop
1769+ id="stop4275"
1770+ style="stop-color:#ffffff;stop-opacity:0.15686275"
1771+ offset="0.6310662" />
1772+ <stop
1773+ id="stop4277"
1774+ style="stop-color:#ffffff;stop-opacity:0.39215687"
1775+ offset="1" />
1776+ </linearGradient>
1777+ <linearGradient
1778+ id="linearGradient4873">
1779+ <stop
1780+ id="stop4875"
1781+ style="stop-color:#ffffff;stop-opacity:1"
1782+ offset="0" />
1783+ <stop
1784+ id="stop4877"
1785+ style="stop-color:#ffffff;stop-opacity:0"
1786+ offset="1" />
1787+ </linearGradient>
1788+ <linearGradient
1789+ x1="63.397362"
1790+ y1="-12.489107"
1791+ x2="63.397362"
1792+ y2="5.4675598"
1793+ id="linearGradient3683"
1794+ xlink:href="#linearGradient4873"
1795+ gradientUnits="userSpaceOnUse"
1796+ gradientTransform="matrix(0.51455032,0,0,0.51453856,-24.005236,9.8064595)" />
1797+ <linearGradient
1798+ id="linearGradient3603">
1799+ <stop
1800+ id="stop3605"
1801+ style="stop-color:#a7651c;stop-opacity:1"
1802+ offset="0" />
1803+ <stop
1804+ id="stop3607"
1805+ style="stop-color:#c8a700;stop-opacity:1"
1806+ offset="1" />
1807+ </linearGradient>
1808+ <linearGradient
1809+ x1="18.379412"
1810+ y1="44.980297"
1811+ x2="18.379412"
1812+ y2="3.0816143"
1813+ id="linearGradient3730"
1814+ xlink:href="#linearGradient3603"
1815+ gradientUnits="userSpaceOnUse"
1816+ gradientTransform="matrix(0.2703533,0,0,0.27035337,1.5115215,1.5115197)" />
1817+ <linearGradient
1818+ id="linearGradient3690">
1819+ <stop
1820+ id="stop3692"
1821+ style="stop-color:#ffeb9f;stop-opacity:1"
1822+ offset="0" />
1823+ <stop
1824+ id="stop3694"
1825+ style="stop-color:#ffd57e;stop-opacity:1"
1826+ offset="0.26238" />
1827+ <stop
1828+ id="stop3696"
1829+ style="stop-color:#ffbc43;stop-opacity:1"
1830+ offset="0.66093999" />
1831+ <stop
1832+ id="stop3698"
1833+ style="stop-color:#ff921a;stop-opacity:1"
1834+ offset="1" />
1835+ </linearGradient>
1836+ <radialGradient
1837+ cx="23.895569"
1838+ cy="3.9900031"
1839+ r="20.397499"
1840+ fx="23.895569"
1841+ fy="3.9900031"
1842+ id="radialGradient3728"
1843+ xlink:href="#linearGradient3690"
1844+ gradientUnits="userSpaceOnUse"
1845+ gradientTransform="matrix(0,0.64524082,-0.85170617,0,11.39831,-13.333564)" />
1846+ <radialGradient
1847+ cx="7.1183534"
1848+ cy="9.9571075"
1849+ r="12.671875"
1850+ fx="7.1183534"
1851+ fy="9.9571075"
1852+ id="radialGradient4065"
1853+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7"
1854+ gradientUnits="userSpaceOnUse"
1855+ gradientTransform="matrix(0,117.18262,-143.86282,0,1693.1125,-1069.0711)" />
1856+ <linearGradient
1857+ id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7">
1858+ <stop
1859+ id="stop3750-1-0-7-6-6-1-3-9-3-7"
1860+ style="stop-color:#505050;stop-opacity:1"
1861+ offset="0" />
1862+ <stop
1863+ id="stop3752-3-7-4-0-32-8-923-0-7-3"
1864+ style="stop-color:#2b2b2b;stop-opacity:1"
1865+ offset="0.26238" />
1866+ <stop
1867+ id="stop3754-1-8-5-2-7-6-7-1-9-6"
1868+ style="stop-color:#0a0a0a;stop-opacity:1"
1869+ offset="0.704952" />
1870+ <stop
1871+ id="stop3756-1-6-2-6-6-1-96-6-0-1"
1872+ style="stop-color:#000000;stop-opacity:1"
1873+ offset="1" />
1874+ </linearGradient>
1875+ <radialGradient
1876+ cx="7.1183534"
1877+ cy="9.9571075"
1878+ r="12.671875"
1879+ fx="7.1183534"
1880+ fy="9.9571075"
1881+ id="radialGradient3249-0"
1882+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7"
1883+ gradientUnits="userSpaceOnUse"
1884+ gradientTransform="matrix(0,117.18262,-143.86282,0,1693.1125,-1069.0711)" />
1885+ <linearGradient
1886+ id="linearGradient3895">
1887+ <stop
1888+ id="stop3897"
1889+ style="stop-color:#ffffff;stop-opacity:1"
1890+ offset="0" />
1891+ <stop
1892+ id="stop3899"
1893+ style="stop-color:#ffffff;stop-opacity:0.23529412"
1894+ offset="0.05263157" />
1895+ <stop
1896+ id="stop3901"
1897+ style="stop-color:#ffffff;stop-opacity:0.15686275"
1898+ offset="0.95056331" />
1899+ <stop
1900+ id="stop3903"
1901+ style="stop-color:#ffffff;stop-opacity:0.39215687"
1902+ offset="1" />
1903+ </linearGradient>
1904+ <linearGradient
1905+ x1="20"
1906+ y1="26.000008"
1907+ x2="20"
1908+ y2="13.000008"
1909+ id="linearGradient4183"
1910+ xlink:href="#linearGradient3680-6-6-6-3"
1911+ gradientUnits="userSpaceOnUse"
1912+ gradientTransform="translate(0,0.9999922)" />
1913+ <linearGradient
1914+ id="linearGradient3680-6-6-6-3">
1915+ <stop
1916+ id="stop3682-4-6-1-3"
1917+ style="stop-color:#dcdcdc;stop-opacity:1"
1918+ offset="0" />
1919+ <stop
1920+ id="stop3684-8-5-8-0"
1921+ style="stop-color:#ffffff;stop-opacity:1"
1922+ offset="1" />
1923+ </linearGradient>
1924+ <linearGradient
1925+ x1="23.99999"
1926+ y1="4.999989"
1927+ x2="23.99999"
1928+ y2="43"
1929+ id="linearGradient3982"
1930+ xlink:href="#linearGradient3924-1"
1931+ gradientUnits="userSpaceOnUse"
1932+ gradientTransform="translate(4e-6,1.0000062)" />
1933+ <linearGradient
1934+ id="linearGradient3924-1">
1935+ <stop
1936+ id="stop3926-3"
1937+ style="stop-color:#ffffff;stop-opacity:1"
1938+ offset="0" />
1939+ <stop
1940+ id="stop3928-91"
1941+ style="stop-color:#ffffff;stop-opacity:0.23529412"
1942+ offset="0.06316455" />
1943+ <stop
1944+ id="stop3930-6"
1945+ style="stop-color:#ffffff;stop-opacity:0.15686275"
1946+ offset="0.95056331" />
1947+ <stop
1948+ id="stop3932-6"
1949+ style="stop-color:#ffffff;stop-opacity:0.39215687"
1950+ offset="1" />
1951+ </linearGradient>
1952+ <radialGradient
1953+ cx="4.9929786"
1954+ cy="43.5"
1955+ r="2.5"
1956+ fx="4.9929786"
1957+ fy="43.5"
1958+ id="radialGradient3963"
1959+ xlink:href="#linearGradient3688-166-749-4"
1960+ gradientUnits="userSpaceOnUse"
1961+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" />
1962+ <linearGradient
1963+ id="linearGradient3688-166-749-4">
1964+ <stop
1965+ id="stop2883-3"
1966+ style="stop-color:#181818;stop-opacity:1"
1967+ offset="0" />
1968+ <stop
1969+ id="stop2885-2"
1970+ style="stop-color:#181818;stop-opacity:0"
1971+ offset="1" />
1972+ </linearGradient>
1973+ <radialGradient
1974+ cx="4.9929786"
1975+ cy="43.5"
1976+ r="2.5"
1977+ fx="4.9929786"
1978+ fy="43.5"
1979+ id="radialGradient3965"
1980+ xlink:href="#linearGradient3688-464-309-3"
1981+ gradientUnits="userSpaceOnUse"
1982+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" />
1983+ <linearGradient
1984+ id="linearGradient3688-464-309-3">
1985+ <stop
1986+ id="stop2889-6"
1987+ style="stop-color:#181818;stop-opacity:1"
1988+ offset="0" />
1989+ <stop
1990+ id="stop2891-2"
1991+ style="stop-color:#181818;stop-opacity:0"
1992+ offset="1" />
1993+ </linearGradient>
1994+ <linearGradient
1995+ x1="25.058096"
1996+ y1="47.027729"
1997+ x2="25.058096"
1998+ y2="39.999443"
1999+ id="linearGradient3967"
2000+ xlink:href="#linearGradient3702-501-757-2"
2001+ gradientUnits="userSpaceOnUse" />
2002+ <linearGradient
2003+ id="linearGradient3702-501-757-2">
2004+ <stop
2005+ id="stop2895-3"
2006+ style="stop-color:#181818;stop-opacity:0"
2007+ offset="0" />
2008+ <stop
2009+ id="stop2897-0"
2010+ style="stop-color:#181818;stop-opacity:1"
2011+ offset="0.5" />
2012+ <stop
2013+ id="stop2899-1"
2014+ style="stop-color:#181818;stop-opacity:0"
2015+ offset="1" />
2016+ </linearGradient>
2017+ <linearGradient
2018+ x1="20"
2019+ y1="26.000008"
2020+ x2="20"
2021+ y2="13.000008"
2022+ id="linearGradient3018"
2023+ xlink:href="#linearGradient3680-6-6-6-3"
2024+ gradientUnits="userSpaceOnUse"
2025+ gradientTransform="translate(0,0.9999922)" />
2026+ <radialGradient
2027+ cx="6.7304144"
2028+ cy="9.9571075"
2029+ r="12.671875"
2030+ fx="6.2001843"
2031+ fy="9.9571075"
2032+ id="radialGradient3031"
2033+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8"
2034+ gradientUnits="userSpaceOnUse"
2035+ gradientTransform="matrix(0,9.4975523,-11.65996,0,140.93055,-79.160978)" />
2036+ <linearGradient
2037+ id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8">
2038+ <stop
2039+ id="stop3750-1-0-7-6-6-1-3-9"
2040+ style="stop-color:#ffcd7d;stop-opacity:1"
2041+ offset="0" />
2042+ <stop
2043+ id="stop3752-3-7-4-0-32-8-923-0"
2044+ style="stop-color:#fc8f36;stop-opacity:1"
2045+ offset="0.26238" />
2046+ <stop
2047+ id="stop3754-1-8-5-2-7-6-7-1"
2048+ style="stop-color:#e23a0e;stop-opacity:1"
2049+ offset="0.704952" />
2050+ <stop
2051+ id="stop3756-1-6-2-6-6-1-96-6"
2052+ style="stop-color:#ac441f;stop-opacity:1"
2053+ offset="1" />
2054+ </linearGradient>
2055+ <linearGradient
2056+ id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5">
2057+ <stop
2058+ id="stop3750-1-0-7-6-6-1-3-9-3"
2059+ style="stop-color:#505050;stop-opacity:1"
2060+ offset="0" />
2061+ <stop
2062+ id="stop3752-3-7-4-0-32-8-923-0-7"
2063+ style="stop-color:#2b2b2b;stop-opacity:1"
2064+ offset="0.26238" />
2065+ <stop
2066+ id="stop3754-1-8-5-2-7-6-7-1-9"
2067+ style="stop-color:#0a0a0a;stop-opacity:1"
2068+ offset="0.704952" />
2069+ <stop
2070+ id="stop3756-1-6-2-6-6-1-96-6-0"
2071+ style="stop-color:#000000;stop-opacity:1"
2072+ offset="1" />
2073+ </linearGradient>
2074+ <radialGradient
2075+ cx="6.7304144"
2076+ cy="9.9571075"
2077+ r="12.671875"
2078+ fx="6.2001843"
2079+ fy="9.9571075"
2080+ id="radialGradient3077"
2081+ xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5"
2082+ gradientUnits="userSpaceOnUse"
2083+ gradientTransform="matrix(0,9.4975523,-11.65996,0,136.43054,-84.660973)" />
2084+ <linearGradient
2085+ id="linearGradient3680-6-6-6-3-7">
2086+ <stop
2087+ id="stop3682-4-6-1-3-7"
2088+ style="stop-color:#dcdcdc;stop-opacity:1"
2089+ offset="0" />
2090+ <stop
2091+ id="stop3684-8-5-8-0-2"
2092+ style="stop-color:#ffffff;stop-opacity:1"
2093+ offset="1" />
2094+ </linearGradient>
2095+ <linearGradient
2096+ x1="20"
2097+ y1="26.000008"
2098+ x2="20"
2099+ y2="13.000008"
2100+ id="linearGradient3950"
2101+ xlink:href="#linearGradient3680-6-6-6-3-7"
2102+ gradientUnits="userSpaceOnUse"
2103+ gradientTransform="translate(-20,-24.000008)" />
2104+ <radialGradient
2105+ cx="8.276144"
2106+ cy="9.9941158"
2107+ r="12.671875"
2108+ fx="8.276144"
2109+ fy="9.9941158"
2110+ id="radialGradient3104"
2111+ xlink:href="#linearGradient3242"
2112+ gradientUnits="userSpaceOnUse"
2113+ gradientTransform="matrix(0,85.484079,-104.94714,0,1299.7805,-832.8559)" />
2114+ <linearGradient
2115+ x1="23.99999"
2116+ y1="4.999989"
2117+ x2="23.99999"
2118+ y2="43"
2119+ id="linearGradient4181"
2120+ xlink:href="#linearGradient3924-3"
2121+ gradientUnits="userSpaceOnUse"
2122+ gradientTransform="translate(5.3e-6,1.0000015)" />
2123+ <linearGradient
2124+ id="linearGradient3924-3">
2125+ <stop
2126+ id="stop3926-7"
2127+ style="stop-color:#ffffff;stop-opacity:1"
2128+ offset="0" />
2129+ <stop
2130+ id="stop3928-3"
2131+ style="stop-color:#ffffff;stop-opacity:0.23529412"
2132+ offset="0.06316455" />
2133+ <stop
2134+ id="stop3930-7"
2135+ style="stop-color:#ffffff;stop-opacity:0.15686275"
2136+ offset="0.95056331" />
2137+ <stop
2138+ id="stop3932-1"
2139+ style="stop-color:#ffffff;stop-opacity:0.39215687"
2140+ offset="1" />
2141+ </linearGradient>
2142+ <linearGradient
2143+ x1="167.98311"
2144+ y1="8.50811"
2145+ x2="167.98311"
2146+ y2="54.780239"
2147+ id="linearGradient4907-4"
2148+ xlink:href="#linearGradient5803-2-7"
2149+ gradientUnits="userSpaceOnUse"
2150+ gradientTransform="matrix(0.7037037,0,0,0.7037037,-39.333369,2.4814295)" />
2151+ <linearGradient
2152+ id="linearGradient5803-2-7">
2153+ <stop
2154+ id="stop5805-3-6"
2155+ style="stop-color:#fffdf3;stop-opacity:1"
2156+ offset="0" />
2157+ <stop
2158+ id="stop5807-0-0"
2159+ style="stop-color:#fbebeb;stop-opacity:1"
2160+ offset="1" />
2161+ </linearGradient>
2162+ <radialGradient
2163+ cx="8.276144"
2164+ cy="9.9941158"
2165+ r="12.671875"
2166+ fx="8.276144"
2167+ fy="9.9941158"
2168+ id="radialGradient6305"
2169+ xlink:href="#linearGradient3242"
2170+ gradientUnits="userSpaceOnUse"
2171+ gradientTransform="matrix(0,6.6677582,-8.1858766,0,105.8829,-59.462774)" />
2172+ <linearGradient
2173+ id="linearGradient3242">
2174+ <stop
2175+ id="stop3244"
2176+ style="stop-color:#f89b7e;stop-opacity:1"
2177+ offset="0" />
2178+ <stop
2179+ id="stop3246"
2180+ style="stop-color:#e35d4f;stop-opacity:1"
2181+ offset="0.26238" />
2182+ <stop
2183+ id="stop3248"
2184+ style="stop-color:#c6262e;stop-opacity:1"
2185+ offset="0.66093999" />
2186+ <stop
2187+ id="stop3250"
2188+ style="stop-color:#690b2c;stop-opacity:1"
2189+ offset="1" />
2190+ </linearGradient>
2191+ <radialGradient
2192+ cx="4.9929786"
2193+ cy="43.5"
2194+ r="2.5"
2195+ fx="4.9929786"
2196+ fy="43.5"
2197+ id="radialGradient3013"
2198+ xlink:href="#linearGradient3688-166-749"
2199+ gradientUnits="userSpaceOnUse"
2200+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" />
2201+ <linearGradient
2202+ id="linearGradient3688-166-749">
2203+ <stop
2204+ id="stop2883"
2205+ style="stop-color:#181818;stop-opacity:1"
2206+ offset="0" />
2207+ <stop
2208+ id="stop2885"
2209+ style="stop-color:#181818;stop-opacity:0"
2210+ offset="1" />
2211+ </linearGradient>
2212+ <radialGradient
2213+ cx="4.9929786"
2214+ cy="43.5"
2215+ r="2.5"
2216+ fx="4.9929786"
2217+ fy="43.5"
2218+ id="radialGradient3015"
2219+ xlink:href="#linearGradient3688-464-309"
2220+ gradientUnits="userSpaceOnUse"
2221+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" />
2222+ <linearGradient
2223+ id="linearGradient3688-464-309">
2224+ <stop
2225+ id="stop2889"
2226+ style="stop-color:#181818;stop-opacity:1"
2227+ offset="0" />
2228+ <stop
2229+ id="stop2891"
2230+ style="stop-color:#181818;stop-opacity:0"
2231+ offset="1" />
2232+ </linearGradient>
2233+ <linearGradient
2234+ id="linearGradient3702-501-757">
2235+ <stop
2236+ id="stop2895"
2237+ style="stop-color:#181818;stop-opacity:0"
2238+ offset="0" />
2239+ <stop
2240+ id="stop2897"
2241+ style="stop-color:#181818;stop-opacity:1"
2242+ offset="0.5" />
2243+ <stop
2244+ id="stop2899"
2245+ style="stop-color:#181818;stop-opacity:0"
2246+ offset="1" />
2247+ </linearGradient>
2248+ <linearGradient
2249+ x1="25.058096"
2250+ y1="47.027729"
2251+ x2="25.058096"
2252+ y2="39.999443"
2253+ id="linearGradient3141"
2254+ xlink:href="#linearGradient3702-501-757"
2255+ gradientUnits="userSpaceOnUse" />
2256+ <linearGradient
2257+ x1="0"
2258+ y1="0"
2259+ x2="1"
2260+ y2="0"
2261+ id="linearGradient3288"
2262+ xlink:href="#linearGradient152"
2263+ gradientUnits="userSpaceOnUse"
2264+ gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,158.172)"
2265+ spreadMethod="pad" />
2266+ <linearGradient
2267+ x1="0"
2268+ y1="0"
2269+ x2="1"
2270+ y2="0"
2271+ id="linearGradient152"
2272+ gradientUnits="userSpaceOnUse"
2273+ gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,158.172)"
2274+ spreadMethod="pad">
2275+ <stop
2276+ id="stop154"
2277+ style="stop-color:#f8a52c;stop-opacity:1"
2278+ offset="0" />
2279+ <stop
2280+ id="stop156"
2281+ style="stop-color:#e82e23;stop-opacity:1"
2282+ offset="1" />
2283+ </linearGradient>
2284+ <clipPath
2285+ id="clipPath148">
2286+ <path
2287+ d="m 73.0625,1288.75 0,-1064.57 3694.7075,0 0,1075.02 c 0,0 -615.78,365.29 -1742.98,365.29 -1127.2,0 -1951.7275,-375.74 -1951.7275,-375.74"
2288+ id="path150" />
2289+ </clipPath>
2290+ <linearGradient
2291+ x1="0"
2292+ y1="0"
2293+ x2="1"
2294+ y2="0"
2295+ id="linearGradient22"
2296+ gradientUnits="userSpaceOnUse"
2297+ gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,508.172)"
2298+ spreadMethod="pad">
2299+ <stop
2300+ id="stop24"
2301+ style="stop-color:#f8a52c;stop-opacity:1"
2302+ offset="0" />
2303+ <stop
2304+ id="stop26"
2305+ style="stop-color:#e82e23;stop-opacity:1"
2306+ offset="1" />
2307+ </linearGradient>
2308+ <clipPath
2309+ id="clipPath18">
2310+ <path
2311+ d="m 73.0625,4788.75 0,-1064.57 3694.7075,0 0,1075.02 c 0,0 -615.78,365.29 -1742.98,365.29 -1127.2,0 -1951.7275,-375.74 -1951.7275,-375.74"
2312+ id="path20" />
2313+ </clipPath>
2314+ <linearGradient
2315+ id="linearGradient3702-501-757-5">
2316+ <stop
2317+ id="stop2895-5"
2318+ style="stop-color:#181818;stop-opacity:0"
2319+ offset="0" />
2320+ <stop
2321+ id="stop2897-1"
2322+ style="stop-color:#181818;stop-opacity:1"
2323+ offset="0.5" />
2324+ <stop
2325+ id="stop2899-4"
2326+ style="stop-color:#181818;stop-opacity:0"
2327+ offset="1" />
2328+ </linearGradient>
2329+ <linearGradient
2330+ x1="25.058096"
2331+ y1="47.027729"
2332+ x2="25.058096"
2333+ y2="39.999443"
2334+ id="linearGradient3086"
2335+ xlink:href="#linearGradient3702-501-757-5"
2336+ gradientUnits="userSpaceOnUse" />
2337+ <linearGradient
2338+ id="linearGradient3688-464-309-87">
2339+ <stop
2340+ id="stop2889-5"
2341+ style="stop-color:#181818;stop-opacity:1"
2342+ offset="0" />
2343+ <stop
2344+ id="stop2891-5"
2345+ style="stop-color:#181818;stop-opacity:0"
2346+ offset="1" />
2347+ </linearGradient>
2348+ <radialGradient
2349+ cx="4.9929786"
2350+ cy="43.5"
2351+ r="2.5"
2352+ fx="4.9929786"
2353+ fy="43.5"
2354+ id="radialGradient3084"
2355+ xlink:href="#linearGradient3688-464-309-87"
2356+ gradientUnits="userSpaceOnUse"
2357+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" />
2358+ <linearGradient
2359+ id="linearGradient3688-166-749-1">
2360+ <stop
2361+ id="stop2883-79"
2362+ style="stop-color:#181818;stop-opacity:1"
2363+ offset="0" />
2364+ <stop
2365+ id="stop2885-4"
2366+ style="stop-color:#181818;stop-opacity:0"
2367+ offset="1" />
2368+ </linearGradient>
2369+ <radialGradient
2370+ cx="4.9929786"
2371+ cy="43.5"
2372+ r="2.5"
2373+ fx="4.9929786"
2374+ fy="43.5"
2375+ id="radialGradient3082"
2376+ xlink:href="#linearGradient3688-166-749-1"
2377+ gradientUnits="userSpaceOnUse"
2378+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" />
2379+ <linearGradient
2380+ id="linearGradient3242-6">
2381+ <stop
2382+ id="stop3244-9"
2383+ style="stop-color:#f89b7e;stop-opacity:1"
2384+ offset="0" />
2385+ <stop
2386+ id="stop3246-9"
2387+ style="stop-color:#e35d4f;stop-opacity:1"
2388+ offset="0.26238" />
2389+ <stop
2390+ id="stop3248-9"
2391+ style="stop-color:#c6262e;stop-opacity:1"
2392+ offset="0.66093999" />
2393+ <stop
2394+ id="stop3250-9"
2395+ style="stop-color:#690b2c;stop-opacity:1"
2396+ offset="1" />
2397+ </linearGradient>
2398+ <radialGradient
2399+ cx="8.276144"
2400+ cy="9.9941158"
2401+ r="12.671875"
2402+ fx="8.276144"
2403+ fy="9.9941158"
2404+ id="radialGradient4680-7"
2405+ xlink:href="#linearGradient3242-6"
2406+ gradientUnits="userSpaceOnUse"
2407+ gradientTransform="matrix(0,3.248395,-3.9879912,0,51.891669,-37.148511)" />
2408+ <linearGradient
2409+ id="linearGradient5803-2-7-5">
2410+ <stop
2411+ id="stop5805-3-6-4"
2412+ style="stop-color:#fffdf3;stop-opacity:1"
2413+ offset="0" />
2414+ <stop
2415+ id="stop5807-0-0-9"
2416+ style="stop-color:#fbebeb;stop-opacity:1"
2417+ offset="1" />
2418+ </linearGradient>
2419+ <linearGradient
2420+ x1="167.98311"
2421+ y1="8.50811"
2422+ x2="167.98311"
2423+ y2="54.780239"
2424+ id="linearGradient5041-7"
2425+ xlink:href="#linearGradient5803-2-7-5"
2426+ gradientUnits="userSpaceOnUse"
2427+ gradientTransform="matrix(0.33333333,0,0,0.33333333,-18.000021,-6.6666402)" />
2428+ <linearGradient
2429+ id="linearGradient3924-1-2">
2430+ <stop
2431+ id="stop3926-5"
2432+ style="stop-color:#ffffff;stop-opacity:1"
2433+ offset="0" />
2434+ <stop
2435+ id="stop3928-32"
2436+ style="stop-color:#ffffff;stop-opacity:0.23529412"
2437+ offset="0.06316455" />
2438+ <stop
2439+ id="stop3930-1"
2440+ style="stop-color:#ffffff;stop-opacity:0.15686275"
2441+ offset="0.95056331" />
2442+ <stop
2443+ id="stop3932-3"
2444+ style="stop-color:#ffffff;stop-opacity:0.39215687"
2445+ offset="1" />
2446+ </linearGradient>
2447+ <linearGradient
2448+ x1="23.99999"
2449+ y1="4.999989"
2450+ x2="23.99999"
2451+ y2="43"
2452+ id="linearGradient4160"
2453+ xlink:href="#linearGradient3924-1-2"
2454+ gradientUnits="userSpaceOnUse"
2455+ gradientTransform="matrix(0.45945947,0,0,0.45945947,0.9729689,-7.0270212)" />
2456+ <linearGradient
2457+ x1="23.99999"
2458+ y1="4.999989"
2459+ x2="23.99999"
2460+ y2="43"
2461+ id="linearGradient4160-4"
2462+ xlink:href="#linearGradient3924-1-2-6"
2463+ gradientUnits="userSpaceOnUse"
2464+ gradientTransform="matrix(0.45945947,0,0,0.45945947,0.9729689,-7.0270212)" />
2465+ <linearGradient
2466+ id="linearGradient3924-1-2-6">
2467+ <stop
2468+ id="stop3926-5-5"
2469+ style="stop-color:#ffffff;stop-opacity:1"
2470+ offset="0" />
2471+ <stop
2472+ id="stop3928-32-3"
2473+ style="stop-color:#ffffff;stop-opacity:0.23529412"
2474+ offset="0.06316455" />
2475+ <stop
2476+ id="stop3930-1-7"
2477+ style="stop-color:#ffffff;stop-opacity:0.15686275"
2478+ offset="0.95056331" />
2479+ <stop
2480+ id="stop3932-3-0"
2481+ style="stop-color:#ffffff;stop-opacity:0.39215687"
2482+ offset="1" />
2483+ </linearGradient>
2484+ <linearGradient
2485+ x1="23.99999"
2486+ y1="-1.9506749"
2487+ x2="23.99999"
2488+ y2="57.674179"
2489+ id="linearGradient4207-1"
2490+ xlink:href="#linearGradient4269"
2491+ gradientUnits="userSpaceOnUse"
2492+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)" />
2493+ <linearGradient
2494+ id="linearGradient3924-1-2-6-0">
2495+ <stop
2496+ id="stop3926-5-5-3"
2497+ style="stop-color:#ffffff;stop-opacity:1"
2498+ offset="0" />
2499+ <stop
2500+ id="stop3928-32-3-6"
2501+ style="stop-color:#ffffff;stop-opacity:0.23529412"
2502+ offset="0.06316455" />
2503+ <stop
2504+ id="stop3930-1-7-2"
2505+ style="stop-color:#ffffff;stop-opacity:0.15686275"
2506+ offset="0.95056331" />
2507+ <stop
2508+ id="stop3932-3-0-9"
2509+ style="stop-color:#ffffff;stop-opacity:0.39215687"
2510+ offset="1" />
2511+ </linearGradient>
2512+ <linearGradient
2513+ x1="23.99999"
2514+ y1="4.999989"
2515+ x2="23.99999"
2516+ y2="43"
2517+ id="linearGradient4247"
2518+ xlink:href="#linearGradient3924-1-2-6-0"
2519+ gradientUnits="userSpaceOnUse"
2520+ gradientTransform="matrix(0.45945947,0,0,0.45945947,-2.0270504,-2.0270449)" />
2521+ <linearGradient
2522+ x1="674.99536"
2523+ y1="635.92169"
2524+ x2="674.99536"
2525+ y2="662.89178"
2526+ id="linearGradient4285"
2527+ xlink:href="#linearGradient4279"
2528+ gradientUnits="userSpaceOnUse" />
2529+ <radialGradient
2530+ cx="11.325233"
2531+ cy="30.998131"
2532+ r="7.0953269"
2533+ fx="11.325233"
2534+ fy="30.998131"
2535+ id="radialGradient4297"
2536+ xlink:href="#linearGradient4291"
2537+ gradientUnits="userSpaceOnUse"
2538+ gradientTransform="matrix(1,0,0,0.25,0,23.248598)" />
2539+ <filter
2540+ x="-0.15516667"
2541+ y="-0.097828373"
2542+ width="1.3103333"
2543+ height="1.1956567"
2544+ color-interpolation-filters="sRGB"
2545+ id="filter4345">
2546+ <feGaussianBlur
2547+ id="feGaussianBlur4347"
2548+ stdDeviation="0.4655" />
2549+ </filter>
2550+ <linearGradient
2551+ x1="674.99536"
2552+ y1="635.92169"
2553+ x2="674.99536"
2554+ y2="662.89178"
2555+ id="linearGradient4285-7"
2556+ xlink:href="#linearGradient4279-2"
2557+ gradientUnits="userSpaceOnUse" />
2558+ <linearGradient
2559+ id="linearGradient4279-2">
2560+ <stop
2561+ id="stop4281-4"
2562+ style="stop-color:#e74545;stop-opacity:1"
2563+ offset="0" />
2564+ <stop
2565+ id="stop4283-7"
2566+ style="stop-color:#da1c1c;stop-opacity:0.99795502"
2567+ offset="1" />
2568+ </linearGradient>
2569+ <linearGradient
2570+ x1="23.99999"
2571+ y1="-1.9506749"
2572+ x2="23.99999"
2573+ y2="57.674179"
2574+ id="linearGradient4207-1-1"
2575+ xlink:href="#linearGradient4269-9"
2576+ gradientUnits="userSpaceOnUse"
2577+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)" />
2578+ <linearGradient
2579+ id="linearGradient4269-9">
2580+ <stop
2581+ id="stop4271-5"
2582+ style="stop-color:#ffffff;stop-opacity:1"
2583+ offset="0" />
2584+ <stop
2585+ id="stop4273-3"
2586+ style="stop-color:#ffffff;stop-opacity:0.23529412"
2587+ offset="0.19700792" />
2588+ <stop
2589+ id="stop4275-1"
2590+ style="stop-color:#ffffff;stop-opacity:0.15686275"
2591+ offset="0.6310662" />
2592+ <stop
2593+ id="stop4277-8"
2594+ style="stop-color:#ffffff;stop-opacity:0.39215687"
2595+ offset="1" />
2596+ </linearGradient>
2597+ <linearGradient
2598+ x1="23.99999"
2599+ y1="-1.9506749"
2600+ x2="23.99999"
2601+ y2="57.674179"
2602+ id="linearGradient4027"
2603+ xlink:href="#linearGradient4269-9"
2604+ gradientUnits="userSpaceOnUse"
2605+ gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)" />
2606+ </defs>
2607+ <metadata
2608+ id="metadata7">
2609+ <rdf:RDF>
2610+ <cc:Work
2611+ rdf:about="">
2612+ <dc:format>image/svg+xml</dc:format>
2613+ <dc:type
2614+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
2615+ <dc:title></dc:title>
2616+ </cc:Work>
2617+ </rdf:RDF>
2618+ </metadata>
2619+ <g
2620+ transform="translate(-662.78571,-633.50507)"
2621+ id="layer1">
2622+ <path
2623+ d="m 674.28125,647.84375 c -2.94458,0 -5.58673,0.68985 -7.46875,1.78125 -1.85693,1.07685 -2.90625,2.48274 -2.90625,3.96875 0,1.47223 1.05058,2.80953 2.84375,3.875 a 1.1774629,1.1774629 0 0 0 0.0937,0.0625 l -0.0312,0.0312 6.5625,5.53125 a 1.1774629,1.1774629 0 0 0 1.5,0 l 6.625,-5.375 -0.0312,-0.0312 a 1.1774629,1.1774629 0 0 0 0.0937,-0.0312 c 1.96355,-1.08113 3.09375,-2.51482 3.09375,-4.0625 0,-1.48601 -1.04932,-2.8919 -2.90625,-3.96875 -1.88202,-1.0914 -4.52417,-1.78125 -7.46875,-1.78125 z m -6.03125,7.875 c 0.008,0.007 0.0613,0.0268 0.0312,0 -0.12018,-0.10724 0.14927,0.14086 0.0312,0.0312 -0.11802,-0.10961 0.14706,0.1432 0.0312,0.0312 -0.11581,-0.11195 0.17606,0.14548 0.0625,0.0312 l -0.0625,0.0625 a 1.1774629,1.1774629 0 0 0 -0.0937,-0.15625 z m 11.875,0.0937 A 1.1774629,1.1774629 0 0 0 680,655.96875 l -0.0312,-0.0312 c -0.11976,0.10718 0.1533,-0.13581 0.0312,-0.0312 -0.12205,0.10456 0.18678,-0.1644 0.0625,-0.0625 -0.12428,0.1019 0.18896,-0.13044 0.0625,-0.0312 z"
2624+ transform="matrix(1,0,0,0.8490188,0,102.82045)"
2625+ id="path3974"
2626+ style="opacity:0.05;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
2627+ <path
2628+ d="m 674.28125,649.03125 c -2.75342,0 -5.2292,0.67059 -6.875,1.625 -1.6458,0.95441 -2.3125,2.0249 -2.3125,2.9375 0,0.8922 0.65933,1.92985 2.25,2.875 a 1.808614,1.808614 0 0 1 0.21875,0.1875 l 6.5625,5.53125 6.625,-5.375 A 1.808614,1.808614 0 0 1 681,656.625 c 1.74512,-0.96086 2.46875,-2.08177 2.46875,-3.03125 0,-0.9126 -0.6667,-1.98309 -2.3125,-2.9375 -1.6458,-0.95441 -4.12158,-1.625 -6.875,-1.625 z"
2629+ transform="matrix(1,0,0,0.8490188,0,102.82045)"
2630+ id="path3966"
2631+ style="opacity:0.1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
2632+ <path
2633+ d="m 674.28125,650.21875 c -2.5594,0 -4.87521,0.65338 -6.28125,1.46875 -1.43151,0.83014 -1.71875,1.57563 -1.71875,1.90625 0,0.30349 0.30235,1.02072 1.6875,1.84375 l -0.0625,0.0937 a 1.1950764,1.1950764 0 0 1 0.4375,0.21875 l 5.78125,4.875 5.875,-4.75 a 1.1950764,1.1950764 0 0 1 0.46875,-0.21875 l -0.0312,-0.0625 c 1.52342,-0.83879 1.84375,-1.65766 1.84375,-2 0,-0.33062 -0.28724,-1.07611 -1.71875,-1.90625 -1.40604,-0.81537 -3.72185,-1.46875 -6.28125,-1.46875 z"
2634+ transform="matrix(1,0,0,0.8490188,0,102.82045)"
2635+ id="path3974-5"
2636+ style="opacity:0.15;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
2637+ <path
2638+ d="m 674.28571,634.52389 c -6.07452,0 -11,4.94494 -11,11.04347 0,2.9962 1.18846,5.71492 3.11811,7.70436 l 7.69134,11.25217 7.77144,-10.95851 c 2.10521,-2.01125 3.41911,-4.85027 3.41911,-7.99802 0,-6.09853 -4.92547,-11.04347 -11,-11.04347 z"
2639+ id="path3007"
2640+ style="color:#000000;fill:url(#linearGradient4285);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
2641+ <path
2642+ d="m 674.28571,634.52389 c -6.07452,0 -11,4.94494 -11,11.04347 0,2.9962 1.18846,5.71492 3.11811,7.70436 l 7.69134,11.25217 7.77144,-10.95851 c 2.10521,-2.01125 3.41911,-4.85027 3.41911,-7.99802 0,-6.09853 -4.92547,-11.04347 -11,-11.04347 z"
2643+ id="path3007-6"
2644+ style="color:#000000;fill:none;stroke:#da1c1c;stroke-width:0.99999994;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
2645+ <path
2646+ d="m 674.28125,635.5 c -5.54209,0 -10.03125,4.49352 -10.03125,10.0625 0,2.73462 1.11745,5.21924 2.875,7.03125 a 0.98360133,0.98360133 0 0 1 0.0937,0.125 l 6.875,10.09375 L 681.0625,653 a 0.98360133,0.98360133 0 0 1 0.125,-0.15625 c 1.91706,-1.8315 3.125,-4.4045 3.125,-7.28125 0,-5.56898 -4.48914,-10.0625 -10.03125,-10.0625 z"
2647+ id="path4093"
2648+ style="opacity:0.4;color:#000000;fill:none;stroke:url(#linearGradient4027);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
2649+ <path
2650+ d="m 14.934579,12.583178 a 4.4485979,4.4485979 0 1 1 -8.8971959,0 4.4485979,4.4485979 0 1 1 8.8971959,0 z"
2651+ transform="matrix(1.1239496,0,0,1.1239496,662.5,632.36221)"
2652+ id="path3168-7"
2653+ style="opacity:0.15;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
2654+ <path
2655+ d="m 14.934579,12.583178 a 4.4485979,4.4485979 0 1 1 -8.8971959,0 4.4485979,4.4485979 0 1 1 8.8971959,0 z"
2656+ transform="matrix(1.1239496,0,0,1.1239496,662.5,631.36221)"
2657+ id="path3168"
2658+ style="color:#000000;fill:#8b1212;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
2659+ </g>
2660+</svg>
2661
2662=== added file 'icons/import-all.png'
2663Binary files icons/import-all.png 1970-01-01 00:00:00 +0000 and icons/import-all.png 2014-10-18 00:49:47 +0000 differ
2664=== added file 'icons/import.svg'
2665--- icons/import.svg 1970-01-01 00:00:00 +0000
2666+++ icons/import.svg 2014-10-18 00:49:47 +0000
2667@@ -0,0 +1,55 @@
2668+<?xml version="1.0" encoding="UTF-8"?>
2669+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
2670+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
2671+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
2672+]>
2673+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" viewBox="0 0 128 128" overflow="visible" enable-background="new 0 0 128 128" xml:space="preserve">
2674+ <path opacity="0.2" fill="#1A1A1A" d="M125,106c0,6.286-2.713,9-9,9H14c-6.286,0-9-2.714-9-9V24c0-6.287,2.714-9,9-9h102 c6.287,0,9,2.713,9,9V106z"/>
2675+ <path opacity="0.2" fill="#1A1A1A" d="M124.25,107c0,6.286-2.68,9-8.888,9H14.638c-6.208,0-8.888-2.714-8.888-9V25 c0-6.287,2.68-9,8.888-9h100.725c6.208,0,8.888,2.713,8.888,9V107z"/>
2676+ <path opacity="0.4" fill="#1A1A1A" d="M14,12C7.178,12,4,15.178,4,22v82c0,6.822,3.178,10,10,10h102c6.822,0,10-3.178,10-10V22 c0-6.822-3.178-10-10-10H14z"/>
2677+ <linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="23.3413" y1="24" x2="119.5405" y2="114.0588">
2678+ <stop offset="0" style="stop-color: rgb(248, 249, 248);"/>
2679+ <stop offset="1" style="stop-color: rgb(231, 231, 230);"/>
2680+ </linearGradient>
2681+ <path fill="url(#XMLID_7_)" d="M125,104c0,6.286-2.713,9-9,9H14c-6.286,0-9-2.714-9-9V22c0-6.287,2.714-9,9-9h102 c6.287,0,9,2.713,9,9V104z"/>
2682+ <rect x="16" y="36" fill="#003A8F" width="98" height="52"/>
2683+ <rect x="17" y="37" fill="#FFFFFF" width="98" height="52"/>
2684+ <radialGradient id="XMLID_8_" cx="44" cy="46" r="94.8685" gradientUnits="userSpaceOnUse">
2685+ <stop offset="0" style="stop-color: rgb(83, 142, 212);"/>
2686+ <stop offset="1" style="stop-color: rgb(0, 25, 64);"/>
2687+ </radialGradient>
2688+ <rect x="16" y="50" fill="url(#XMLID_8_)" width="98" height="38"/>
2689+ <rect x="16" y="36" fill="#296096" width="98" height="14"/>
2690+ <path fill="#52463A" d="M67,87.951c-2.975-3.135-5.95-6.269-11.899-6.269c-5.949,0-20.823-6.271-20.823-6.271 s-11.899-6.27-17.849-6.27c0,6.27,0,18.809,0,18.809H67z"/>
2691+ <linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="70.2695" y1="26.522" x2="57.2696" y2="73.522">
2692+ <stop offset="0" style="stop-color: rgb(101, 162, 220);"/>
2693+ <stop offset="0.5674" style="stop-color: rgb(78, 131, 194);"/>
2694+ <stop offset="1" style="stop-color: rgb(136, 174, 194);"/>
2695+ </linearGradient>
2696+ <path fill="url(#XMLID_9_)" d="M113,54.143c-30,0-84,11.429-96,22.857V37h96V54.143z"/>
2697+ <linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="18.6816" y1="75.5381" x2="49.1252" y2="91.7747">
2698+ <stop offset="0" style="stop-color: rgb(124, 130, 113);"/>
2699+ <stop offset="1" style="stop-color: rgb(120, 103, 85);"/>
2700+ </linearGradient>
2701+ <path fill="url(#XMLID_10_)" d="M65.5,88c-2.912-2.833-5.823-5.666-11.647-5.666c-5.823,0-20.382-5.667-20.382-5.667 S21.823,71,16,71c0,5.667,0,17,0,17H65.5z"/>
2702+ <path fill="#CBC7B8" d="M17,77c1.74-1.657,4.369-3.314,7.675-4.938c-2.697-0.968-5.513-1.774-7.675-1.902V77z"/>
2703+ <path fill="#52463A" d="M83.939,87.955c0,0,2.728-4.596,6.291-4.596c3.564,0,4.401,4.596,4.401,4.596H83.939z"/>
2704+
2705+ <linearGradient id="XMLID_11_" gradientUnits="userSpaceOnUse" x1="85.4639" y1="86.5039" x2="94.0352" y2="86.5039" gradientTransform="matrix(1, 0, -0.1353, 0.9324, 11.5082, 5.4565)">
2706+ <stop offset="0" style="stop-color: rgb(124, 130, 113);"/>
2707+ <stop offset="1" style="stop-color: rgb(120, 103, 85);"/>
2708+ </linearGradient>
2709+ <path fill="url(#XMLID_11_)" d="M85,87.955c0,0,2.187-3.685,5.043-3.685c2.857,0,3.528,3.685,3.528,3.685H85z"/>
2710+ <linearGradient id="XMLID_12_" gradientUnits="userSpaceOnUse" x1="41" y1="47.7856" x2="101.25" y2="47.7856">
2711+ <stop offset="0" style="stop-color: rgb(96, 133, 185);"/>
2712+ <stop offset="1" style="stop-color: rgb(55, 73, 122);"/>
2713+ </linearGradient>
2714+ <path fill="url(#XMLID_12_)" d="M45.288,50.143h67.215c-1.565-2.777-4.952-4.714-8.909-4.714H54.199 C50.241,45.429,46.853,47.366,45.288,50.143z"/>
2715+ <path fill="#BCAC8D" d="M27.793,76.766c-1.633-2.153-4.843-3.357-5.856-0.658c-1.012,2.697-2.025,5.396-2.025,5.396l6.983,4.161 L27.793,76.766z"/>
2716+ <path fill="#56573F" d="M30.825,76.912C30.327,79.664,27,87,27,87h-8c0,0,8.157-11.922,9.991-11.005 C30.825,76.912,30.825,76.912,30.825,76.912z"/>
2717+ <path fill="#3A434C" d="M30,86c0,0,5.228-2.161,6.918-3.625s2.457-3.311,2.457-3.311l-4.461,0.313L30,86z"/>
2718+ <path fill="#BCAC8D" d="M37,81c-2-1-5-1-5,1s0,4,0,4l7,1L37,81z"/>
2719+ <path fill="#BCAC8D" d="M46,82.493c-2-0.751-5-0.751-5,0.751c0,1.503,0,3.005,0,3.005L48,87L46,82.493z"/>
2720+ <path fill="#94876F" d="M53.794,83.459c-1.85-0.699-3.949-0.699-3.047,0.699c0.901,1.399,1.803,2.799,1.803,2.799l5.348,0.699 L53.794,83.459z"/>
2721+ <path fill="#53634C" d="M51,86c0,0-4-4-6-5s-4-1-4-1l2,4L51,86z"/>
2722+</svg>
2723\ No newline at end of file
2724
2725=== added file 'icons/places.svg'
2726--- icons/places.svg 1970-01-01 00:00:00 +0000
2727+++ icons/places.svg 2014-10-18 00:49:47 +0000
2728@@ -0,0 +1,679 @@
2729+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2730+<!-- Created with Inkscape (http://www.inkscape.org/) -->
2731+
2732+<svg
2733+ xmlns:dc="http://purl.org/dc/elements/1.1/"
2734+ xmlns:cc="http://creativecommons.org/ns#"
2735+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
2736+ xmlns:svg="http://www.w3.org/2000/svg"
2737+ xmlns="http://www.w3.org/2000/svg"
2738+ xmlns:xlink="http://www.w3.org/1999/xlink"
2739+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
2740+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
2741+ width="16px"
2742+ height="16px"
2743+ id="svg4215"
2744+ version="1.1"
2745+ inkscape:version="0.48.4 r9939"
2746+ sodipodi:docname="places.svg"
2747+ inkscape:export-filename="/home/sam/places.png"
2748+ inkscape:export-xdpi="90"
2749+ inkscape:export-ydpi="90">
2750+ <defs
2751+ id="defs4217">
2752+ <linearGradient
2753+ id="linearGradient19627">
2754+ <stop
2755+ style="stop-color:#585858;stop-opacity:1;"
2756+ offset="0"
2757+ id="stop19629" />
2758+ <stop
2759+ style="stop-color:#9b9b9b;stop-opacity:1;"
2760+ offset="1"
2761+ id="stop19631" />
2762+ </linearGradient>
2763+ <linearGradient
2764+ inkscape:collect="always"
2765+ id="linearGradient15009-5-8">
2766+ <stop
2767+ style="stop-color:#383e34;stop-opacity:1"
2768+ offset="0"
2769+ id="stop15011-5-3" />
2770+ <stop
2771+ style="stop-color:#84917c;stop-opacity:1"
2772+ offset="1"
2773+ id="stop15013-7-58" />
2774+ </linearGradient>
2775+ <linearGradient
2776+ id="linearGradient15009-2">
2777+ <stop
2778+ style="stop-color:#303030;stop-opacity:1;"
2779+ offset="0"
2780+ id="stop15011-8" />
2781+ <stop
2782+ style="stop-color:#959595;stop-opacity:1;"
2783+ offset="1"
2784+ id="stop15013-2" />
2785+ </linearGradient>
2786+ <linearGradient
2787+ id="linearGradient60943">
2788+ <stop
2789+ id="stop60945"
2790+ offset="0"
2791+ style="stop-color:#95c48c;stop-opacity:1;" />
2792+ <stop
2793+ id="stop60947"
2794+ offset="1"
2795+ style="stop-color:#a6dc98;stop-opacity:1;" />
2796+ </linearGradient>
2797+ <linearGradient
2798+ id="linearGradient60637">
2799+ <stop
2800+ id="stop60639"
2801+ offset="0"
2802+ style="stop-color:#4c84d8;stop-opacity:1;" />
2803+ <stop
2804+ id="stop60641"
2805+ offset="1"
2806+ style="stop-color:#6b9bdc;stop-opacity:1;" />
2807+ </linearGradient>
2808+ <radialGradient
2809+ inkscape:collect="always"
2810+ xlink:href="#linearGradient14755-8"
2811+ id="radialGradient60893"
2812+ gradientUnits="userSpaceOnUse"
2813+ gradientTransform="matrix(1,0,0,0.57798165,0,82.135321)"
2814+ cx="149.375"
2815+ cy="194.625"
2816+ fx="149.375"
2817+ fy="194.625"
2818+ r="13.625" />
2819+ <linearGradient
2820+ inkscape:collect="always"
2821+ id="linearGradient14755-8">
2822+ <stop
2823+ style="stop-color:#000000;stop-opacity:1;"
2824+ offset="0"
2825+ id="stop14757-1" />
2826+ <stop
2827+ style="stop-color:#000000;stop-opacity:0;"
2828+ offset="1"
2829+ id="stop14759-3" />
2830+ </linearGradient>
2831+ <linearGradient
2832+ inkscape:collect="always"
2833+ id="linearGradient14991-1">
2834+ <stop
2835+ style="stop-color:#ffffff;stop-opacity:1;"
2836+ offset="0"
2837+ id="stop14993-0" />
2838+ <stop
2839+ style="stop-color:#ffffff;stop-opacity:0;"
2840+ offset="1"
2841+ id="stop14995-0" />
2842+ </linearGradient>
2843+ <linearGradient
2844+ inkscape:collect="always"
2845+ xlink:href="#linearGradient20627-8-0"
2846+ id="linearGradient60901"
2847+ gradientUnits="userSpaceOnUse"
2848+ gradientTransform="translate(507.9375,53.736825)"
2849+ x1="49.75"
2850+ y1="218.75"
2851+ x2="98.59375"
2852+ y2="217" />
2853+ <linearGradient
2854+ id="linearGradient20627-8-0">
2855+ <stop
2856+ style="stop-color:#f8d022;stop-opacity:1;"
2857+ offset="0"
2858+ id="stop22486-6-5" />
2859+ <stop
2860+ id="stop20631-9-6"
2861+ offset="1"
2862+ style="stop-color:#e3ce74;stop-opacity:1;" />
2863+ </linearGradient>
2864+ <linearGradient
2865+ inkscape:collect="always"
2866+ xlink:href="#linearGradient20104-9-1-6"
2867+ id="linearGradient60903"
2868+ gradientUnits="userSpaceOnUse"
2869+ gradientTransform="translate(507.9375,53.736825)"
2870+ x1="126.7462"
2871+ y1="210.79668"
2872+ x2="149.73004"
2873+ y2="150.20921" />
2874+ <linearGradient
2875+ inkscape:collect="always"
2876+ id="linearGradient20104-9-1-6">
2877+ <stop
2878+ style="stop-color:#826a00;stop-opacity:1;"
2879+ offset="0"
2880+ id="stop20106-9-6-9" />
2881+ <stop
2882+ style="stop-color:#d9b100;stop-opacity:1"
2883+ offset="1"
2884+ id="stop20108-6-6-9" />
2885+ </linearGradient>
2886+ <linearGradient
2887+ inkscape:collect="always"
2888+ xlink:href="#linearGradient20114-7-2-5-2-9"
2889+ id="linearGradient60905"
2890+ gradientUnits="userSpaceOnUse"
2891+ gradientTransform="translate(507.9375,68.736825)"
2892+ x1="113.81474"
2893+ y1="157.29919"
2894+ x2="175.08"
2895+ y2="155.54919" />
2896+ <linearGradient
2897+ inkscape:collect="always"
2898+ id="linearGradient20114-7-2-5-2-9">
2899+ <stop
2900+ style="stop-color:#888a85;stop-opacity:1;"
2901+ offset="0"
2902+ id="stop20116-5-2-3-4-0" />
2903+ <stop
2904+ style="stop-color:#a4a5a1;stop-opacity:1"
2905+ offset="1"
2906+ id="stop20118-4-5-6-9-2" />
2907+ </linearGradient>
2908+ <linearGradient
2909+ inkscape:collect="always"
2910+ xlink:href="#linearGradient22395-8-5"
2911+ id="linearGradient60907"
2912+ gradientUnits="userSpaceOnUse"
2913+ gradientTransform="translate(507.9375,53.736825)"
2914+ x1="98.5"
2915+ y1="173.5"
2916+ x2="112.75"
2917+ y2="169.25" />
2918+ <linearGradient
2919+ inkscape:collect="always"
2920+ id="linearGradient22395-8-5">
2921+ <stop
2922+ style="stop-color:#bdbdbd;stop-opacity:1;"
2923+ offset="0"
2924+ id="stop22397-0-6" />
2925+ <stop
2926+ style="stop-color:#cdcdcd;stop-opacity:1"
2927+ offset="1"
2928+ id="stop22399-6-9" />
2929+ </linearGradient>
2930+ <linearGradient
2931+ inkscape:collect="always"
2932+ xlink:href="#linearGradient20114-7-6-1"
2933+ id="linearGradient60911"
2934+ gradientUnits="userSpaceOnUse"
2935+ gradientTransform="translate(507.9375,68.736825)"
2936+ x1="130.81474"
2937+ y1="175.54919"
2938+ x2="182.08"
2939+ y2="175.54919" />
2940+ <linearGradient
2941+ inkscape:collect="always"
2942+ id="linearGradient20114-7-6-1">
2943+ <stop
2944+ style="stop-color:#888a85;stop-opacity:1;"
2945+ offset="0"
2946+ id="stop20116-5-4-8" />
2947+ <stop
2948+ style="stop-color:#a4a5a1;stop-opacity:1"
2949+ offset="1"
2950+ id="stop20118-4-2-6" />
2951+ </linearGradient>
2952+ <linearGradient
2953+ inkscape:collect="always"
2954+ xlink:href="#linearGradient20114-7-4-6-4-1"
2955+ id="linearGradient60913"
2956+ gradientUnits="userSpaceOnUse"
2957+ gradientTransform="translate(507.9375,53.736825)"
2958+ x1="130.81474"
2959+ y1="175.54919"
2960+ x2="182.08"
2961+ y2="175.54919" />
2962+ <linearGradient
2963+ inkscape:collect="always"
2964+ id="linearGradient20114-7-4-6-4-1">
2965+ <stop
2966+ style="stop-color:#888a85;stop-opacity:1;"
2967+ offset="0"
2968+ id="stop20116-5-9-2-3-4" />
2969+ <stop
2970+ style="stop-color:#a4a5a1;stop-opacity:1"
2971+ offset="1"
2972+ id="stop20118-4-3-9-0-3" />
2973+ </linearGradient>
2974+ <linearGradient
2975+ inkscape:collect="always"
2976+ xlink:href="#linearGradient22799-6-7"
2977+ id="linearGradient60919"
2978+ gradientUnits="userSpaceOnUse"
2979+ gradientTransform="translate(507.9375,53.736825)"
2980+ x1="118"
2981+ y1="159.375"
2982+ x2="103.25"
2983+ y2="169.875" />
2984+ <linearGradient
2985+ inkscape:collect="always"
2986+ id="linearGradient22799-6-7">
2987+ <stop
2988+ style="stop-color:#000000;stop-opacity:1"
2989+ offset="0"
2990+ id="stop22801-7-5" />
2991+ <stop
2992+ style="stop-color:#000000;stop-opacity:0.37280703"
2993+ offset="1"
2994+ id="stop22803-5-9" />
2995+ </linearGradient>
2996+ <linearGradient
2997+ id="linearGradient14670-0">
2998+ <stop
2999+ style="stop-color:#fc6c6c;stop-opacity:1;"
3000+ offset="0"
3001+ id="stop14672-2" />
3002+ <stop
3003+ style="stop-color:#f92424;stop-opacity:1;"
3004+ offset="1"
3005+ id="stop14674-7" />
3006+ </linearGradient>
3007+ <linearGradient
3008+ inkscape:collect="always"
3009+ id="linearGradient14971-4">
3010+ <stop
3011+ style="stop-color:#fabebe;stop-opacity:1;"
3012+ offset="0"
3013+ id="stop14973-7" />
3014+ <stop
3015+ style="stop-color:#fabebe;stop-opacity:0;"
3016+ offset="1"
3017+ id="stop14975-2" />
3018+ </linearGradient>
3019+ <linearGradient
3020+ inkscape:collect="always"
3021+ id="linearGradient14745-0">
3022+ <stop
3023+ style="stop-color:#ff4141;stop-opacity:1"
3024+ offset="0"
3025+ id="stop14747-5" />
3026+ <stop
3027+ style="stop-color:#cc0000;stop-opacity:1"
3028+ offset="1"
3029+ id="stop14749-3" />
3030+ </linearGradient>
3031+ <linearGradient
3032+ inkscape:collect="always"
3033+ id="linearGradient14683-3">
3034+ <stop
3035+ style="stop-color:#ffffff;stop-opacity:1;"
3036+ offset="0"
3037+ id="stop14685-5" />
3038+ <stop
3039+ style="stop-color:#ffffff;stop-opacity:0;"
3040+ offset="1"
3041+ id="stop14687-3" />
3042+ </linearGradient>
3043+ <linearGradient
3044+ inkscape:collect="always"
3045+ id="linearGradient36566">
3046+ <stop
3047+ style="stop-color:#ffffff;stop-opacity:1;"
3048+ offset="0"
3049+ id="stop36568" />
3050+ <stop
3051+ style="stop-color:#ffffff;stop-opacity:0;"
3052+ offset="1"
3053+ id="stop36570" />
3054+ </linearGradient>
3055+ <radialGradient
3056+ inkscape:collect="always"
3057+ xlink:href="#linearGradient14991-1"
3058+ id="radialGradient4479"
3059+ gradientUnits="userSpaceOnUse"
3060+ gradientTransform="matrix(0.11297688,-0.0292602,0.01813654,0.07002722,-6.7577806,-3.8534916)"
3061+ cx="80.25"
3062+ cy="187.73877"
3063+ fx="80.25"
3064+ fy="187.73877"
3065+ r="30.75" />
3066+ <linearGradient
3067+ inkscape:collect="always"
3068+ xlink:href="#linearGradient60637"
3069+ id="linearGradient4484"
3070+ gradientUnits="userSpaceOnUse"
3071+ gradientTransform="matrix(0.09997235,0,0,0.09997235,-1.3369622,-10.014789)"
3072+ x1="105.5"
3073+ y1="189"
3074+ x2="156.5"
3075+ y2="195.5" />
3076+ <linearGradient
3077+ inkscape:collect="always"
3078+ xlink:href="#linearGradient60943"
3079+ id="linearGradient4487"
3080+ gradientUnits="userSpaceOnUse"
3081+ gradientTransform="matrix(0.09997235,0,0,0.09997235,-2.309234,-12.224498)"
3082+ x1="58.907967"
3083+ y1="194.96349"
3084+ x2="92.707535"
3085+ y2="191.56073" />
3086+ <radialGradient
3087+ inkscape:collect="always"
3088+ xlink:href="#linearGradient15009-2"
3089+ id="radialGradient4490"
3090+ gradientUnits="userSpaceOnUse"
3091+ gradientTransform="matrix(0.17477181,-0.00863071,0.00354741,0.07183502,-9.6863349,-4.8589985)"
3092+ cx="88.25"
3093+ cy="218.765"
3094+ fx="88.25"
3095+ fy="218.765"
3096+ r="34.75" />
3097+ <radialGradient
3098+ inkscape:collect="always"
3099+ xlink:href="#linearGradient15009-5-8"
3100+ id="radialGradient4493"
3101+ gradientUnits="userSpaceOnUse"
3102+ gradientTransform="matrix(0.17477181,-0.00863071,0.00354741,0.07183502,-9.6863349,-4.8589985)"
3103+ cx="81.881546"
3104+ cy="250.70465"
3105+ fx="81.881546"
3106+ fy="250.70465"
3107+ r="34.75" />
3108+ <linearGradient
3109+ inkscape:collect="always"
3110+ xlink:href="#linearGradient19627"
3111+ id="linearGradient4497"
3112+ gradientUnits="userSpaceOnUse"
3113+ gradientTransform="matrix(0.10118493,0,0,0.10118493,-2.4711313,-12.467927)"
3114+ x1="171.2774"
3115+ y1="272.52652"
3116+ x2="171.2774"
3117+ y2="173.69757" />
3118+ <radialGradient
3119+ inkscape:collect="always"
3120+ xlink:href="#linearGradient14755-8"
3121+ id="radialGradient4499"
3122+ gradientUnits="userSpaceOnUse"
3123+ gradientTransform="matrix(1,0,0,0.57798165,0,82.135321)"
3124+ cx="149.375"
3125+ cy="194.625"
3126+ fx="149.375"
3127+ fy="194.625"
3128+ r="13.625" />
3129+ <radialGradient
3130+ inkscape:collect="always"
3131+ xlink:href="#linearGradient14971-4"
3132+ id="radialGradient4503"
3133+ gradientUnits="userSpaceOnUse"
3134+ cx="129.25"
3135+ cy="129.83951"
3136+ fx="129.25"
3137+ fy="129.83951"
3138+ r="34.93745" />
3139+ <radialGradient
3140+ inkscape:collect="always"
3141+ xlink:href="#linearGradient14745-0"
3142+ id="radialGradient4505"
3143+ gradientUnits="userSpaceOnUse"
3144+ gradientTransform="matrix(1.7826226,0,0,1.7826226,-100.09062,-90.782804)"
3145+ cx="127.8913"
3146+ cy="115.99819"
3147+ fx="127.8913"
3148+ fy="115.99819"
3149+ r="31.25" />
3150+ <radialGradient
3151+ inkscape:collect="always"
3152+ xlink:href="#linearGradient14683-3"
3153+ id="radialGradient4507"
3154+ gradientUnits="userSpaceOnUse"
3155+ gradientTransform="matrix(0.08293973,0,0,0.0351222,-1.3902711,-0.23397073)"
3156+ cx="149.48978"
3157+ cy="49.24028"
3158+ fx="149.48978"
3159+ fy="49.24028"
3160+ r="34.5" />
3161+ <radialGradient
3162+ inkscape:collect="always"
3163+ xlink:href="#linearGradient36566"
3164+ id="radialGradient4509"
3165+ gradientUnits="userSpaceOnUse"
3166+ gradientTransform="matrix(3.5960718,-1.7955579,1.4342795,3.5765632,-485.76309,114.25751)"
3167+ cx="151.68309"
3168+ cy="60.712517"
3169+ fx="151.68309"
3170+ fy="60.712517"
3171+ r="43.284622" />
3172+ <radialGradient
3173+ inkscape:collect="always"
3174+ xlink:href="#linearGradient14670-0"
3175+ id="radialGradient4516"
3176+ gradientUnits="userSpaceOnUse"
3177+ gradientTransform="matrix(0.1113328,0,0,0.17423427,-3.3897623,-14.009352)"
3178+ cx="125.57332"
3179+ cy="122.20717"
3180+ fx="125.57332"
3181+ fy="122.20717"
3182+ r="31.25" />
3183+ </defs>
3184+ <sodipodi:namedview
3185+ id="base"
3186+ pagecolor="#ffffff"
3187+ bordercolor="#666666"
3188+ borderopacity="1.0"
3189+ inkscape:pageopacity="0.0"
3190+ inkscape:pageshadow="2"
3191+ inkscape:zoom="1"
3192+ inkscape:cx="17.448447"
3193+ inkscape:cy="9.549479"
3194+ inkscape:current-layer="layer1"
3195+ showgrid="false"
3196+ inkscape:grid-bbox="true"
3197+ inkscape:document-units="px"
3198+ inkscape:window-width="1364"
3199+ inkscape:window-height="700"
3200+ inkscape:window-x="0"
3201+ inkscape:window-y="28"
3202+ inkscape:window-maximized="1"
3203+ showborder="false">
3204+ <inkscape:grid
3205+ type="xygrid"
3206+ id="grid4458"
3207+ empspacing="5"
3208+ visible="true"
3209+ enabled="true"
3210+ snapvisiblegridlinesonly="true" />
3211+ <inkscape:grid
3212+ type="xygrid"
3213+ id="grid5312"
3214+ empspacing="5"
3215+ visible="true"
3216+ enabled="true"
3217+ snapvisiblegridlinesonly="true"
3218+ spacingy="0.5px"
3219+ spacingx="0.5px"
3220+ dotted="true" />
3221+ </sodipodi:namedview>
3222+ <metadata
3223+ id="metadata4220">
3224+ <rdf:RDF>
3225+ <cc:Work
3226+ rdf:about="">
3227+ <dc:format>image/svg+xml</dc:format>
3228+ <dc:type
3229+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
3230+ <dc:title></dc:title>
3231+ </cc:Work>
3232+ </rdf:RDF>
3233+ </metadata>
3234+ <g
3235+ id="layer1"
3236+ inkscape:label="Layer 1"
3237+ inkscape:groupmode="layer">
3238+ <path
3239+ sodipodi:nodetypes="ccccccccccc"
3240+ inkscape:connector-curvature="0"
3241+ id="path60799"
3242+ d="M 2.6784843,1.6904231 2.5990879,7.3149065 0.90682506,13.197299 c 0.23677974,1.463057 0.10600184,1.956622 1.49304804,2.116338 l 4.8149959,-0.0681 0.052888,-1.590934 5.042538,1.724029 2.956655,-0.02136 -0.05262,-3.220914 c 0,0 -0.161929,-8.692036 -0.146434,-10.4391451 z"
3243+ style="color:#000000;fill:#c7c7c7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.49300000000000010;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;" />
3244+ <path
3245+ style="color:#000000;fill:url(#radialGradient4490);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;"
3246+ d="M 1.0898291,13.068507 C 1,14.5 1.9472106,15.098665 1.9472106,15.098665 L 7.5,15.5 6.5,13 8.5,10.5 3,10 z"
3247+ id="path60811"
3248+ inkscape:connector-curvature="0"
3249+ sodipodi:nodetypes="ccccccc" />
3250+ <path
3251+ sodipodi:nodetypes="ccccccc"
3252+ style="color:#000000;fill:url(#linearGradient4487);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;"
3253+ d="M 8.9919354,1.9293118 3.02748,1.883316 3,7 0.83989467,13.218467 7.2257479,12.794449 14.750284,2.1580405 z"
3254+ id="path60813"
3255+ inkscape:connector-curvature="0" />
3256+ <path
3257+ inkscape:connector-curvature="0"
3258+ id="path60815"
3259+ d="M 9.9099312,4.231271 13.358977,5.8808145 13.908823,9.4298334 14.308711,14.82834 8.011809,11.926129 C 7.8368592,11.838653 7.7605241,11.879154 7.7605241,11.879154 L 9.4100677,7.9302457 z"
3260+ style="color:#000000;fill:url(#linearGradient4484);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3261+ sodipodi:nodetypes="cccccccc" />
3262+ <path
3263+ style="opacity:0.40329218999999999;color:#000000;fill:url(#radialGradient4479);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;"
3264+ d="M 3.7898193,7.3642785 8.4377959,5.7705255 7.2381279,8.5197649 2.3623942,10.199414 z"
3265+ id="path60825"
3266+ inkscape:connector-curvature="0"
3267+ sodipodi:nodetypes="ccccc" />
3268+ <g
3269+ id="g60829"
3270+ style="display:inline;enable-background:new;"
3271+ transform="matrix(0.09719553,0,0,0.09719553,-51.08588,-17.20868)">
3272+ <path
3273+ sodipodi:nodetypes="ccccccccccc"
3274+ style="color:#000000;fill:url(#linearGradient60901);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3275+ d="m 612.9375,238.38368 -16.84898,8.1404 0.85052,-6.76255 2.13898,-34.41117 -14.83686,-1.62746 0.55229,40.71824 -2.79113,7.67308 -24.40607,12.92821 -12.86502,30.42443 63.20627,-42.73004 z"
3276+ id="path60833"
3277+ inkscape:connector-curvature="0" />
3278+ <path
3279+ style="color:#000000;fill:url(#linearGradient60903);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3280+ d="m 660.4375,262.04243 0.76517,18.28279 c -7.89969,-5.94207 -15.72727,-12.15628 -24.09494,-15.7584 l -2.97112,20.59528 -11.15249,-4.86108 3.41276,-21.30895 c -6.14682,-3.03548 -11.4057,-4.51144 -17.95938,-6.25525 l 5.9754,-14.59725 c 17.25655,5.18877 30.3536,13.661 46.0246,23.90286 z"
3281+ id="path60835"
3282+ inkscape:connector-curvature="0"
3283+ sodipodi:nodetypes="ccccccccc" />
3284+ <path
3285+ style="color:#000000;fill:url(#linearGradient60905);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3286+ d="m 635.02589,248.76455 1.41161,-11.02773 1,-30.5 -16.75,-8.5 -4.75,34.5 -2,6 c 7.12881,2.34073 13.73494,5.14295 21.08839,9.52773 z"
3287+ id="path60837"
3288+ inkscape:connector-curvature="0"
3289+ sodipodi:nodetypes="ccccccc" />
3290+ <path
3291+ inkscape:connector-curvature="0"
3292+ id="path60839"
3293+ d="m 596.4375,247.23682 4.75,-8.75 2,-31.75 16.52145,-3.10726 -3.77145,29.60726 -2,6 z"
3294+ style="color:#000000;fill:url(#linearGradient60907);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3295+ sodipodi:nodetypes="ccccccc" />
3296+ <path
3297+ style="color:#000000;fill:url(#linearGradient60911);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3298+ d="m 660.05385,263.37792 c -7.39932,-4.02395 -13.48444,-10.84143 -21.3016,-13.61182 l 0,-10.42982 20.68288,9.63433 z"
3299+ id="path60843"
3300+ inkscape:connector-curvature="0"
3301+ sodipodi:nodetypes="ccccc" />
3302+ <path
3303+ style="color:#000000;fill:#686965;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3304+ d="m 658.55124,233.17511 2.12132,13.08148 -22.62741,-10.25305 0.35355,-12.37437 z"
3305+ id="path60845"
3306+ inkscape:connector-curvature="0" />
3307+ <path
3308+ style="color:#000000;fill:url(#linearGradient60913);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3309+ d="m 651.48018,278.42995 0.7071,12.02081 11.31372,5.83364 -1.85616,-11.93242 z"
3310+ id="path60847"
3311+ inkscape:connector-curvature="0"
3312+ sodipodi:nodetypes="ccccc" />
3313+ <path
3314+ style="opacity:0.30452677;color:#000000;fill:url(#linearGradient60919);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3315+ d="m 603.4375,206.73682 17,-3.59654 19,4.09654 -4.25,32.75 -19.25,-8.5 -15,7 z"
3316+ id="path60853"
3317+ inkscape:connector-curvature="0"
3318+ sodipodi:nodetypes="ccccccc" />
3319+ </g>
3320+ <path
3321+ inkscape:connector-curvature="0"
3322+ id="path60859"
3323+ d="M 7,14.5 C 5.0964437,14.373323 2.9802468,15.200332 1.4524853,13.944797"
3324+ style="opacity:0.31275719000000002;color:#000000;fill:none;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-linecap:square;"
3325+ sodipodi:nodetypes="cc" />
3326+ <path
3327+ style="color:#000000;fill:none;stroke:url(#linearGradient4497);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3328+ d="m 2.5,1.5 0,5.5 -2,6 c 0,2 0.6129538,2.340284 2,2.5 l 5,0 L 7.267757,13.654603 12.5,15.5 l 3,0 L 15,12 c 0,0 0.484505,-8.7528909 0.5,-10.5 z"
3329+ id="path5310"
3330+ inkscape:connector-curvature="0"
3331+ sodipodi:nodetypes="ccccccccccc" />
3332+ <path
3333+ sodipodi:type="arc"
3334+ style="opacity:0.34979428000000001;color:#000000;fill:url(#radialGradient4499);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;"
3335+ id="path60863"
3336+ sodipodi:cx="149.375"
3337+ sodipodi:cy="194.625"
3338+ sodipodi:rx="13.625"
3339+ sodipodi:ry="7.875"
3340+ d="m 163,194.625 a 13.625,7.875 0 1 1 -27.25,0 13.625,7.875 0 1 1 27.25,0 z"
3341+ transform="matrix(0.07540457,0,0,0.07412479,-0.25579866,-3.2535059)" />
3342+ <rect
3343+ style="opacity:0.4;fill:#ffffff;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
3344+ id="rect5314"
3345+ width="12"
3346+ height="1"
3347+ x="3"
3348+ y="2" />
3349+ <path
3350+ style="color:#000000;fill:url(#radialGradient4516);fill-opacity:1;fill-rule:nonzero;stroke:#c90505;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-opacity:1"
3351+ d="m 14.47915,4.0242092 c 0,2.7650457 -2.734173,7.5110528 -3.479148,7.4544378 -0.744978,-0.05662 -3.4791507,-4.6327757 -3.4791507,-7.4544378 0,-1.896934 1.5576701,-3.43470254 3.4791507,-3.43470254 1.921482,0 3.479148,1.53776854 3.479148,3.43470254 z"
3352+ id="path60865"
3353+ inkscape:connector-curvature="0"
3354+ sodipodi:nodetypes="szsss" />
3355+ <path
3356+ transform="matrix(0.08,0,0,0.07864223,0.67997314,-3.0961612)"
3357+ d="m 160.5,96.75 a 31.25,31.25 0 1 1 -62.5,0 31.25,31.25 0 1 1 62.5,0 z"
3358+ sodipodi:ry="31.25"
3359+ sodipodi:rx="31.25"
3360+ sodipodi:cy="96.75"
3361+ sodipodi:cx="129.25"
3362+ id="path60867"
3363+ style="opacity:0.7;color:#000000;fill:url(#radialGradient4503);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3364+ sodipodi:type="arc" />
3365+ <path
3366+ sodipodi:type="arc"
3367+ style="color:#000000;fill:url(#radialGradient4505);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3368+ id="path60869"
3369+ sodipodi:cx="129.25"
3370+ sodipodi:cy="96.75"
3371+ sodipodi:rx="31.25"
3372+ sodipodi:ry="31.25"
3373+ d="m 160.5,96.75 a 31.25,31.25 0 1 1 -62.5,0 31.25,31.25 0 1 1 62.5,0 z"
3374+ transform="matrix(0.064,0,0,0.064,2.7601141,-2.2271289)" />
3375+ <path
3376+ style="opacity:0.4526749;color:#000000;fill:url(#radialGradient4507);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3377+ d="m 11.008371,1.1094001 c -1.3342069,0 -2.4157957,0.8195307 -2.4157957,1.8304732 0,0.072937 0.00655,0.1448365 0.017506,0.2155448 0.1414665,-0.9088054 1.1608496,-1.6132703 2.3982897,-1.6132703 1.237441,0 2.259013,0.7044649 2.400479,1.6132703 0.01095,-0.070708 0.01532,-0.1426079 0.01532,-0.2155448 0,-1.0109425 -1.081589,-1.8304732 -2.415797,-1.8304732 z"
3378+ id="path60871"
3379+ inkscape:connector-curvature="0" />
3380+ <path
3381+ inkscape:connector-curvature="0"
3382+ id="path60937"
3383+ d="m 6.5,12.5 c -1.98394,0.09219 -5,-1 -6,0.5"
3384+ style="color:#000000;fill:none;stroke:#5d5d5d;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3385+ sodipodi:nodetypes="cc" />
3386+ <path
3387+ transform="translate(-0.0107232,-1.0304587)"
3388+ d="m 12,4 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z"
3389+ sodipodi:ry="1"
3390+ sodipodi:rx="1"
3391+ sodipodi:cy="4"
3392+ sodipodi:cx="11"
3393+ id="path5308"
3394+ style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none"
3395+ sodipodi:type="arc" />
3396+ <path
3397+ sodipodi:type="arc"
3398+ style="fill:#ffffff;fill-opacity:1;stroke:none"
3399+ id="path5306"
3400+ sodipodi:cx="11"
3401+ sodipodi:cy="4"
3402+ sodipodi:rx="1"
3403+ sodipodi:ry="1"
3404+ d="m 12,4 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z"
3405+ transform="translate(0.0205268,2.0329775e-8)" />
3406+ </g>
3407+</svg>
3408
3409=== modified file 'src/CheckerboardLayout.vala'
3410--- src/CheckerboardLayout.vala 2014-08-21 00:59:32 +0000
3411+++ src/CheckerboardLayout.vala 2014-10-18 00:49:47 +0000
3412@@ -357,13 +357,16 @@
3413
3414 public Gdk.Pixbuf? get_image () {
3415 return pixbuf;
3416+ }
3417+
3418+ public Gdk.Pixbuf? get_display_image () {
3419+ return display_pixbuf;
3420 }
3421
3422 public void set_image (Gdk.Pixbuf pixbuf) {
3423 this.pixbuf = pixbuf;
3424 display_pixbuf = pixbuf;
3425 pixbuf_dim = Dimensions.for_pixbuf (pixbuf);
3426-
3427 recalc_size ("set_image");
3428 notify_view_altered ();
3429 }
3430
3431=== modified file 'src/CollectionPage.vala'
3432--- src/CollectionPage.vala 2014-09-29 15:08:44 +0000
3433+++ src/CollectionPage.vala 2014-10-18 00:49:47 +0000
3434@@ -604,6 +604,10 @@
3435 return false;
3436 }
3437
3438+ public override bool is_map_display_enabled () {
3439+ return true;
3440+ }
3441+
3442 private void on_show_sidebar () {
3443 var app = AppWindow.get_instance () as LibraryWindow;
3444 app.set_metadata_sidebar_visible (!app.is_metadata_sidebar_visible ());
3445
3446=== modified file 'src/MediaDataRepresentation.vala'
3447--- src/MediaDataRepresentation.vala 2014-08-08 21:13:09 +0000
3448+++ src/MediaDataRepresentation.vala 2014-10-18 00:49:47 +0000
3449@@ -351,6 +351,7 @@
3450 new Gee.TreeMultiMap < ImportID?, MediaSource > (ImportID.compare_func);
3451 private Gee.TreeSet < ImportID?> sorted_import_ids = new Gee.TreeSet < ImportID?> (ImportID.compare_func);
3452 private Gee.Set<MediaSource> flagged = new Gee.HashSet<MediaSource> ();
3453+ private Gee.Set<MediaSource> gps = new Gee.HashSet<MediaSource> ();
3454
3455 // This signal is fired when MediaSources are added to the collection due to a successful import.
3456 // "items-added" and "contents-altered" will follow.
3457@@ -379,6 +380,9 @@
3458 }
3459
3460 public virtual signal void flagged_contents_altered () {
3461+ }
3462+
3463+ public virtual signal void gps_contents_altered () {
3464 }
3465
3466 public MediaSourceCollection (string name, GetSourceDatabaseKey source_key_func) {
3467@@ -421,6 +425,18 @@
3468 return false;
3469 }
3470
3471+ public static bool has_gps (Gee.Collection<MediaSource> media) {
3472+ foreach (MediaSource current_media in media) {
3473+ if (current_media is Photo) {
3474+ Photo photo = current_media as Photo;
3475+ if (photo.get_gps_coords ().has_gps > 0)
3476+ return true;
3477+ }
3478+ }
3479+
3480+ return false;
3481+ }
3482+
3483 public static bool has_video (Gee.Collection<MediaSource> media) {
3484 foreach (MediaSource current_media in media) {
3485 if (current_media is Video) {
3486@@ -462,6 +478,10 @@
3487 flagged_contents_altered ();
3488 }
3489
3490+ protected virtual void notify_gps_contents_altered () {
3491+ gps_contents_altered ();
3492+ }
3493+
3494 protected virtual void notify_media_import_starting (Gee.Collection<MediaSource> media) {
3495 media_import_starting (media);
3496 }
3497@@ -474,6 +494,7 @@
3498 Gee.ArrayList<MediaSource> to_trashcan = null;
3499 Gee.ArrayList<MediaSource> to_offline = null;
3500 bool flagged_altered = false;
3501+ bool gps_altered = false;
3502 foreach (DataObject object in items.keys) {
3503 Alteration alteration = items.get (object);
3504 MediaSource source = (MediaSource) object;
3505@@ -505,6 +526,14 @@
3506 else
3507 flagged_altered = flagged.remove (source) || flagged_altered;
3508 }
3509+
3510+ Photo? photo = source as Photo;
3511+ if (photo != null) {
3512+ if (photo.get_gps_coords ().has_gps > 0)
3513+ gps_altered = gps.add (source) || gps_altered;
3514+ else
3515+ gps_altered = gps.remove (source) || gps_altered;
3516+ }
3517 }
3518
3519 if (to_trashcan != null)
3520@@ -514,7 +543,10 @@
3521 get_offline_bin ().unlink_and_hold (to_offline);
3522
3523 if (flagged_altered)
3524- notify_flagged_contents_altered ();
3525+ notify_flagged_contents_altered ();
3526+
3527+ if (gps_altered)
3528+ notify_gps_contents_altered ();
3529
3530 base.items_altered (items);
3531 }
3532@@ -523,6 +555,8 @@
3533 Gee.Iterable<DataObject>? removed) {
3534 bool import_roll_changed = false;
3535 bool flagged_altered = false;
3536+ bool gps_altered = false;
3537+
3538 if (added != null) {
3539 foreach (DataObject object in added) {
3540 MediaSource media = (MediaSource) object;
3541@@ -545,6 +579,14 @@
3542 else
3543 flagged_altered = flagged.remove (media) || flagged_altered;
3544 }
3545+
3546+ Photo? photo = media as Photo;
3547+ if (photo != null) {
3548+ if (photo.get_gps_coords ().has_gps > 0)
3549+ gps_altered = gps.add (media) || gps_altered;
3550+ else
3551+ gps_altered = gps.remove (media) || gps_altered;
3552+ }
3553 }
3554 }
3555
3556@@ -567,6 +609,7 @@
3557 }
3558
3559 flagged_altered = flagged.remove (media) || flagged_altered;
3560+ gps_altered = gps.remove (media) || gps_altered;
3561 }
3562 }
3563
3564@@ -576,6 +619,9 @@
3565 if (flagged_altered)
3566 notify_flagged_contents_altered ();
3567
3568+ if (gps_altered)
3569+ notify_gps_contents_altered ();
3570+
3571 base.notify_contents_altered (added, removed);
3572 }
3573
3574@@ -611,6 +657,10 @@
3575
3576 public Gee.Collection<MediaSource> get_flagged () {
3577 return flagged.read_only_view;
3578+ }
3579+
3580+ public Gee.Collection<MediaSource> get_gps () {
3581+ return gps.read_only_view;
3582 }
3583
3584 // The returned set of ImportID's is sorted from oldest to newest.
3585
3586=== modified file 'src/MediaPage.vala'
3587--- src/MediaPage.vala 2014-08-28 14:41:02 +0000
3588+++ src/MediaPage.vala 2014-10-18 00:49:47 +0000
3589@@ -96,28 +96,17 @@
3590 }
3591
3592 public abstract class MediaPage : CheckerboardPage {
3593- public const int SORT_ORDER_ASCENDING = 0;
3594- public const int SORT_ORDER_DESCENDING = 1;
3595-
3596- // steppings should divide evenly into (Thumbnail.MAX_SCALE - Thumbnail.MIN_SCALE)
3597- public const int MANUAL_STEPPING = 16;
3598- public const int SLIDER_STEPPING = 4;
3599-
3600- public enum SortBy {
3601- MIN = 1,
3602- TITLE = 1,
3603- EXPOSURE_DATE = 2,
3604- RATING = 3,
3605- MAX = 3
3606- }
3607-
3608- protected class ZoomSliderAssembly : Gtk.ToolItem {
3609- private Gtk.Scale slider;
3610+ public class ZoomSliderAssembly : Gtk.ToolItem {
3611+ public Gtk.Scale slider;
3612 private Gtk.Adjustment adjustment;
3613-
3614 public signal void zoom_changed ();
3615-
3616+ public int max_scale;
3617+ public int min_scale;
3618+ public int stepping;
3619 public ZoomSliderAssembly () {
3620+ max_scale = Thumbnail.MAX_SCALE;
3621+ min_scale = Thumbnail.MIN_SCALE;
3622+ stepping = SLIDER_STEPPING;
3623 Gtk.Box zoom_group = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0);
3624
3625 Gtk.Image zoom_out = new Gtk.Image.from_icon_name (Resources.ICON_ZOOM_OUT, Gtk.IconSize.MENU);
3626@@ -132,8 +121,8 @@
3627 // virgin ZoomSliderAssemblies are created such that they have whatever value is
3628 // persisted in the configuration system for the photo thumbnail scale
3629 int persisted_scale = Config.Facade.get_instance ().get_photo_thumbnail_scale ();
3630- adjustment = new Gtk.Adjustment (ZoomSliderAssembly.scale_to_slider (persisted_scale), 0,
3631- ZoomSliderAssembly.scale_to_slider (Thumbnail.MAX_SCALE), 1, 10, 0);
3632+ adjustment = new Gtk.Adjustment (scale_to_slider (persisted_scale), 0,
3633+ scale_to_slider (get_max_scale ()), 1, 10, 0);
3634
3635 slider = new Gtk.Scale (Gtk.Orientation.HORIZONTAL, adjustment);
3636 slider.value_changed.connect (on_slider_changed);
3637@@ -155,18 +144,37 @@
3638 add (zoom_group);
3639 }
3640
3641- public static double scale_to_slider (int value) {
3642- assert (value >= Thumbnail.MIN_SCALE);
3643- assert (value <= Thumbnail.MAX_SCALE);
3644-
3645- return (double) ((value - Thumbnail.MIN_SCALE) / SLIDER_STEPPING);
3646- }
3647-
3648- public static int slider_to_scale (double value) {
3649- int res = ((int) (value * SLIDER_STEPPING)) + Thumbnail.MIN_SCALE;
3650-
3651- assert (res >= Thumbnail.MIN_SCALE);
3652- assert (res <= Thumbnail.MAX_SCALE);
3653+ public void set_slider_scale (int min, int max, int start) {
3654+ this.min_scale = min;
3655+ this.max_scale = max;
3656+ slider.adjustment = new Gtk.Adjustment (scale_to_slider (start), 0,
3657+ scale_to_slider (get_max_scale ()), 1, 10, 0);
3658+ }
3659+
3660+ public virtual int get_max_scale () {
3661+ return max_scale;
3662+ }
3663+
3664+ public virtual int get_min_scale () {
3665+ return min_scale;
3666+ }
3667+
3668+ public virtual int get_stepping () {
3669+ return stepping;
3670+ }
3671+
3672+ public double scale_to_slider (int value) {
3673+ assert (value >= get_min_scale ());
3674+ assert (value <= get_max_scale ());
3675+
3676+ return (double) ((value - get_min_scale ()) / get_stepping ());
3677+ }
3678+
3679+ public int slider_to_scale (double value) {
3680+ int res = ((int) (value * get_stepping ())) + get_min_scale ();
3681+
3682+ assert (res >= get_min_scale ());
3683+ assert (res <= get_max_scale ());
3684
3685 return res;
3686 }
3687@@ -186,11 +194,11 @@
3688 }
3689
3690 public void snap_to_min () {
3691- slider.set_value (scale_to_slider (Thumbnail.MIN_SCALE));
3692+ slider.set_value (scale_to_slider (get_min_scale ()));
3693 }
3694
3695 public void snap_to_max () {
3696- slider.set_value (scale_to_slider (Thumbnail.MAX_SCALE));
3697+ slider.set_value (scale_to_slider (get_max_scale ()));
3698 }
3699
3700 public void increase_step () {
3701@@ -223,6 +231,22 @@
3702 }
3703 }
3704
3705+ public const int SORT_ORDER_ASCENDING = 0;
3706+ public const int SORT_ORDER_DESCENDING = 1;
3707+
3708+ // steppings should divide evenly into (Thumbnail.MAX_SCALE - Thumbnail.MIN_SCALE)
3709+ public const int MANUAL_STEPPING = 16;
3710+ public const int SLIDER_STEPPING = 4;
3711+
3712+
3713+ public enum SortBy {
3714+ MIN = 1,
3715+ TITLE = 1,
3716+ EXPOSURE_DATE = 2,
3717+ RATING = 3,
3718+ MAX = 3
3719+ }
3720+
3721 private ZoomSliderAssembly? connected_slider = null;
3722 private DragAndDropHandler dnd_handler = null;
3723 private MediaViewTracker tracker;
3724@@ -236,14 +260,14 @@
3725
3726 get_view ().freeze_notifications ();
3727 get_view ().set_property (CheckerboardItem.PROP_SHOW_TITLES,
3728- Config.Facade.get_instance ().get_display_photo_titles ());
3729+ Config.Facade.get_instance ().get_display_photo_titles ());
3730 get_view ().set_property (CheckerboardItem.PROP_SHOW_COMMENTS,
3731- Config.Facade.get_instance ().get_display_photo_comments ());
3732+ Config.Facade.get_instance ().get_display_photo_comments ());
3733 get_view ().set_property (Thumbnail.PROP_SHOW_TAGS,
3734- Config.Facade.get_instance ().get_display_photo_tags ());
3735+ Config.Facade.get_instance ().get_display_photo_tags ());
3736 get_view ().set_property (Thumbnail.PROP_SIZE, get_thumb_size ());
3737 get_view ().set_property (Thumbnail.PROP_SHOW_RATINGS,
3738- Config.Facade.get_instance ().get_display_photo_ratings ());
3739+ Config.Facade.get_instance ().get_display_photo_ratings ());
3740 get_view ().thaw_notifications ();
3741
3742 // enable drag-and-drop export of media
3743@@ -490,7 +514,7 @@
3744 }
3745
3746 protected override void on_rating_widget_activate () {
3747- on_set_rating (Resources.int_to_rating(rating_menu_item.rating_value));
3748+ on_set_rating (Resources.int_to_rating (rating_menu_item.rating_value));
3749 }
3750
3751 private void update_development_menu_item_sensitivity () {
3752@@ -686,7 +710,7 @@
3753 break;
3754
3755 case "5":
3756- on_set_rating (Rating.FIVE);
3757+ on_set_rating (Rating.FIVE);
3758 break;
3759
3760 case "0":
3761@@ -900,7 +924,7 @@
3762
3763 if (get_view ().get_selected_count () > 0) {
3764 get_command_manager ().execute (new TrashUntrashPhotosCommand (
3765- (Gee.Collection<MediaSource>) get_view ().get_selected_sources (), true));
3766+ (Gee.Collection<MediaSource>) get_view ().get_selected_sources (), true));
3767 }
3768
3769 if ((restore_point != null) && (get_view ().contains (restore_point))) {
3770@@ -1171,7 +1195,7 @@
3771 }
3772
3773 public static Gtk.ToolButton create_sidebar_button () {
3774- var show_sidebar_button = new Gtk.ToolButton (null,null);
3775+ var show_sidebar_button = new Gtk.ToolButton (null, null);
3776 show_sidebar_button.set_icon_name (Resources.SHOW_PANE);
3777 show_sidebar_button.set_label (Resources.TOGGLE_METAPANE_LABEL);
3778 show_sidebar_button.set_tooltip_text (Resources.TOGGLE_METAPANE_TOOLTIP);
3779
3780=== modified file 'src/Page.vala'
3781--- src/Page.vala 2014-09-29 15:08:44 +0000
3782+++ src/Page.vala 2014-10-18 00:49:47 +0000
3783@@ -166,6 +166,10 @@
3784 protected virtual void on_rating_widget_activate () {
3785 }
3786
3787+ public virtual bool is_map_display_enabled () {
3788+ return false;
3789+ }
3790+
3791 // This is called by the page
3792 // controller when it has removed this page ... pages should override
3793 // this (or the signal) to clean up
3794@@ -1323,6 +1327,10 @@
3795 Resources.style_widget (this, Resources.PAGE_STYLESHEET);
3796 }
3797
3798+ protected CheckerboardPage.no_layout (string page_name) {
3799+ base (page_name);
3800+ }
3801+
3802 public void init_item_context_menu (string path) {
3803 item_context_menu_path = path;
3804 }
3805@@ -1379,7 +1387,7 @@
3806 KeyboardModifiers modifiers) {
3807 }
3808
3809- public CheckerboardLayout get_checkerboard_layout () {
3810+ public CheckerboardLayout? get_checkerboard_layout () {
3811 return layout;
3812 }
3813
3814@@ -1391,7 +1399,8 @@
3815 }
3816
3817 public override void switching_from () {
3818- layout.set_in_view (false);
3819+ if (layout != null)
3820+ layout.set_in_view (false);
3821 get_search_view_filter ().refresh.disconnect (on_view_filter_refresh);
3822
3823 // unselect everything so selection won't persist after page loses focus
3824@@ -1400,7 +1409,8 @@
3825 }
3826
3827 public override void switched_to () {
3828- layout.set_in_view (true);
3829+ if (layout != null)
3830+ layout.set_in_view (true);
3831 get_search_view_filter ().refresh.connect (on_view_filter_refresh);
3832 on_view_filter_refresh ();
3833
3834@@ -1446,7 +1456,7 @@
3835 update_view_filter_message ();
3836 }
3837
3838- private void update_view_filter_message () {
3839+ protected virtual void update_view_filter_message () {
3840 var window = AppWindow.get_instance () as LibraryWindow;
3841 warn_if_fail (window != null);
3842 if (window != null)
3843@@ -1462,15 +1472,19 @@
3844 }
3845
3846 public void set_page_message (string message) {
3847- layout.set_message (message);
3848- if (is_in_view ())
3849- layout.queue_draw ();
3850+ if (layout != null) {
3851+ layout.set_message (message);
3852+ if (is_in_view ())
3853+ layout.queue_draw ();
3854+ }
3855 }
3856
3857 public void unset_page_message () {
3858- layout.unset_message ();
3859- if (is_in_view ())
3860- layout.queue_draw ();
3861+ if (layout != null) {
3862+ layout.unset_message ();
3863+ if (is_in_view ())
3864+ layout.queue_draw ();
3865+ }
3866 }
3867
3868 public override void set_page_name (string name) {
3869
3870=== modified file 'src/Photo.vala'
3871--- src/Photo.vala 2014-08-25 01:41:46 +0000
3872+++ src/Photo.vala 2014-10-18 00:49:47 +0000
3873@@ -158,7 +158,7 @@
3874 // particular photo without modifying the backing image file. The interface allows for
3875 // transformations to be stored persistently elsewhere or in memory until they're committed en
3876 // masse to an image file.
3877-public abstract class Photo : PhotoSource, Dateable {
3878+public abstract class Photo : PhotoSource, Dateable, Positionable {
3879 // Need to use "thumb" rather than "photo" for historical reasons -- this name is used
3880 // directly to load thumbnails from disk by already-existing filenames
3881 public const string TYPENAME = "thumb";
3882@@ -241,7 +241,7 @@
3883
3884 public PhotoTransformationStateImpl (Photo photo, Orientation orientation,
3885 Gee.HashMap<string, KeyValueMap>? transformations, PixelTransformer? transformer,
3886- PixelTransformationBundle? adjustments,Gee.HashMap<string, KeyValueMap>? original_transformations, bool enhanced) {
3887+ PixelTransformationBundle? adjustments, Gee.HashMap<string, KeyValueMap>? original_transformations, bool enhanced) {
3888 this.photo = photo;
3889 this.orientation = orientation;
3890 this.transformations = copy_transformations (transformations);
3891@@ -266,7 +266,7 @@
3892
3893 public Gee.HashMap<string, KeyValueMap>? get_transformations () {
3894 return copy_transformations (transformations);
3895- }
3896+ }
3897
3898 public Gee.HashMap<string, KeyValueMap>? get_original_transformations () {
3899 return copy_transformations (original_transformations);
3900@@ -1171,6 +1171,7 @@
3901 Orientation orientation = Orientation.TOP_LEFT;
3902 time_t exposure_time = 0;
3903 string title = "";
3904+ GpsCoords gps_coords = GpsCoords();
3905 string comment = "";
3906 Rating rating = Rating.UNRATED;
3907
3908@@ -1186,6 +1187,7 @@
3909
3910 orientation = detected.metadata.get_orientation ();
3911 title = detected.metadata.get_title ();
3912+ gps_coords = detected.metadata.get_gps_coords();
3913 comment = detected.metadata.get_comment ();
3914 params.keywords = detected.metadata.get_keywords ();
3915 rating = detected.metadata.get_rating ();
3916@@ -1221,6 +1223,7 @@
3917 params.row.flags = 0;
3918 params.row.master.file_format = detected.file_format;
3919 params.row.title = title;
3920+ params.row.gps_coords = gps_coords;
3921 params.row.comment = comment;
3922 params.row.rating = rating;
3923
3924@@ -1261,6 +1264,7 @@
3925 params.row.flags = 0;
3926 params.row.master.file_format = PhotoFileFormat.JFIF;
3927 params.row.title = null;
3928+ params.row.gps_coords = GpsCoords();
3929 params.row.comment = null;
3930 params.row.rating = Rating.UNRATED;
3931
3932@@ -1414,6 +1418,8 @@
3933 updated_row.master.original_orientation = backing.original_orientation;
3934 }
3935
3936+ GpsCoords gps_coords = GpsCoords ();
3937+
3938 if (detected.metadata != null) {
3939 MetadataDateTime? date_time = detected.metadata.get_exposure_date_time ();
3940 if (date_time != null && updated_row.exposure_time != date_time.get_timestamp ())
3941@@ -1422,6 +1428,10 @@
3942 if (updated_row.title != detected.metadata.get_title ())
3943 list += "metadata:name";
3944
3945+ gps_coords = detected.metadata.get_gps_coords ();
3946+ if (updated_row.gps_coords != gps_coords)
3947+ list += "metadata:gps";
3948+
3949 if (updated_row.comment != detected.metadata.get_comment ())
3950 list += "metadata:comment";
3951
3952@@ -1442,6 +1452,7 @@
3953 if (date_time != null)
3954 updated_row.exposure_time = date_time.get_timestamp ();
3955
3956+ updated_row.gps_coords = gps_coords;
3957 updated_row.title = detected.metadata.get_title ();
3958 updated_row.comment = detected.metadata.get_comment ();
3959 updated_row.rating = detected.metadata.get_rating ();
3960@@ -1551,6 +1562,7 @@
3961 }
3962
3963 if (reimport_state.metadata != null) {
3964+ set_gps_coords (reimport_state.metadata.get_gps_coords());
3965 set_title (reimport_state.metadata.get_title ());
3966 set_comment (reimport_state.metadata.get_comment ());
3967 set_rating (reimport_state.metadata.get_rating ());
3968@@ -1961,6 +1973,12 @@
3969 return row.event_id;
3970 }
3971
3972+ public string get_location () {
3973+ lock (row) {
3974+ return row.location;
3975+ }
3976+ }
3977+
3978 // This is NOT thread-safe.
3979 public inline int64 get_raw_event_id () {
3980 return row.event_id.id;
3981@@ -2132,7 +2150,7 @@
3982
3983 if (committed)
3984 notify_altered (new Alteration ("metadata", "master-dirty"));
3985- }
3986+ }
3987
3988 public bool is_enhanced () {
3989 lock (row) {
3990@@ -2216,6 +2234,17 @@
3991 }
3992 }
3993
3994+ public bool set_location (string? location) {
3995+ lock (row) {
3996+ bool committed = PhotoTable.get_instance ().set_location (row.photo_id, location);
3997+
3998+ if (committed)
3999+ row.location = location;
4000+
4001+ return committed;
4002+ }
4003+ }
4004+
4005 public override string to_string () {
4006 return "[%s] %s%s".printf (get_photo_id ().id.to_string (), get_master_reader ().get_filepath (),
4007 !is_master_baseline () ? " (" + get_actual_file ().get_path () + ")" : "");
4008@@ -2552,7 +2581,7 @@
4009
4010 return adjustments.copy ();
4011 }
4012- }
4013+ }
4014
4015 // This method *must* be called with row locked.
4016 private PixelTransformationBundle locked_original_color_adjustments () {
4017@@ -2563,14 +2592,14 @@
4018 map = row.original_transforms.get ("adjustments");
4019 if (map != null)
4020 map = map.copy ();
4021- } else
4022+ } else
4023 map = new KeyValueMap ("adjustments");
4024
4025 if (map == null)
4026 original_adjustments.set_to_identity ();
4027 else
4028 original_adjustments.load (map);
4029-
4030+
4031 return original_adjustments;
4032 }
4033
4034@@ -2580,7 +2609,7 @@
4035 lock (row) {
4036 KeyValueMap map = get_transformation ("adjustments");
4037 if (map == null)
4038- map = new KeyValueMap("adjustments");
4039+ map = new KeyValueMap ("adjustments");
4040 return map;
4041 }
4042 }
4043@@ -2602,7 +2631,7 @@
4044 return get_color_adjustments ().get_transformation (type);
4045 }
4046
4047- public void set_color_adjustments (PixelTransformationBundle new_adjustments) {
4048+ public void set_color_adjustments (PixelTransformationBundle new_adjustments) {
4049 /* if every transformation in 'new_adjustments' is the identity, then just remove all
4050 adjustments from the database */
4051 set_enhanced (false);
4052@@ -2749,6 +2778,28 @@
4053 }
4054 }
4055
4056+ public GpsCoords get_gps_coords () {
4057+ lock (row) {
4058+ return row.gps_coords;
4059+ }
4060+ }
4061+
4062+ public void set_gps_coords (GpsCoords gps_coords) {
4063+ DatabaseError dberr = null;
4064+ lock (row) {
4065+ try {
4066+ PhotoTable.get_instance ().set_gps_coords (row.photo_id, gps_coords);
4067+ row.gps_coords = gps_coords;
4068+ } catch (DatabaseError err) {
4069+ dberr = err;
4070+ }
4071+ }
4072+ if (dberr == null)
4073+ notify_altered (new Alteration ("metadata", "gps"));
4074+ else
4075+ warning ("Unable to write gps coordinates for %s: %s", to_string (), dberr.message);
4076+ }
4077+
4078 public bool has_alterations () {
4079 MetadataDateTime? date_time = null;
4080 string? title = null;
4081@@ -2930,7 +2981,7 @@
4082
4083 return PhotoTable.get_instance ().set_original_transforms (row.photo_id, trans);
4084 }
4085- }
4086+ }
4087
4088 private bool clear_original_transforms () {
4089 lock (row) {
4090@@ -3575,7 +3626,7 @@
4091 debug ("Exporting full-sized copy of %s to %s", to_string (), writer.get_filepath ());
4092
4093 export_reader.get_file ().copy (dest_file,
4094- FileCopyFlags.OVERWRITE | FileCopyFlags.TARGET_DEFAULT_PERMS, null, null);
4095+ FileCopyFlags.OVERWRITE | FileCopyFlags.TARGET_DEFAULT_PERMS, null, null);
4096
4097 // If asking for an full-sized file and there are no alterations (transformations or EXIF)
4098 // *and* this is a copy of the original backing *and* there's no user metadata or title *and* metadata should be exported, then done
4099@@ -4422,7 +4473,7 @@
4100 apply_timer.stop ();
4101 debug ("Auto-Enhance apply time: %f sec", apply_timer.elapsed ());
4102 #endif
4103- set_enhanced(true);
4104+ set_enhanced (true);
4105 return true;
4106 }
4107
4108@@ -4437,8 +4488,7 @@
4109 transformer = null;
4110 if (result)
4111 notify_altered (new Alteration ("image", "color-adjustments"));
4112- }
4113- else
4114+ } else
4115 set_color_adjustments (locked_original_color_adjustments ());
4116 set_enhanced (false);
4117 return true;
4118@@ -4971,6 +5021,11 @@
4119 this.import_keywords = null;
4120
4121 thumbnail_scheduler = new OneShotScheduler ("LibraryPhoto", generate_thumbnails);
4122+ // import gps coords of photos imported with prior versions of shotwell
4123+ if (row.gps_coords.has_gps == -1) {
4124+ var gps_import_scheduler = new OneShotScheduler ("LibraryPhoto", import_gps_metadata);
4125+ gps_import_scheduler.at_priority_idle (Priority.LOW);
4126+ }
4127
4128 // if marked in a state where they're held in an orphanage, rehydrate their backlinks
4129 if ((row.flags & (FLAG_TRASH | FLAG_OFFLINE)) != 0)
4130@@ -5079,6 +5134,11 @@
4131 global.notify_baseline_reimported (this, metadata);
4132 }
4133
4134+ private void import_gps_metadata () {
4135+ GpsCoords gps_coords = get_metadata ().get_gps_coords ();
4136+ set_gps_coords (gps_coords);
4137+ }
4138+
4139 private void generate_thumbnails () {
4140 try {
4141 ThumbnailCache.import_from_source (this, true);
4142
4143=== modified file 'src/PhotoPage.vala'
4144--- src/PhotoPage.vala 2014-09-13 03:34:09 +0000
4145+++ src/PhotoPage.vala 2014-10-18 00:49:47 +0000
4146@@ -567,6 +567,10 @@
4147 app.set_metadata_sidebar_visible (!app.is_metadata_sidebar_visible ());
4148 update_sidebar_action (!app.is_metadata_sidebar_visible ());
4149 }
4150+
4151+ public override bool is_map_display_enabled () {
4152+ return true;
4153+ }
4154
4155 private void on_zoom_slider_value_changed () {
4156 ZoomState new_zoom_state = ZoomState.rescale (get_zoom_state (), zoom_slider.get_value ());
4157
4158=== modified file 'src/Resources.vala'
4159--- src/Resources.vala 2014-10-07 03:15:08 +0000
4160+++ src/Resources.vala 2014-10-18 00:49:47 +0000
4161@@ -88,6 +88,13 @@
4162 public const string PUBLISH = "applications-internet";
4163 public const string EDIT_FLAG= "edit-flag";
4164 public const string MERGE = "object-merge";
4165+public const string MAP_PAGE = "places";
4166+
4167+public const string ICON_GPS_MARKER = "gps-marker.svg";
4168+public const string ICON_GPS_MARKER_SELECTED = "gps-marker-selected.svg";
4169+public const string MAP = "applications-geography";
4170+public const string MAP_GEOLOGY = "applications-geology";
4171+public const string MAP_EARTH = "earth_map.svg";
4172
4173 public const string ICON_APP = "multimedia-photo-manager";
4174 public const string ICON_APP16 = "multimedia-photo-manager";
4175@@ -793,7 +800,8 @@
4176
4177 File icons_dir = AppDirs.get_resources_dir ().get_child ("icons");
4178 add_stock_icon (icons_dir.get_child ("pin-toolbar.svg"), PIN_TOOLBAR);
4179-
4180+ add_stock_icon (icons_dir.get_child ("earth_map.svg"), MAP_EARTH);
4181+ add_stock_icon_from_themed_icon (new GLib.ThemedIcon (MAP_PAGE), MAP_PAGE);
4182 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (ADJUST), ADJUST);
4183 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (ICON_SINGLE_PHOTO), ICON_SINGLE_PHOTO);
4184 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (ICON_CAMERAS), ICON_CAMERAS);
4185
4186=== modified file 'src/SearchFilter.vala'
4187--- src/SearchFilter.vala 2014-08-28 12:44:53 +0000
4188+++ src/SearchFilter.vala 2014-10-18 00:49:47 +0000
4189@@ -345,8 +345,16 @@
4190 private Gtk.SearchEntry search_entry;
4191 private Gtk.ComboBoxText rating_button;
4192 private SearchViewFilter? search_filter = null;
4193- private Gtk.Toolbar toolbar;
4194+ public Gtk.Toolbar toolbar;
4195+ private Gtk.Label label_type;
4196+ private Gtk.Label label_flagged;
4197 private Gtk.Label label_rating;
4198+ private Gtk.ToggleToolButton toolbtn_photos;
4199+ private Gtk.ToggleToolButton toolbtn_videos;
4200+ private Gtk.ToggleToolButton toolbtn_raw;
4201+ private Gtk.ToggleToolButton toolbtn_flag;
4202+ private Gtk.SeparatorToolItem sepr_mediatype_flagged;
4203+ private Gtk.SeparatorToolItem sepr_flagged_rating;
4204
4205 public SearchFilterToolbar () {
4206 toolbar = new Gtk.Toolbar ();
4207@@ -361,6 +369,60 @@
4208 close_item.activate.connect ( () => close ());
4209 close_menu.append (close_item);
4210
4211+ // Type label and toggles
4212+ label_type = new Gtk.Label (_ ("Type"));
4213+ Gtk.ToolItem label_type_item = new Gtk.ToolItem ();
4214+ label_type_item.add (label_type);
4215+ toolbar.insert (label_type_item, -1);
4216+
4217+ toolbtn_photos = new Gtk.ToggleToolButton ();
4218+ var photos_icon = new Gtk.Image.from_icon_name ("folder-pictures", Gtk.IconSize.MENU);
4219+ photos_icon.pixel_size = 16;
4220+ toolbtn_photos.set_icon_widget (photos_icon);
4221+ toolbtn_photos.tooltip_text = _ ("Photos");
4222+ toolbtn_photos.toggled.connect (on_photos_toggled);
4223+
4224+ toolbtn_videos = new Gtk.ToggleToolButton ();
4225+ var videos_icon = new Gtk.Image.from_icon_name ("folder-videos", Gtk.IconSize.MENU);
4226+ videos_icon.pixel_size = 16;
4227+ toolbtn_videos.set_icon_widget (videos_icon);
4228+ toolbtn_videos.tooltip_text = _ ("Videos");
4229+ toolbtn_videos.toggled.connect (on_videos_toggled);
4230+
4231+ toolbtn_raw = new Gtk.ToggleToolButton ();
4232+ var raw_icon = new Gtk.Image.from_icon_name ("accessories-camera", Gtk.IconSize.MENU);
4233+ raw_icon.pixel_size = 16;
4234+ toolbtn_raw.set_icon_widget (raw_icon);
4235+ toolbtn_raw.tooltip_text = _ ("RAW photos");
4236+ toolbtn_raw.toggled.connect (on_raw_toggled);
4237+
4238+ toolbar.insert (toolbtn_photos, -1);
4239+ toolbar.insert (toolbtn_videos, -1);
4240+ toolbar.insert (toolbtn_raw, -1);
4241+
4242+ // separator
4243+ sepr_mediatype_flagged = new Gtk.SeparatorToolItem ();
4244+ toolbar.insert (sepr_mediatype_flagged, -1);
4245+
4246+ // Flagged label and toggle
4247+ label_flagged = new Gtk.Label (_ ("Flagged"));
4248+ Gtk.ToolItem label_flagged_item = new Gtk.ToolItem ();
4249+ label_flagged_item.add (label_flagged);
4250+ toolbar.insert (label_flagged_item, -1);
4251+
4252+ toolbtn_flag = new Gtk.ToggleToolButton ();
4253+
4254+ var flag_icon = new Gtk.Image.from_icon_name (Resources.ICON_FLAGGED_PAGE, Gtk.IconSize.MENU);
4255+ flag_icon.pixel_size = 16;
4256+ toolbtn_flag.set_icon_widget (flag_icon);
4257+ toolbtn_flag.tooltip_text = _ ("Flagged");
4258+ toolbtn_flag.toggled.connect (on_flagged_toggled);
4259+ toolbar.insert (toolbtn_flag, -1);
4260+
4261+ // separator
4262+ sepr_flagged_rating = new Gtk.SeparatorToolItem ();
4263+ toolbar.insert (sepr_flagged_rating, -1);
4264+
4265 // Rating label and button
4266 label_rating = new Gtk.Label (_ ("Rating"));
4267 Gtk.ToolItem label_rating_item = new Gtk.ToolItem ();
4268@@ -427,6 +489,22 @@
4269 return false;
4270 }
4271
4272+ private void on_flagged_toggled () {
4273+ update ();
4274+ }
4275+
4276+ private void on_videos_toggled () {
4277+ update ();
4278+ }
4279+
4280+ private void on_photos_toggled () {
4281+ update ();
4282+ }
4283+
4284+ private void on_raw_toggled () {
4285+ update ();
4286+ }
4287+
4288 private void on_search_text_changed () {
4289 update ();
4290 }
4291@@ -487,6 +565,10 @@
4292 assert (null != search_filter);
4293
4294 search_filter.set_search_filter (search_entry.text);
4295+ search_filter.flagged = toolbtn_flag.active;
4296+ search_filter.show_media_video = toolbtn_videos.active;
4297+ search_filter.show_media_photos = toolbtn_photos.active;
4298+ search_filter.show_media_raw = toolbtn_raw.active;
4299
4300 search_filter.set_rating_filter (filter);
4301 rating_button.tooltip_text = Resources.get_rating_filter_tooltip (filter);
4302@@ -498,6 +580,21 @@
4303 rating_button.visible = ((criteria & SearchFilterCriteria.RATING) != 0);
4304 label_rating.visible = ((criteria & SearchFilterCriteria.RATING) != 0);
4305
4306+ label_flagged.visible = ((criteria & SearchFilterCriteria.FLAG) != 0);
4307+ toolbtn_flag.visible = ((criteria & SearchFilterCriteria.FLAG) != 0);
4308+
4309+ label_type.visible = ((criteria & SearchFilterCriteria.MEDIA) != 0);
4310+ toolbtn_photos.visible = ((criteria & SearchFilterCriteria.MEDIA) != 0);
4311+ toolbtn_videos.visible = ((criteria & SearchFilterCriteria.MEDIA) != 0);
4312+ toolbtn_raw.visible = ((criteria & SearchFilterCriteria.MEDIA) != 0);
4313+
4314+ // Ticket #3290, part IV - ensure that the separators
4315+ // are shown and/or hidden as needed.
4316+ sepr_mediatype_flagged.visible = (label_type.visible && label_flagged.visible);
4317+
4318+ sepr_flagged_rating.visible = ((label_type.visible && label_rating.visible) ||
4319+ (label_flagged.visible && label_rating.visible));
4320+
4321 // Send update to view collection.
4322 search_filter.refresh ();
4323 }
4324
4325=== modified file 'src/Thumbnail.vala'
4326--- src/Thumbnail.vala 2014-08-23 09:56:14 +0000
4327+++ src/Thumbnail.vala 2014-10-18 00:49:47 +0000
4328@@ -34,17 +34,18 @@
4329
4330 private const int HQ_IMPROVEMENT_MSEC = 100;
4331
4332+ protected int scale;
4333+ protected Cancellable cancellable = null;
4334+ protected Dimensions dim;
4335+ protected Dimensions original_dim;
4336+ // this is cached locally because there are situations where the constant calls to is_exposed ()
4337+ // was showing up in sysprof
4338+ protected bool exposure = false;
4339+ protected Gdk.Pixbuf unscaled_pixbuf = null;
4340+
4341 private MediaSource media;
4342- private int scale;
4343- private Dimensions original_dim;
4344- private Dimensions dim;
4345- private Gdk.Pixbuf unscaled_pixbuf = null;
4346- private Cancellable cancellable = null;
4347 private bool hq_scheduled = false;
4348 private bool hq_reschedule = false;
4349- // this is cached locally because there are situations where the constant calls to is_exposed ()
4350- // was showing up in sysprof
4351- private bool exposure = false;
4352
4353 public Thumbnail (MediaSource media, int scale = DEFAULT_SCALE) {
4354 base (media, media.get_dimensions ().get_scaled (scale, true), media.get_name (),
4355@@ -251,7 +252,7 @@
4356 base.notify_collection_property_set (name, old, val);
4357 }
4358
4359- private void resize (int new_scale) {
4360+ public virtual void resize (int new_scale) {
4361 assert (new_scale >= MIN_SCALE);
4362 assert (new_scale <= MAX_SCALE);
4363
4364@@ -328,7 +329,7 @@
4365 return false;
4366 }
4367
4368- private void cancel_async_fetch () {
4369+ protected void cancel_async_fetch () {
4370 // cancel outstanding I/O
4371 if (cancellable != null)
4372 cancellable.cancel ();
4373
4374=== modified file 'src/camera/ImportPage.vala'
4375--- src/camera/ImportPage.vala 2014-09-27 23:06:48 +0000
4376+++ src/camera/ImportPage.vala 2014-10-18 00:49:47 +0000
4377@@ -169,7 +169,7 @@
4378
4379 return !is_string_empty (title) ? title : get_filename ();
4380 }
4381-
4382+
4383 public override string get_typename () {
4384 return "photoimport";
4385 }
4386
4387=== modified file 'src/core/SourceInterfaces.vala'
4388--- src/core/SourceInterfaces.vala 2014-08-08 21:13:09 +0000
4389+++ src/core/SourceInterfaces.vala 2014-10-18 00:49:47 +0000
4390@@ -42,3 +42,19 @@
4391 }
4392 }
4393
4394+// Positionable DataSources provide a globally locatable point in longitude and latitude degrees
4395+
4396+public struct GpsCoords {
4397+ public int has_gps;
4398+ public double latitude;
4399+ public double longitude;
4400+ public bool equals (ref GpsCoords gps) {
4401+ return (has_gps == 0 && gps.has_gps == 0) || (latitude == gps.latitude && longitude == gps.longitude);
4402+ }
4403+}
4404+
4405+public interface Positionable : DataSource {
4406+ public abstract GpsCoords get_gps_coords ();
4407+ public abstract void set_gps_coords(GpsCoords gps_coords);
4408+}
4409+
4410
4411=== modified file 'src/db/DatabaseTable.vala'
4412--- src/db/DatabaseTable.vala 2014-08-15 07:12:57 +0000
4413+++ src/db/DatabaseTable.vala 2014-10-18 00:49:47 +0000
4414@@ -21,7 +21,7 @@
4415 * tables are created on demand and tables and columns are easily ignored when already present.
4416 * However, the change should be noted in upgrade_database () as a comment.
4417 ***/
4418- public const int SCHEMA_VERSION = 21;
4419+ public const int SCHEMA_VERSION = 22;
4420
4421 protected static Sqlite.Database db;
4422
4423@@ -269,6 +269,18 @@
4424 if (res != Sqlite.DONE)
4425 throw_error ("DatabaseTable.update_int64_by_id_2 %s.%s".printf (table_name, column), res);
4426 }
4427+
4428+ protected void update_double_by_id_2(int64 id, string column, double value) throws DatabaseError {
4429+ Sqlite.Statement stmt;
4430+ prepare_update_by_id(id, column, out stmt);
4431+
4432+ int res = stmt.bind_double(1, value);
4433+ assert(res == Sqlite.OK);
4434+
4435+ res = stmt.step();
4436+ if (res != Sqlite.DONE)
4437+ throw_error("DatabaseTable.update_double_by_id_2 %s.%s".printf(table_name, column), res);
4438+ }
4439
4440 protected void delete_by_id (int64 id) throws DatabaseError {
4441 Sqlite.Statement stmt;
4442
4443=== modified file 'src/db/Db.vala'
4444--- src/db/Db.vala 2014-08-15 07:12:57 +0000
4445+++ src/db/Db.vala 2014-10-18 00:49:47 +0000
4446@@ -372,6 +372,22 @@
4447 }
4448 version = 21;
4449
4450+ //
4451+ // Version 22:
4452+ // * Add has_gps, gps_lat and gps_lon columns to PhotoTable
4453+ if (!DatabaseTable.ensure_column("PhotoTable", "has_gps", "INTEGER DEFAULT -1",
4454+ "upgrade_database: adding gps_lat column to PhotoTable")
4455+ || !DatabaseTable.ensure_column("PhotoTable", "gps_lat", "REAL",
4456+ "upgrade_database: adding gps_lat column to PhotoTable")
4457+ || !DatabaseTable.ensure_column("PhotoTable", "gps_lon", "REAL",
4458+ "upgrade_database: adding gps_lon column to PhotoTable")
4459+ || !DatabaseTable.ensure_column("PhotoTable", "location", "TEXT",
4460+ "upgrade_database: adding location column to PhotoTable")) {
4461+ return VerifyResult.UPGRADE_ERROR;
4462+ }
4463+
4464+ version = 22;
4465+
4466 assert (version == DatabaseTable.SCHEMA_VERSION);
4467 VersionTable.get_instance ().update_version (version, Resources.APP_VERSION);
4468
4469
4470=== added file 'src/db/GeoLocationTable.vala'
4471--- src/db/GeoLocationTable.vala 1970-01-01 00:00:00 +0000
4472+++ src/db/GeoLocationTable.vala 2014-10-18 00:49:47 +0000
4473@@ -0,0 +1,205 @@
4474+/* Copyright 2011-2013 Yorba Foundation
4475+ *
4476+ * This software is licensed under the GNU Lesser General Public License
4477+ * (version 2.1 or later). See the COPYING file in this distribution.
4478+ */
4479+
4480+public struct LocationID {
4481+ public const int64 INVALID = -1;
4482+
4483+ public int64 id;
4484+
4485+ public LocationID (int64 id = INVALID) {
4486+ this.id = id;
4487+ }
4488+
4489+ public bool is_invalid () {
4490+ return (id == INVALID);
4491+ }
4492+
4493+ public bool is_valid () {
4494+ return (id != INVALID);
4495+ }
4496+}
4497+
4498+public class LocationRow {
4499+ public LocationID location_id;
4500+ public string? city;
4501+ public string? territorie;
4502+ public string? country;
4503+ public double latitude;
4504+ public double longitude;
4505+}
4506+
4507+private class InitLocationDataJob : BackgroundJob {
4508+ public InitLocationDataJob (AppWindow owner, CompletionCallback completion_callback) {
4509+ base (owner, completion_callback);
4510+ }
4511+
4512+ public override void execute () {
4513+ FileStream stream = FileStream.open (
4514+ AppDirs.get_resources_dir ().get_child ("ui").get_child ("locations.dat").get_parse_name (), "r");
4515+ if (stream == null) {
4516+ debug ("failed to open initial location data file");
4517+ return;
4518+ }
4519+
4520+ var line = stream.read_line ();
4521+ while (line != null) {
4522+ var row = line.split ("|");
4523+ try {
4524+ LocationTable.get_instance ().create (row);
4525+ } catch {
4526+ critical ("Could not load initial geo data");
4527+ }
4528+ line = stream.read_line ();
4529+ }
4530+ }
4531+}
4532+// This is used when we are offline to make geo location look ups
4533+// as glib.geocode relies on the web
4534+public class LocationTable : DatabaseTable {
4535+ private static LocationTable instance = null;
4536+ private Workers workers;
4537+
4538+ private LocationTable () {
4539+ Sqlite.Statement stmt;
4540+ int res = db.prepare_v2 ("CREATE TABLE IF NOT EXISTS LocationTable ("
4541+ + "id INTEGER PRIMARY KEY, "
4542+ + "city TEXT, "
4543+ + "territorie TEXT, "
4544+ + "country TEXT, "
4545+ + "lat REAL, "
4546+ + "lon REAL "
4547+ + ")", -1, out stmt);
4548+ assert (res == Sqlite.OK);
4549+
4550+ res = stmt.step ();
4551+ if (res != Sqlite.DONE)
4552+ fatal ("create location table", res);
4553+
4554+ set_table_name ("LocationTable");
4555+ }
4556+
4557+ public static LocationTable get_instance () {
4558+ if (instance == null)
4559+ instance = new LocationTable ();
4560+ return instance;
4561+ }
4562+
4563+ public void init_city_data () {
4564+ // clear out the table first incase it got cut off last time
4565+ Sqlite.Statement stmt;
4566+ int res = db.prepare_v2 ("DELETE FROM LocationTable", -1, out stmt);
4567+ assert (res == Sqlite.OK);
4568+
4569+ res = stmt.step ();
4570+ if (res != Sqlite.DONE)
4571+ fatal ("clear location table", res);
4572+
4573+ workers = new Workers (1, false);
4574+ BackgroundJob init_job = new InitLocationDataJob (AppWindow.get_instance (), on_init_complete);
4575+ workers.enqueue (init_job);
4576+ }
4577+
4578+ private void on_init_complete (BackgroundJob job) {
4579+ insert_init_row ();
4580+ }
4581+
4582+ // We use a row to set init finished instead of a transaction
4583+ // as we want to have location rows coming in so there is at least
4584+ // some data before it is finished
4585+ private void insert_init_row () {
4586+ try {
4587+ create ("photos-init-complete| | |-1|-1".split ("|"));
4588+ } catch {
4589+ critical ("location table init complete failed");
4590+ }
4591+ }
4592+
4593+ public bool has_init_row () {
4594+ return (get_starts_with ("photos-init-complete").size > 0);
4595+ }
4596+
4597+ public void create (string[] location) throws DatabaseError {
4598+ if (location == null || location.length < 1)
4599+ return;
4600+
4601+ var city = location[0];
4602+ var lat = location[1];
4603+ var lon = location[2];
4604+ var territorie = Resources.get_state (location[3], location[4]);
4605+ var country = Resources.get_country (location[3]);
4606+
4607+ Sqlite.Statement stmt;
4608+ int res = db.prepare_v2 (
4609+ "INSERT INTO LocationTable (city, territorie, country, lat, lon) VALUES (?, ?, ?, ?, ?)",
4610+ -1, out stmt);
4611+ assert (res == Sqlite.OK);
4612+ res = stmt.bind_text (1, city);
4613+ assert (res == Sqlite.OK);
4614+ res = stmt.bind_text (2, territorie);
4615+ assert (res == Sqlite.OK);
4616+ res = stmt.bind_text (3, country);
4617+ assert (res == Sqlite.OK);
4618+ res = stmt.bind_double (4, double.parse (lat));
4619+ assert (res == Sqlite.OK);
4620+ res = stmt.bind_double (5, double.parse (lon));
4621+ assert (res == Sqlite.OK);
4622+
4623+ res = stmt.step ();
4624+ if (res != Sqlite.DONE)
4625+ throw_error ("LocationTable.create", res);
4626+ }
4627+
4628+ public Gee.ArrayList < LocationRow?> get_starts_with (string starts_with) {
4629+ Sqlite.Statement stmt;
4630+ int res = db.prepare_v2 (
4631+ "SELECT id, city, territorie, country, lat, lon FROM LocationTable WHERE city LIKE ?",
4632+ -1, out stmt);
4633+ assert (res == Sqlite.OK);
4634+ res = stmt.bind_text (1, starts_with + "%");
4635+ assert (res == Sqlite.OK);
4636+
4637+ Gee.ArrayList < LocationRow?> all = new Gee.ArrayList < LocationRow?> ();
4638+
4639+ while ((res = stmt.step ()) == Sqlite.ROW) {
4640+ LocationRow row = new LocationRow ();
4641+ row.location_id = LocationID (stmt.column_int64 (0));
4642+ row.city = stmt.column_text (1);
4643+ row.territorie = stmt.column_text (2);
4644+ row.country = stmt.column_text (3);
4645+ row.latitude = stmt.column_double (4);
4646+ row.longitude = stmt.column_double (5);
4647+ all.add (row);
4648+ }
4649+
4650+ return all;
4651+ }
4652+
4653+ public LocationRow? get_row (LocationID id) {
4654+ Sqlite.Statement stmt;
4655+ int res = db.prepare_v2 (
4656+ "SELECT city, territorie, country, lat, lon FROM LocationTable WHERE id=?",
4657+ -1, out stmt);
4658+ assert (res == Sqlite.OK);
4659+
4660+ res = stmt.bind_int64 (1, id.id);
4661+ assert (res == Sqlite.OK);
4662+
4663+ if (stmt.step () != Sqlite.ROW)
4664+ return null;
4665+
4666+ LocationRow row = new LocationRow ();
4667+ row.location_id = id;
4668+ row.city = stmt.column_text (0);
4669+ row.territorie = stmt.column_text (1);
4670+ row.country = stmt.column_text (2);
4671+ row.latitude = stmt.column_double (3);
4672+ row.longitude = stmt.column_double (4);
4673+
4674+ return row;
4675+ }
4676+}
4677+
4678+
4679
4680=== modified file 'src/db/PhotoTable.vala'
4681--- src/db/PhotoTable.vala 2014-08-27 12:50:03 +0000
4682+++ src/db/PhotoTable.vala 2014-10-18 00:49:47 +0000
4683@@ -84,6 +84,7 @@
4684 public uint64 flags;
4685 public Rating rating;
4686 public string title;
4687+ public GpsCoords gps_coords;
4688 public string comment;
4689 public string? backlinks;
4690 public time_t time_reimported;
4691@@ -91,6 +92,7 @@
4692 public bool metadata_dirty;
4693 public bool enhanced;
4694 public Gee.HashMap<string, KeyValueMap>? original_transforms;
4695+ public string location;
4696
4697 // Currently selected developer (RAW only)
4698 public RawDeveloper developer;
4699@@ -102,6 +104,7 @@
4700 public PhotoRow () {
4701 master = new BackingPhotoRow ();
4702 editable_id = BackingPhotoID ();
4703+ gps_coords = GpsCoords ();
4704 development_ids = new BackingPhotoID[RawDeveloper.as_array ().length];
4705 foreach (RawDeveloper d in RawDeveloper.as_array ())
4706 development_ids[d] = BackingPhotoID ();
4707@@ -144,7 +147,11 @@
4708 + "develop_embedded_id INTEGER DEFAULT -1, "
4709 + "comment TEXT, "
4710 + "enhanced INTEGER DEFAULT 0, "
4711- + "original_transforms TEXT "
4712+ + "original_transforms TEXT, "
4713+ + "has_gps INTEGER DEFAULT -1, "
4714+ + "gps_lat REAL, "
4715+ + "gps_lon REAL, "
4716+ + "location TEXT"
4717 + ")", -1, out stmt);
4718 assert (res == Sqlite.OK);
4719
4720@@ -179,8 +186,9 @@
4721 int res = db.prepare_v2 (
4722 "INSERT INTO PhotoTable (filename, width, height, filesize, timestamp, exposure_time, "
4723 + "orientation, original_orientation, import_id, event_id, md5, thumbnail_md5, "
4724- + "exif_md5, time_created, file_format, title, rating, editable_id, developer, comment) "
4725- + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
4726+ + "exif_md5, time_created, file_format, title, rating, editable_id, developer, "
4727+ + "comment, has_gps, gps_lat, gps_lon, location) "
4728+ + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
4729 -1, out stmt);
4730 assert (res == Sqlite.OK);
4731
4732@@ -226,6 +234,14 @@
4733 assert (res == Sqlite.OK);
4734 res = stmt.bind_text (20, photo_row.comment);
4735 assert (res == Sqlite.OK);
4736+ res = stmt.bind_int (21, photo_row.gps_coords.has_gps);
4737+ assert (res == Sqlite.OK);
4738+ res = stmt.bind_double (22, photo_row.gps_coords.latitude);
4739+ assert (res == Sqlite.OK);
4740+ res = stmt.bind_double (23, photo_row.gps_coords.longitude);
4741+ assert (res == Sqlite.OK);
4742+ res = stmt.bind_text (24, photo_row.location);
4743+ assert (res == Sqlite.OK);
4744
4745 res = stmt.step ();
4746 if (res != Sqlite.DONE) {
4747@@ -255,7 +271,8 @@
4748 int res = db.prepare_v2 (
4749 "UPDATE PhotoTable SET width = ?, height = ?, filesize = ?, timestamp = ?, "
4750 + "exposure_time = ?, orientation = ?, original_orientation = ?, md5 = ?, "
4751- + "exif_md5 = ?, thumbnail_md5 = ?, file_format = ?, title = ?, time_reimported = ? "
4752+ + "exif_md5 = ?, thumbnail_md5 = ?, file_format = ?, title = ?, "
4753+ + "has_gps = ?, gps_lat = ?, gps_lon = ?, time_reimported = ? "
4754 + "WHERE id = ?", -1, out stmt);
4755 assert (res == Sqlite.OK);
4756
4757@@ -285,9 +302,15 @@
4758 assert (res == Sqlite.OK);
4759 res = stmt.bind_text (12, row.title);
4760 assert (res == Sqlite.OK);
4761- res = stmt.bind_int64 (13, time_reimported);
4762- assert (res == Sqlite.OK);
4763- res = stmt.bind_int64 (14, row.photo_id.id);
4764+ res = stmt.bind_int (13, row.gps_coords.has_gps);
4765+ assert (res == Sqlite.OK);
4766+ res = stmt.bind_double (14, row.gps_coords.latitude);
4767+ assert (res == Sqlite.OK);
4768+ res = stmt.bind_double (15, row.gps_coords.longitude);
4769+ assert (res == Sqlite.OK);
4770+ res = stmt.bind_int64 (16, time_reimported);
4771+ assert (res == Sqlite.OK);
4772+ res = stmt.bind_int64 (17, row.photo_id.id);
4773 assert (res == Sqlite.OK);
4774
4775 res = stmt.step ();
4776@@ -360,7 +383,8 @@
4777 + "original_orientation, import_id, event_id, transformations, md5, thumbnail_md5, "
4778 + "exif_md5, time_created, flags, rating, file_format, title, backlinks, "
4779 + "time_reimported, editable_id, metadata_dirty, developer, develop_shotwell_id, "
4780- + "develop_camera_id, develop_embedded_id, comment, enhanced, original_transforms "
4781+ + "develop_camera_id, develop_embedded_id, comment, enhanced, original_transforms, "
4782+ + "has_gps, gps_lat, gps_lon, location "
4783 + "FROM PhotoTable WHERE id=?",
4784 -1, out stmt);
4785 assert (res == Sqlite.OK);
4786@@ -403,6 +427,10 @@
4787 row.comment = stmt.column_text (27);
4788 row.enhanced = stmt.column_int (28) != 0;
4789 row.original_transforms = marshall_all_transformations (stmt.column_text (29));
4790+ row.gps_coords.has_gps = stmt.column_int (30);
4791+ row.gps_coords.latitude = stmt.column_double (31);
4792+ row.gps_coords.longitude = stmt.column_double (32);
4793+ row.location = stmt.column_text (33);
4794
4795 return row;
4796 }
4797@@ -414,7 +442,8 @@
4798 + "original_orientation, import_id, event_id, transformations, md5, thumbnail_md5, "
4799 + "exif_md5, time_created, flags, rating, file_format, title, backlinks, time_reimported, "
4800 + "editable_id, metadata_dirty, developer, develop_shotwell_id, develop_camera_id, "
4801- + "develop_embedded_id, comment, enhanced, original_transforms FROM PhotoTable",
4802+ + "develop_embedded_id, comment, enhanced, original_transforms, has_gps, gps_lat, gps_lon, "
4803+ + "location FROM PhotoTable",
4804 -1, out stmt);
4805 assert (res == Sqlite.OK);
4806
4807@@ -454,6 +483,10 @@
4808 row.enhanced = stmt.column_int (29) != 0;
4809 row.original_transforms = marshall_all_transformations (stmt.column_text (30));
4810 validate_orientation (row);
4811+ row.gps_coords.has_gps = stmt.column_int (31);
4812+ row.gps_coords.latitude = stmt.column_double (32);
4813+ row.gps_coords.longitude = stmt.column_double (33);
4814+ row.location = stmt.column_text (34);
4815
4816 all.add (row);
4817 }
4818@@ -474,8 +507,8 @@
4819 + "timestamp, exposure_time, orientation, original_orientation, import_id, event_id, "
4820 + "transformations, md5, thumbnail_md5, exif_md5, time_created, flags, rating, "
4821 + "file_format, title, editable_id, developer, develop_shotwell_id, develop_camera_id, "
4822- + "develop_embedded_id, comment, enhanced, original_transforms) "
4823- + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
4824+ + "develop_embedded_id, comment, enhanced, original_transforms, has_gps, gps_lat, gps_lon, location) "
4825+ + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
4826 -1, out stmt);
4827 assert (res == Sqlite.OK);
4828
4829@@ -519,7 +552,6 @@
4830 assert (res == Sqlite.OK);
4831 res = stmt.bind_int64 (20, editable_id.id);
4832 assert (res == Sqlite.OK);
4833-
4834 res = stmt.bind_text (21, original.developer.to_string ());
4835 assert (res == Sqlite.OK);
4836 res = stmt.bind_int64 (22, develop_shotwell.id);
4837@@ -535,6 +567,15 @@
4838 res = stmt.bind_text (27, unmarshall_all_transformations (original.original_transforms));
4839 assert (res == Sqlite.OK);
4840
4841+ res = stmt.bind_int (28, original.gps_coords.has_gps);
4842+ assert (res == Sqlite.OK);
4843+ res = stmt.bind_double (29, original.gps_coords.latitude);
4844+ assert (res == Sqlite.OK);
4845+ res = stmt.bind_double (30, original.gps_coords.longitude);
4846+ assert (res == Sqlite.OK);
4847+ res = stmt.bind_text (31, original.location);
4848+ assert (res == Sqlite.OK);
4849+
4850 res = stmt.step ();
4851 if (res != Sqlite.DONE) {
4852 if (res != Sqlite.CONSTRAINT)
4853@@ -550,6 +591,14 @@
4854 return update_text_by_id (photo_id.id, "title", new_title != null ? new_title : "");
4855 }
4856
4857+ public void set_gps_coords (PhotoID photo_id, GpsCoords new_gps_coords) throws DatabaseError {
4858+ update_int_by_id_2 (photo_id.id, "has_gps", new_gps_coords.has_gps);
4859+ if (new_gps_coords.has_gps > 0) {
4860+ update_double_by_id_2 (photo_id.id, "gps_lat", new_gps_coords.latitude);
4861+ update_double_by_id_2 (photo_id.id, "gps_lon", new_gps_coords.longitude);
4862+ }
4863+ }
4864+
4865 public bool set_comment (PhotoID photo_id, string? new_comment) {
4866 return update_text_by_id (photo_id.id, "comment", new_comment != null ? new_comment : "");
4867 }
4868@@ -720,6 +769,10 @@
4869 return update_int64_by_id (photo_id.id, "event_id", event_id.id);
4870 }
4871
4872+ public bool set_location (PhotoID photo_id, string? location) {
4873+ return update_text_by_id (photo_id.id, "location", location);
4874+ }
4875+
4876 private string? get_raw_transformations (PhotoID photo_id) {
4877 Sqlite.Statement stmt;
4878 if (!select_by_id (photo_id.id, "transformations", out stmt))
4879@@ -848,7 +901,7 @@
4880 }
4881
4882 return set_raw_transformations (photo_id, trans);
4883- }
4884+ }
4885
4886 public bool set_original_transforms (PhotoID photo_id, KeyValueMap? map) {
4887 if (map == null)
4888@@ -866,7 +919,7 @@
4889 size_t length;
4890 string trans = keyfile.to_data (out length);
4891
4892- return set_raw_original_transforms (photo_id, trans);
4893+ return set_raw_original_transforms (photo_id, trans);
4894 }
4895
4896 public bool remove_transformation (PhotoID photo_id, string object) {
4897@@ -1020,7 +1073,7 @@
4898
4899 public void set_metadata_dirty (PhotoID photo_id, bool dirty) throws DatabaseError {
4900 update_int_by_id_2 (photo_id.id, "metadata_dirty", dirty ? 1 : 0);
4901- }
4902+ }
4903
4904 public bool set_enhanced (PhotoID photo_id, bool enhanced) {
4905 return update_int_by_id (photo_id.id, "enhanced", enhanced ? 1 : 0);
4906
4907=== modified file 'src/db/mk/db.mk'
4908--- src/db/mk/db.mk 2012-04-07 15:38:31 +0000
4909+++ src/db/mk/db.mk 2014-10-18 00:49:47 +0000
4910@@ -18,7 +18,8 @@
4911 TombstoneTable.vala \
4912 VideoTable.vala \
4913 VersionTable.vala \
4914- SavedSearchDBTable.vala
4915+ SavedSearchDBTable.vala \
4916+ GeoLocationTable.vala
4917
4918 # Any unit this unit relies upon (and should be initialized before it's initialized) should
4919 # be listed here using its Vala namespace.
4920
4921=== modified file 'src/library/Branch.vala'
4922--- src/library/Branch.vala 2014-09-25 09:36:24 +0000
4923+++ src/library/Branch.vala 2014-10-18 00:49:47 +0000
4924@@ -11,6 +11,10 @@
4925 get;
4926 private set;
4927 }
4928+ public Library.MapEntry map_entry {
4929+ get;
4930+ private set;
4931+ }
4932 public Library.VideosEntry videos_entry {
4933 get;
4934 private set;
4935@@ -48,6 +52,7 @@
4936 RAWS,
4937 VIDEOS,
4938 FLAGGED,
4939+ MAP,
4940 LAST_IMPORTED,
4941 IMPORT_QUEUE,
4942 OFFLINE,
4943@@ -61,16 +66,23 @@
4944 photos_entry = new Library.PhotosEntry ();
4945 videos_entry = new Library.VideosEntry ();
4946 raws_entry = new Library.RawsEntry ();
4947+ map_entry = new Library.MapEntry ();
4948 trash_entry = new Library.TrashSidebarEntry ();
4949 last_imported_entry = new Library.LastImportSidebarEntry ();
4950 flagged_entry = new Library.FlaggedSidebarEntry ();
4951 offline_entry = new Library.OfflineSidebarEntry ();
4952 import_queue_entry = new Library.ImportQueueSidebarEntry ();
4953
4954+
4955+ insert (map_entry, EntryPosition.MAP);
4956 insert (photos_entry, EntryPosition.PHOTOS);
4957 insert (raws_entry, EntryPosition.RAWS);
4958 insert (trash_entry, EntryPosition.TRASH);
4959
4960+
4961+ map_entry.visibility_changed.connect (on_map_visibility_changed);
4962+ on_map_visibility_changed ();
4963+
4964 videos_entry.visibility_changed.connect (on_videos_visibility_changed);
4965 on_videos_visibility_changed ();
4966
4967@@ -100,6 +112,10 @@
4968 update_entry_visibility (flagged_entry, EntryPosition.FLAGGED);
4969 }
4970
4971+ private void on_map_visibility_changed () {
4972+ update_entry_visibility (map_entry, EntryPosition.MAP);
4973+ }
4974+
4975 private void on_last_imported_visibility_changed () {
4976 update_entry_visibility (last_imported_entry, EntryPosition.LAST_IMPORTED);
4977 }
4978@@ -126,6 +142,68 @@
4979 }
4980 }
4981
4982+public class Library.MapEntry : Library.HideablePageEntry {
4983+ private Icon icon = new ThemedIcon (Resources.MAP_PAGE);
4984+
4985+ public MapEntry () {
4986+ foreach (MediaSourceCollection media_sources in MediaCollectionRegistry.get_instance ().get_all ())
4987+ media_sources.gps_contents_altered.connect (on_gps_contents_altered);
4988+
4989+ visible = get_has_gps ();
4990+ }
4991+
4992+ ~MapEntry () {
4993+ foreach (MediaSourceCollection media_sources in MediaCollectionRegistry.get_instance ().get_all ())
4994+ media_sources.gps_contents_altered.disconnect (on_gps_contents_altered);
4995+ }
4996+
4997+ public override string get_sidebar_name () {
4998+ return _ ("Places");
4999+ }
5000+
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: