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
=== modified file 'Makefile'
--- Makefile 2014-09-27 09:20:58 +0000
+++ Makefile 2014-10-18 00:49:47 +0000
@@ -143,7 +143,9 @@
143 tag_sidebar_context.ui \143 tag_sidebar_context.ui \
144 tags.ui \144 tags.ui \
145 top.ui \145 top.ui \
146 trash.ui 146 trash.ui \
147 locations.dat \
148 map.ui
147149
148SYS_INTEGRATION_FILES = \150SYS_INTEGRATION_FILES = \
149 shotwell.appdata.xml \151 shotwell.appdata.xml \
@@ -171,10 +173,13 @@
171173
172ICON_FILES = \174ICON_FILES = \
173 drag_nub.png \175 drag_nub.png \
176 gps-marker.svg \
177 gps-marker-selected.svg \
174 image-adjust.svg \178 image-adjust.svg \
175 noninterpretable-video.png \179 noninterpretable-video.png \
176 pin-toolbar.svg \180 pin-toolbar.svg \
177 sprocket.png181 sprocket.png \
182 places.svg
178183
179HELP_FILES = \184HELP_FILES = \
180 edit-adjustments.page \185 edit-adjustments.page \
@@ -236,6 +241,10 @@
236241
237EXT_PKGS = \242EXT_PKGS = \
238 atk \243 atk \
244 champlain-0.12 \
245 champlain-gtk-0.12 \
246 clutter-1.0 \
247 clutter-gtk-1.0 \
239 gdk-3.0 \248 gdk-3.0 \
240 gee-0.8 \249 gee-0.8 \
241 gexiv2 \250 gexiv2 \
@@ -255,7 +264,9 @@
255 libsoup-2.4 \264 libsoup-2.4 \
256 libxml-2.0 \265 libxml-2.0 \
257 sqlite3 \266 sqlite3 \
258 webkitgtk-3.0267 webkitgtk-3.0 \
268 geocode-glib-1.0 \
269 folks
259 270
260ifdef UNITY_SUPPORT271ifdef UNITY_SUPPORT
261EXT_PKGS += unity272EXT_PKGS += unity
@@ -270,6 +281,10 @@
270DIRECT_LIBS =281DIRECT_LIBS =
271282
272EXT_PKG_VERSIONS = \283EXT_PKG_VERSIONS = \
284 champlain-0.12 >= 0.12.3 \
285 champlain-gtk-0.12 >= 0.12.3 \
286 clutter-1.0 >= 1.12.0 \
287 clutter-gtk-1.0 >= 1.0.0 \
273 gee-0.8 >= 0.8.5 \288 gee-0.8 >= 0.8.5 \
274 gexiv2 >= 0.4.90 \289 gexiv2 >= 0.4.90 \
275 gio-unix-2.0 >= 2.20 \290 gio-unix-2.0 >= 2.20 \
@@ -288,7 +303,9 @@
288 libxml-2.0 >= 2.6.32 \303 libxml-2.0 >= 2.6.32 \
289 rest-0.7 >= 0.7 \304 rest-0.7 >= 0.7 \
290 sqlite3 >= 3.5.9 \305 sqlite3 >= 3.5.9 \
291 webkitgtk-3.0 >= 1.4.0 306 webkitgtk-3.0 >= 1.4.0 \
307 geocode-glib-1.0 >= 1.0
308 folks >= 0.9.0
292309
293DIRECT_LIBS_VERSIONS =310DIRECT_LIBS_VERSIONS =
294311
@@ -640,6 +657,12 @@
640$(PROGRAM): $(EXPANDED_OBJ_FILES) $(RESOURCES) $(LANG_STAMP) $(THUMBNAILER_BIN) misc/gschemas.compiled657$(PROGRAM): $(EXPANDED_OBJ_FILES) $(RESOURCES) $(LANG_STAMP) $(THUMBNAILER_BIN) misc/gschemas.compiled
641 $(CC) $(EXPANDED_OBJ_FILES) $(CFLAGS) $(LDFLAGS) $(RESOURCES) $(VALA_LDFLAGS) $(EXPORT_FLAGS) -o $@658 $(CC) $(EXPANDED_OBJ_FILES) $(CFLAGS) $(LDFLAGS) $(RESOURCES) $(VALA_LDFLAGS) $(EXPORT_FLAGS) -o $@
642659
660FASTFLAGS = --target-glib=2.32 --thread --enable-experimental --disable-warnings
661fast: CFLAGS = -w -pipe -O0
662fast: VALAFLAGS = $(FASTFLAGS)
663-j3 fast: $(EXPANDED_OBJ_FILES) $(RESOURCES) $(LANG_STAMP) misc/gschemas.compiled
664 $(CC) $(EXPANDED_OBJ_FILES) $(CFLAGS) $(LDFLAGS) $(RESOURCES) $(VALA_LDFLAGS) $(EXPORT_FLAGS) -o $(PROGRAM)
665
643misc/gschemas.compiled: $(SCHEMA_FILES)666misc/gschemas.compiled: $(SCHEMA_FILES)
644 rm -f misc/gschemas.compiled667 rm -f misc/gschemas.compiled
645 glib-compile-schemas misc668 glib-compile-schemas misc
646669
=== added file 'icons/earth_map.svg'
--- icons/earth_map.svg 1970-01-01 00:00:00 +0000
+++ icons/earth_map.svg 2014-10-18 00:49:47 +0000
@@ -0,0 +1,230 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:xlink="http://www.w3.org/1999/xlink"
11 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13 version="1.1"
14 width="48"
15 height="48"
16 id="svg3759"
17 inkscape:version="0.48.4 r9939"
18 sodipodi:docname="internet-web-browser.svg">
19 <sodipodi:namedview
20 pagecolor="#ffffff"
21 bordercolor="#666666"
22 borderopacity="1"
23 objecttolerance="10"
24 gridtolerance="10"
25 guidetolerance="10"
26 inkscape:pageopacity="0"
27 inkscape:pageshadow="2"
28 inkscape:window-width="640"
29 inkscape:window-height="480"
30 id="namedview36"
31 showgrid="false"
32 inkscape:zoom="4.9166667"
33 inkscape:cx="24"
34 inkscape:cy="24"
35 inkscape:window-x="0"
36 inkscape:window-y="30"
37 inkscape:window-maximized="0"
38 inkscape:current-layer="svg3759" />
39 <metadata
40 id="metadata37">
41 <rdf:RDF>
42 <cc:Work
43 rdf:about="">
44 <dc:format>image/svg+xml</dc:format>
45 <dc:type
46 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
47 </cc:Work>
48 </rdf:RDF>
49 </metadata>
50 <defs
51 id="defs3761">
52 <radialGradient
53 cx="17.81411"
54 cy="24.149399"
55 r="9.125"
56 fx="17.81411"
57 fy="24.149399"
58 id="radialGradient2418"
59 xlink:href="#linearGradient4845"
60 gradientUnits="userSpaceOnUse"
61 gradientTransform="matrix(-2.643979,0,2.93653e-8,2.534421,78.72514,-37.986139)" />
62 <linearGradient
63 id="linearGradient4845">
64 <stop
65 id="stop4847"
66 style="stop-color:#ffffff;stop-opacity:1"
67 offset="0" />
68 <stop
69 id="stop4849"
70 style="stop-color:#b6b6b6;stop-opacity:1"
71 offset="1" />
72 </linearGradient>
73 <linearGradient
74 x1="62.200409"
75 y1="-12.489107"
76 x2="62.200409"
77 y2="-1.4615115"
78 id="linearGradient3697"
79 xlink:href="#linearGradient4873"
80 gradientUnits="userSpaceOnUse"
81 gradientTransform="matrix(2.1153734,0,0,2.1153252,-107.57708,31.426557)" />
82 <linearGradient
83 id="linearGradient4873">
84 <stop
85 id="stop4875"
86 style="stop-color:#ffffff;stop-opacity:1"
87 offset="0" />
88 <stop
89 id="stop4877"
90 style="stop-color:#ffffff;stop-opacity:0"
91 offset="1" />
92 </linearGradient>
93 <radialGradient
94 cx="61.240059"
95 cy="-8.7256308"
96 r="9.7552834"
97 fx="61.240059"
98 fy="-8.7256308"
99 id="radialGradient3705"
100 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148"
101 gradientUnits="userSpaceOnUse"
102 gradientTransform="matrix(0,3.5234091,-3.5234073,0,-6.7439676,-205.79862)" />
103 <linearGradient
104 id="linearGradient2867-449-88-871-390-598-476-591-434-148">
105 <stop
106 id="stop4627"
107 style="stop-color:#51cfee;stop-opacity:1"
108 offset="0" />
109 <stop
110 id="stop4629"
111 style="stop-color:#49a3d2;stop-opacity:1"
112 offset="0.26238" />
113 <stop
114 id="stop4631"
115 style="stop-color:#3470b4;stop-opacity:1"
116 offset="0.704952" />
117 <stop
118 id="stop4633"
119 style="stop-color:#273567;stop-opacity:1"
120 offset="1" />
121 </linearGradient>
122 <linearGradient
123 x1="20"
124 y1="43"
125 x2="20"
126 y2="2.6887112"
127 id="linearGradient3713"
128 xlink:href="#linearGradient3707-319-631"
129 gradientUnits="userSpaceOnUse"
130 gradientTransform="matrix(0.98001402,0,0,0.97999168,0.08994011,0.8703621)" />
131 <linearGradient
132 id="linearGradient3707-319-631">
133 <stop
134 id="stop4637"
135 style="stop-color:#254b6d;stop-opacity:1"
136 offset="0" />
137 <stop
138 id="stop4639"
139 style="stop-color:#415b73;stop-opacity:1"
140 offset="0.5" />
141 <stop
142 id="stop4641"
143 style="stop-color:#6195b5;stop-opacity:1"
144 offset="1" />
145 </linearGradient>
146 <linearGradient
147 id="linearGradient8838">
148 <stop
149 id="stop8840"
150 style="stop-color:#000000;stop-opacity:1"
151 offset="0" />
152 <stop
153 id="stop8842"
154 style="stop-color:#000000;stop-opacity:0"
155 offset="1" />
156 </linearGradient>
157 <radialGradient
158 cx="62.625"
159 cy="4.625"
160 r="10.625"
161 fx="62.625"
162 fy="4.625"
163 id="radialGradient3757"
164 xlink:href="#linearGradient8838"
165 gradientUnits="userSpaceOnUse"
166 gradientTransform="matrix(1,0,0,0.341176,0,3.047059)" />
167 <linearGradient
168 inkscape:collect="always"
169 xlink:href="#linearGradient4873"
170 id="linearGradient3017"
171 gradientUnits="userSpaceOnUse"
172 gradientTransform="matrix(2.1153734,0,0,2.1153252,-107.57708,31.426557)"
173 x1="62.200409"
174 y1="-12.489107"
175 x2="62.200409"
176 y2="-1.4615115" />
177 <radialGradient
178 inkscape:collect="always"
179 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148"
180 id="radialGradient3021"
181 gradientUnits="userSpaceOnUse"
182 gradientTransform="matrix(0,3.5234091,-3.5234073,0,-6.7439676,-205.79862)"
183 cx="61.240059"
184 cy="-8.7256308"
185 fx="61.240059"
186 fy="-8.7256308"
187 r="9.7552834" />
188 <linearGradient
189 inkscape:collect="always"
190 xlink:href="#linearGradient3707-319-631"
191 id="linearGradient3023"
192 gradientUnits="userSpaceOnUse"
193 gradientTransform="matrix(0.98001402,0,0,0.97999168,0.08994011,0.8703621)"
194 x1="20"
195 y1="43"
196 x2="20"
197 y2="2.6887112" />
198 <radialGradient
199 inkscape:collect="always"
200 xlink:href="#linearGradient8838"
201 id="radialGradient3026"
202 gradientUnits="userSpaceOnUse"
203 gradientTransform="matrix(2.1647059,0,0,0.87466073,-111.56471,34.661405)"
204 cx="62.625"
205 cy="4.625"
206 fx="62.625"
207 fy="4.625"
208 r="10.625" />
209 </defs>
210 <path
211 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"
212 id="path8836"
213 inkscape:connector-curvature="0"
214 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" />
215 <path
216 style="fill:url(#radialGradient3021);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3023);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
217 id="path6495"
218 inkscape:connector-curvature="0"
219 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" />
220 <path
221 style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
222 id="path6534"
223 inkscape:connector-curvature="0"
224 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" />
225 <path
226 style="opacity:0.4;fill:none;stroke:url(#linearGradient3017);stroke-width:1.0000006;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
227 id="path8655"
228 inkscape:connector-curvature="0"
229 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" />
230</svg>
0231
=== added file 'icons/gps-marker-selected.svg'
--- icons/gps-marker-selected.svg 1970-01-01 00:00:00 +0000
+++ icons/gps-marker-selected.svg 2014-10-18 00:49:47 +0000
@@ -0,0 +1,1388 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:xlink="http://www.w3.org/1999/xlink"
11 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13 version="1.1"
14 width="23"
15 height="33"
16 id="svg2"
17 inkscape:version="0.48.4 r9939"
18 sodipodi:docname="gps-marker selected.svg">
19 <sodipodi:namedview
20 pagecolor="#ffffff"
21 bordercolor="#666666"
22 borderopacity="1"
23 objecttolerance="10"
24 gridtolerance="10"
25 guidetolerance="10"
26 inkscape:pageopacity="0"
27 inkscape:pageshadow="2"
28 inkscape:window-width="2560"
29 inkscape:window-height="1335"
30 id="namedview189"
31 showgrid="false"
32 inkscape:zoom="10.11377"
33 inkscape:cx="44.615873"
34 inkscape:cy="25.262848"
35 inkscape:window-x="0"
36 inkscape:window-y="30"
37 inkscape:window-maximized="1"
38 inkscape:current-layer="svg2" />
39 <defs
40 id="defs4">
41 <linearGradient
42 id="linearGradient4291">
43 <stop
44 offset="0"
45 style="stop-color:#242424;stop-opacity:1"
46 id="stop4293" />
47 <stop
48 offset="1"
49 style="stop-color:#242424;stop-opacity:0"
50 id="stop4295" />
51 </linearGradient>
52 <linearGradient
53 id="linearGradient4279">
54 <stop
55 offset="0"
56 style="stop-color:#006390;stop-opacity:1"
57 id="stop4281" />
58 <stop
59 offset="1"
60 style="stop-color:#004667;stop-opacity:0.99795502"
61 id="stop4283" />
62 </linearGradient>
63 <linearGradient
64 id="linearGradient4269">
65 <stop
66 offset="0"
67 style="stop-color:#4bc7fe;stop-opacity:1"
68 id="stop4271" />
69 <stop
70 offset="0.19700792"
71 style="stop-color:#4bc7fe;stop-opacity:0.23529412"
72 id="stop4273" />
73 <stop
74 offset="0.6310662"
75 style="stop-color:#4bc7fe;stop-opacity:0.15686275"
76 id="stop4275" />
77 <stop
78 offset="1"
79 style="stop-color:#4bc7fe;stop-opacity:0.39215687"
80 id="stop4277" />
81 </linearGradient>
82 <linearGradient
83 id="linearGradient4873">
84 <stop
85 offset="0"
86 style="stop-color:#4bc7fe;stop-opacity:1"
87 id="stop4875" />
88 <stop
89 offset="1"
90 style="stop-color:#4bc7fe;stop-opacity:0"
91 id="stop4877" />
92 </linearGradient>
93 <linearGradient
94 gradientTransform="matrix(0.51455032,0,0,0.51453856,-24.005236,9.8064595)"
95 gradientUnits="userSpaceOnUse"
96 xlink:href="#linearGradient4873"
97 id="linearGradient3683"
98 y2="5.4675598"
99 x2="63.397362"
100 y1="-12.489107"
101 x1="63.397362" />
102 <linearGradient
103 id="linearGradient3603">
104 <stop
105 offset="0"
106 style="stop-color:#00b063;stop-opacity:1"
107 id="stop3605" />
108 <stop
109 offset="1"
110 style="stop-color:#00f246;stop-opacity:1"
111 id="stop3607" />
112 </linearGradient>
113 <linearGradient
114 gradientTransform="matrix(0.2703533,0,0,0.27035337,1.5115215,1.5115197)"
115 gradientUnits="userSpaceOnUse"
116 xlink:href="#linearGradient3603"
117 id="linearGradient3730"
118 y2="3.0816143"
119 x2="18.379412"
120 y1="44.980297"
121 x1="18.379412" />
122 <linearGradient
123 id="linearGradient3690">
124 <stop
125 offset="0"
126 style="stop-color:#37fff7;stop-opacity:1"
127 id="stop3692" />
128 <stop
129 offset="0.26238"
130 style="stop-color:#21fee4;stop-opacity:1"
131 id="stop3694" />
132 <stop
133 offset="0.66093999"
134 style="stop-color:#08fea6;stop-opacity:1"
135 id="stop3696" />
136 <stop
137 offset="1"
138 style="stop-color:#00dd65;stop-opacity:1"
139 id="stop3698" />
140 </linearGradient>
141 <radialGradient
142 gradientTransform="matrix(0,0.64524082,-0.85170617,0,11.39831,-13.333564)"
143 gradientUnits="userSpaceOnUse"
144 xlink:href="#linearGradient3690"
145 id="radialGradient3728"
146 fy="3.9900031"
147 fx="23.895569"
148 r="20.397499"
149 cy="3.9900031"
150 cx="23.895569" />
151 <radialGradient
152 gradientTransform="matrix(0,117.18262,-143.86282,0,1693.1125,-1069.0711)"
153 gradientUnits="userSpaceOnUse"
154 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7"
155 id="radialGradient4065"
156 fy="9.9571075"
157 fx="7.1183534"
158 r="12.671875"
159 cy="9.9571075"
160 cx="7.1183534" />
161 <linearGradient
162 id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7">
163 <stop
164 offset="0"
165 style="stop-color:#00699b;stop-opacity:1"
166 id="stop3750-1-0-7-6-6-1-3-9-3-7" />
167 <stop
168 offset="0.26238"
169 style="stop-color:#005176;stop-opacity:1"
170 id="stop3752-3-7-4-0-32-8-923-0-7-3" />
171 <stop
172 offset="0.704952"
173 style="stop-color:#002955;stop-opacity:1"
174 id="stop3754-1-8-5-2-7-6-7-1-9-6" />
175 <stop
176 offset="1"
177 style="stop-color:#242424;stop-opacity:1"
178 id="stop3756-1-6-2-6-6-1-96-6-0-1" />
179 </linearGradient>
180 <radialGradient
181 gradientTransform="matrix(0,117.18262,-143.86282,0,1693.1125,-1069.0711)"
182 gradientUnits="userSpaceOnUse"
183 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7"
184 id="radialGradient3249-0"
185 fy="9.9571075"
186 fx="7.1183534"
187 r="12.671875"
188 cy="9.9571075"
189 cx="7.1183534" />
190 <linearGradient
191 id="linearGradient3895">
192 <stop
193 offset="0"
194 style="stop-color:#4bc7fe;stop-opacity:1"
195 id="stop3897" />
196 <stop
197 offset="0.05263157"
198 style="stop-color:#4bc7fe;stop-opacity:0.23529412"
199 id="stop3899" />
200 <stop
201 offset="0.95056331"
202 style="stop-color:#4bc7fe;stop-opacity:0.15686275"
203 id="stop3901" />
204 <stop
205 offset="1"
206 style="stop-color:#4bc7fe;stop-opacity:0.39215687"
207 id="stop3903" />
208 </linearGradient>
209 <linearGradient
210 gradientTransform="translate(0,0.9999922)"
211 gradientUnits="userSpaceOnUse"
212 xlink:href="#linearGradient3680-6-6-6-3"
213 id="linearGradient4183"
214 y2="13.000008"
215 x2="20"
216 y1="26.000008"
217 x1="20" />
218 <linearGradient
219 id="linearGradient3680-6-6-6-3">
220 <stop
221 offset="0"
222 style="stop-color:#28bbfe;stop-opacity:1"
223 id="stop3682-4-6-1-3" />
224 <stop
225 offset="1"
226 style="stop-color:#4bc7fe;stop-opacity:1"
227 id="stop3684-8-5-8-0" />
228 </linearGradient>
229 <linearGradient
230 gradientTransform="translate(4e-6,1.0000062)"
231 gradientUnits="userSpaceOnUse"
232 xlink:href="#linearGradient3924-1"
233 id="linearGradient3982"
234 y2="43"
235 x2="23.99999"
236 y1="4.999989"
237 x1="23.99999" />
238 <linearGradient
239 id="linearGradient3924-1">
240 <stop
241 offset="0"
242 style="stop-color:#4bc7fe;stop-opacity:1"
243 id="stop3926-3" />
244 <stop
245 offset="0.06316455"
246 style="stop-color:#4bc7fe;stop-opacity:0.23529412"
247 id="stop3928-91" />
248 <stop
249 offset="0.95056331"
250 style="stop-color:#4bc7fe;stop-opacity:0.15686275"
251 id="stop3930-6" />
252 <stop
253 offset="1"
254 style="stop-color:#4bc7fe;stop-opacity:0.39215687"
255 id="stop3932-6" />
256 </linearGradient>
257 <radialGradient
258 gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
259 gradientUnits="userSpaceOnUse"
260 xlink:href="#linearGradient3688-166-749-4"
261 id="radialGradient3963"
262 fy="43.5"
263 fx="4.9929786"
264 r="2.5"
265 cy="43.5"
266 cx="4.9929786" />
267 <linearGradient
268 id="linearGradient3688-166-749-4">
269 <stop
270 offset="0"
271 style="stop-color:#004063;stop-opacity:1"
272 id="stop2883-3" />
273 <stop
274 offset="1"
275 style="stop-color:#004063;stop-opacity:0"
276 id="stop2885-2" />
277 </linearGradient>
278 <radialGradient
279 gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
280 gradientUnits="userSpaceOnUse"
281 xlink:href="#linearGradient3688-464-309-3"
282 id="radialGradient3965"
283 fy="43.5"
284 fx="4.9929786"
285 r="2.5"
286 cy="43.5"
287 cx="4.9929786" />
288 <linearGradient
289 id="linearGradient3688-464-309-3">
290 <stop
291 offset="0"
292 style="stop-color:#004063;stop-opacity:1"
293 id="stop2889-6" />
294 <stop
295 offset="1"
296 style="stop-color:#004063;stop-opacity:0"
297 id="stop2891-2" />
298 </linearGradient>
299 <linearGradient
300 gradientUnits="userSpaceOnUse"
301 xlink:href="#linearGradient3702-501-757-2"
302 id="linearGradient3967"
303 y2="39.999443"
304 x2="25.058096"
305 y1="47.027729"
306 x1="25.058096" />
307 <linearGradient
308 id="linearGradient3702-501-757-2">
309 <stop
310 offset="0"
311 style="stop-color:#004063;stop-opacity:0"
312 id="stop2895-3" />
313 <stop
314 offset="0.5"
315 style="stop-color:#004063;stop-opacity:1"
316 id="stop2897-0" />
317 <stop
318 offset="1"
319 style="stop-color:#004063;stop-opacity:0"
320 id="stop2899-1" />
321 </linearGradient>
322 <linearGradient
323 gradientTransform="translate(0,0.9999922)"
324 gradientUnits="userSpaceOnUse"
325 xlink:href="#linearGradient3680-6-6-6-3"
326 id="linearGradient3018"
327 y2="13.000008"
328 x2="20"
329 y1="26.000008"
330 x1="20" />
331 <radialGradient
332 gradientTransform="matrix(0,9.4975523,-11.65996,0,140.93055,-79.160978)"
333 gradientUnits="userSpaceOnUse"
334 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8"
335 id="radialGradient3031"
336 fy="9.9571075"
337 fx="6.2001843"
338 r="12.671875"
339 cy="9.9571075"
340 cx="6.7304144" />
341 <linearGradient
342 id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8">
343 <stop
344 offset="0"
345 style="stop-color:#19ffe8;stop-opacity:1"
346 id="stop3750-1-0-7-6-6-1-3-9" />
347 <stop
348 offset="0.26238"
349 style="stop-color:#00da8e;stop-opacity:1"
350 id="stop3752-3-7-4-0-32-8-923-0" />
351 <stop
352 offset="0.704952"
353 style="stop-color:#008545;stop-opacity:1"
354 id="stop3754-1-8-5-2-7-6-7-1" />
355 <stop
356 offset="1"
357 style="stop-color:#008f68;stop-opacity:1"
358 id="stop3756-1-6-2-6-6-1-96-6" />
359 </linearGradient>
360 <linearGradient
361 id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5">
362 <stop
363 offset="0"
364 style="stop-color:#00699b;stop-opacity:1"
365 id="stop3750-1-0-7-6-6-1-3-9-3" />
366 <stop
367 offset="0.26238"
368 style="stop-color:#005176;stop-opacity:1"
369 id="stop3752-3-7-4-0-32-8-923-0-7" />
370 <stop
371 offset="0.704952"
372 style="stop-color:#002955;stop-opacity:1"
373 id="stop3754-1-8-5-2-7-6-7-1-9" />
374 <stop
375 offset="1"
376 style="stop-color:#242424;stop-opacity:1"
377 id="stop3756-1-6-2-6-6-1-96-6-0" />
378 </linearGradient>
379 <radialGradient
380 gradientTransform="matrix(0,9.4975523,-11.65996,0,136.43054,-84.660973)"
381 gradientUnits="userSpaceOnUse"
382 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5"
383 id="radialGradient3077"
384 fy="9.9571075"
385 fx="6.2001843"
386 r="12.671875"
387 cy="9.9571075"
388 cx="6.7304144" />
389 <linearGradient
390 id="linearGradient3680-6-6-6-3-7">
391 <stop
392 offset="0"
393 style="stop-color:#28bbfe;stop-opacity:1"
394 id="stop3682-4-6-1-3-7" />
395 <stop
396 offset="1"
397 style="stop-color:#4bc7fe;stop-opacity:1"
398 id="stop3684-8-5-8-0-2" />
399 </linearGradient>
400 <linearGradient
401 gradientTransform="translate(-20,-24.000008)"
402 gradientUnits="userSpaceOnUse"
403 xlink:href="#linearGradient3680-6-6-6-3-7"
404 id="linearGradient3950"
405 y2="13.000008"
406 x2="20"
407 y1="26.000008"
408 x1="20" />
409 <radialGradient
410 gradientTransform="matrix(0,85.484079,-104.94714,0,1299.7805,-832.8559)"
411 gradientUnits="userSpaceOnUse"
412 xlink:href="#linearGradient3242"
413 id="radialGradient3104"
414 fy="9.9941158"
415 fx="8.276144"
416 r="12.671875"
417 cy="9.9941158"
418 cx="8.276144" />
419 <linearGradient
420 gradientTransform="translate(5.3e-6,1.0000015)"
421 gradientUnits="userSpaceOnUse"
422 xlink:href="#linearGradient3924-3"
423 id="linearGradient4181"
424 y2="43"
425 x2="23.99999"
426 y1="4.999989"
427 x1="23.99999" />
428 <linearGradient
429 id="linearGradient3924-3">
430 <stop
431 offset="0"
432 style="stop-color:#4bc7fe;stop-opacity:1"
433 id="stop3926-7" />
434 <stop
435 offset="0.06316455"
436 style="stop-color:#4bc7fe;stop-opacity:0.23529412"
437 id="stop3928-3" />
438 <stop
439 offset="0.95056331"
440 style="stop-color:#4bc7fe;stop-opacity:0.15686275"
441 id="stop3930-7" />
442 <stop
443 offset="1"
444 style="stop-color:#4bc7fe;stop-opacity:0.39215687"
445 id="stop3932-1" />
446 </linearGradient>
447 <linearGradient
448 gradientTransform="matrix(0.7037037,0,0,0.7037037,-39.333369,2.4814295)"
449 gradientUnits="userSpaceOnUse"
450 xlink:href="#linearGradient5803-2-7"
451 id="linearGradient4907-4"
452 y2="54.780239"
453 x2="167.98311"
454 y1="8.50811"
455 x1="167.98311" />
456 <linearGradient
457 id="linearGradient5803-2-7">
458 <stop
459 offset="0"
460 style="stop-color:#49cefe;stop-opacity:1"
461 id="stop5805-3-6" />
462 <stop
463 offset="1"
464 style="stop-color:#37c1ff;stop-opacity:1"
465 id="stop5807-0-0" />
466 </linearGradient>
467 <radialGradient
468 gradientTransform="matrix(0,6.6677582,-8.1858766,0,105.8829,-59.462774)"
469 gradientUnits="userSpaceOnUse"
470 xlink:href="#linearGradient3242"
471 id="radialGradient6305"
472 fy="9.9941158"
473 fx="8.276144"
474 r="12.671875"
475 cy="9.9941158"
476 cx="8.276144" />
477 <linearGradient
478 id="linearGradient3242">
479 <stop
480 offset="0"
481 style="stop-color:#00cbe6;stop-opacity:1"
482 id="stop3244" />
483 <stop
484 offset="0.26238"
485 style="stop-color:#008ea8;stop-opacity:1"
486 id="stop3246" />
487 <stop
488 offset="0.66093999"
489 style="stop-color:#003b79;stop-opacity:1"
490 id="stop3248" />
491 <stop
492 offset="1"
493 style="stop-color:#050077;stop-opacity:1"
494 id="stop3250" />
495 </linearGradient>
496 <radialGradient
497 gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
498 gradientUnits="userSpaceOnUse"
499 xlink:href="#linearGradient3688-166-749"
500 id="radialGradient3013"
501 fy="43.5"
502 fx="4.9929786"
503 r="2.5"
504 cy="43.5"
505 cx="4.9929786" />
506 <linearGradient
507 id="linearGradient3688-166-749">
508 <stop
509 offset="0"
510 style="stop-color:#004063;stop-opacity:1"
511 id="stop2883" />
512 <stop
513 offset="1"
514 style="stop-color:#004063;stop-opacity:0"
515 id="stop2885" />
516 </linearGradient>
517 <radialGradient
518 gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
519 gradientUnits="userSpaceOnUse"
520 xlink:href="#linearGradient3688-464-309"
521 id="radialGradient3015"
522 fy="43.5"
523 fx="4.9929786"
524 r="2.5"
525 cy="43.5"
526 cx="4.9929786" />
527 <linearGradient
528 id="linearGradient3688-464-309">
529 <stop
530 offset="0"
531 style="stop-color:#004063;stop-opacity:1"
532 id="stop2889" />
533 <stop
534 offset="1"
535 style="stop-color:#004063;stop-opacity:0"
536 id="stop2891" />
537 </linearGradient>
538 <linearGradient
539 id="linearGradient3702-501-757">
540 <stop
541 offset="0"
542 style="stop-color:#004063;stop-opacity:0"
543 id="stop2895" />
544 <stop
545 offset="0.5"
546 style="stop-color:#004063;stop-opacity:1"
547 id="stop2897" />
548 <stop
549 offset="1"
550 style="stop-color:#004063;stop-opacity:0"
551 id="stop2899" />
552 </linearGradient>
553 <linearGradient
554 gradientUnits="userSpaceOnUse"
555 xlink:href="#linearGradient3702-501-757"
556 id="linearGradient3141"
557 y2="39.999443"
558 x2="25.058096"
559 y1="47.027729"
560 x1="25.058096" />
561 <linearGradient
562 spreadMethod="pad"
563 gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,158.172)"
564 gradientUnits="userSpaceOnUse"
565 xlink:href="#linearGradient152"
566 id="linearGradient3288"
567 y2="0"
568 x2="1"
569 y1="0"
570 x1="0" />
571 <linearGradient
572 spreadMethod="pad"
573 gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,158.172)"
574 gradientUnits="userSpaceOnUse"
575 id="linearGradient152"
576 y2="0"
577 x2="1"
578 y1="0"
579 x1="0">
580 <stop
581 offset="0"
582 style="stop-color:#00f086;stop-opacity:1"
583 id="stop154" />
584 <stop
585 offset="1"
586 style="stop-color:#007079;stop-opacity:1"
587 id="stop156" />
588 </linearGradient>
589 <clipPath
590 id="clipPath148">
591 <path
592 id="path150"
593 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" />
594 </clipPath>
595 <linearGradient
596 spreadMethod="pad"
597 gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,508.172)"
598 gradientUnits="userSpaceOnUse"
599 id="linearGradient22"
600 y2="0"
601 x2="1"
602 y1="0"
603 x1="0">
604 <stop
605 offset="0"
606 style="stop-color:#00f086;stop-opacity:1"
607 id="stop24" />
608 <stop
609 offset="1"
610 style="stop-color:#007079;stop-opacity:1"
611 id="stop26" />
612 </linearGradient>
613 <clipPath
614 id="clipPath18">
615 <path
616 id="path20"
617 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" />
618 </clipPath>
619 <linearGradient
620 id="linearGradient3702-501-757-5">
621 <stop
622 offset="0"
623 style="stop-color:#004063;stop-opacity:0"
624 id="stop2895-5" />
625 <stop
626 offset="0.5"
627 style="stop-color:#004063;stop-opacity:1"
628 id="stop2897-1" />
629 <stop
630 offset="1"
631 style="stop-color:#004063;stop-opacity:0"
632 id="stop2899-4" />
633 </linearGradient>
634 <linearGradient
635 gradientUnits="userSpaceOnUse"
636 xlink:href="#linearGradient3702-501-757-5"
637 id="linearGradient3086"
638 y2="39.999443"
639 x2="25.058096"
640 y1="47.027729"
641 x1="25.058096" />
642 <linearGradient
643 id="linearGradient3688-464-309-87">
644 <stop
645 offset="0"
646 style="stop-color:#004063;stop-opacity:1"
647 id="stop2889-5" />
648 <stop
649 offset="1"
650 style="stop-color:#004063;stop-opacity:0"
651 id="stop2891-5" />
652 </linearGradient>
653 <radialGradient
654 gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
655 gradientUnits="userSpaceOnUse"
656 xlink:href="#linearGradient3688-464-309-87"
657 id="radialGradient3084"
658 fy="43.5"
659 fx="4.9929786"
660 r="2.5"
661 cy="43.5"
662 cx="4.9929786" />
663 <linearGradient
664 id="linearGradient3688-166-749-1">
665 <stop
666 offset="0"
667 style="stop-color:#004063;stop-opacity:1"
668 id="stop2883-79" />
669 <stop
670 offset="1"
671 style="stop-color:#004063;stop-opacity:0"
672 id="stop2885-4" />
673 </linearGradient>
674 <radialGradient
675 gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
676 gradientUnits="userSpaceOnUse"
677 xlink:href="#linearGradient3688-166-749-1"
678 id="radialGradient3082"
679 fy="43.5"
680 fx="4.9929786"
681 r="2.5"
682 cy="43.5"
683 cx="4.9929786" />
684 <linearGradient
685 id="linearGradient3242-6">
686 <stop
687 offset="0"
688 style="stop-color:#00cbe6;stop-opacity:1"
689 id="stop3244-9" />
690 <stop
691 offset="0.26238"
692 style="stop-color:#008ea8;stop-opacity:1"
693 id="stop3246-9" />
694 <stop
695 offset="0.66093999"
696 style="stop-color:#003b79;stop-opacity:1"
697 id="stop3248-9" />
698 <stop
699 offset="1"
700 style="stop-color:#050077;stop-opacity:1"
701 id="stop3250-9" />
702 </linearGradient>
703 <radialGradient
704 gradientTransform="matrix(0,3.248395,-3.9879912,0,51.891669,-37.148511)"
705 gradientUnits="userSpaceOnUse"
706 xlink:href="#linearGradient3242-6"
707 id="radialGradient4680-7"
708 fy="9.9941158"
709 fx="8.276144"
710 r="12.671875"
711 cy="9.9941158"
712 cx="8.276144" />
713 <linearGradient
714 id="linearGradient5803-2-7-5">
715 <stop
716 offset="0"
717 style="stop-color:#49cefe;stop-opacity:1"
718 id="stop5805-3-6-4" />
719 <stop
720 offset="1"
721 style="stop-color:#37c1ff;stop-opacity:1"
722 id="stop5807-0-0-9" />
723 </linearGradient>
724 <linearGradient
725 gradientTransform="matrix(0.33333333,0,0,0.33333333,-18.000021,-6.6666402)"
726 gradientUnits="userSpaceOnUse"
727 xlink:href="#linearGradient5803-2-7-5"
728 id="linearGradient5041-7"
729 y2="54.780239"
730 x2="167.98311"
731 y1="8.50811"
732 x1="167.98311" />
733 <linearGradient
734 id="linearGradient3924-1-2">
735 <stop
736 offset="0"
737 style="stop-color:#4bc7fe;stop-opacity:1"
738 id="stop3926-5" />
739 <stop
740 offset="0.06316455"
741 style="stop-color:#4bc7fe;stop-opacity:0.23529412"
742 id="stop3928-32" />
743 <stop
744 offset="0.95056331"
745 style="stop-color:#4bc7fe;stop-opacity:0.15686275"
746 id="stop3930-1" />
747 <stop
748 offset="1"
749 style="stop-color:#4bc7fe;stop-opacity:0.39215687"
750 id="stop3932-3" />
751 </linearGradient>
752 <linearGradient
753 gradientTransform="matrix(0.45945947,0,0,0.45945947,0.9729689,-7.0270212)"
754 gradientUnits="userSpaceOnUse"
755 xlink:href="#linearGradient3924-1-2"
756 id="linearGradient4160"
757 y2="43"
758 x2="23.99999"
759 y1="4.999989"
760 x1="23.99999" />
761 <linearGradient
762 gradientTransform="matrix(0.45945947,0,0,0.45945947,0.9729689,-7.0270212)"
763 gradientUnits="userSpaceOnUse"
764 xlink:href="#linearGradient3924-1-2-6"
765 id="linearGradient4160-4"
766 y2="43"
767 x2="23.99999"
768 y1="4.999989"
769 x1="23.99999" />
770 <linearGradient
771 id="linearGradient3924-1-2-6">
772 <stop
773 offset="0"
774 style="stop-color:#4bc7fe;stop-opacity:1"
775 id="stop3926-5-5" />
776 <stop
777 offset="0.06316455"
778 style="stop-color:#4bc7fe;stop-opacity:0.23529412"
779 id="stop3928-32-3" />
780 <stop
781 offset="0.95056331"
782 style="stop-color:#4bc7fe;stop-opacity:0.15686275"
783 id="stop3930-1-7" />
784 <stop
785 offset="1"
786 style="stop-color:#4bc7fe;stop-opacity:0.39215687"
787 id="stop3932-3-0" />
788 </linearGradient>
789 <linearGradient
790 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
791 gradientUnits="userSpaceOnUse"
792 xlink:href="#linearGradient4269"
793 id="linearGradient4207-1"
794 y2="57.674179"
795 x2="23.99999"
796 y1="-1.9506749"
797 x1="23.99999" />
798 <linearGradient
799 id="linearGradient3924-1-2-6-0">
800 <stop
801 offset="0"
802 style="stop-color:#4bc7fe;stop-opacity:1"
803 id="stop3926-5-5-3" />
804 <stop
805 offset="0.06316455"
806 style="stop-color:#4bc7fe;stop-opacity:0.23529412"
807 id="stop3928-32-3-6" />
808 <stop
809 offset="0.95056331"
810 style="stop-color:#4bc7fe;stop-opacity:0.15686275"
811 id="stop3930-1-7-2" />
812 <stop
813 offset="1"
814 style="stop-color:#4bc7fe;stop-opacity:0.39215687"
815 id="stop3932-3-0-9" />
816 </linearGradient>
817 <linearGradient
818 gradientTransform="matrix(0.45945947,0,0,0.45945947,-2.0270504,-2.0270449)"
819 gradientUnits="userSpaceOnUse"
820 xlink:href="#linearGradient3924-1-2-6-0"
821 id="linearGradient4247"
822 y2="43"
823 x2="23.99999"
824 y1="4.999989"
825 x1="23.99999" />
826 <linearGradient
827 gradientUnits="userSpaceOnUse"
828 xlink:href="#linearGradient4279"
829 id="linearGradient4285"
830 y2="662.89178"
831 x2="674.99536"
832 y1="635.92169"
833 x1="674.99536" />
834 <radialGradient
835 gradientTransform="matrix(1,0,0,0.25,0,23.248598)"
836 gradientUnits="userSpaceOnUse"
837 xlink:href="#linearGradient4291"
838 id="radialGradient4297"
839 fy="30.998131"
840 fx="11.325233"
841 r="7.0953269"
842 cy="30.998131"
843 cx="11.325233" />
844 <filter
845 id="filter4345"
846 color-interpolation-filters="sRGB"
847 height="1.1956567"
848 width="1.3103333"
849 y="-0.097828373"
850 x="-0.15516667">
851 <feGaussianBlur
852 stdDeviation="0.4655"
853 id="feGaussianBlur4347" />
854 </filter>
855 <linearGradient
856 gradientUnits="userSpaceOnUse"
857 xlink:href="#linearGradient4279-2"
858 id="linearGradient4285-7"
859 y2="662.89178"
860 x2="674.99536"
861 y1="635.92169"
862 x1="674.99536" />
863 <linearGradient
864 id="linearGradient4279-2">
865 <stop
866 offset="0"
867 style="stop-color:#006390;stop-opacity:1"
868 id="stop4281-4" />
869 <stop
870 offset="1"
871 style="stop-color:#004667;stop-opacity:0.99795502"
872 id="stop4283-7" />
873 </linearGradient>
874 <linearGradient
875 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
876 gradientUnits="userSpaceOnUse"
877 xlink:href="#linearGradient4269-9"
878 id="linearGradient4207-1-1"
879 y2="57.674179"
880 x2="23.99999"
881 y1="-1.9506749"
882 x1="23.99999" />
883 <linearGradient
884 id="linearGradient4269-9">
885 <stop
886 offset="0"
887 style="stop-color:#4bc7fe;stop-opacity:1"
888 id="stop4271-5" />
889 <stop
890 offset="0.19700792"
891 style="stop-color:#4bc7fe;stop-opacity:0.23529412"
892 id="stop4273-3" />
893 <stop
894 offset="0.6310662"
895 style="stop-color:#4bc7fe;stop-opacity:0.15686275"
896 id="stop4275-1" />
897 <stop
898 offset="1"
899 style="stop-color:#4bc7fe;stop-opacity:0.39215687"
900 id="stop4277-8" />
901 </linearGradient>
902 <linearGradient
903 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
904 gradientUnits="userSpaceOnUse"
905 xlink:href="#linearGradient4269-9"
906 id="linearGradient4027"
907 y2="57.674179"
908 x2="23.99999"
909 y1="-1.9506749"
910 x1="23.99999" />
911 <linearGradient
912 gradientUnits="userSpaceOnUse"
913 xlink:href="#linearGradient4279-304"
914 id="linearGradient4285-683"
915 y2="662.89178"
916 x2="674.99536"
917 y1="635.92169"
918 x1="674.99536" />
919 <linearGradient
920 id="linearGradient4279-304">
921 <stop
922 offset="0"
923 style="stop-color:#006390;stop-opacity:1"
924 id="stop10506" />
925 <stop
926 offset="1"
927 style="stop-color:#004667;stop-opacity:0.99795502"
928 id="stop10508" />
929 </linearGradient>
930 <linearGradient
931 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
932 gradientUnits="userSpaceOnUse"
933 xlink:href="#linearGradient4269-9-0"
934 id="linearGradient4027-1"
935 y2="57.674179"
936 x2="23.99999"
937 y1="-1.9506749"
938 x1="23.99999" />
939 <linearGradient
940 id="linearGradient4269-9-0">
941 <stop
942 offset="0"
943 style="stop-color:#4bc7fe;stop-opacity:1"
944 id="stop10512" />
945 <stop
946 offset="0.19700792"
947 style="stop-color:#4bc7fe;stop-opacity:0.23529412"
948 id="stop10514" />
949 <stop
950 offset="0.6310662"
951 style="stop-color:#4bc7fe;stop-opacity:0.15686275"
952 id="stop10516" />
953 <stop
954 offset="1"
955 style="stop-color:#4bc7fe;stop-opacity:0.39215687"
956 id="stop10518" />
957 </linearGradient>
958 <linearGradient
959 gradientUnits="userSpaceOnUse"
960 xlink:href="#linearGradient4279-304-762"
961 id="linearGradient4285-683-622"
962 y2="662.89178"
963 x2="674.99536"
964 y1="635.92169"
965 x1="674.99536" />
966 <linearGradient
967 id="linearGradient4279-304-762">
968 <stop
969 offset="0"
970 style="stop-color:#00908b;stop-opacity:1"
971 id="stop10916" />
972 <stop
973 offset="1"
974 style="stop-color:#00675f;stop-opacity:0.99795502"
975 id="stop10918" />
976 </linearGradient>
977 <linearGradient
978 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
979 gradientUnits="userSpaceOnUse"
980 xlink:href="#linearGradient4269-9-0-801"
981 id="linearGradient4027-1-210"
982 y2="57.674179"
983 x2="23.99999"
984 y1="-1.9506749"
985 x1="23.99999" />
986 <linearGradient
987 id="linearGradient4269-9-0-801">
988 <stop
989 offset="0"
990 style="stop-color:#4bfefd;stop-opacity:1"
991 id="stop10922" />
992 <stop
993 offset="0.19700792"
994 style="stop-color:#4bfefd;stop-opacity:0.23529412"
995 id="stop10924" />
996 <stop
997 offset="0.6310662"
998 style="stop-color:#4bfefd;stop-opacity:0.15686275"
999 id="stop10926" />
1000 <stop
1001 offset="1"
1002 style="stop-color:#4bfefd;stop-opacity:0.39215687"
1003 id="stop10928" />
1004 </linearGradient>
1005 <linearGradient
1006 gradientUnits="userSpaceOnUse"
1007 xlink:href="#linearGradient4279-304-762-109"
1008 id="linearGradient4285-683-622-67"
1009 y2="662.89178"
1010 x2="674.99536"
1011 y1="635.92169"
1012 x1="674.99536" />
1013 <linearGradient
1014 id="linearGradient4279-304-762-109">
1015 <stop
1016 offset="0"
1017 style="stop-color:#006790;stop-opacity:1"
1018 id="stop11346" />
1019 <stop
1020 offset="1"
1021 style="stop-color:#004a67;stop-opacity:0.99795502"
1022 id="stop11348" />
1023 </linearGradient>
1024 <linearGradient
1025 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1026 gradientUnits="userSpaceOnUse"
1027 xlink:href="#linearGradient4269-9-0-801-68"
1028 id="linearGradient4027-1-210-223"
1029 y2="57.674179"
1030 x2="23.99999"
1031 y1="-1.9506749"
1032 x1="23.99999" />
1033 <linearGradient
1034 id="linearGradient4269-9-0-801-68">
1035 <stop
1036 offset="0"
1037 style="stop-color:#4bc8fe;stop-opacity:1"
1038 id="stop11352" />
1039 <stop
1040 offset="0.19700792"
1041 style="stop-color:#4bc8fe;stop-opacity:0.23529412"
1042 id="stop11354" />
1043 <stop
1044 offset="0.6310662"
1045 style="stop-color:#4bc8fe;stop-opacity:0.15686275"
1046 id="stop11356" />
1047 <stop
1048 offset="1"
1049 style="stop-color:#4bc8fe;stop-opacity:0.39215687"
1050 id="stop11358" />
1051 </linearGradient>
1052 <linearGradient
1053 gradientUnits="userSpaceOnUse"
1054 xlink:href="#linearGradient4279-304-762-109-461"
1055 id="linearGradient4285-683-622-67-149"
1056 y2="662.89178"
1057 x2="674.99536"
1058 y1="635.92169"
1059 x1="674.99536" />
1060 <linearGradient
1061 id="linearGradient4279-304-762-109-461">
1062 <stop
1063 offset="0"
1064 style="stop-color:#003a90;stop-opacity:1"
1065 id="stop11796" />
1066 <stop
1067 offset="1"
1068 style="stop-color:#002967;stop-opacity:0.99795502"
1069 id="stop11798" />
1070 </linearGradient>
1071 <linearGradient
1072 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1073 gradientUnits="userSpaceOnUse"
1074 xlink:href="#linearGradient4269-9-0-801-68-899"
1075 id="linearGradient4027-1-210-223-322"
1076 y2="57.674179"
1077 x2="23.99999"
1078 y1="-1.9506749"
1079 x1="23.99999" />
1080 <linearGradient
1081 id="linearGradient4269-9-0-801-68-899">
1082 <stop
1083 offset="0"
1084 style="stop-color:#4b93fe;stop-opacity:1"
1085 id="stop11802" />
1086 <stop
1087 offset="0.19700792"
1088 style="stop-color:#4b93fe;stop-opacity:0.23529412"
1089 id="stop11804" />
1090 <stop
1091 offset="0.6310662"
1092 style="stop-color:#4b93fe;stop-opacity:0.15686275"
1093 id="stop11806" />
1094 <stop
1095 offset="1"
1096 style="stop-color:#4b93fe;stop-opacity:0.39215687"
1097 id="stop11808" />
1098 </linearGradient>
1099 <linearGradient
1100 gradientUnits="userSpaceOnUse"
1101 xlink:href="#linearGradient4279-304-762-109-461-207"
1102 id="linearGradient4285-683-622-67-149-611"
1103 y2="662.89178"
1104 x2="674.99536"
1105 y1="635.92169"
1106 x1="674.99536" />
1107 <linearGradient
1108 id="linearGradient4279-304-762-109-461-207">
1109 <stop
1110 offset="0"
1111 style="stop-color:#000e90;stop-opacity:1"
1112 id="stop12266" />
1113 <stop
1114 offset="1"
1115 style="stop-color:#000967;stop-opacity:0.99795502"
1116 id="stop12268" />
1117 </linearGradient>
1118 <linearGradient
1119 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1120 gradientUnits="userSpaceOnUse"
1121 xlink:href="#linearGradient4269-9-0-801-68-899-19"
1122 id="linearGradient4027-1-210-223-322-570"
1123 y2="57.674179"
1124 x2="23.99999"
1125 y1="-1.9506749"
1126 x1="23.99999" />
1127 <linearGradient
1128 id="linearGradient4269-9-0-801-68-899-19">
1129 <stop
1130 offset="0"
1131 style="stop-color:#4b5dfe;stop-opacity:1"
1132 id="stop12272" />
1133 <stop
1134 offset="0.19700792"
1135 style="stop-color:#4b5dfe;stop-opacity:0.23529412"
1136 id="stop12274" />
1137 <stop
1138 offset="0.6310662"
1139 style="stop-color:#4b5dfe;stop-opacity:0.15686275"
1140 id="stop12276" />
1141 <stop
1142 offset="1"
1143 style="stop-color:#4b5dfe;stop-opacity:0.39215687"
1144 id="stop12278" />
1145 </linearGradient>
1146 <linearGradient
1147 gradientUnits="userSpaceOnUse"
1148 xlink:href="#linearGradient4279-304-762-109-461-207-402"
1149 id="linearGradient4285-683-622-67-149-611-28"
1150 y2="662.89178"
1151 x2="674.99536"
1152 y1="635.92169"
1153 x1="674.99536" />
1154 <linearGradient
1155 id="linearGradient4279-304-762-109-461-207-402">
1156 <stop
1157 offset="0"
1158 style="stop-color:#003a90;stop-opacity:1"
1159 id="stop12756" />
1160 <stop
1161 offset="1"
1162 style="stop-color:#002967;stop-opacity:0.99795502"
1163 id="stop12758" />
1164 </linearGradient>
1165 <linearGradient
1166 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1167 gradientUnits="userSpaceOnUse"
1168 xlink:href="#linearGradient4269-9-0-801-68-899-19-280"
1169 id="linearGradient4027-1-210-223-322-570-921"
1170 y2="57.674179"
1171 x2="23.99999"
1172 y1="-1.9506749"
1173 x1="23.99999" />
1174 <linearGradient
1175 id="linearGradient4269-9-0-801-68-899-19-280">
1176 <stop
1177 offset="0"
1178 style="stop-color:#4b93fe;stop-opacity:1"
1179 id="stop12762" />
1180 <stop
1181 offset="0.19700792"
1182 style="stop-color:#4b93fe;stop-opacity:0.23529412"
1183 id="stop12764" />
1184 <stop
1185 offset="0.6310662"
1186 style="stop-color:#4b93fe;stop-opacity:0.15686275"
1187 id="stop12766" />
1188 <stop
1189 offset="1"
1190 style="stop-color:#4b93fe;stop-opacity:0.39215687"
1191 id="stop12768" />
1192 </linearGradient>
1193 <linearGradient
1194 gradientUnits="userSpaceOnUse"
1195 xlink:href="#linearGradient4279-304-762-109-461-207-402-134"
1196 id="linearGradient4285-683-622-67-149-611-28-936"
1197 y2="662.89178"
1198 x2="674.99536"
1199 y1="635.92169"
1200 x1="674.99536" />
1201 <linearGradient
1202 id="linearGradient4279-304-762-109-461-207-402-134">
1203 <stop
1204 offset="0"
1205 style="stop-color:#0044a9;stop-opacity:1"
1206 id="stop13266" />
1207 <stop
1208 offset="1"
1209 style="stop-color:#003380;stop-opacity:0.99795502"
1210 id="stop13268" />
1211 </linearGradient>
1212 <linearGradient
1213 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1214 gradientUnits="userSpaceOnUse"
1215 xlink:href="#linearGradient4269-9-0-801-68-899-19-280-51"
1216 id="linearGradient4027-1-210-223-322-570-921-60"
1217 y2="57.674179"
1218 x2="23.99999"
1219 y1="-1.9506749"
1220 x1="23.99999" />
1221 <linearGradient
1222 id="linearGradient4269-9-0-801-68-899-19-280-51">
1223 <stop
1224 offset="0"
1225 style="stop-color:#64a2fe;stop-opacity:1"
1226 id="stop13272" />
1227 <stop
1228 offset="0.19700792"
1229 style="stop-color:#64a2fe;stop-opacity:0.23529412"
1230 id="stop13274" />
1231 <stop
1232 offset="0.6310662"
1233 style="stop-color:#64a2fe;stop-opacity:0.15686275"
1234 id="stop13276" />
1235 <stop
1236 offset="1"
1237 style="stop-color:#64a2fe;stop-opacity:0.39215687"
1238 id="stop13278" />
1239 </linearGradient>
1240 <linearGradient
1241 gradientUnits="userSpaceOnUse"
1242 xlink:href="#linearGradient4279-304-762-109-461-207-402-134-290"
1243 id="linearGradient4285-683-622-67-149-611-28-936-389"
1244 y2="662.89178"
1245 x2="674.99536"
1246 y1="635.92169"
1247 x1="674.99536" />
1248 <linearGradient
1249 id="linearGradient4279-304-762-109-461-207-402-134-290">
1250 <stop
1251 offset="0"
1252 style="stop-color:#004ec2;stop-opacity:1"
1253 id="stop13796" />
1254 <stop
1255 offset="1"
1256 style="stop-color:#003d99;stop-opacity:0.99795502"
1257 id="stop13798" />
1258 </linearGradient>
1259 <linearGradient
1260 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1261 gradientUnits="userSpaceOnUse"
1262 xlink:href="#linearGradient4269-9-0-801-68-899-19-280-51-372"
1263 id="linearGradient4027-1-210-223-322-570-921-60-51"
1264 y2="57.674179"
1265 x2="23.99999"
1266 y1="-1.9506749"
1267 x1="23.99999" />
1268 <linearGradient
1269 id="linearGradient4269-9-0-801-68-899-19-280-51-372">
1270 <stop
1271 offset="0"
1272 style="stop-color:#7db1fe;stop-opacity:1"
1273 id="stop13802" />
1274 <stop
1275 offset="0.19700792"
1276 style="stop-color:#7db1fe;stop-opacity:0.23529412"
1277 id="stop13804" />
1278 <stop
1279 offset="0.6310662"
1280 style="stop-color:#7db1fe;stop-opacity:0.15686275"
1281 id="stop13806" />
1282 <stop
1283 offset="1"
1284 style="stop-color:#7db1fe;stop-opacity:0.39215687"
1285 id="stop13808" />
1286 </linearGradient>
1287 <linearGradient
1288 gradientUnits="userSpaceOnUse"
1289 xlink:href="#linearGradient4279-304-762-109-461-207-402-134-290-162"
1290 id="linearGradient4285-683-622-67-149-611-28-936-389-459"
1291 y2="662.89178"
1292 x2="674.99536"
1293 y1="635.92169"
1294 x1="674.99536" />
1295 <linearGradient
1296 id="linearGradient4279-304-762-109-461-207-402-134-290-162">
1297 <stop
1298 offset="0"
1299 style="stop-color:#0058db;stop-opacity:1"
1300 id="stop14346" />
1301 <stop
1302 offset="1"
1303 style="stop-color:#0047b2;stop-opacity:0.99795502"
1304 id="stop14348" />
1305 </linearGradient>
1306 <linearGradient
1307 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)"
1308 gradientUnits="userSpaceOnUse"
1309 xlink:href="#linearGradient4269-9-0-801-68-899-19-280-51-372-537"
1310 id="linearGradient4027-1-210-223-322-570-921-60-51-139"
1311 y2="57.674179"
1312 x2="23.99999"
1313 y1="-1.9506749"
1314 x1="23.99999" />
1315 <linearGradient
1316 id="linearGradient4269-9-0-801-68-899-19-280-51-372-537">
1317 <stop
1318 offset="0"
1319 style="stop-color:#96c0fe;stop-opacity:1"
1320 id="stop14352" />
1321 <stop
1322 offset="0.19700792"
1323 style="stop-color:#96c0fe;stop-opacity:0.23529412"
1324 id="stop14354" />
1325 <stop
1326 offset="0.6310662"
1327 style="stop-color:#96c0fe;stop-opacity:0.15686275"
1328 id="stop14356" />
1329 <stop
1330 offset="1"
1331 style="stop-color:#96c0fe;stop-opacity:0.39215687"
1332 id="stop14358" />
1333 </linearGradient>
1334 </defs>
1335 <metadata
1336 id="metadata7">
1337 <rdf:RDF>
1338 <cc:Work
1339 rdf:about="">
1340 <dc:format>image/svg+xml</dc:format>
1341 <dc:type
1342 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
1343 <dc:title />
1344 </cc:Work>
1345 </rdf:RDF>
1346 </metadata>
1347 <g
1348 id="layer1"
1349 transform="translate(-662.78571,-633.50507)">
1350 <path
1351 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"
1352 id="path3974"
1353 transform="matrix(1,0,0,0.8490188,0,102.82045)"
1354 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" />
1355 <path
1356 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"
1357 id="path3966"
1358 transform="matrix(1,0,0,0.8490188,0,102.82045)"
1359 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" />
1360 <path
1361 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"
1362 id="path3974-5"
1363 transform="matrix(1,0,0,0.8490188,0,102.82045)"
1364 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" />
1365 <path
1366 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"
1367 id="path3007"
1368 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" />
1369 <path
1370 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"
1371 id="path3007-6"
1372 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" />
1373 <path
1374 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"
1375 id="path4093"
1376 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" />
1377 <path
1378 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"
1379 id="path3168-7"
1380 transform="matrix(1.1239496,0,0,1.1239496,662.5,632.36221)"
1381 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" />
1382 <path
1383 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"
1384 id="path3168"
1385 transform="matrix(1.1239496,0,0,1.1239496,662.5,631.36221)"
1386 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" />
1387 </g>
1388</svg>
01389
=== added file 'icons/gps-marker.svg'
--- icons/gps-marker.svg 1970-01-01 00:00:00 +0000
+++ icons/gps-marker.svg 2014-10-18 00:49:47 +0000
@@ -0,0 +1,941 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:xlink="http://www.w3.org/1999/xlink"
11 version="1.1"
12 width="23"
13 height="33"
14 id="svg2">
15 <defs
16 id="defs4">
17 <linearGradient
18 id="linearGradient4291">
19 <stop
20 id="stop4293"
21 style="stop-color:#000000;stop-opacity:1"
22 offset="0" />
23 <stop
24 id="stop4295"
25 style="stop-color:#000000;stop-opacity:0"
26 offset="1" />
27 </linearGradient>
28 <linearGradient
29 id="linearGradient4279">
30 <stop
31 id="stop4281"
32 style="stop-color:#e74545;stop-opacity:1"
33 offset="0" />
34 <stop
35 id="stop4283"
36 style="stop-color:#da1c1c;stop-opacity:0.99795502"
37 offset="1" />
38 </linearGradient>
39 <linearGradient
40 id="linearGradient4269">
41 <stop
42 id="stop4271"
43 style="stop-color:#ffffff;stop-opacity:1"
44 offset="0" />
45 <stop
46 id="stop4273"
47 style="stop-color:#ffffff;stop-opacity:0.23529412"
48 offset="0.19700792" />
49 <stop
50 id="stop4275"
51 style="stop-color:#ffffff;stop-opacity:0.15686275"
52 offset="0.6310662" />
53 <stop
54 id="stop4277"
55 style="stop-color:#ffffff;stop-opacity:0.39215687"
56 offset="1" />
57 </linearGradient>
58 <linearGradient
59 id="linearGradient4873">
60 <stop
61 id="stop4875"
62 style="stop-color:#ffffff;stop-opacity:1"
63 offset="0" />
64 <stop
65 id="stop4877"
66 style="stop-color:#ffffff;stop-opacity:0"
67 offset="1" />
68 </linearGradient>
69 <linearGradient
70 x1="63.397362"
71 y1="-12.489107"
72 x2="63.397362"
73 y2="5.4675598"
74 id="linearGradient3683"
75 xlink:href="#linearGradient4873"
76 gradientUnits="userSpaceOnUse"
77 gradientTransform="matrix(0.51455032,0,0,0.51453856,-24.005236,9.8064595)" />
78 <linearGradient
79 id="linearGradient3603">
80 <stop
81 id="stop3605"
82 style="stop-color:#a7651c;stop-opacity:1"
83 offset="0" />
84 <stop
85 id="stop3607"
86 style="stop-color:#c8a700;stop-opacity:1"
87 offset="1" />
88 </linearGradient>
89 <linearGradient
90 x1="18.379412"
91 y1="44.980297"
92 x2="18.379412"
93 y2="3.0816143"
94 id="linearGradient3730"
95 xlink:href="#linearGradient3603"
96 gradientUnits="userSpaceOnUse"
97 gradientTransform="matrix(0.2703533,0,0,0.27035337,1.5115215,1.5115197)" />
98 <linearGradient
99 id="linearGradient3690">
100 <stop
101 id="stop3692"
102 style="stop-color:#ffeb9f;stop-opacity:1"
103 offset="0" />
104 <stop
105 id="stop3694"
106 style="stop-color:#ffd57e;stop-opacity:1"
107 offset="0.26238" />
108 <stop
109 id="stop3696"
110 style="stop-color:#ffbc43;stop-opacity:1"
111 offset="0.66093999" />
112 <stop
113 id="stop3698"
114 style="stop-color:#ff921a;stop-opacity:1"
115 offset="1" />
116 </linearGradient>
117 <radialGradient
118 cx="23.895569"
119 cy="3.9900031"
120 r="20.397499"
121 fx="23.895569"
122 fy="3.9900031"
123 id="radialGradient3728"
124 xlink:href="#linearGradient3690"
125 gradientUnits="userSpaceOnUse"
126 gradientTransform="matrix(0,0.64524082,-0.85170617,0,11.39831,-13.333564)" />
127 <radialGradient
128 cx="7.1183534"
129 cy="9.9571075"
130 r="12.671875"
131 fx="7.1183534"
132 fy="9.9571075"
133 id="radialGradient4065"
134 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7"
135 gradientUnits="userSpaceOnUse"
136 gradientTransform="matrix(0,117.18262,-143.86282,0,1693.1125,-1069.0711)" />
137 <linearGradient
138 id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7">
139 <stop
140 id="stop3750-1-0-7-6-6-1-3-9-3-7"
141 style="stop-color:#505050;stop-opacity:1"
142 offset="0" />
143 <stop
144 id="stop3752-3-7-4-0-32-8-923-0-7-3"
145 style="stop-color:#2b2b2b;stop-opacity:1"
146 offset="0.26238" />
147 <stop
148 id="stop3754-1-8-5-2-7-6-7-1-9-6"
149 style="stop-color:#0a0a0a;stop-opacity:1"
150 offset="0.704952" />
151 <stop
152 id="stop3756-1-6-2-6-6-1-96-6-0-1"
153 style="stop-color:#000000;stop-opacity:1"
154 offset="1" />
155 </linearGradient>
156 <radialGradient
157 cx="7.1183534"
158 cy="9.9571075"
159 r="12.671875"
160 fx="7.1183534"
161 fy="9.9571075"
162 id="radialGradient3249-0"
163 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5-7"
164 gradientUnits="userSpaceOnUse"
165 gradientTransform="matrix(0,117.18262,-143.86282,0,1693.1125,-1069.0711)" />
166 <linearGradient
167 id="linearGradient3895">
168 <stop
169 id="stop3897"
170 style="stop-color:#ffffff;stop-opacity:1"
171 offset="0" />
172 <stop
173 id="stop3899"
174 style="stop-color:#ffffff;stop-opacity:0.23529412"
175 offset="0.05263157" />
176 <stop
177 id="stop3901"
178 style="stop-color:#ffffff;stop-opacity:0.15686275"
179 offset="0.95056331" />
180 <stop
181 id="stop3903"
182 style="stop-color:#ffffff;stop-opacity:0.39215687"
183 offset="1" />
184 </linearGradient>
185 <linearGradient
186 x1="20"
187 y1="26.000008"
188 x2="20"
189 y2="13.000008"
190 id="linearGradient4183"
191 xlink:href="#linearGradient3680-6-6-6-3"
192 gradientUnits="userSpaceOnUse"
193 gradientTransform="translate(0,0.9999922)" />
194 <linearGradient
195 id="linearGradient3680-6-6-6-3">
196 <stop
197 id="stop3682-4-6-1-3"
198 style="stop-color:#dcdcdc;stop-opacity:1"
199 offset="0" />
200 <stop
201 id="stop3684-8-5-8-0"
202 style="stop-color:#ffffff;stop-opacity:1"
203 offset="1" />
204 </linearGradient>
205 <linearGradient
206 x1="23.99999"
207 y1="4.999989"
208 x2="23.99999"
209 y2="43"
210 id="linearGradient3982"
211 xlink:href="#linearGradient3924-1"
212 gradientUnits="userSpaceOnUse"
213 gradientTransform="translate(4e-6,1.0000062)" />
214 <linearGradient
215 id="linearGradient3924-1">
216 <stop
217 id="stop3926-3"
218 style="stop-color:#ffffff;stop-opacity:1"
219 offset="0" />
220 <stop
221 id="stop3928-91"
222 style="stop-color:#ffffff;stop-opacity:0.23529412"
223 offset="0.06316455" />
224 <stop
225 id="stop3930-6"
226 style="stop-color:#ffffff;stop-opacity:0.15686275"
227 offset="0.95056331" />
228 <stop
229 id="stop3932-6"
230 style="stop-color:#ffffff;stop-opacity:0.39215687"
231 offset="1" />
232 </linearGradient>
233 <radialGradient
234 cx="4.9929786"
235 cy="43.5"
236 r="2.5"
237 fx="4.9929786"
238 fy="43.5"
239 id="radialGradient3963"
240 xlink:href="#linearGradient3688-166-749-4"
241 gradientUnits="userSpaceOnUse"
242 gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" />
243 <linearGradient
244 id="linearGradient3688-166-749-4">
245 <stop
246 id="stop2883-3"
247 style="stop-color:#181818;stop-opacity:1"
248 offset="0" />
249 <stop
250 id="stop2885-2"
251 style="stop-color:#181818;stop-opacity:0"
252 offset="1" />
253 </linearGradient>
254 <radialGradient
255 cx="4.9929786"
256 cy="43.5"
257 r="2.5"
258 fx="4.9929786"
259 fy="43.5"
260 id="radialGradient3965"
261 xlink:href="#linearGradient3688-464-309-3"
262 gradientUnits="userSpaceOnUse"
263 gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" />
264 <linearGradient
265 id="linearGradient3688-464-309-3">
266 <stop
267 id="stop2889-6"
268 style="stop-color:#181818;stop-opacity:1"
269 offset="0" />
270 <stop
271 id="stop2891-2"
272 style="stop-color:#181818;stop-opacity:0"
273 offset="1" />
274 </linearGradient>
275 <linearGradient
276 x1="25.058096"
277 y1="47.027729"
278 x2="25.058096"
279 y2="39.999443"
280 id="linearGradient3967"
281 xlink:href="#linearGradient3702-501-757-2"
282 gradientUnits="userSpaceOnUse" />
283 <linearGradient
284 id="linearGradient3702-501-757-2">
285 <stop
286 id="stop2895-3"
287 style="stop-color:#181818;stop-opacity:0"
288 offset="0" />
289 <stop
290 id="stop2897-0"
291 style="stop-color:#181818;stop-opacity:1"
292 offset="0.5" />
293 <stop
294 id="stop2899-1"
295 style="stop-color:#181818;stop-opacity:0"
296 offset="1" />
297 </linearGradient>
298 <linearGradient
299 x1="20"
300 y1="26.000008"
301 x2="20"
302 y2="13.000008"
303 id="linearGradient3018"
304 xlink:href="#linearGradient3680-6-6-6-3"
305 gradientUnits="userSpaceOnUse"
306 gradientTransform="translate(0,0.9999922)" />
307 <radialGradient
308 cx="6.7304144"
309 cy="9.9571075"
310 r="12.671875"
311 fx="6.2001843"
312 fy="9.9571075"
313 id="radialGradient3031"
314 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8"
315 gradientUnits="userSpaceOnUse"
316 gradientTransform="matrix(0,9.4975523,-11.65996,0,140.93055,-79.160978)" />
317 <linearGradient
318 id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8">
319 <stop
320 id="stop3750-1-0-7-6-6-1-3-9"
321 style="stop-color:#ffcd7d;stop-opacity:1"
322 offset="0" />
323 <stop
324 id="stop3752-3-7-4-0-32-8-923-0"
325 style="stop-color:#fc8f36;stop-opacity:1"
326 offset="0.26238" />
327 <stop
328 id="stop3754-1-8-5-2-7-6-7-1"
329 style="stop-color:#e23a0e;stop-opacity:1"
330 offset="0.704952" />
331 <stop
332 id="stop3756-1-6-2-6-6-1-96-6"
333 style="stop-color:#ac441f;stop-opacity:1"
334 offset="1" />
335 </linearGradient>
336 <linearGradient
337 id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5">
338 <stop
339 id="stop3750-1-0-7-6-6-1-3-9-3"
340 style="stop-color:#505050;stop-opacity:1"
341 offset="0" />
342 <stop
343 id="stop3752-3-7-4-0-32-8-923-0-7"
344 style="stop-color:#2b2b2b;stop-opacity:1"
345 offset="0.26238" />
346 <stop
347 id="stop3754-1-8-5-2-7-6-7-1-9"
348 style="stop-color:#0a0a0a;stop-opacity:1"
349 offset="0.704952" />
350 <stop
351 id="stop3756-1-6-2-6-6-1-96-6-0"
352 style="stop-color:#000000;stop-opacity:1"
353 offset="1" />
354 </linearGradient>
355 <radialGradient
356 cx="6.7304144"
357 cy="9.9571075"
358 r="12.671875"
359 fx="6.2001843"
360 fy="9.9571075"
361 id="radialGradient3077"
362 xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8-5"
363 gradientUnits="userSpaceOnUse"
364 gradientTransform="matrix(0,9.4975523,-11.65996,0,136.43054,-84.660973)" />
365 <linearGradient
366 id="linearGradient3680-6-6-6-3-7">
367 <stop
368 id="stop3682-4-6-1-3-7"
369 style="stop-color:#dcdcdc;stop-opacity:1"
370 offset="0" />
371 <stop
372 id="stop3684-8-5-8-0-2"
373 style="stop-color:#ffffff;stop-opacity:1"
374 offset="1" />
375 </linearGradient>
376 <linearGradient
377 x1="20"
378 y1="26.000008"
379 x2="20"
380 y2="13.000008"
381 id="linearGradient3950"
382 xlink:href="#linearGradient3680-6-6-6-3-7"
383 gradientUnits="userSpaceOnUse"
384 gradientTransform="translate(-20,-24.000008)" />
385 <radialGradient
386 cx="8.276144"
387 cy="9.9941158"
388 r="12.671875"
389 fx="8.276144"
390 fy="9.9941158"
391 id="radialGradient3104"
392 xlink:href="#linearGradient3242"
393 gradientUnits="userSpaceOnUse"
394 gradientTransform="matrix(0,85.484079,-104.94714,0,1299.7805,-832.8559)" />
395 <linearGradient
396 x1="23.99999"
397 y1="4.999989"
398 x2="23.99999"
399 y2="43"
400 id="linearGradient4181"
401 xlink:href="#linearGradient3924-3"
402 gradientUnits="userSpaceOnUse"
403 gradientTransform="translate(5.3e-6,1.0000015)" />
404 <linearGradient
405 id="linearGradient3924-3">
406 <stop
407 id="stop3926-7"
408 style="stop-color:#ffffff;stop-opacity:1"
409 offset="0" />
410 <stop
411 id="stop3928-3"
412 style="stop-color:#ffffff;stop-opacity:0.23529412"
413 offset="0.06316455" />
414 <stop
415 id="stop3930-7"
416 style="stop-color:#ffffff;stop-opacity:0.15686275"
417 offset="0.95056331" />
418 <stop
419 id="stop3932-1"
420 style="stop-color:#ffffff;stop-opacity:0.39215687"
421 offset="1" />
422 </linearGradient>
423 <linearGradient
424 x1="167.98311"
425 y1="8.50811"
426 x2="167.98311"
427 y2="54.780239"
428 id="linearGradient4907-4"
429 xlink:href="#linearGradient5803-2-7"
430 gradientUnits="userSpaceOnUse"
431 gradientTransform="matrix(0.7037037,0,0,0.7037037,-39.333369,2.4814295)" />
432 <linearGradient
433 id="linearGradient5803-2-7">
434 <stop
435 id="stop5805-3-6"
436 style="stop-color:#fffdf3;stop-opacity:1"
437 offset="0" />
438 <stop
439 id="stop5807-0-0"
440 style="stop-color:#fbebeb;stop-opacity:1"
441 offset="1" />
442 </linearGradient>
443 <radialGradient
444 cx="8.276144"
445 cy="9.9941158"
446 r="12.671875"
447 fx="8.276144"
448 fy="9.9941158"
449 id="radialGradient6305"
450 xlink:href="#linearGradient3242"
451 gradientUnits="userSpaceOnUse"
452 gradientTransform="matrix(0,6.6677582,-8.1858766,0,105.8829,-59.462774)" />
453 <linearGradient
454 id="linearGradient3242">
455 <stop
456 id="stop3244"
457 style="stop-color:#f89b7e;stop-opacity:1"
458 offset="0" />
459 <stop
460 id="stop3246"
461 style="stop-color:#e35d4f;stop-opacity:1"
462 offset="0.26238" />
463 <stop
464 id="stop3248"
465 style="stop-color:#c6262e;stop-opacity:1"
466 offset="0.66093999" />
467 <stop
468 id="stop3250"
469 style="stop-color:#690b2c;stop-opacity:1"
470 offset="1" />
471 </linearGradient>
472 <radialGradient
473 cx="4.9929786"
474 cy="43.5"
475 r="2.5"
476 fx="4.9929786"
477 fy="43.5"
478 id="radialGradient3013"
479 xlink:href="#linearGradient3688-166-749"
480 gradientUnits="userSpaceOnUse"
481 gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" />
482 <linearGradient
483 id="linearGradient3688-166-749">
484 <stop
485 id="stop2883"
486 style="stop-color:#181818;stop-opacity:1"
487 offset="0" />
488 <stop
489 id="stop2885"
490 style="stop-color:#181818;stop-opacity:0"
491 offset="1" />
492 </linearGradient>
493 <radialGradient
494 cx="4.9929786"
495 cy="43.5"
496 r="2.5"
497 fx="4.9929786"
498 fy="43.5"
499 id="radialGradient3015"
500 xlink:href="#linearGradient3688-464-309"
501 gradientUnits="userSpaceOnUse"
502 gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" />
503 <linearGradient
504 id="linearGradient3688-464-309">
505 <stop
506 id="stop2889"
507 style="stop-color:#181818;stop-opacity:1"
508 offset="0" />
509 <stop
510 id="stop2891"
511 style="stop-color:#181818;stop-opacity:0"
512 offset="1" />
513 </linearGradient>
514 <linearGradient
515 id="linearGradient3702-501-757">
516 <stop
517 id="stop2895"
518 style="stop-color:#181818;stop-opacity:0"
519 offset="0" />
520 <stop
521 id="stop2897"
522 style="stop-color:#181818;stop-opacity:1"
523 offset="0.5" />
524 <stop
525 id="stop2899"
526 style="stop-color:#181818;stop-opacity:0"
527 offset="1" />
528 </linearGradient>
529 <linearGradient
530 x1="25.058096"
531 y1="47.027729"
532 x2="25.058096"
533 y2="39.999443"
534 id="linearGradient3141"
535 xlink:href="#linearGradient3702-501-757"
536 gradientUnits="userSpaceOnUse" />
537 <linearGradient
538 x1="0"
539 y1="0"
540 x2="1"
541 y2="0"
542 id="linearGradient3288"
543 xlink:href="#linearGradient152"
544 gradientUnits="userSpaceOnUse"
545 gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,158.172)"
546 spreadMethod="pad" />
547 <linearGradient
548 x1="0"
549 y1="0"
550 x2="1"
551 y2="0"
552 id="linearGradient152"
553 gradientUnits="userSpaceOnUse"
554 gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,158.172)"
555 spreadMethod="pad">
556 <stop
557 id="stop154"
558 style="stop-color:#f8a52c;stop-opacity:1"
559 offset="0" />
560 <stop
561 id="stop156"
562 style="stop-color:#e82e23;stop-opacity:1"
563 offset="1" />
564 </linearGradient>
565 <clipPath
566 id="clipPath148">
567 <path
568 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"
569 id="path150" />
570 </clipPath>
571 <linearGradient
572 x1="0"
573 y1="0"
574 x2="1"
575 y2="0"
576 id="linearGradient22"
577 gradientUnits="userSpaceOnUse"
578 gradientTransform="matrix(-1.04345,-131.509,-131.509,1.04345,192.696,508.172)"
579 spreadMethod="pad">
580 <stop
581 id="stop24"
582 style="stop-color:#f8a52c;stop-opacity:1"
583 offset="0" />
584 <stop
585 id="stop26"
586 style="stop-color:#e82e23;stop-opacity:1"
587 offset="1" />
588 </linearGradient>
589 <clipPath
590 id="clipPath18">
591 <path
592 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"
593 id="path20" />
594 </clipPath>
595 <linearGradient
596 id="linearGradient3702-501-757-5">
597 <stop
598 id="stop2895-5"
599 style="stop-color:#181818;stop-opacity:0"
600 offset="0" />
601 <stop
602 id="stop2897-1"
603 style="stop-color:#181818;stop-opacity:1"
604 offset="0.5" />
605 <stop
606 id="stop2899-4"
607 style="stop-color:#181818;stop-opacity:0"
608 offset="1" />
609 </linearGradient>
610 <linearGradient
611 x1="25.058096"
612 y1="47.027729"
613 x2="25.058096"
614 y2="39.999443"
615 id="linearGradient3086"
616 xlink:href="#linearGradient3702-501-757-5"
617 gradientUnits="userSpaceOnUse" />
618 <linearGradient
619 id="linearGradient3688-464-309-87">
620 <stop
621 id="stop2889-5"
622 style="stop-color:#181818;stop-opacity:1"
623 offset="0" />
624 <stop
625 id="stop2891-5"
626 style="stop-color:#181818;stop-opacity:0"
627 offset="1" />
628 </linearGradient>
629 <radialGradient
630 cx="4.9929786"
631 cy="43.5"
632 r="2.5"
633 fx="4.9929786"
634 fy="43.5"
635 id="radialGradient3084"
636 xlink:href="#linearGradient3688-464-309-87"
637 gradientUnits="userSpaceOnUse"
638 gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" />
639 <linearGradient
640 id="linearGradient3688-166-749-1">
641 <stop
642 id="stop2883-79"
643 style="stop-color:#181818;stop-opacity:1"
644 offset="0" />
645 <stop
646 id="stop2885-4"
647 style="stop-color:#181818;stop-opacity:0"
648 offset="1" />
649 </linearGradient>
650 <radialGradient
651 cx="4.9929786"
652 cy="43.5"
653 r="2.5"
654 fx="4.9929786"
655 fy="43.5"
656 id="radialGradient3082"
657 xlink:href="#linearGradient3688-166-749-1"
658 gradientUnits="userSpaceOnUse"
659 gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" />
660 <linearGradient
661 id="linearGradient3242-6">
662 <stop
663 id="stop3244-9"
664 style="stop-color:#f89b7e;stop-opacity:1"
665 offset="0" />
666 <stop
667 id="stop3246-9"
668 style="stop-color:#e35d4f;stop-opacity:1"
669 offset="0.26238" />
670 <stop
671 id="stop3248-9"
672 style="stop-color:#c6262e;stop-opacity:1"
673 offset="0.66093999" />
674 <stop
675 id="stop3250-9"
676 style="stop-color:#690b2c;stop-opacity:1"
677 offset="1" />
678 </linearGradient>
679 <radialGradient
680 cx="8.276144"
681 cy="9.9941158"
682 r="12.671875"
683 fx="8.276144"
684 fy="9.9941158"
685 id="radialGradient4680-7"
686 xlink:href="#linearGradient3242-6"
687 gradientUnits="userSpaceOnUse"
688 gradientTransform="matrix(0,3.248395,-3.9879912,0,51.891669,-37.148511)" />
689 <linearGradient
690 id="linearGradient5803-2-7-5">
691 <stop
692 id="stop5805-3-6-4"
693 style="stop-color:#fffdf3;stop-opacity:1"
694 offset="0" />
695 <stop
696 id="stop5807-0-0-9"
697 style="stop-color:#fbebeb;stop-opacity:1"
698 offset="1" />
699 </linearGradient>
700 <linearGradient
701 x1="167.98311"
702 y1="8.50811"
703 x2="167.98311"
704 y2="54.780239"
705 id="linearGradient5041-7"
706 xlink:href="#linearGradient5803-2-7-5"
707 gradientUnits="userSpaceOnUse"
708 gradientTransform="matrix(0.33333333,0,0,0.33333333,-18.000021,-6.6666402)" />
709 <linearGradient
710 id="linearGradient3924-1-2">
711 <stop
712 id="stop3926-5"
713 style="stop-color:#ffffff;stop-opacity:1"
714 offset="0" />
715 <stop
716 id="stop3928-32"
717 style="stop-color:#ffffff;stop-opacity:0.23529412"
718 offset="0.06316455" />
719 <stop
720 id="stop3930-1"
721 style="stop-color:#ffffff;stop-opacity:0.15686275"
722 offset="0.95056331" />
723 <stop
724 id="stop3932-3"
725 style="stop-color:#ffffff;stop-opacity:0.39215687"
726 offset="1" />
727 </linearGradient>
728 <linearGradient
729 x1="23.99999"
730 y1="4.999989"
731 x2="23.99999"
732 y2="43"
733 id="linearGradient4160"
734 xlink:href="#linearGradient3924-1-2"
735 gradientUnits="userSpaceOnUse"
736 gradientTransform="matrix(0.45945947,0,0,0.45945947,0.9729689,-7.0270212)" />
737 <linearGradient
738 x1="23.99999"
739 y1="4.999989"
740 x2="23.99999"
741 y2="43"
742 id="linearGradient4160-4"
743 xlink:href="#linearGradient3924-1-2-6"
744 gradientUnits="userSpaceOnUse"
745 gradientTransform="matrix(0.45945947,0,0,0.45945947,0.9729689,-7.0270212)" />
746 <linearGradient
747 id="linearGradient3924-1-2-6">
748 <stop
749 id="stop3926-5-5"
750 style="stop-color:#ffffff;stop-opacity:1"
751 offset="0" />
752 <stop
753 id="stop3928-32-3"
754 style="stop-color:#ffffff;stop-opacity:0.23529412"
755 offset="0.06316455" />
756 <stop
757 id="stop3930-1-7"
758 style="stop-color:#ffffff;stop-opacity:0.15686275"
759 offset="0.95056331" />
760 <stop
761 id="stop3932-3-0"
762 style="stop-color:#ffffff;stop-opacity:0.39215687"
763 offset="1" />
764 </linearGradient>
765 <linearGradient
766 x1="23.99999"
767 y1="-1.9506749"
768 x2="23.99999"
769 y2="57.674179"
770 id="linearGradient4207-1"
771 xlink:href="#linearGradient4269"
772 gradientUnits="userSpaceOnUse"
773 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)" />
774 <linearGradient
775 id="linearGradient3924-1-2-6-0">
776 <stop
777 id="stop3926-5-5-3"
778 style="stop-color:#ffffff;stop-opacity:1"
779 offset="0" />
780 <stop
781 id="stop3928-32-3-6"
782 style="stop-color:#ffffff;stop-opacity:0.23529412"
783 offset="0.06316455" />
784 <stop
785 id="stop3930-1-7-2"
786 style="stop-color:#ffffff;stop-opacity:0.15686275"
787 offset="0.95056331" />
788 <stop
789 id="stop3932-3-0-9"
790 style="stop-color:#ffffff;stop-opacity:0.39215687"
791 offset="1" />
792 </linearGradient>
793 <linearGradient
794 x1="23.99999"
795 y1="4.999989"
796 x2="23.99999"
797 y2="43"
798 id="linearGradient4247"
799 xlink:href="#linearGradient3924-1-2-6-0"
800 gradientUnits="userSpaceOnUse"
801 gradientTransform="matrix(0.45945947,0,0,0.45945947,-2.0270504,-2.0270449)" />
802 <linearGradient
803 x1="674.99536"
804 y1="635.92169"
805 x2="674.99536"
806 y2="662.89178"
807 id="linearGradient4285"
808 xlink:href="#linearGradient4279"
809 gradientUnits="userSpaceOnUse" />
810 <radialGradient
811 cx="11.325233"
812 cy="30.998131"
813 r="7.0953269"
814 fx="11.325233"
815 fy="30.998131"
816 id="radialGradient4297"
817 xlink:href="#linearGradient4291"
818 gradientUnits="userSpaceOnUse"
819 gradientTransform="matrix(1,0,0,0.25,0,23.248598)" />
820 <filter
821 x="-0.15516667"
822 y="-0.097828373"
823 width="1.3103333"
824 height="1.1956567"
825 color-interpolation-filters="sRGB"
826 id="filter4345">
827 <feGaussianBlur
828 id="feGaussianBlur4347"
829 stdDeviation="0.4655" />
830 </filter>
831 <linearGradient
832 x1="674.99536"
833 y1="635.92169"
834 x2="674.99536"
835 y2="662.89178"
836 id="linearGradient4285-7"
837 xlink:href="#linearGradient4279-2"
838 gradientUnits="userSpaceOnUse" />
839 <linearGradient
840 id="linearGradient4279-2">
841 <stop
842 id="stop4281-4"
843 style="stop-color:#e74545;stop-opacity:1"
844 offset="0" />
845 <stop
846 id="stop4283-7"
847 style="stop-color:#da1c1c;stop-opacity:0.99795502"
848 offset="1" />
849 </linearGradient>
850 <linearGradient
851 x1="23.99999"
852 y1="-1.9506749"
853 x2="23.99999"
854 y2="57.674179"
855 id="linearGradient4207-1-1"
856 xlink:href="#linearGradient4269-9"
857 gradientUnits="userSpaceOnUse"
858 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)" />
859 <linearGradient
860 id="linearGradient4269-9">
861 <stop
862 id="stop4271-5"
863 style="stop-color:#ffffff;stop-opacity:1"
864 offset="0" />
865 <stop
866 id="stop4273-3"
867 style="stop-color:#ffffff;stop-opacity:0.23529412"
868 offset="0.19700792" />
869 <stop
870 id="stop4275-1"
871 style="stop-color:#ffffff;stop-opacity:0.15686275"
872 offset="0.6310662" />
873 <stop
874 id="stop4277-8"
875 style="stop-color:#ffffff;stop-opacity:0.39215687"
876 offset="1" />
877 </linearGradient>
878 <linearGradient
879 x1="23.99999"
880 y1="-1.9506749"
881 x2="23.99999"
882 y2="57.674179"
883 id="linearGradient4027"
884 xlink:href="#linearGradient4269-9"
885 gradientUnits="userSpaceOnUse"
886 gradientTransform="matrix(0.45945947,0,0,0.45945947,664.4146,636.19848)" />
887 </defs>
888 <metadata
889 id="metadata7">
890 <rdf:RDF>
891 <cc:Work
892 rdf:about="">
893 <dc:format>image/svg+xml</dc:format>
894 <dc:type
895 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
896 <dc:title></dc:title>
897 </cc:Work>
898 </rdf:RDF>
899 </metadata>
900 <g
901 transform="translate(-662.78571,-633.50507)"
902 id="layer1">
903 <path
904 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"
905 transform="matrix(1,0,0,0.8490188,0,102.82045)"
906 id="path3974"
907 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" />
908 <path
909 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"
910 transform="matrix(1,0,0,0.8490188,0,102.82045)"
911 id="path3966"
912 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" />
913 <path
914 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"
915 transform="matrix(1,0,0,0.8490188,0,102.82045)"
916 id="path3974-5"
917 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" />
918 <path
919 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"
920 id="path3007"
921 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" />
922 <path
923 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"
924 id="path3007-6"
925 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" />
926 <path
927 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"
928 id="path4093"
929 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" />
930 <path
931 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"
932 transform="matrix(1.1239496,0,0,1.1239496,662.5,632.36221)"
933 id="path3168-7"
934 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" />
935 <path
936 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"
937 transform="matrix(1.1239496,0,0,1.1239496,662.5,631.36221)"
938 id="path3168"
939 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" />
940 </g>
941</svg>
0942
=== added file 'icons/import-all.png'
1Binary files icons/import-all.png 1970-01-01 00:00:00 +0000 and icons/import-all.png 2014-10-18 00:49:47 +0000 differ943Binary 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
=== added file 'icons/import.svg'
--- icons/import.svg 1970-01-01 00:00:00 +0000
+++ icons/import.svg 2014-10-18 00:49:47 +0000
@@ -0,0 +1,55 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
3 <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4 <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
5]>
6<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">
7 <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"/>
8 <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"/>
9 <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"/>
10 <linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="23.3413" y1="24" x2="119.5405" y2="114.0588">
11 <stop offset="0" style="stop-color: rgb(248, 249, 248);"/>
12 <stop offset="1" style="stop-color: rgb(231, 231, 230);"/>
13 </linearGradient>
14 <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"/>
15 <rect x="16" y="36" fill="#003A8F" width="98" height="52"/>
16 <rect x="17" y="37" fill="#FFFFFF" width="98" height="52"/>
17 <radialGradient id="XMLID_8_" cx="44" cy="46" r="94.8685" gradientUnits="userSpaceOnUse">
18 <stop offset="0" style="stop-color: rgb(83, 142, 212);"/>
19 <stop offset="1" style="stop-color: rgb(0, 25, 64);"/>
20 </radialGradient>
21 <rect x="16" y="50" fill="url(#XMLID_8_)" width="98" height="38"/>
22 <rect x="16" y="36" fill="#296096" width="98" height="14"/>
23 <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"/>
24 <linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="70.2695" y1="26.522" x2="57.2696" y2="73.522">
25 <stop offset="0" style="stop-color: rgb(101, 162, 220);"/>
26 <stop offset="0.5674" style="stop-color: rgb(78, 131, 194);"/>
27 <stop offset="1" style="stop-color: rgb(136, 174, 194);"/>
28 </linearGradient>
29 <path fill="url(#XMLID_9_)" d="M113,54.143c-30,0-84,11.429-96,22.857V37h96V54.143z"/>
30 <linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="18.6816" y1="75.5381" x2="49.1252" y2="91.7747">
31 <stop offset="0" style="stop-color: rgb(124, 130, 113);"/>
32 <stop offset="1" style="stop-color: rgb(120, 103, 85);"/>
33 </linearGradient>
34 <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"/>
35 <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"/>
36 <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"/>
37
38 <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)">
39 <stop offset="0" style="stop-color: rgb(124, 130, 113);"/>
40 <stop offset="1" style="stop-color: rgb(120, 103, 85);"/>
41 </linearGradient>
42 <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"/>
43 <linearGradient id="XMLID_12_" gradientUnits="userSpaceOnUse" x1="41" y1="47.7856" x2="101.25" y2="47.7856">
44 <stop offset="0" style="stop-color: rgb(96, 133, 185);"/>
45 <stop offset="1" style="stop-color: rgb(55, 73, 122);"/>
46 </linearGradient>
47 <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"/>
48 <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"/>
49 <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"/>
50 <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"/>
51 <path fill="#BCAC8D" d="M37,81c-2-1-5-1-5,1s0,4,0,4l7,1L37,81z"/>
52 <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"/>
53 <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"/>
54 <path fill="#53634C" d="M51,86c0,0-4-4-6-5s-4-1-4-1l2,4L51,86z"/>
55</svg>
0\ No newline at end of file56\ No newline at end of file
157
=== added file 'icons/places.svg'
--- icons/places.svg 1970-01-01 00:00:00 +0000
+++ icons/places.svg 2014-10-18 00:49:47 +0000
@@ -0,0 +1,679 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:xlink="http://www.w3.org/1999/xlink"
11 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13 width="16px"
14 height="16px"
15 id="svg4215"
16 version="1.1"
17 inkscape:version="0.48.4 r9939"
18 sodipodi:docname="places.svg"
19 inkscape:export-filename="/home/sam/places.png"
20 inkscape:export-xdpi="90"
21 inkscape:export-ydpi="90">
22 <defs
23 id="defs4217">
24 <linearGradient
25 id="linearGradient19627">
26 <stop
27 style="stop-color:#585858;stop-opacity:1;"
28 offset="0"
29 id="stop19629" />
30 <stop
31 style="stop-color:#9b9b9b;stop-opacity:1;"
32 offset="1"
33 id="stop19631" />
34 </linearGradient>
35 <linearGradient
36 inkscape:collect="always"
37 id="linearGradient15009-5-8">
38 <stop
39 style="stop-color:#383e34;stop-opacity:1"
40 offset="0"
41 id="stop15011-5-3" />
42 <stop
43 style="stop-color:#84917c;stop-opacity:1"
44 offset="1"
45 id="stop15013-7-58" />
46 </linearGradient>
47 <linearGradient
48 id="linearGradient15009-2">
49 <stop
50 style="stop-color:#303030;stop-opacity:1;"
51 offset="0"
52 id="stop15011-8" />
53 <stop
54 style="stop-color:#959595;stop-opacity:1;"
55 offset="1"
56 id="stop15013-2" />
57 </linearGradient>
58 <linearGradient
59 id="linearGradient60943">
60 <stop
61 id="stop60945"
62 offset="0"
63 style="stop-color:#95c48c;stop-opacity:1;" />
64 <stop
65 id="stop60947"
66 offset="1"
67 style="stop-color:#a6dc98;stop-opacity:1;" />
68 </linearGradient>
69 <linearGradient
70 id="linearGradient60637">
71 <stop
72 id="stop60639"
73 offset="0"
74 style="stop-color:#4c84d8;stop-opacity:1;" />
75 <stop
76 id="stop60641"
77 offset="1"
78 style="stop-color:#6b9bdc;stop-opacity:1;" />
79 </linearGradient>
80 <radialGradient
81 inkscape:collect="always"
82 xlink:href="#linearGradient14755-8"
83 id="radialGradient60893"
84 gradientUnits="userSpaceOnUse"
85 gradientTransform="matrix(1,0,0,0.57798165,0,82.135321)"
86 cx="149.375"
87 cy="194.625"
88 fx="149.375"
89 fy="194.625"
90 r="13.625" />
91 <linearGradient
92 inkscape:collect="always"
93 id="linearGradient14755-8">
94 <stop
95 style="stop-color:#000000;stop-opacity:1;"
96 offset="0"
97 id="stop14757-1" />
98 <stop
99 style="stop-color:#000000;stop-opacity:0;"
100 offset="1"
101 id="stop14759-3" />
102 </linearGradient>
103 <linearGradient
104 inkscape:collect="always"
105 id="linearGradient14991-1">
106 <stop
107 style="stop-color:#ffffff;stop-opacity:1;"
108 offset="0"
109 id="stop14993-0" />
110 <stop
111 style="stop-color:#ffffff;stop-opacity:0;"
112 offset="1"
113 id="stop14995-0" />
114 </linearGradient>
115 <linearGradient
116 inkscape:collect="always"
117 xlink:href="#linearGradient20627-8-0"
118 id="linearGradient60901"
119 gradientUnits="userSpaceOnUse"
120 gradientTransform="translate(507.9375,53.736825)"
121 x1="49.75"
122 y1="218.75"
123 x2="98.59375"
124 y2="217" />
125 <linearGradient
126 id="linearGradient20627-8-0">
127 <stop
128 style="stop-color:#f8d022;stop-opacity:1;"
129 offset="0"
130 id="stop22486-6-5" />
131 <stop
132 id="stop20631-9-6"
133 offset="1"
134 style="stop-color:#e3ce74;stop-opacity:1;" />
135 </linearGradient>
136 <linearGradient
137 inkscape:collect="always"
138 xlink:href="#linearGradient20104-9-1-6"
139 id="linearGradient60903"
140 gradientUnits="userSpaceOnUse"
141 gradientTransform="translate(507.9375,53.736825)"
142 x1="126.7462"
143 y1="210.79668"
144 x2="149.73004"
145 y2="150.20921" />
146 <linearGradient
147 inkscape:collect="always"
148 id="linearGradient20104-9-1-6">
149 <stop
150 style="stop-color:#826a00;stop-opacity:1;"
151 offset="0"
152 id="stop20106-9-6-9" />
153 <stop
154 style="stop-color:#d9b100;stop-opacity:1"
155 offset="1"
156 id="stop20108-6-6-9" />
157 </linearGradient>
158 <linearGradient
159 inkscape:collect="always"
160 xlink:href="#linearGradient20114-7-2-5-2-9"
161 id="linearGradient60905"
162 gradientUnits="userSpaceOnUse"
163 gradientTransform="translate(507.9375,68.736825)"
164 x1="113.81474"
165 y1="157.29919"
166 x2="175.08"
167 y2="155.54919" />
168 <linearGradient
169 inkscape:collect="always"
170 id="linearGradient20114-7-2-5-2-9">
171 <stop
172 style="stop-color:#888a85;stop-opacity:1;"
173 offset="0"
174 id="stop20116-5-2-3-4-0" />
175 <stop
176 style="stop-color:#a4a5a1;stop-opacity:1"
177 offset="1"
178 id="stop20118-4-5-6-9-2" />
179 </linearGradient>
180 <linearGradient
181 inkscape:collect="always"
182 xlink:href="#linearGradient22395-8-5"
183 id="linearGradient60907"
184 gradientUnits="userSpaceOnUse"
185 gradientTransform="translate(507.9375,53.736825)"
186 x1="98.5"
187 y1="173.5"
188 x2="112.75"
189 y2="169.25" />
190 <linearGradient
191 inkscape:collect="always"
192 id="linearGradient22395-8-5">
193 <stop
194 style="stop-color:#bdbdbd;stop-opacity:1;"
195 offset="0"
196 id="stop22397-0-6" />
197 <stop
198 style="stop-color:#cdcdcd;stop-opacity:1"
199 offset="1"
200 id="stop22399-6-9" />
201 </linearGradient>
202 <linearGradient
203 inkscape:collect="always"
204 xlink:href="#linearGradient20114-7-6-1"
205 id="linearGradient60911"
206 gradientUnits="userSpaceOnUse"
207 gradientTransform="translate(507.9375,68.736825)"
208 x1="130.81474"
209 y1="175.54919"
210 x2="182.08"
211 y2="175.54919" />
212 <linearGradient
213 inkscape:collect="always"
214 id="linearGradient20114-7-6-1">
215 <stop
216 style="stop-color:#888a85;stop-opacity:1;"
217 offset="0"
218 id="stop20116-5-4-8" />
219 <stop
220 style="stop-color:#a4a5a1;stop-opacity:1"
221 offset="1"
222 id="stop20118-4-2-6" />
223 </linearGradient>
224 <linearGradient
225 inkscape:collect="always"
226 xlink:href="#linearGradient20114-7-4-6-4-1"
227 id="linearGradient60913"
228 gradientUnits="userSpaceOnUse"
229 gradientTransform="translate(507.9375,53.736825)"
230 x1="130.81474"
231 y1="175.54919"
232 x2="182.08"
233 y2="175.54919" />
234 <linearGradient
235 inkscape:collect="always"
236 id="linearGradient20114-7-4-6-4-1">
237 <stop
238 style="stop-color:#888a85;stop-opacity:1;"
239 offset="0"
240 id="stop20116-5-9-2-3-4" />
241 <stop
242 style="stop-color:#a4a5a1;stop-opacity:1"
243 offset="1"
244 id="stop20118-4-3-9-0-3" />
245 </linearGradient>
246 <linearGradient
247 inkscape:collect="always"
248 xlink:href="#linearGradient22799-6-7"
249 id="linearGradient60919"
250 gradientUnits="userSpaceOnUse"
251 gradientTransform="translate(507.9375,53.736825)"
252 x1="118"
253 y1="159.375"
254 x2="103.25"
255 y2="169.875" />
256 <linearGradient
257 inkscape:collect="always"
258 id="linearGradient22799-6-7">
259 <stop
260 style="stop-color:#000000;stop-opacity:1"
261 offset="0"
262 id="stop22801-7-5" />
263 <stop
264 style="stop-color:#000000;stop-opacity:0.37280703"
265 offset="1"
266 id="stop22803-5-9" />
267 </linearGradient>
268 <linearGradient
269 id="linearGradient14670-0">
270 <stop
271 style="stop-color:#fc6c6c;stop-opacity:1;"
272 offset="0"
273 id="stop14672-2" />
274 <stop
275 style="stop-color:#f92424;stop-opacity:1;"
276 offset="1"
277 id="stop14674-7" />
278 </linearGradient>
279 <linearGradient
280 inkscape:collect="always"
281 id="linearGradient14971-4">
282 <stop
283 style="stop-color:#fabebe;stop-opacity:1;"
284 offset="0"
285 id="stop14973-7" />
286 <stop
287 style="stop-color:#fabebe;stop-opacity:0;"
288 offset="1"
289 id="stop14975-2" />
290 </linearGradient>
291 <linearGradient
292 inkscape:collect="always"
293 id="linearGradient14745-0">
294 <stop
295 style="stop-color:#ff4141;stop-opacity:1"
296 offset="0"
297 id="stop14747-5" />
298 <stop
299 style="stop-color:#cc0000;stop-opacity:1"
300 offset="1"
301 id="stop14749-3" />
302 </linearGradient>
303 <linearGradient
304 inkscape:collect="always"
305 id="linearGradient14683-3">
306 <stop
307 style="stop-color:#ffffff;stop-opacity:1;"
308 offset="0"
309 id="stop14685-5" />
310 <stop
311 style="stop-color:#ffffff;stop-opacity:0;"
312 offset="1"
313 id="stop14687-3" />
314 </linearGradient>
315 <linearGradient
316 inkscape:collect="always"
317 id="linearGradient36566">
318 <stop
319 style="stop-color:#ffffff;stop-opacity:1;"
320 offset="0"
321 id="stop36568" />
322 <stop
323 style="stop-color:#ffffff;stop-opacity:0;"
324 offset="1"
325 id="stop36570" />
326 </linearGradient>
327 <radialGradient
328 inkscape:collect="always"
329 xlink:href="#linearGradient14991-1"
330 id="radialGradient4479"
331 gradientUnits="userSpaceOnUse"
332 gradientTransform="matrix(0.11297688,-0.0292602,0.01813654,0.07002722,-6.7577806,-3.8534916)"
333 cx="80.25"
334 cy="187.73877"
335 fx="80.25"
336 fy="187.73877"
337 r="30.75" />
338 <linearGradient
339 inkscape:collect="always"
340 xlink:href="#linearGradient60637"
341 id="linearGradient4484"
342 gradientUnits="userSpaceOnUse"
343 gradientTransform="matrix(0.09997235,0,0,0.09997235,-1.3369622,-10.014789)"
344 x1="105.5"
345 y1="189"
346 x2="156.5"
347 y2="195.5" />
348 <linearGradient
349 inkscape:collect="always"
350 xlink:href="#linearGradient60943"
351 id="linearGradient4487"
352 gradientUnits="userSpaceOnUse"
353 gradientTransform="matrix(0.09997235,0,0,0.09997235,-2.309234,-12.224498)"
354 x1="58.907967"
355 y1="194.96349"
356 x2="92.707535"
357 y2="191.56073" />
358 <radialGradient
359 inkscape:collect="always"
360 xlink:href="#linearGradient15009-2"
361 id="radialGradient4490"
362 gradientUnits="userSpaceOnUse"
363 gradientTransform="matrix(0.17477181,-0.00863071,0.00354741,0.07183502,-9.6863349,-4.8589985)"
364 cx="88.25"
365 cy="218.765"
366 fx="88.25"
367 fy="218.765"
368 r="34.75" />
369 <radialGradient
370 inkscape:collect="always"
371 xlink:href="#linearGradient15009-5-8"
372 id="radialGradient4493"
373 gradientUnits="userSpaceOnUse"
374 gradientTransform="matrix(0.17477181,-0.00863071,0.00354741,0.07183502,-9.6863349,-4.8589985)"
375 cx="81.881546"
376 cy="250.70465"
377 fx="81.881546"
378 fy="250.70465"
379 r="34.75" />
380 <linearGradient
381 inkscape:collect="always"
382 xlink:href="#linearGradient19627"
383 id="linearGradient4497"
384 gradientUnits="userSpaceOnUse"
385 gradientTransform="matrix(0.10118493,0,0,0.10118493,-2.4711313,-12.467927)"
386 x1="171.2774"
387 y1="272.52652"
388 x2="171.2774"
389 y2="173.69757" />
390 <radialGradient
391 inkscape:collect="always"
392 xlink:href="#linearGradient14755-8"
393 id="radialGradient4499"
394 gradientUnits="userSpaceOnUse"
395 gradientTransform="matrix(1,0,0,0.57798165,0,82.135321)"
396 cx="149.375"
397 cy="194.625"
398 fx="149.375"
399 fy="194.625"
400 r="13.625" />
401 <radialGradient
402 inkscape:collect="always"
403 xlink:href="#linearGradient14971-4"
404 id="radialGradient4503"
405 gradientUnits="userSpaceOnUse"
406 cx="129.25"
407 cy="129.83951"
408 fx="129.25"
409 fy="129.83951"
410 r="34.93745" />
411 <radialGradient
412 inkscape:collect="always"
413 xlink:href="#linearGradient14745-0"
414 id="radialGradient4505"
415 gradientUnits="userSpaceOnUse"
416 gradientTransform="matrix(1.7826226,0,0,1.7826226,-100.09062,-90.782804)"
417 cx="127.8913"
418 cy="115.99819"
419 fx="127.8913"
420 fy="115.99819"
421 r="31.25" />
422 <radialGradient
423 inkscape:collect="always"
424 xlink:href="#linearGradient14683-3"
425 id="radialGradient4507"
426 gradientUnits="userSpaceOnUse"
427 gradientTransform="matrix(0.08293973,0,0,0.0351222,-1.3902711,-0.23397073)"
428 cx="149.48978"
429 cy="49.24028"
430 fx="149.48978"
431 fy="49.24028"
432 r="34.5" />
433 <radialGradient
434 inkscape:collect="always"
435 xlink:href="#linearGradient36566"
436 id="radialGradient4509"
437 gradientUnits="userSpaceOnUse"
438 gradientTransform="matrix(3.5960718,-1.7955579,1.4342795,3.5765632,-485.76309,114.25751)"
439 cx="151.68309"
440 cy="60.712517"
441 fx="151.68309"
442 fy="60.712517"
443 r="43.284622" />
444 <radialGradient
445 inkscape:collect="always"
446 xlink:href="#linearGradient14670-0"
447 id="radialGradient4516"
448 gradientUnits="userSpaceOnUse"
449 gradientTransform="matrix(0.1113328,0,0,0.17423427,-3.3897623,-14.009352)"
450 cx="125.57332"
451 cy="122.20717"
452 fx="125.57332"
453 fy="122.20717"
454 r="31.25" />
455 </defs>
456 <sodipodi:namedview
457 id="base"
458 pagecolor="#ffffff"
459 bordercolor="#666666"
460 borderopacity="1.0"
461 inkscape:pageopacity="0.0"
462 inkscape:pageshadow="2"
463 inkscape:zoom="1"
464 inkscape:cx="17.448447"
465 inkscape:cy="9.549479"
466 inkscape:current-layer="layer1"
467 showgrid="false"
468 inkscape:grid-bbox="true"
469 inkscape:document-units="px"
470 inkscape:window-width="1364"
471 inkscape:window-height="700"
472 inkscape:window-x="0"
473 inkscape:window-y="28"
474 inkscape:window-maximized="1"
475 showborder="false">
476 <inkscape:grid
477 type="xygrid"
478 id="grid4458"
479 empspacing="5"
480 visible="true"
481 enabled="true"
482 snapvisiblegridlinesonly="true" />
483 <inkscape:grid
484 type="xygrid"
485 id="grid5312"
486 empspacing="5"
487 visible="true"
488 enabled="true"
489 snapvisiblegridlinesonly="true"
490 spacingy="0.5px"
491 spacingx="0.5px"
492 dotted="true" />
493 </sodipodi:namedview>
494 <metadata
495 id="metadata4220">
496 <rdf:RDF>
497 <cc:Work
498 rdf:about="">
499 <dc:format>image/svg+xml</dc:format>
500 <dc:type
501 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
502 <dc:title></dc:title>
503 </cc:Work>
504 </rdf:RDF>
505 </metadata>
506 <g
507 id="layer1"
508 inkscape:label="Layer 1"
509 inkscape:groupmode="layer">
510 <path
511 sodipodi:nodetypes="ccccccccccc"
512 inkscape:connector-curvature="0"
513 id="path60799"
514 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"
515 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;" />
516 <path
517 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;"
518 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"
519 id="path60811"
520 inkscape:connector-curvature="0"
521 sodipodi:nodetypes="ccccccc" />
522 <path
523 sodipodi:nodetypes="ccccccc"
524 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;"
525 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"
526 id="path60813"
527 inkscape:connector-curvature="0" />
528 <path
529 inkscape:connector-curvature="0"
530 id="path60815"
531 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"
532 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"
533 sodipodi:nodetypes="cccccccc" />
534 <path
535 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;"
536 d="M 3.7898193,7.3642785 8.4377959,5.7705255 7.2381279,8.5197649 2.3623942,10.199414 z"
537 id="path60825"
538 inkscape:connector-curvature="0"
539 sodipodi:nodetypes="ccccc" />
540 <g
541 id="g60829"
542 style="display:inline;enable-background:new;"
543 transform="matrix(0.09719553,0,0,0.09719553,-51.08588,-17.20868)">
544 <path
545 sodipodi:nodetypes="ccccccccccc"
546 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"
547 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"
548 id="path60833"
549 inkscape:connector-curvature="0" />
550 <path
551 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"
552 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"
553 id="path60835"
554 inkscape:connector-curvature="0"
555 sodipodi:nodetypes="ccccccccc" />
556 <path
557 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"
558 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"
559 id="path60837"
560 inkscape:connector-curvature="0"
561 sodipodi:nodetypes="ccccccc" />
562 <path
563 inkscape:connector-curvature="0"
564 id="path60839"
565 d="m 596.4375,247.23682 4.75,-8.75 2,-31.75 16.52145,-3.10726 -3.77145,29.60726 -2,6 z"
566 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"
567 sodipodi:nodetypes="ccccccc" />
568 <path
569 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"
570 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"
571 id="path60843"
572 inkscape:connector-curvature="0"
573 sodipodi:nodetypes="ccccc" />
574 <path
575 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"
576 d="m 658.55124,233.17511 2.12132,13.08148 -22.62741,-10.25305 0.35355,-12.37437 z"
577 id="path60845"
578 inkscape:connector-curvature="0" />
579 <path
580 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"
581 d="m 651.48018,278.42995 0.7071,12.02081 11.31372,5.83364 -1.85616,-11.93242 z"
582 id="path60847"
583 inkscape:connector-curvature="0"
584 sodipodi:nodetypes="ccccc" />
585 <path
586 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"
587 d="m 603.4375,206.73682 17,-3.59654 19,4.09654 -4.25,32.75 -19.25,-8.5 -15,7 z"
588 id="path60853"
589 inkscape:connector-curvature="0"
590 sodipodi:nodetypes="ccccccc" />
591 </g>
592 <path
593 inkscape:connector-curvature="0"
594 id="path60859"
595 d="M 7,14.5 C 5.0964437,14.373323 2.9802468,15.200332 1.4524853,13.944797"
596 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;"
597 sodipodi:nodetypes="cc" />
598 <path
599 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"
600 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"
601 id="path5310"
602 inkscape:connector-curvature="0"
603 sodipodi:nodetypes="ccccccccccc" />
604 <path
605 sodipodi:type="arc"
606 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;"
607 id="path60863"
608 sodipodi:cx="149.375"
609 sodipodi:cy="194.625"
610 sodipodi:rx="13.625"
611 sodipodi:ry="7.875"
612 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"
613 transform="matrix(0.07540457,0,0,0.07412479,-0.25579866,-3.2535059)" />
614 <rect
615 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"
616 id="rect5314"
617 width="12"
618 height="1"
619 x="3"
620 y="2" />
621 <path
622 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"
623 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"
624 id="path60865"
625 inkscape:connector-curvature="0"
626 sodipodi:nodetypes="szsss" />
627 <path
628 transform="matrix(0.08,0,0,0.07864223,0.67997314,-3.0961612)"
629 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"
630 sodipodi:ry="31.25"
631 sodipodi:rx="31.25"
632 sodipodi:cy="96.75"
633 sodipodi:cx="129.25"
634 id="path60867"
635 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"
636 sodipodi:type="arc" />
637 <path
638 sodipodi:type="arc"
639 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"
640 id="path60869"
641 sodipodi:cx="129.25"
642 sodipodi:cy="96.75"
643 sodipodi:rx="31.25"
644 sodipodi:ry="31.25"
645 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"
646 transform="matrix(0.064,0,0,0.064,2.7601141,-2.2271289)" />
647 <path
648 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"
649 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"
650 id="path60871"
651 inkscape:connector-curvature="0" />
652 <path
653 inkscape:connector-curvature="0"
654 id="path60937"
655 d="m 6.5,12.5 c -1.98394,0.09219 -5,-1 -6,0.5"
656 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"
657 sodipodi:nodetypes="cc" />
658 <path
659 transform="translate(-0.0107232,-1.0304587)"
660 d="m 12,4 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z"
661 sodipodi:ry="1"
662 sodipodi:rx="1"
663 sodipodi:cy="4"
664 sodipodi:cx="11"
665 id="path5308"
666 style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none"
667 sodipodi:type="arc" />
668 <path
669 sodipodi:type="arc"
670 style="fill:#ffffff;fill-opacity:1;stroke:none"
671 id="path5306"
672 sodipodi:cx="11"
673 sodipodi:cy="4"
674 sodipodi:rx="1"
675 sodipodi:ry="1"
676 d="m 12,4 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z"
677 transform="translate(0.0205268,2.0329775e-8)" />
678 </g>
679</svg>
0680
=== modified file 'src/CheckerboardLayout.vala'
--- src/CheckerboardLayout.vala 2014-08-21 00:59:32 +0000
+++ src/CheckerboardLayout.vala 2014-10-18 00:49:47 +0000
@@ -357,13 +357,16 @@
357357
358 public Gdk.Pixbuf? get_image () {358 public Gdk.Pixbuf? get_image () {
359 return pixbuf;359 return pixbuf;
360 }
361
362 public Gdk.Pixbuf? get_display_image () {
363 return display_pixbuf;
360 }364 }
361365
362 public void set_image (Gdk.Pixbuf pixbuf) {366 public void set_image (Gdk.Pixbuf pixbuf) {
363 this.pixbuf = pixbuf;367 this.pixbuf = pixbuf;
364 display_pixbuf = pixbuf;368 display_pixbuf = pixbuf;
365 pixbuf_dim = Dimensions.for_pixbuf (pixbuf);369 pixbuf_dim = Dimensions.for_pixbuf (pixbuf);
366
367 recalc_size ("set_image");370 recalc_size ("set_image");
368 notify_view_altered ();371 notify_view_altered ();
369 }372 }
370373
=== modified file 'src/CollectionPage.vala'
--- src/CollectionPage.vala 2014-09-29 15:08:44 +0000
+++ src/CollectionPage.vala 2014-10-18 00:49:47 +0000
@@ -604,6 +604,10 @@
604 return false;604 return false;
605 }605 }
606606
607 public override bool is_map_display_enabled () {
608 return true;
609 }
610
607 private void on_show_sidebar () {611 private void on_show_sidebar () {
608 var app = AppWindow.get_instance () as LibraryWindow;612 var app = AppWindow.get_instance () as LibraryWindow;
609 app.set_metadata_sidebar_visible (!app.is_metadata_sidebar_visible ());613 app.set_metadata_sidebar_visible (!app.is_metadata_sidebar_visible ());
610614
=== modified file 'src/MediaDataRepresentation.vala'
--- src/MediaDataRepresentation.vala 2014-08-08 21:13:09 +0000
+++ src/MediaDataRepresentation.vala 2014-10-18 00:49:47 +0000
@@ -351,6 +351,7 @@
351 new Gee.TreeMultiMap < ImportID?, MediaSource > (ImportID.compare_func);351 new Gee.TreeMultiMap < ImportID?, MediaSource > (ImportID.compare_func);
352 private Gee.TreeSet < ImportID?> sorted_import_ids = new Gee.TreeSet < ImportID?> (ImportID.compare_func);352 private Gee.TreeSet < ImportID?> sorted_import_ids = new Gee.TreeSet < ImportID?> (ImportID.compare_func);
353 private Gee.Set<MediaSource> flagged = new Gee.HashSet<MediaSource> ();353 private Gee.Set<MediaSource> flagged = new Gee.HashSet<MediaSource> ();
354 private Gee.Set<MediaSource> gps = new Gee.HashSet<MediaSource> ();
354355
355 // This signal is fired when MediaSources are added to the collection due to a successful import.356 // This signal is fired when MediaSources are added to the collection due to a successful import.
356 // "items-added" and "contents-altered" will follow.357 // "items-added" and "contents-altered" will follow.
@@ -379,6 +380,9 @@
379 }380 }
380381
381 public virtual signal void flagged_contents_altered () {382 public virtual signal void flagged_contents_altered () {
383 }
384
385 public virtual signal void gps_contents_altered () {
382 }386 }
383387
384 public MediaSourceCollection (string name, GetSourceDatabaseKey source_key_func) {388 public MediaSourceCollection (string name, GetSourceDatabaseKey source_key_func) {
@@ -421,6 +425,18 @@
421 return false;425 return false;
422 }426 }
423427
428 public static bool has_gps (Gee.Collection<MediaSource> media) {
429 foreach (MediaSource current_media in media) {
430 if (current_media is Photo) {
431 Photo photo = current_media as Photo;
432 if (photo.get_gps_coords ().has_gps > 0)
433 return true;
434 }
435 }
436
437 return false;
438 }
439
424 public static bool has_video (Gee.Collection<MediaSource> media) {440 public static bool has_video (Gee.Collection<MediaSource> media) {
425 foreach (MediaSource current_media in media) {441 foreach (MediaSource current_media in media) {
426 if (current_media is Video) {442 if (current_media is Video) {
@@ -462,6 +478,10 @@
462 flagged_contents_altered ();478 flagged_contents_altered ();
463 }479 }
464480
481 protected virtual void notify_gps_contents_altered () {
482 gps_contents_altered ();
483 }
484
465 protected virtual void notify_media_import_starting (Gee.Collection<MediaSource> media) {485 protected virtual void notify_media_import_starting (Gee.Collection<MediaSource> media) {
466 media_import_starting (media);486 media_import_starting (media);
467 }487 }
@@ -474,6 +494,7 @@
474 Gee.ArrayList<MediaSource> to_trashcan = null;494 Gee.ArrayList<MediaSource> to_trashcan = null;
475 Gee.ArrayList<MediaSource> to_offline = null;495 Gee.ArrayList<MediaSource> to_offline = null;
476 bool flagged_altered = false;496 bool flagged_altered = false;
497 bool gps_altered = false;
477 foreach (DataObject object in items.keys) {498 foreach (DataObject object in items.keys) {
478 Alteration alteration = items.get (object);499 Alteration alteration = items.get (object);
479 MediaSource source = (MediaSource) object;500 MediaSource source = (MediaSource) object;
@@ -505,6 +526,14 @@
505 else526 else
506 flagged_altered = flagged.remove (source) || flagged_altered;527 flagged_altered = flagged.remove (source) || flagged_altered;
507 }528 }
529
530 Photo? photo = source as Photo;
531 if (photo != null) {
532 if (photo.get_gps_coords ().has_gps > 0)
533 gps_altered = gps.add (source) || gps_altered;
534 else
535 gps_altered = gps.remove (source) || gps_altered;
536 }
508 }537 }
509538
510 if (to_trashcan != null)539 if (to_trashcan != null)
@@ -514,7 +543,10 @@
514 get_offline_bin ().unlink_and_hold (to_offline);543 get_offline_bin ().unlink_and_hold (to_offline);
515544
516 if (flagged_altered)545 if (flagged_altered)
517 notify_flagged_contents_altered ();546 notify_flagged_contents_altered ();
547
548 if (gps_altered)
549 notify_gps_contents_altered ();
518550
519 base.items_altered (items);551 base.items_altered (items);
520 }552 }
@@ -523,6 +555,8 @@
523 Gee.Iterable<DataObject>? removed) {555 Gee.Iterable<DataObject>? removed) {
524 bool import_roll_changed = false;556 bool import_roll_changed = false;
525 bool flagged_altered = false;557 bool flagged_altered = false;
558 bool gps_altered = false;
559
526 if (added != null) {560 if (added != null) {
527 foreach (DataObject object in added) {561 foreach (DataObject object in added) {
528 MediaSource media = (MediaSource) object;562 MediaSource media = (MediaSource) object;
@@ -545,6 +579,14 @@
545 else579 else
546 flagged_altered = flagged.remove (media) || flagged_altered;580 flagged_altered = flagged.remove (media) || flagged_altered;
547 }581 }
582
583 Photo? photo = media as Photo;
584 if (photo != null) {
585 if (photo.get_gps_coords ().has_gps > 0)
586 gps_altered = gps.add (media) || gps_altered;
587 else
588 gps_altered = gps.remove (media) || gps_altered;
589 }
548 }590 }
549 }591 }
550592
@@ -567,6 +609,7 @@
567 }609 }
568610
569 flagged_altered = flagged.remove (media) || flagged_altered;611 flagged_altered = flagged.remove (media) || flagged_altered;
612 gps_altered = gps.remove (media) || gps_altered;
570 }613 }
571 }614 }
572615
@@ -576,6 +619,9 @@
576 if (flagged_altered)619 if (flagged_altered)
577 notify_flagged_contents_altered ();620 notify_flagged_contents_altered ();
578621
622 if (gps_altered)
623 notify_gps_contents_altered ();
624
579 base.notify_contents_altered (added, removed);625 base.notify_contents_altered (added, removed);
580 }626 }
581627
@@ -611,6 +657,10 @@
611657
612 public Gee.Collection<MediaSource> get_flagged () {658 public Gee.Collection<MediaSource> get_flagged () {
613 return flagged.read_only_view;659 return flagged.read_only_view;
660 }
661
662 public Gee.Collection<MediaSource> get_gps () {
663 return gps.read_only_view;
614 }664 }
615665
616 // The returned set of ImportID's is sorted from oldest to newest.666 // The returned set of ImportID's is sorted from oldest to newest.
617667
=== modified file 'src/MediaPage.vala'
--- src/MediaPage.vala 2014-08-28 14:41:02 +0000
+++ src/MediaPage.vala 2014-10-18 00:49:47 +0000
@@ -96,28 +96,17 @@
96}96}
9797
98public abstract class MediaPage : CheckerboardPage {98public abstract class MediaPage : CheckerboardPage {
99 public const int SORT_ORDER_ASCENDING = 0;99 public class ZoomSliderAssembly : Gtk.ToolItem {
100 public const int SORT_ORDER_DESCENDING = 1;100 public Gtk.Scale slider;
101
102 // steppings should divide evenly into (Thumbnail.MAX_SCALE - Thumbnail.MIN_SCALE)
103 public const int MANUAL_STEPPING = 16;
104 public const int SLIDER_STEPPING = 4;
105
106 public enum SortBy {
107 MIN = 1,
108 TITLE = 1,
109 EXPOSURE_DATE = 2,
110 RATING = 3,
111 MAX = 3
112 }
113
114 protected class ZoomSliderAssembly : Gtk.ToolItem {
115 private Gtk.Scale slider;
116 private Gtk.Adjustment adjustment;101 private Gtk.Adjustment adjustment;
117
118 public signal void zoom_changed ();102 public signal void zoom_changed ();
119103 public int max_scale;
104 public int min_scale;
105 public int stepping;
120 public ZoomSliderAssembly () {106 public ZoomSliderAssembly () {
107 max_scale = Thumbnail.MAX_SCALE;
108 min_scale = Thumbnail.MIN_SCALE;
109 stepping = SLIDER_STEPPING;
121 Gtk.Box zoom_group = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0);110 Gtk.Box zoom_group = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0);
122111
123 Gtk.Image zoom_out = new Gtk.Image.from_icon_name (Resources.ICON_ZOOM_OUT, Gtk.IconSize.MENU);112 Gtk.Image zoom_out = new Gtk.Image.from_icon_name (Resources.ICON_ZOOM_OUT, Gtk.IconSize.MENU);
@@ -132,8 +121,8 @@
132 // virgin ZoomSliderAssemblies are created such that they have whatever value is121 // virgin ZoomSliderAssemblies are created such that they have whatever value is
133 // persisted in the configuration system for the photo thumbnail scale122 // persisted in the configuration system for the photo thumbnail scale
134 int persisted_scale = Config.Facade.get_instance ().get_photo_thumbnail_scale ();123 int persisted_scale = Config.Facade.get_instance ().get_photo_thumbnail_scale ();
135 adjustment = new Gtk.Adjustment (ZoomSliderAssembly.scale_to_slider (persisted_scale), 0,124 adjustment = new Gtk.Adjustment (scale_to_slider (persisted_scale), 0,
136 ZoomSliderAssembly.scale_to_slider (Thumbnail.MAX_SCALE), 1, 10, 0);125 scale_to_slider (get_max_scale ()), 1, 10, 0);
137126
138 slider = new Gtk.Scale (Gtk.Orientation.HORIZONTAL, adjustment);127 slider = new Gtk.Scale (Gtk.Orientation.HORIZONTAL, adjustment);
139 slider.value_changed.connect (on_slider_changed);128 slider.value_changed.connect (on_slider_changed);
@@ -155,18 +144,37 @@
155 add (zoom_group);144 add (zoom_group);
156 }145 }
157146
158 public static double scale_to_slider (int value) {147 public void set_slider_scale (int min, int max, int start) {
159 assert (value >= Thumbnail.MIN_SCALE);148 this.min_scale = min;
160 assert (value <= Thumbnail.MAX_SCALE);149 this.max_scale = max;
161150 slider.adjustment = new Gtk.Adjustment (scale_to_slider (start), 0,
162 return (double) ((value - Thumbnail.MIN_SCALE) / SLIDER_STEPPING);151 scale_to_slider (get_max_scale ()), 1, 10, 0);
163 }152 }
164153
165 public static int slider_to_scale (double value) {154 public virtual int get_max_scale () {
166 int res = ((int) (value * SLIDER_STEPPING)) + Thumbnail.MIN_SCALE;155 return max_scale;
167156 }
168 assert (res >= Thumbnail.MIN_SCALE);157
169 assert (res <= Thumbnail.MAX_SCALE);158 public virtual int get_min_scale () {
159 return min_scale;
160 }
161
162 public virtual int get_stepping () {
163 return stepping;
164 }
165
166 public double scale_to_slider (int value) {
167 assert (value >= get_min_scale ());
168 assert (value <= get_max_scale ());
169
170 return (double) ((value - get_min_scale ()) / get_stepping ());
171 }
172
173 public int slider_to_scale (double value) {
174 int res = ((int) (value * get_stepping ())) + get_min_scale ();
175
176 assert (res >= get_min_scale ());
177 assert (res <= get_max_scale ());
170178
171 return res;179 return res;
172 }180 }
@@ -186,11 +194,11 @@
186 }194 }
187195
188 public void snap_to_min () {196 public void snap_to_min () {
189 slider.set_value (scale_to_slider (Thumbnail.MIN_SCALE));197 slider.set_value (scale_to_slider (get_min_scale ()));
190 }198 }
191199
192 public void snap_to_max () {200 public void snap_to_max () {
193 slider.set_value (scale_to_slider (Thumbnail.MAX_SCALE));201 slider.set_value (scale_to_slider (get_max_scale ()));
194 }202 }
195203
196 public void increase_step () {204 public void increase_step () {
@@ -223,6 +231,22 @@
223 }231 }
224 }232 }
225233
234 public const int SORT_ORDER_ASCENDING = 0;
235 public const int SORT_ORDER_DESCENDING = 1;
236
237 // steppings should divide evenly into (Thumbnail.MAX_SCALE - Thumbnail.MIN_SCALE)
238 public const int MANUAL_STEPPING = 16;
239 public const int SLIDER_STEPPING = 4;
240
241
242 public enum SortBy {
243 MIN = 1,
244 TITLE = 1,
245 EXPOSURE_DATE = 2,
246 RATING = 3,
247 MAX = 3
248 }
249
226 private ZoomSliderAssembly? connected_slider = null;250 private ZoomSliderAssembly? connected_slider = null;
227 private DragAndDropHandler dnd_handler = null;251 private DragAndDropHandler dnd_handler = null;
228 private MediaViewTracker tracker;252 private MediaViewTracker tracker;
@@ -236,14 +260,14 @@
236260
237 get_view ().freeze_notifications ();261 get_view ().freeze_notifications ();
238 get_view ().set_property (CheckerboardItem.PROP_SHOW_TITLES,262 get_view ().set_property (CheckerboardItem.PROP_SHOW_TITLES,
239 Config.Facade.get_instance ().get_display_photo_titles ());263 Config.Facade.get_instance ().get_display_photo_titles ());
240 get_view ().set_property (CheckerboardItem.PROP_SHOW_COMMENTS,264 get_view ().set_property (CheckerboardItem.PROP_SHOW_COMMENTS,
241 Config.Facade.get_instance ().get_display_photo_comments ());265 Config.Facade.get_instance ().get_display_photo_comments ());
242 get_view ().set_property (Thumbnail.PROP_SHOW_TAGS,266 get_view ().set_property (Thumbnail.PROP_SHOW_TAGS,
243 Config.Facade.get_instance ().get_display_photo_tags ());267 Config.Facade.get_instance ().get_display_photo_tags ());
244 get_view ().set_property (Thumbnail.PROP_SIZE, get_thumb_size ());268 get_view ().set_property (Thumbnail.PROP_SIZE, get_thumb_size ());
245 get_view ().set_property (Thumbnail.PROP_SHOW_RATINGS,269 get_view ().set_property (Thumbnail.PROP_SHOW_RATINGS,
246 Config.Facade.get_instance ().get_display_photo_ratings ());270 Config.Facade.get_instance ().get_display_photo_ratings ());
247 get_view ().thaw_notifications ();271 get_view ().thaw_notifications ();
248272
249 // enable drag-and-drop export of media273 // enable drag-and-drop export of media
@@ -490,7 +514,7 @@
490 }514 }
491515
492 protected override void on_rating_widget_activate () {516 protected override void on_rating_widget_activate () {
493 on_set_rating (Resources.int_to_rating(rating_menu_item.rating_value));517 on_set_rating (Resources.int_to_rating (rating_menu_item.rating_value));
494 }518 }
495519
496 private void update_development_menu_item_sensitivity () {520 private void update_development_menu_item_sensitivity () {
@@ -686,7 +710,7 @@
686 break;710 break;
687711
688 case "5":712 case "5":
689 on_set_rating (Rating.FIVE); 713 on_set_rating (Rating.FIVE);
690 break;714 break;
691715
692 case "0":716 case "0":
@@ -900,7 +924,7 @@
900924
901 if (get_view ().get_selected_count () > 0) {925 if (get_view ().get_selected_count () > 0) {
902 get_command_manager ().execute (new TrashUntrashPhotosCommand (926 get_command_manager ().execute (new TrashUntrashPhotosCommand (
903 (Gee.Collection<MediaSource>) get_view ().get_selected_sources (), true));927 (Gee.Collection<MediaSource>) get_view ().get_selected_sources (), true));
904 }928 }
905929
906 if ((restore_point != null) && (get_view ().contains (restore_point))) {930 if ((restore_point != null) && (get_view ().contains (restore_point))) {
@@ -1171,7 +1195,7 @@
1171 }1195 }
11721196
1173 public static Gtk.ToolButton create_sidebar_button () {1197 public static Gtk.ToolButton create_sidebar_button () {
1174 var show_sidebar_button = new Gtk.ToolButton (null,null);1198 var show_sidebar_button = new Gtk.ToolButton (null, null);
1175 show_sidebar_button.set_icon_name (Resources.SHOW_PANE);1199 show_sidebar_button.set_icon_name (Resources.SHOW_PANE);
1176 show_sidebar_button.set_label (Resources.TOGGLE_METAPANE_LABEL);1200 show_sidebar_button.set_label (Resources.TOGGLE_METAPANE_LABEL);
1177 show_sidebar_button.set_tooltip_text (Resources.TOGGLE_METAPANE_TOOLTIP);1201 show_sidebar_button.set_tooltip_text (Resources.TOGGLE_METAPANE_TOOLTIP);
11781202
=== modified file 'src/Page.vala'
--- src/Page.vala 2014-09-29 15:08:44 +0000
+++ src/Page.vala 2014-10-18 00:49:47 +0000
@@ -166,6 +166,10 @@
166 protected virtual void on_rating_widget_activate () {166 protected virtual void on_rating_widget_activate () {
167 }167 }
168168
169 public virtual bool is_map_display_enabled () {
170 return false;
171 }
172
169 // This is called by the page173 // This is called by the page
170 // controller when it has removed this page ... pages should override174 // controller when it has removed this page ... pages should override
171 // this (or the signal) to clean up175 // this (or the signal) to clean up
@@ -1323,6 +1327,10 @@
1323 Resources.style_widget (this, Resources.PAGE_STYLESHEET);1327 Resources.style_widget (this, Resources.PAGE_STYLESHEET);
1324 }1328 }
13251329
1330 protected CheckerboardPage.no_layout (string page_name) {
1331 base (page_name);
1332 }
1333
1326 public void init_item_context_menu (string path) {1334 public void init_item_context_menu (string path) {
1327 item_context_menu_path = path;1335 item_context_menu_path = path;
1328 }1336 }
@@ -1379,7 +1387,7 @@
1379 KeyboardModifiers modifiers) {1387 KeyboardModifiers modifiers) {
1380 }1388 }
13811389
1382 public CheckerboardLayout get_checkerboard_layout () {1390 public CheckerboardLayout? get_checkerboard_layout () {
1383 return layout;1391 return layout;
1384 }1392 }
13851393
@@ -1391,7 +1399,8 @@
1391 }1399 }
13921400
1393 public override void switching_from () {1401 public override void switching_from () {
1394 layout.set_in_view (false);1402 if (layout != null)
1403 layout.set_in_view (false);
1395 get_search_view_filter ().refresh.disconnect (on_view_filter_refresh);1404 get_search_view_filter ().refresh.disconnect (on_view_filter_refresh);
13961405
1397 // unselect everything so selection won't persist after page loses focus1406 // unselect everything so selection won't persist after page loses focus
@@ -1400,7 +1409,8 @@
1400 }1409 }
14011410
1402 public override void switched_to () {1411 public override void switched_to () {
1403 layout.set_in_view (true);1412 if (layout != null)
1413 layout.set_in_view (true);
1404 get_search_view_filter ().refresh.connect (on_view_filter_refresh);1414 get_search_view_filter ().refresh.connect (on_view_filter_refresh);
1405 on_view_filter_refresh ();1415 on_view_filter_refresh ();
14061416
@@ -1446,7 +1456,7 @@
1446 update_view_filter_message ();1456 update_view_filter_message ();
1447 }1457 }
14481458
1449 private void update_view_filter_message () {1459 protected virtual void update_view_filter_message () {
1450 var window = AppWindow.get_instance () as LibraryWindow;1460 var window = AppWindow.get_instance () as LibraryWindow;
1451 warn_if_fail (window != null);1461 warn_if_fail (window != null);
1452 if (window != null)1462 if (window != null)
@@ -1462,15 +1472,19 @@
1462 }1472 }
14631473
1464 public void set_page_message (string message) {1474 public void set_page_message (string message) {
1465 layout.set_message (message);1475 if (layout != null) {
1466 if (is_in_view ())1476 layout.set_message (message);
1467 layout.queue_draw ();1477 if (is_in_view ())
1478 layout.queue_draw ();
1479 }
1468 }1480 }
14691481
1470 public void unset_page_message () {1482 public void unset_page_message () {
1471 layout.unset_message ();1483 if (layout != null) {
1472 if (is_in_view ())1484 layout.unset_message ();
1473 layout.queue_draw ();1485 if (is_in_view ())
1486 layout.queue_draw ();
1487 }
1474 }1488 }
14751489
1476 public override void set_page_name (string name) {1490 public override void set_page_name (string name) {
14771491
=== modified file 'src/Photo.vala'
--- src/Photo.vala 2014-08-25 01:41:46 +0000
+++ src/Photo.vala 2014-10-18 00:49:47 +0000
@@ -158,7 +158,7 @@
158// particular photo without modifying the backing image file. The interface allows for158// particular photo without modifying the backing image file. The interface allows for
159// transformations to be stored persistently elsewhere or in memory until they're committed en159// transformations to be stored persistently elsewhere or in memory until they're committed en
160// masse to an image file.160// masse to an image file.
161public abstract class Photo : PhotoSource, Dateable {161public abstract class Photo : PhotoSource, Dateable, Positionable {
162 // Need to use "thumb" rather than "photo" for historical reasons -- this name is used162 // Need to use "thumb" rather than "photo" for historical reasons -- this name is used
163 // directly to load thumbnails from disk by already-existing filenames163 // directly to load thumbnails from disk by already-existing filenames
164 public const string TYPENAME = "thumb";164 public const string TYPENAME = "thumb";
@@ -241,7 +241,7 @@
241241
242 public PhotoTransformationStateImpl (Photo photo, Orientation orientation,242 public PhotoTransformationStateImpl (Photo photo, Orientation orientation,
243 Gee.HashMap<string, KeyValueMap>? transformations, PixelTransformer? transformer,243 Gee.HashMap<string, KeyValueMap>? transformations, PixelTransformer? transformer,
244 PixelTransformationBundle? adjustments,Gee.HashMap<string, KeyValueMap>? original_transformations, bool enhanced) {244 PixelTransformationBundle? adjustments, Gee.HashMap<string, KeyValueMap>? original_transformations, bool enhanced) {
245 this.photo = photo;245 this.photo = photo;
246 this.orientation = orientation;246 this.orientation = orientation;
247 this.transformations = copy_transformations (transformations);247 this.transformations = copy_transformations (transformations);
@@ -266,7 +266,7 @@
266266
267 public Gee.HashMap<string, KeyValueMap>? get_transformations () {267 public Gee.HashMap<string, KeyValueMap>? get_transformations () {
268 return copy_transformations (transformations);268 return copy_transformations (transformations);
269 } 269 }
270270
271 public Gee.HashMap<string, KeyValueMap>? get_original_transformations () {271 public Gee.HashMap<string, KeyValueMap>? get_original_transformations () {
272 return copy_transformations (original_transformations);272 return copy_transformations (original_transformations);
@@ -1171,6 +1171,7 @@
1171 Orientation orientation = Orientation.TOP_LEFT;1171 Orientation orientation = Orientation.TOP_LEFT;
1172 time_t exposure_time = 0;1172 time_t exposure_time = 0;
1173 string title = "";1173 string title = "";
1174 GpsCoords gps_coords = GpsCoords();
1174 string comment = "";1175 string comment = "";
1175 Rating rating = Rating.UNRATED;1176 Rating rating = Rating.UNRATED;
11761177
@@ -1186,6 +1187,7 @@
11861187
1187 orientation = detected.metadata.get_orientation ();1188 orientation = detected.metadata.get_orientation ();
1188 title = detected.metadata.get_title ();1189 title = detected.metadata.get_title ();
1190 gps_coords = detected.metadata.get_gps_coords();
1189 comment = detected.metadata.get_comment ();1191 comment = detected.metadata.get_comment ();
1190 params.keywords = detected.metadata.get_keywords ();1192 params.keywords = detected.metadata.get_keywords ();
1191 rating = detected.metadata.get_rating ();1193 rating = detected.metadata.get_rating ();
@@ -1221,6 +1223,7 @@
1221 params.row.flags = 0;1223 params.row.flags = 0;
1222 params.row.master.file_format = detected.file_format;1224 params.row.master.file_format = detected.file_format;
1223 params.row.title = title;1225 params.row.title = title;
1226 params.row.gps_coords = gps_coords;
1224 params.row.comment = comment;1227 params.row.comment = comment;
1225 params.row.rating = rating;1228 params.row.rating = rating;
12261229
@@ -1261,6 +1264,7 @@
1261 params.row.flags = 0;1264 params.row.flags = 0;
1262 params.row.master.file_format = PhotoFileFormat.JFIF;1265 params.row.master.file_format = PhotoFileFormat.JFIF;
1263 params.row.title = null;1266 params.row.title = null;
1267 params.row.gps_coords = GpsCoords();
1264 params.row.comment = null;1268 params.row.comment = null;
1265 params.row.rating = Rating.UNRATED;1269 params.row.rating = Rating.UNRATED;
12661270
@@ -1414,6 +1418,8 @@
1414 updated_row.master.original_orientation = backing.original_orientation;1418 updated_row.master.original_orientation = backing.original_orientation;
1415 }1419 }
14161420
1421 GpsCoords gps_coords = GpsCoords ();
1422
1417 if (detected.metadata != null) {1423 if (detected.metadata != null) {
1418 MetadataDateTime? date_time = detected.metadata.get_exposure_date_time ();1424 MetadataDateTime? date_time = detected.metadata.get_exposure_date_time ();
1419 if (date_time != null && updated_row.exposure_time != date_time.get_timestamp ())1425 if (date_time != null && updated_row.exposure_time != date_time.get_timestamp ())
@@ -1422,6 +1428,10 @@
1422 if (updated_row.title != detected.metadata.get_title ())1428 if (updated_row.title != detected.metadata.get_title ())
1423 list += "metadata:name";1429 list += "metadata:name";
14241430
1431 gps_coords = detected.metadata.get_gps_coords ();
1432 if (updated_row.gps_coords != gps_coords)
1433 list += "metadata:gps";
1434
1425 if (updated_row.comment != detected.metadata.get_comment ())1435 if (updated_row.comment != detected.metadata.get_comment ())
1426 list += "metadata:comment";1436 list += "metadata:comment";
14271437
@@ -1442,6 +1452,7 @@
1442 if (date_time != null)1452 if (date_time != null)
1443 updated_row.exposure_time = date_time.get_timestamp ();1453 updated_row.exposure_time = date_time.get_timestamp ();
14441454
1455 updated_row.gps_coords = gps_coords;
1445 updated_row.title = detected.metadata.get_title ();1456 updated_row.title = detected.metadata.get_title ();
1446 updated_row.comment = detected.metadata.get_comment ();1457 updated_row.comment = detected.metadata.get_comment ();
1447 updated_row.rating = detected.metadata.get_rating ();1458 updated_row.rating = detected.metadata.get_rating ();
@@ -1551,6 +1562,7 @@
1551 }1562 }
15521563
1553 if (reimport_state.metadata != null) {1564 if (reimport_state.metadata != null) {
1565 set_gps_coords (reimport_state.metadata.get_gps_coords());
1554 set_title (reimport_state.metadata.get_title ());1566 set_title (reimport_state.metadata.get_title ());
1555 set_comment (reimport_state.metadata.get_comment ());1567 set_comment (reimport_state.metadata.get_comment ());
1556 set_rating (reimport_state.metadata.get_rating ());1568 set_rating (reimport_state.metadata.get_rating ());
@@ -1961,6 +1973,12 @@
1961 return row.event_id;1973 return row.event_id;
1962 }1974 }
19631975
1976 public string get_location () {
1977 lock (row) {
1978 return row.location;
1979 }
1980 }
1981
1964 // This is NOT thread-safe.1982 // This is NOT thread-safe.
1965 public inline int64 get_raw_event_id () {1983 public inline int64 get_raw_event_id () {
1966 return row.event_id.id;1984 return row.event_id.id;
@@ -2132,7 +2150,7 @@
21322150
2133 if (committed)2151 if (committed)
2134 notify_altered (new Alteration ("metadata", "master-dirty"));2152 notify_altered (new Alteration ("metadata", "master-dirty"));
2135 } 2153 }
21362154
2137 public bool is_enhanced () {2155 public bool is_enhanced () {
2138 lock (row) {2156 lock (row) {
@@ -2216,6 +2234,17 @@
2216 }2234 }
2217 }2235 }
22182236
2237 public bool set_location (string? location) {
2238 lock (row) {
2239 bool committed = PhotoTable.get_instance ().set_location (row.photo_id, location);
2240
2241 if (committed)
2242 row.location = location;
2243
2244 return committed;
2245 }
2246 }
2247
2219 public override string to_string () {2248 public override string to_string () {
2220 return "[%s] %s%s".printf (get_photo_id ().id.to_string (), get_master_reader ().get_filepath (),2249 return "[%s] %s%s".printf (get_photo_id ().id.to_string (), get_master_reader ().get_filepath (),
2221 !is_master_baseline () ? " (" + get_actual_file ().get_path () + ")" : "");2250 !is_master_baseline () ? " (" + get_actual_file ().get_path () + ")" : "");
@@ -2552,7 +2581,7 @@
25522581
2553 return adjustments.copy ();2582 return adjustments.copy ();
2554 }2583 }
2555 } 2584 }
25562585
2557 // This method *must* be called with row locked.2586 // This method *must* be called with row locked.
2558 private PixelTransformationBundle locked_original_color_adjustments () {2587 private PixelTransformationBundle locked_original_color_adjustments () {
@@ -2563,14 +2592,14 @@
2563 map = row.original_transforms.get ("adjustments");2592 map = row.original_transforms.get ("adjustments");
2564 if (map != null)2593 if (map != null)
2565 map = map.copy ();2594 map = map.copy ();
2566 } else 2595 } else
2567 map = new KeyValueMap ("adjustments");2596 map = new KeyValueMap ("adjustments");
25682597
2569 if (map == null)2598 if (map == null)
2570 original_adjustments.set_to_identity ();2599 original_adjustments.set_to_identity ();
2571 else2600 else
2572 original_adjustments.load (map);2601 original_adjustments.load (map);
2573 2602
2574 return original_adjustments;2603 return original_adjustments;
2575 }2604 }
25762605
@@ -2580,7 +2609,7 @@
2580 lock (row) {2609 lock (row) {
2581 KeyValueMap map = get_transformation ("adjustments");2610 KeyValueMap map = get_transformation ("adjustments");
2582 if (map == null)2611 if (map == null)
2583 map = new KeyValueMap("adjustments");2612 map = new KeyValueMap ("adjustments");
2584 return map;2613 return map;
2585 }2614 }
2586 }2615 }
@@ -2602,7 +2631,7 @@
2602 return get_color_adjustments ().get_transformation (type);2631 return get_color_adjustments ().get_transformation (type);
2603 }2632 }
26042633
2605 public void set_color_adjustments (PixelTransformationBundle new_adjustments) { 2634 public void set_color_adjustments (PixelTransformationBundle new_adjustments) {
2606 /* if every transformation in 'new_adjustments' is the identity, then just remove all2635 /* if every transformation in 'new_adjustments' is the identity, then just remove all
2607 adjustments from the database */2636 adjustments from the database */
2608 set_enhanced (false);2637 set_enhanced (false);
@@ -2749,6 +2778,28 @@
2749 }2778 }
2750 }2779 }
27512780
2781 public GpsCoords get_gps_coords () {
2782 lock (row) {
2783 return row.gps_coords;
2784 }
2785 }
2786
2787 public void set_gps_coords (GpsCoords gps_coords) {
2788 DatabaseError dberr = null;
2789 lock (row) {
2790 try {
2791 PhotoTable.get_instance ().set_gps_coords (row.photo_id, gps_coords);
2792 row.gps_coords = gps_coords;
2793 } catch (DatabaseError err) {
2794 dberr = err;
2795 }
2796 }
2797 if (dberr == null)
2798 notify_altered (new Alteration ("metadata", "gps"));
2799 else
2800 warning ("Unable to write gps coordinates for %s: %s", to_string (), dberr.message);
2801 }
2802
2752 public bool has_alterations () {2803 public bool has_alterations () {
2753 MetadataDateTime? date_time = null;2804 MetadataDateTime? date_time = null;
2754 string? title = null;2805 string? title = null;
@@ -2930,7 +2981,7 @@
29302981
2931 return PhotoTable.get_instance ().set_original_transforms (row.photo_id, trans);2982 return PhotoTable.get_instance ().set_original_transforms (row.photo_id, trans);
2932 }2983 }
2933 } 2984 }
29342985
2935 private bool clear_original_transforms () {2986 private bool clear_original_transforms () {
2936 lock (row) {2987 lock (row) {
@@ -3575,7 +3626,7 @@
3575 debug ("Exporting full-sized copy of %s to %s", to_string (), writer.get_filepath ());3626 debug ("Exporting full-sized copy of %s to %s", to_string (), writer.get_filepath ());
35763627
3577 export_reader.get_file ().copy (dest_file,3628 export_reader.get_file ().copy (dest_file,
3578 FileCopyFlags.OVERWRITE | FileCopyFlags.TARGET_DEFAULT_PERMS, null, null);3629 FileCopyFlags.OVERWRITE | FileCopyFlags.TARGET_DEFAULT_PERMS, null, null);
35793630
3580 // If asking for an full-sized file and there are no alterations (transformations or EXIF)3631 // If asking for an full-sized file and there are no alterations (transformations or EXIF)
3581 // *and* this is a copy of the original backing *and* there's no user metadata or title *and* metadata should be exported, then done3632 // *and* this is a copy of the original backing *and* there's no user metadata or title *and* metadata should be exported, then done
@@ -4422,7 +4473,7 @@
4422 apply_timer.stop ();4473 apply_timer.stop ();
4423 debug ("Auto-Enhance apply time: %f sec", apply_timer.elapsed ());4474 debug ("Auto-Enhance apply time: %f sec", apply_timer.elapsed ());
4424#endif4475#endif
4425 set_enhanced(true);4476 set_enhanced (true);
4426 return true;4477 return true;
4427 }4478 }
44284479
@@ -4437,8 +4488,7 @@
4437 transformer = null;4488 transformer = null;
4438 if (result)4489 if (result)
4439 notify_altered (new Alteration ("image", "color-adjustments"));4490 notify_altered (new Alteration ("image", "color-adjustments"));
4440 }4491 } else
4441 else
4442 set_color_adjustments (locked_original_color_adjustments ());4492 set_color_adjustments (locked_original_color_adjustments ());
4443 set_enhanced (false);4493 set_enhanced (false);
4444 return true;4494 return true;
@@ -4971,6 +5021,11 @@
4971 this.import_keywords = null;5021 this.import_keywords = null;
49725022
4973 thumbnail_scheduler = new OneShotScheduler ("LibraryPhoto", generate_thumbnails);5023 thumbnail_scheduler = new OneShotScheduler ("LibraryPhoto", generate_thumbnails);
5024 // import gps coords of photos imported with prior versions of shotwell
5025 if (row.gps_coords.has_gps == -1) {
5026 var gps_import_scheduler = new OneShotScheduler ("LibraryPhoto", import_gps_metadata);
5027 gps_import_scheduler.at_priority_idle (Priority.LOW);
5028 }
49745029
4975 // if marked in a state where they're held in an orphanage, rehydrate their backlinks5030 // if marked in a state where they're held in an orphanage, rehydrate their backlinks
4976 if ((row.flags & (FLAG_TRASH | FLAG_OFFLINE)) != 0)5031 if ((row.flags & (FLAG_TRASH | FLAG_OFFLINE)) != 0)
@@ -5079,6 +5134,11 @@
5079 global.notify_baseline_reimported (this, metadata);5134 global.notify_baseline_reimported (this, metadata);
5080 }5135 }
50815136
5137 private void import_gps_metadata () {
5138 GpsCoords gps_coords = get_metadata ().get_gps_coords ();
5139 set_gps_coords (gps_coords);
5140 }
5141
5082 private void generate_thumbnails () {5142 private void generate_thumbnails () {
5083 try {5143 try {
5084 ThumbnailCache.import_from_source (this, true);5144 ThumbnailCache.import_from_source (this, true);
50855145
=== modified file 'src/PhotoPage.vala'
--- src/PhotoPage.vala 2014-09-13 03:34:09 +0000
+++ src/PhotoPage.vala 2014-10-18 00:49:47 +0000
@@ -567,6 +567,10 @@
567 app.set_metadata_sidebar_visible (!app.is_metadata_sidebar_visible ());567 app.set_metadata_sidebar_visible (!app.is_metadata_sidebar_visible ());
568 update_sidebar_action (!app.is_metadata_sidebar_visible ());568 update_sidebar_action (!app.is_metadata_sidebar_visible ());
569 }569 }
570
571 public override bool is_map_display_enabled () {
572 return true;
573 }
570574
571 private void on_zoom_slider_value_changed () {575 private void on_zoom_slider_value_changed () {
572 ZoomState new_zoom_state = ZoomState.rescale (get_zoom_state (), zoom_slider.get_value ());576 ZoomState new_zoom_state = ZoomState.rescale (get_zoom_state (), zoom_slider.get_value ());
573577
=== modified file 'src/Resources.vala'
--- src/Resources.vala 2014-10-07 03:15:08 +0000
+++ src/Resources.vala 2014-10-18 00:49:47 +0000
@@ -88,6 +88,13 @@
88public const string PUBLISH = "applications-internet";88public const string PUBLISH = "applications-internet";
89public const string EDIT_FLAG= "edit-flag";89public const string EDIT_FLAG= "edit-flag";
90public const string MERGE = "object-merge";90public const string MERGE = "object-merge";
91public const string MAP_PAGE = "places";
92
93public const string ICON_GPS_MARKER = "gps-marker.svg";
94public const string ICON_GPS_MARKER_SELECTED = "gps-marker-selected.svg";
95public const string MAP = "applications-geography";
96public const string MAP_GEOLOGY = "applications-geology";
97public const string MAP_EARTH = "earth_map.svg";
9198
92public const string ICON_APP = "multimedia-photo-manager";99public const string ICON_APP = "multimedia-photo-manager";
93public const string ICON_APP16 = "multimedia-photo-manager";100public const string ICON_APP16 = "multimedia-photo-manager";
@@ -793,7 +800,8 @@
793800
794 File icons_dir = AppDirs.get_resources_dir ().get_child ("icons");801 File icons_dir = AppDirs.get_resources_dir ().get_child ("icons");
795 add_stock_icon (icons_dir.get_child ("pin-toolbar.svg"), PIN_TOOLBAR);802 add_stock_icon (icons_dir.get_child ("pin-toolbar.svg"), PIN_TOOLBAR);
796803 add_stock_icon (icons_dir.get_child ("earth_map.svg"), MAP_EARTH);
804 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (MAP_PAGE), MAP_PAGE);
797 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (ADJUST), ADJUST);805 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (ADJUST), ADJUST);
798 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (ICON_SINGLE_PHOTO), ICON_SINGLE_PHOTO);806 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (ICON_SINGLE_PHOTO), ICON_SINGLE_PHOTO);
799 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (ICON_CAMERAS), ICON_CAMERAS);807 add_stock_icon_from_themed_icon (new GLib.ThemedIcon (ICON_CAMERAS), ICON_CAMERAS);
800808
=== modified file 'src/SearchFilter.vala'
--- src/SearchFilter.vala 2014-08-28 12:44:53 +0000
+++ src/SearchFilter.vala 2014-10-18 00:49:47 +0000
@@ -345,8 +345,16 @@
345 private Gtk.SearchEntry search_entry;345 private Gtk.SearchEntry search_entry;
346 private Gtk.ComboBoxText rating_button;346 private Gtk.ComboBoxText rating_button;
347 private SearchViewFilter? search_filter = null;347 private SearchViewFilter? search_filter = null;
348 private Gtk.Toolbar toolbar;348 public Gtk.Toolbar toolbar;
349 private Gtk.Label label_type;
350 private Gtk.Label label_flagged;
349 private Gtk.Label label_rating;351 private Gtk.Label label_rating;
352 private Gtk.ToggleToolButton toolbtn_photos;
353 private Gtk.ToggleToolButton toolbtn_videos;
354 private Gtk.ToggleToolButton toolbtn_raw;
355 private Gtk.ToggleToolButton toolbtn_flag;
356 private Gtk.SeparatorToolItem sepr_mediatype_flagged;
357 private Gtk.SeparatorToolItem sepr_flagged_rating;
350358
351 public SearchFilterToolbar () {359 public SearchFilterToolbar () {
352 toolbar = new Gtk.Toolbar ();360 toolbar = new Gtk.Toolbar ();
@@ -361,6 +369,60 @@
361 close_item.activate.connect ( () => close ());369 close_item.activate.connect ( () => close ());
362 close_menu.append (close_item);370 close_menu.append (close_item);
363371
372 // Type label and toggles
373 label_type = new Gtk.Label (_ ("Type"));
374 Gtk.ToolItem label_type_item = new Gtk.ToolItem ();
375 label_type_item.add (label_type);
376 toolbar.insert (label_type_item, -1);
377
378 toolbtn_photos = new Gtk.ToggleToolButton ();
379 var photos_icon = new Gtk.Image.from_icon_name ("folder-pictures", Gtk.IconSize.MENU);
380 photos_icon.pixel_size = 16;
381 toolbtn_photos.set_icon_widget (photos_icon);
382 toolbtn_photos.tooltip_text = _ ("Photos");
383 toolbtn_photos.toggled.connect (on_photos_toggled);
384
385 toolbtn_videos = new Gtk.ToggleToolButton ();
386 var videos_icon = new Gtk.Image.from_icon_name ("folder-videos", Gtk.IconSize.MENU);
387 videos_icon.pixel_size = 16;
388 toolbtn_videos.set_icon_widget (videos_icon);
389 toolbtn_videos.tooltip_text = _ ("Videos");
390 toolbtn_videos.toggled.connect (on_videos_toggled);
391
392 toolbtn_raw = new Gtk.ToggleToolButton ();
393 var raw_icon = new Gtk.Image.from_icon_name ("accessories-camera", Gtk.IconSize.MENU);
394 raw_icon.pixel_size = 16;
395 toolbtn_raw.set_icon_widget (raw_icon);
396 toolbtn_raw.tooltip_text = _ ("RAW photos");
397 toolbtn_raw.toggled.connect (on_raw_toggled);
398
399 toolbar.insert (toolbtn_photos, -1);
400 toolbar.insert (toolbtn_videos, -1);
401 toolbar.insert (toolbtn_raw, -1);
402
403 // separator
404 sepr_mediatype_flagged = new Gtk.SeparatorToolItem ();
405 toolbar.insert (sepr_mediatype_flagged, -1);
406
407 // Flagged label and toggle
408 label_flagged = new Gtk.Label (_ ("Flagged"));
409 Gtk.ToolItem label_flagged_item = new Gtk.ToolItem ();
410 label_flagged_item.add (label_flagged);
411 toolbar.insert (label_flagged_item, -1);
412
413 toolbtn_flag = new Gtk.ToggleToolButton ();
414
415 var flag_icon = new Gtk.Image.from_icon_name (Resources.ICON_FLAGGED_PAGE, Gtk.IconSize.MENU);
416 flag_icon.pixel_size = 16;
417 toolbtn_flag.set_icon_widget (flag_icon);
418 toolbtn_flag.tooltip_text = _ ("Flagged");
419 toolbtn_flag.toggled.connect (on_flagged_toggled);
420 toolbar.insert (toolbtn_flag, -1);
421
422 // separator
423 sepr_flagged_rating = new Gtk.SeparatorToolItem ();
424 toolbar.insert (sepr_flagged_rating, -1);
425
364 // Rating label and button426 // Rating label and button
365 label_rating = new Gtk.Label (_ ("Rating"));427 label_rating = new Gtk.Label (_ ("Rating"));
366 Gtk.ToolItem label_rating_item = new Gtk.ToolItem ();428 Gtk.ToolItem label_rating_item = new Gtk.ToolItem ();
@@ -427,6 +489,22 @@
427 return false;489 return false;
428 }490 }
429491
492 private void on_flagged_toggled () {
493 update ();
494 }
495
496 private void on_videos_toggled () {
497 update ();
498 }
499
500 private void on_photos_toggled () {
501 update ();
502 }
503
504 private void on_raw_toggled () {
505 update ();
506 }
507
430 private void on_search_text_changed () {508 private void on_search_text_changed () {
431 update ();509 update ();
432 }510 }
@@ -487,6 +565,10 @@
487 assert (null != search_filter);565 assert (null != search_filter);
488566
489 search_filter.set_search_filter (search_entry.text);567 search_filter.set_search_filter (search_entry.text);
568 search_filter.flagged = toolbtn_flag.active;
569 search_filter.show_media_video = toolbtn_videos.active;
570 search_filter.show_media_photos = toolbtn_photos.active;
571 search_filter.show_media_raw = toolbtn_raw.active;
490572
491 search_filter.set_rating_filter (filter);573 search_filter.set_rating_filter (filter);
492 rating_button.tooltip_text = Resources.get_rating_filter_tooltip (filter);574 rating_button.tooltip_text = Resources.get_rating_filter_tooltip (filter);
@@ -498,6 +580,21 @@
498 rating_button.visible = ((criteria & SearchFilterCriteria.RATING) != 0);580 rating_button.visible = ((criteria & SearchFilterCriteria.RATING) != 0);
499 label_rating.visible = ((criteria & SearchFilterCriteria.RATING) != 0);581 label_rating.visible = ((criteria & SearchFilterCriteria.RATING) != 0);
500582
583 label_flagged.visible = ((criteria & SearchFilterCriteria.FLAG) != 0);
584 toolbtn_flag.visible = ((criteria & SearchFilterCriteria.FLAG) != 0);
585
586 label_type.visible = ((criteria & SearchFilterCriteria.MEDIA) != 0);
587 toolbtn_photos.visible = ((criteria & SearchFilterCriteria.MEDIA) != 0);
588 toolbtn_videos.visible = ((criteria & SearchFilterCriteria.MEDIA) != 0);
589 toolbtn_raw.visible = ((criteria & SearchFilterCriteria.MEDIA) != 0);
590
591 // Ticket #3290, part IV - ensure that the separators
592 // are shown and/or hidden as needed.
593 sepr_mediatype_flagged.visible = (label_type.visible && label_flagged.visible);
594
595 sepr_flagged_rating.visible = ((label_type.visible && label_rating.visible) ||
596 (label_flagged.visible && label_rating.visible));
597
501 // Send update to view collection.598 // Send update to view collection.
502 search_filter.refresh ();599 search_filter.refresh ();
503 }600 }
504601
=== modified file 'src/Thumbnail.vala'
--- src/Thumbnail.vala 2014-08-23 09:56:14 +0000
+++ src/Thumbnail.vala 2014-10-18 00:49:47 +0000
@@ -34,17 +34,18 @@
3434
35 private const int HQ_IMPROVEMENT_MSEC = 100;35 private const int HQ_IMPROVEMENT_MSEC = 100;
3636
37 protected int scale;
38 protected Cancellable cancellable = null;
39 protected Dimensions dim;
40 protected Dimensions original_dim;
41 // this is cached locally because there are situations where the constant calls to is_exposed ()
42 // was showing up in sysprof
43 protected bool exposure = false;
44 protected Gdk.Pixbuf unscaled_pixbuf = null;
45
37 private MediaSource media;46 private MediaSource media;
38 private int scale;
39 private Dimensions original_dim;
40 private Dimensions dim;
41 private Gdk.Pixbuf unscaled_pixbuf = null;
42 private Cancellable cancellable = null;
43 private bool hq_scheduled = false;47 private bool hq_scheduled = false;
44 private bool hq_reschedule = false;48 private bool hq_reschedule = false;
45 // this is cached locally because there are situations where the constant calls to is_exposed ()
46 // was showing up in sysprof
47 private bool exposure = false;
4849
49 public Thumbnail (MediaSource media, int scale = DEFAULT_SCALE) {50 public Thumbnail (MediaSource media, int scale = DEFAULT_SCALE) {
50 base (media, media.get_dimensions ().get_scaled (scale, true), media.get_name (),51 base (media, media.get_dimensions ().get_scaled (scale, true), media.get_name (),
@@ -251,7 +252,7 @@
251 base.notify_collection_property_set (name, old, val);252 base.notify_collection_property_set (name, old, val);
252 }253 }
253254
254 private void resize (int new_scale) {255 public virtual void resize (int new_scale) {
255 assert (new_scale >= MIN_SCALE);256 assert (new_scale >= MIN_SCALE);
256 assert (new_scale <= MAX_SCALE);257 assert (new_scale <= MAX_SCALE);
257258
@@ -328,7 +329,7 @@
328 return false;329 return false;
329 }330 }
330331
331 private void cancel_async_fetch () {332 protected void cancel_async_fetch () {
332 // cancel outstanding I/O333 // cancel outstanding I/O
333 if (cancellable != null)334 if (cancellable != null)
334 cancellable.cancel ();335 cancellable.cancel ();
335336
=== modified file 'src/camera/ImportPage.vala'
--- src/camera/ImportPage.vala 2014-09-27 23:06:48 +0000
+++ src/camera/ImportPage.vala 2014-10-18 00:49:47 +0000
@@ -169,7 +169,7 @@
169169
170 return !is_string_empty (title) ? title : get_filename ();170 return !is_string_empty (title) ? title : get_filename ();
171 }171 }
172172
173 public override string get_typename () {173 public override string get_typename () {
174 return "photoimport";174 return "photoimport";
175 }175 }
176176
=== modified file 'src/core/SourceInterfaces.vala'
--- src/core/SourceInterfaces.vala 2014-08-08 21:13:09 +0000
+++ src/core/SourceInterfaces.vala 2014-10-18 00:49:47 +0000
@@ -42,3 +42,19 @@
42 }42 }
43}43}
4444
45// Positionable DataSources provide a globally locatable point in longitude and latitude degrees
46
47public struct GpsCoords {
48 public int has_gps;
49 public double latitude;
50 public double longitude;
51 public bool equals (ref GpsCoords gps) {
52 return (has_gps == 0 && gps.has_gps == 0) || (latitude == gps.latitude && longitude == gps.longitude);
53 }
54}
55
56public interface Positionable : DataSource {
57 public abstract GpsCoords get_gps_coords ();
58 public abstract void set_gps_coords(GpsCoords gps_coords);
59}
60
4561
=== modified file 'src/db/DatabaseTable.vala'
--- src/db/DatabaseTable.vala 2014-08-15 07:12:57 +0000
+++ src/db/DatabaseTable.vala 2014-10-18 00:49:47 +0000
@@ -21,7 +21,7 @@
21 * tables are created on demand and tables and columns are easily ignored when already present.21 * tables are created on demand and tables and columns are easily ignored when already present.
22 * However, the change should be noted in upgrade_database () as a comment.22 * However, the change should be noted in upgrade_database () as a comment.
23 ***/23 ***/
24 public const int SCHEMA_VERSION = 21;24 public const int SCHEMA_VERSION = 22;
2525
26 protected static Sqlite.Database db;26 protected static Sqlite.Database db;
2727
@@ -269,6 +269,18 @@
269 if (res != Sqlite.DONE)269 if (res != Sqlite.DONE)
270 throw_error ("DatabaseTable.update_int64_by_id_2 %s.%s".printf (table_name, column), res);270 throw_error ("DatabaseTable.update_int64_by_id_2 %s.%s".printf (table_name, column), res);
271 }271 }
272
273 protected void update_double_by_id_2(int64 id, string column, double value) throws DatabaseError {
274 Sqlite.Statement stmt;
275 prepare_update_by_id(id, column, out stmt);
276
277 int res = stmt.bind_double(1, value);
278 assert(res == Sqlite.OK);
279
280 res = stmt.step();
281 if (res != Sqlite.DONE)
282 throw_error("DatabaseTable.update_double_by_id_2 %s.%s".printf(table_name, column), res);
283 }
272284
273 protected void delete_by_id (int64 id) throws DatabaseError {285 protected void delete_by_id (int64 id) throws DatabaseError {
274 Sqlite.Statement stmt;286 Sqlite.Statement stmt;
275287
=== modified file 'src/db/Db.vala'
--- src/db/Db.vala 2014-08-15 07:12:57 +0000
+++ src/db/Db.vala 2014-10-18 00:49:47 +0000
@@ -372,6 +372,22 @@
372 }372 }
373 version = 21;373 version = 21;
374374
375 //
376 // Version 22:
377 // * Add has_gps, gps_lat and gps_lon columns to PhotoTable
378 if (!DatabaseTable.ensure_column("PhotoTable", "has_gps", "INTEGER DEFAULT -1",
379 "upgrade_database: adding gps_lat column to PhotoTable")
380 || !DatabaseTable.ensure_column("PhotoTable", "gps_lat", "REAL",
381 "upgrade_database: adding gps_lat column to PhotoTable")
382 || !DatabaseTable.ensure_column("PhotoTable", "gps_lon", "REAL",
383 "upgrade_database: adding gps_lon column to PhotoTable")
384 || !DatabaseTable.ensure_column("PhotoTable", "location", "TEXT",
385 "upgrade_database: adding location column to PhotoTable")) {
386 return VerifyResult.UPGRADE_ERROR;
387 }
388
389 version = 22;
390
375 assert (version == DatabaseTable.SCHEMA_VERSION);391 assert (version == DatabaseTable.SCHEMA_VERSION);
376 VersionTable.get_instance ().update_version (version, Resources.APP_VERSION);392 VersionTable.get_instance ().update_version (version, Resources.APP_VERSION);
377393
378394
=== added file 'src/db/GeoLocationTable.vala'
--- src/db/GeoLocationTable.vala 1970-01-01 00:00:00 +0000
+++ src/db/GeoLocationTable.vala 2014-10-18 00:49:47 +0000
@@ -0,0 +1,205 @@
1/* Copyright 2011-2013 Yorba Foundation
2 *
3 * This software is licensed under the GNU Lesser General Public License
4 * (version 2.1 or later). See the COPYING file in this distribution.
5 */
6
7public struct LocationID {
8 public const int64 INVALID = -1;
9
10 public int64 id;
11
12 public LocationID (int64 id = INVALID) {
13 this.id = id;
14 }
15
16 public bool is_invalid () {
17 return (id == INVALID);
18 }
19
20 public bool is_valid () {
21 return (id != INVALID);
22 }
23}
24
25public class LocationRow {
26 public LocationID location_id;
27 public string? city;
28 public string? territorie;
29 public string? country;
30 public double latitude;
31 public double longitude;
32}
33
34private class InitLocationDataJob : BackgroundJob {
35 public InitLocationDataJob (AppWindow owner, CompletionCallback completion_callback) {
36 base (owner, completion_callback);
37 }
38
39 public override void execute () {
40 FileStream stream = FileStream.open (
41 AppDirs.get_resources_dir ().get_child ("ui").get_child ("locations.dat").get_parse_name (), "r");
42 if (stream == null) {
43 debug ("failed to open initial location data file");
44 return;
45 }
46
47 var line = stream.read_line ();
48 while (line != null) {
49 var row = line.split ("|");
50 try {
51 LocationTable.get_instance ().create (row);
52 } catch {
53 critical ("Could not load initial geo data");
54 }
55 line = stream.read_line ();
56 }
57 }
58}
59// This is used when we are offline to make geo location look ups
60// as glib.geocode relies on the web
61public class LocationTable : DatabaseTable {
62 private static LocationTable instance = null;
63 private Workers workers;
64
65 private LocationTable () {
66 Sqlite.Statement stmt;
67 int res = db.prepare_v2 ("CREATE TABLE IF NOT EXISTS LocationTable ("
68 + "id INTEGER PRIMARY KEY, "
69 + "city TEXT, "
70 + "territorie TEXT, "
71 + "country TEXT, "
72 + "lat REAL, "
73 + "lon REAL "
74 + ")", -1, out stmt);
75 assert (res == Sqlite.OK);
76
77 res = stmt.step ();
78 if (res != Sqlite.DONE)
79 fatal ("create location table", res);
80
81 set_table_name ("LocationTable");
82 }
83
84 public static LocationTable get_instance () {
85 if (instance == null)
86 instance = new LocationTable ();
87 return instance;
88 }
89
90 public void init_city_data () {
91 // clear out the table first incase it got cut off last time
92 Sqlite.Statement stmt;
93 int res = db.prepare_v2 ("DELETE FROM LocationTable", -1, out stmt);
94 assert (res == Sqlite.OK);
95
96 res = stmt.step ();
97 if (res != Sqlite.DONE)
98 fatal ("clear location table", res);
99
100 workers = new Workers (1, false);
101 BackgroundJob init_job = new InitLocationDataJob (AppWindow.get_instance (), on_init_complete);
102 workers.enqueue (init_job);
103 }
104
105 private void on_init_complete (BackgroundJob job) {
106 insert_init_row ();
107 }
108
109 // We use a row to set init finished instead of a transaction
110 // as we want to have location rows coming in so there is at least
111 // some data before it is finished
112 private void insert_init_row () {
113 try {
114 create ("photos-init-complete| | |-1|-1".split ("|"));
115 } catch {
116 critical ("location table init complete failed");
117 }
118 }
119
120 public bool has_init_row () {
121 return (get_starts_with ("photos-init-complete").size > 0);
122 }
123
124 public void create (string[] location) throws DatabaseError {
125 if (location == null || location.length < 1)
126 return;
127
128 var city = location[0];
129 var lat = location[1];
130 var lon = location[2];
131 var territorie = Resources.get_state (location[3], location[4]);
132 var country = Resources.get_country (location[3]);
133
134 Sqlite.Statement stmt;
135 int res = db.prepare_v2 (
136 "INSERT INTO LocationTable (city, territorie, country, lat, lon) VALUES (?, ?, ?, ?, ?)",
137 -1, out stmt);
138 assert (res == Sqlite.OK);
139 res = stmt.bind_text (1, city);
140 assert (res == Sqlite.OK);
141 res = stmt.bind_text (2, territorie);
142 assert (res == Sqlite.OK);
143 res = stmt.bind_text (3, country);
144 assert (res == Sqlite.OK);
145 res = stmt.bind_double (4, double.parse (lat));
146 assert (res == Sqlite.OK);
147 res = stmt.bind_double (5, double.parse (lon));
148 assert (res == Sqlite.OK);
149
150 res = stmt.step ();
151 if (res != Sqlite.DONE)
152 throw_error ("LocationTable.create", res);
153 }
154
155 public Gee.ArrayList < LocationRow?> get_starts_with (string starts_with) {
156 Sqlite.Statement stmt;
157 int res = db.prepare_v2 (
158 "SELECT id, city, territorie, country, lat, lon FROM LocationTable WHERE city LIKE ?",
159 -1, out stmt);
160 assert (res == Sqlite.OK);
161 res = stmt.bind_text (1, starts_with + "%");
162 assert (res == Sqlite.OK);
163
164 Gee.ArrayList < LocationRow?> all = new Gee.ArrayList < LocationRow?> ();
165
166 while ((res = stmt.step ()) == Sqlite.ROW) {
167 LocationRow row = new LocationRow ();
168 row.location_id = LocationID (stmt.column_int64 (0));
169 row.city = stmt.column_text (1);
170 row.territorie = stmt.column_text (2);
171 row.country = stmt.column_text (3);
172 row.latitude = stmt.column_double (4);
173 row.longitude = stmt.column_double (5);
174 all.add (row);
175 }
176
177 return all;
178 }
179
180 public LocationRow? get_row (LocationID id) {
181 Sqlite.Statement stmt;
182 int res = db.prepare_v2 (
183 "SELECT city, territorie, country, lat, lon FROM LocationTable WHERE id=?",
184 -1, out stmt);
185 assert (res == Sqlite.OK);
186
187 res = stmt.bind_int64 (1, id.id);
188 assert (res == Sqlite.OK);
189
190 if (stmt.step () != Sqlite.ROW)
191 return null;
192
193 LocationRow row = new LocationRow ();
194 row.location_id = id;
195 row.city = stmt.column_text (0);
196 row.territorie = stmt.column_text (1);
197 row.country = stmt.column_text (2);
198 row.latitude = stmt.column_double (3);
199 row.longitude = stmt.column_double (4);
200
201 return row;
202 }
203}
204
205
0206
=== modified file 'src/db/PhotoTable.vala'
--- src/db/PhotoTable.vala 2014-08-27 12:50:03 +0000
+++ src/db/PhotoTable.vala 2014-10-18 00:49:47 +0000
@@ -84,6 +84,7 @@
84 public uint64 flags;84 public uint64 flags;
85 public Rating rating;85 public Rating rating;
86 public string title;86 public string title;
87 public GpsCoords gps_coords;
87 public string comment;88 public string comment;
88 public string? backlinks;89 public string? backlinks;
89 public time_t time_reimported;90 public time_t time_reimported;
@@ -91,6 +92,7 @@
91 public bool metadata_dirty;92 public bool metadata_dirty;
92 public bool enhanced;93 public bool enhanced;
93 public Gee.HashMap<string, KeyValueMap>? original_transforms;94 public Gee.HashMap<string, KeyValueMap>? original_transforms;
95 public string location;
9496
95 // Currently selected developer (RAW only)97 // Currently selected developer (RAW only)
96 public RawDeveloper developer;98 public RawDeveloper developer;
@@ -102,6 +104,7 @@
102 public PhotoRow () {104 public PhotoRow () {
103 master = new BackingPhotoRow ();105 master = new BackingPhotoRow ();
104 editable_id = BackingPhotoID ();106 editable_id = BackingPhotoID ();
107 gps_coords = GpsCoords ();
105 development_ids = new BackingPhotoID[RawDeveloper.as_array ().length];108 development_ids = new BackingPhotoID[RawDeveloper.as_array ().length];
106 foreach (RawDeveloper d in RawDeveloper.as_array ())109 foreach (RawDeveloper d in RawDeveloper.as_array ())
107 development_ids[d] = BackingPhotoID ();110 development_ids[d] = BackingPhotoID ();
@@ -144,7 +147,11 @@
144 + "develop_embedded_id INTEGER DEFAULT -1, "147 + "develop_embedded_id INTEGER DEFAULT -1, "
145 + "comment TEXT, "148 + "comment TEXT, "
146 + "enhanced INTEGER DEFAULT 0, "149 + "enhanced INTEGER DEFAULT 0, "
147 + "original_transforms TEXT "150 + "original_transforms TEXT, "
151 + "has_gps INTEGER DEFAULT -1, "
152 + "gps_lat REAL, "
153 + "gps_lon REAL, "
154 + "location TEXT"
148 + ")", -1, out stmt);155 + ")", -1, out stmt);
149 assert (res == Sqlite.OK);156 assert (res == Sqlite.OK);
150157
@@ -179,8 +186,9 @@
179 int res = db.prepare_v2 (186 int res = db.prepare_v2 (
180 "INSERT INTO PhotoTable (filename, width, height, filesize, timestamp, exposure_time, "187 "INSERT INTO PhotoTable (filename, width, height, filesize, timestamp, exposure_time, "
181 + "orientation, original_orientation, import_id, event_id, md5, thumbnail_md5, "188 + "orientation, original_orientation, import_id, event_id, md5, thumbnail_md5, "
182 + "exif_md5, time_created, file_format, title, rating, editable_id, developer, comment) "189 + "exif_md5, time_created, file_format, title, rating, editable_id, developer, "
183 + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",190 + "comment, has_gps, gps_lat, gps_lon, location) "
191 + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
184 -1, out stmt);192 -1, out stmt);
185 assert (res == Sqlite.OK);193 assert (res == Sqlite.OK);
186194
@@ -226,6 +234,14 @@
226 assert (res == Sqlite.OK);234 assert (res == Sqlite.OK);
227 res = stmt.bind_text (20, photo_row.comment);235 res = stmt.bind_text (20, photo_row.comment);
228 assert (res == Sqlite.OK);236 assert (res == Sqlite.OK);
237 res = stmt.bind_int (21, photo_row.gps_coords.has_gps);
238 assert (res == Sqlite.OK);
239 res = stmt.bind_double (22, photo_row.gps_coords.latitude);
240 assert (res == Sqlite.OK);
241 res = stmt.bind_double (23, photo_row.gps_coords.longitude);
242 assert (res == Sqlite.OK);
243 res = stmt.bind_text (24, photo_row.location);
244 assert (res == Sqlite.OK);
229245
230 res = stmt.step ();246 res = stmt.step ();
231 if (res != Sqlite.DONE) {247 if (res != Sqlite.DONE) {
@@ -255,7 +271,8 @@
255 int res = db.prepare_v2 (271 int res = db.prepare_v2 (
256 "UPDATE PhotoTable SET width = ?, height = ?, filesize = ?, timestamp = ?, "272 "UPDATE PhotoTable SET width = ?, height = ?, filesize = ?, timestamp = ?, "
257 + "exposure_time = ?, orientation = ?, original_orientation = ?, md5 = ?, "273 + "exposure_time = ?, orientation = ?, original_orientation = ?, md5 = ?, "
258 + "exif_md5 = ?, thumbnail_md5 = ?, file_format = ?, title = ?, time_reimported = ? "274 + "exif_md5 = ?, thumbnail_md5 = ?, file_format = ?, title = ?, "
275 + "has_gps = ?, gps_lat = ?, gps_lon = ?, time_reimported = ? "
259 + "WHERE id = ?", -1, out stmt);276 + "WHERE id = ?", -1, out stmt);
260 assert (res == Sqlite.OK);277 assert (res == Sqlite.OK);
261278
@@ -285,9 +302,15 @@
285 assert (res == Sqlite.OK);302 assert (res == Sqlite.OK);
286 res = stmt.bind_text (12, row.title);303 res = stmt.bind_text (12, row.title);
287 assert (res == Sqlite.OK);304 assert (res == Sqlite.OK);
288 res = stmt.bind_int64 (13, time_reimported);305 res = stmt.bind_int (13, row.gps_coords.has_gps);
289 assert (res == Sqlite.OK);306 assert (res == Sqlite.OK);
290 res = stmt.bind_int64 (14, row.photo_id.id);307 res = stmt.bind_double (14, row.gps_coords.latitude);
308 assert (res == Sqlite.OK);
309 res = stmt.bind_double (15, row.gps_coords.longitude);
310 assert (res == Sqlite.OK);
311 res = stmt.bind_int64 (16, time_reimported);
312 assert (res == Sqlite.OK);
313 res = stmt.bind_int64 (17, row.photo_id.id);
291 assert (res == Sqlite.OK);314 assert (res == Sqlite.OK);
292315
293 res = stmt.step ();316 res = stmt.step ();
@@ -360,7 +383,8 @@
360 + "original_orientation, import_id, event_id, transformations, md5, thumbnail_md5, "383 + "original_orientation, import_id, event_id, transformations, md5, thumbnail_md5, "
361 + "exif_md5, time_created, flags, rating, file_format, title, backlinks, "384 + "exif_md5, time_created, flags, rating, file_format, title, backlinks, "
362 + "time_reimported, editable_id, metadata_dirty, developer, develop_shotwell_id, "385 + "time_reimported, editable_id, metadata_dirty, developer, develop_shotwell_id, "
363 + "develop_camera_id, develop_embedded_id, comment, enhanced, original_transforms "386 + "develop_camera_id, develop_embedded_id, comment, enhanced, original_transforms, "
387 + "has_gps, gps_lat, gps_lon, location "
364 + "FROM PhotoTable WHERE id=?",388 + "FROM PhotoTable WHERE id=?",
365 -1, out stmt);389 -1, out stmt);
366 assert (res == Sqlite.OK);390 assert (res == Sqlite.OK);
@@ -403,6 +427,10 @@
403 row.comment = stmt.column_text (27);427 row.comment = stmt.column_text (27);
404 row.enhanced = stmt.column_int (28) != 0;428 row.enhanced = stmt.column_int (28) != 0;
405 row.original_transforms = marshall_all_transformations (stmt.column_text (29));429 row.original_transforms = marshall_all_transformations (stmt.column_text (29));
430 row.gps_coords.has_gps = stmt.column_int (30);
431 row.gps_coords.latitude = stmt.column_double (31);
432 row.gps_coords.longitude = stmt.column_double (32);
433 row.location = stmt.column_text (33);
406434
407 return row;435 return row;
408 }436 }
@@ -414,7 +442,8 @@
414 + "original_orientation, import_id, event_id, transformations, md5, thumbnail_md5, "442 + "original_orientation, import_id, event_id, transformations, md5, thumbnail_md5, "
415 + "exif_md5, time_created, flags, rating, file_format, title, backlinks, time_reimported, "443 + "exif_md5, time_created, flags, rating, file_format, title, backlinks, time_reimported, "
416 + "editable_id, metadata_dirty, developer, develop_shotwell_id, develop_camera_id, "444 + "editable_id, metadata_dirty, developer, develop_shotwell_id, develop_camera_id, "
417 + "develop_embedded_id, comment, enhanced, original_transforms FROM PhotoTable",445 + "develop_embedded_id, comment, enhanced, original_transforms, has_gps, gps_lat, gps_lon, "
446 + "location FROM PhotoTable",
418 -1, out stmt);447 -1, out stmt);
419 assert (res == Sqlite.OK);448 assert (res == Sqlite.OK);
420449
@@ -454,6 +483,10 @@
454 row.enhanced = stmt.column_int (29) != 0;483 row.enhanced = stmt.column_int (29) != 0;
455 row.original_transforms = marshall_all_transformations (stmt.column_text (30));484 row.original_transforms = marshall_all_transformations (stmt.column_text (30));
456 validate_orientation (row);485 validate_orientation (row);
486 row.gps_coords.has_gps = stmt.column_int (31);
487 row.gps_coords.latitude = stmt.column_double (32);
488 row.gps_coords.longitude = stmt.column_double (33);
489 row.location = stmt.column_text (34);
457490
458 all.add (row);491 all.add (row);
459 }492 }
@@ -474,8 +507,8 @@
474 + "timestamp, exposure_time, orientation, original_orientation, import_id, event_id, "507 + "timestamp, exposure_time, orientation, original_orientation, import_id, event_id, "
475 + "transformations, md5, thumbnail_md5, exif_md5, time_created, flags, rating, "508 + "transformations, md5, thumbnail_md5, exif_md5, time_created, flags, rating, "
476 + "file_format, title, editable_id, developer, develop_shotwell_id, develop_camera_id, "509 + "file_format, title, editable_id, developer, develop_shotwell_id, develop_camera_id, "
477 + "develop_embedded_id, comment, enhanced, original_transforms) "510 + "develop_embedded_id, comment, enhanced, original_transforms, has_gps, gps_lat, gps_lon, location) "
478 + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",511 + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
479 -1, out stmt);512 -1, out stmt);
480 assert (res == Sqlite.OK);513 assert (res == Sqlite.OK);
481514
@@ -519,7 +552,6 @@
519 assert (res == Sqlite.OK);552 assert (res == Sqlite.OK);
520 res = stmt.bind_int64 (20, editable_id.id);553 res = stmt.bind_int64 (20, editable_id.id);
521 assert (res == Sqlite.OK);554 assert (res == Sqlite.OK);
522
523 res = stmt.bind_text (21, original.developer.to_string ());555 res = stmt.bind_text (21, original.developer.to_string ());
524 assert (res == Sqlite.OK);556 assert (res == Sqlite.OK);
525 res = stmt.bind_int64 (22, develop_shotwell.id);557 res = stmt.bind_int64 (22, develop_shotwell.id);
@@ -535,6 +567,15 @@
535 res = stmt.bind_text (27, unmarshall_all_transformations (original.original_transforms));567 res = stmt.bind_text (27, unmarshall_all_transformations (original.original_transforms));
536 assert (res == Sqlite.OK);568 assert (res == Sqlite.OK);
537569
570 res = stmt.bind_int (28, original.gps_coords.has_gps);
571 assert (res == Sqlite.OK);
572 res = stmt.bind_double (29, original.gps_coords.latitude);
573 assert (res == Sqlite.OK);
574 res = stmt.bind_double (30, original.gps_coords.longitude);
575 assert (res == Sqlite.OK);
576 res = stmt.bind_text (31, original.location);
577 assert (res == Sqlite.OK);
578
538 res = stmt.step ();579 res = stmt.step ();
539 if (res != Sqlite.DONE) {580 if (res != Sqlite.DONE) {
540 if (res != Sqlite.CONSTRAINT)581 if (res != Sqlite.CONSTRAINT)
@@ -550,6 +591,14 @@
550 return update_text_by_id (photo_id.id, "title", new_title != null ? new_title : "");591 return update_text_by_id (photo_id.id, "title", new_title != null ? new_title : "");
551 }592 }
552593
594 public void set_gps_coords (PhotoID photo_id, GpsCoords new_gps_coords) throws DatabaseError {
595 update_int_by_id_2 (photo_id.id, "has_gps", new_gps_coords.has_gps);
596 if (new_gps_coords.has_gps > 0) {
597 update_double_by_id_2 (photo_id.id, "gps_lat", new_gps_coords.latitude);
598 update_double_by_id_2 (photo_id.id, "gps_lon", new_gps_coords.longitude);
599 }
600 }
601
553 public bool set_comment (PhotoID photo_id, string? new_comment) {602 public bool set_comment (PhotoID photo_id, string? new_comment) {
554 return update_text_by_id (photo_id.id, "comment", new_comment != null ? new_comment : "");603 return update_text_by_id (photo_id.id, "comment", new_comment != null ? new_comment : "");
555 }604 }
@@ -720,6 +769,10 @@
720 return update_int64_by_id (photo_id.id, "event_id", event_id.id);769 return update_int64_by_id (photo_id.id, "event_id", event_id.id);
721 }770 }
722771
772 public bool set_location (PhotoID photo_id, string? location) {
773 return update_text_by_id (photo_id.id, "location", location);
774 }
775
723 private string? get_raw_transformations (PhotoID photo_id) {776 private string? get_raw_transformations (PhotoID photo_id) {
724 Sqlite.Statement stmt;777 Sqlite.Statement stmt;
725 if (!select_by_id (photo_id.id, "transformations", out stmt))778 if (!select_by_id (photo_id.id, "transformations", out stmt))
@@ -848,7 +901,7 @@
848 }901 }
849902
850 return set_raw_transformations (photo_id, trans);903 return set_raw_transformations (photo_id, trans);
851 } 904 }
852905
853 public bool set_original_transforms (PhotoID photo_id, KeyValueMap? map) {906 public bool set_original_transforms (PhotoID photo_id, KeyValueMap? map) {
854 if (map == null)907 if (map == null)
@@ -866,7 +919,7 @@
866 size_t length;919 size_t length;
867 string trans = keyfile.to_data (out length);920 string trans = keyfile.to_data (out length);
868921
869 return set_raw_original_transforms (photo_id, trans); 922 return set_raw_original_transforms (photo_id, trans);
870 }923 }
871924
872 public bool remove_transformation (PhotoID photo_id, string object) {925 public bool remove_transformation (PhotoID photo_id, string object) {
@@ -1020,7 +1073,7 @@
10201073
1021 public void set_metadata_dirty (PhotoID photo_id, bool dirty) throws DatabaseError {1074 public void set_metadata_dirty (PhotoID photo_id, bool dirty) throws DatabaseError {
1022 update_int_by_id_2 (photo_id.id, "metadata_dirty", dirty ? 1 : 0);1075 update_int_by_id_2 (photo_id.id, "metadata_dirty", dirty ? 1 : 0);
1023 } 1076 }
10241077
1025 public bool set_enhanced (PhotoID photo_id, bool enhanced) {1078 public bool set_enhanced (PhotoID photo_id, bool enhanced) {
1026 return update_int_by_id (photo_id.id, "enhanced", enhanced ? 1 : 0);1079 return update_int_by_id (photo_id.id, "enhanced", enhanced ? 1 : 0);
10271080
=== modified file 'src/db/mk/db.mk'
--- src/db/mk/db.mk 2012-04-07 15:38:31 +0000
+++ src/db/mk/db.mk 2014-10-18 00:49:47 +0000
@@ -18,7 +18,8 @@
18 TombstoneTable.vala \18 TombstoneTable.vala \
19 VideoTable.vala \19 VideoTable.vala \
20 VersionTable.vala \20 VersionTable.vala \
21 SavedSearchDBTable.vala21 SavedSearchDBTable.vala \
22 GeoLocationTable.vala
2223
23# Any unit this unit relies upon (and should be initialized before it's initialized) should24# Any unit this unit relies upon (and should be initialized before it's initialized) should
24# be listed here using its Vala namespace.25# be listed here using its Vala namespace.
2526
=== modified file 'src/library/Branch.vala'
--- src/library/Branch.vala 2014-09-25 09:36:24 +0000
+++ src/library/Branch.vala 2014-10-18 00:49:47 +0000
@@ -11,6 +11,10 @@
11 get;11 get;
12 private set;12 private set;
13 }13 }
14 public Library.MapEntry map_entry {
15 get;
16 private set;
17 }
14 public Library.VideosEntry videos_entry {18 public Library.VideosEntry videos_entry {
15 get;19 get;
16 private set;20 private set;
@@ -48,6 +52,7 @@
48 RAWS,52 RAWS,
49 VIDEOS,53 VIDEOS,
50 FLAGGED,54 FLAGGED,
55 MAP,
51 LAST_IMPORTED,56 LAST_IMPORTED,
52 IMPORT_QUEUE,57 IMPORT_QUEUE,
53 OFFLINE,58 OFFLINE,
@@ -61,16 +66,23 @@
61 photos_entry = new Library.PhotosEntry ();66 photos_entry = new Library.PhotosEntry ();
62 videos_entry = new Library.VideosEntry ();67 videos_entry = new Library.VideosEntry ();
63 raws_entry = new Library.RawsEntry ();68 raws_entry = new Library.RawsEntry ();
69 map_entry = new Library.MapEntry ();
64 trash_entry = new Library.TrashSidebarEntry ();70 trash_entry = new Library.TrashSidebarEntry ();
65 last_imported_entry = new Library.LastImportSidebarEntry ();71 last_imported_entry = new Library.LastImportSidebarEntry ();
66 flagged_entry = new Library.FlaggedSidebarEntry ();72 flagged_entry = new Library.FlaggedSidebarEntry ();
67 offline_entry = new Library.OfflineSidebarEntry ();73 offline_entry = new Library.OfflineSidebarEntry ();
68 import_queue_entry = new Library.ImportQueueSidebarEntry ();74 import_queue_entry = new Library.ImportQueueSidebarEntry ();
6975
76
77 insert (map_entry, EntryPosition.MAP);
70 insert (photos_entry, EntryPosition.PHOTOS);78 insert (photos_entry, EntryPosition.PHOTOS);
71 insert (raws_entry, EntryPosition.RAWS);79 insert (raws_entry, EntryPosition.RAWS);
72 insert (trash_entry, EntryPosition.TRASH);80 insert (trash_entry, EntryPosition.TRASH);
7381
82
83 map_entry.visibility_changed.connect (on_map_visibility_changed);
84 on_map_visibility_changed ();
85
74 videos_entry.visibility_changed.connect (on_videos_visibility_changed);86 videos_entry.visibility_changed.connect (on_videos_visibility_changed);
75 on_videos_visibility_changed ();87 on_videos_visibility_changed ();
7688
@@ -100,6 +112,10 @@
100 update_entry_visibility (flagged_entry, EntryPosition.FLAGGED);112 update_entry_visibility (flagged_entry, EntryPosition.FLAGGED);
101 }113 }
102114
115 private void on_map_visibility_changed () {
116 update_entry_visibility (map_entry, EntryPosition.MAP);
117 }
118
103 private void on_last_imported_visibility_changed () {119 private void on_last_imported_visibility_changed () {
104 update_entry_visibility (last_imported_entry, EntryPosition.LAST_IMPORTED);120 update_entry_visibility (last_imported_entry, EntryPosition.LAST_IMPORTED);
105 }121 }
@@ -126,6 +142,68 @@
126 }142 }
127}143}
128144
145public class Library.MapEntry : Library.HideablePageEntry {
146 private Icon icon = new ThemedIcon (Resources.MAP_PAGE);
147
148 public MapEntry () {
149 foreach (MediaSourceCollection media_sources in MediaCollectionRegistry.get_instance ().get_all ())
150 media_sources.gps_contents_altered.connect (on_gps_contents_altered);
151
152 visible = get_has_gps ();
153 }
154
155 ~MapEntry () {
156 foreach (MediaSourceCollection media_sources in MediaCollectionRegistry.get_instance ().get_all ())
157 media_sources.gps_contents_altered.disconnect (on_gps_contents_altered);
158 }
159
160 public override string get_sidebar_name () {
161 return _ ("Places");
162 }
163
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: