[gnome-maps/wip/routing2: 8/9] More sidebar work



commit d70723315e62d35d6fe52a56022ccff5a0b8300b
Author: Mattias Bengtsson <mattias jc bengtsson gmail com>
Date:   Sun Jun 8 05:56:57 2014 +0200

    More sidebar work

 data/media/direction-continue.png    |  Bin 0 -> 488 bytes
 data/media/direction-left.png        |  Bin 0 -> 587 bytes
 data/media/direction-right.png       |  Bin 0 -> 564 bytes
 data/media/direction-sharpleft.png   |  Bin 0 -> 678 bytes
 data/media/direction-sharpright.png  |  Bin 0 -> 659 bytes
 data/media/direction-slightleft.png  |  Bin 0 -> 616 bytes
 data/media/direction-slightright.png |  Bin 0 -> 611 bytes
 data/media/directions.svg            |  329 ++++++++++++++++++++++++++++++++++
 src/route.js                         |    2 +-
 src/sidebar.js                       |   87 +++++++++-
 src/sidebar.ui                       |   41 ++++-
 11 files changed, 452 insertions(+), 7 deletions(-)
---
diff --git a/data/media/direction-continue.png b/data/media/direction-continue.png
new file mode 100644
index 0000000..141690d
Binary files /dev/null and b/data/media/direction-continue.png differ
diff --git a/data/media/direction-left.png b/data/media/direction-left.png
new file mode 100644
index 0000000..022401e
Binary files /dev/null and b/data/media/direction-left.png differ
diff --git a/data/media/direction-right.png b/data/media/direction-right.png
new file mode 100644
index 0000000..1e718de
Binary files /dev/null and b/data/media/direction-right.png differ
diff --git a/data/media/direction-sharpleft.png b/data/media/direction-sharpleft.png
new file mode 100644
index 0000000..086c990
Binary files /dev/null and b/data/media/direction-sharpleft.png differ
diff --git a/data/media/direction-sharpright.png b/data/media/direction-sharpright.png
new file mode 100644
index 0000000..3012fdd
Binary files /dev/null and b/data/media/direction-sharpright.png differ
diff --git a/data/media/direction-slightleft.png b/data/media/direction-slightleft.png
new file mode 100644
index 0000000..b584db1
Binary files /dev/null and b/data/media/direction-slightleft.png differ
diff --git a/data/media/direction-slightright.png b/data/media/direction-slightright.png
new file mode 100644
index 0000000..ba3ecd8
Binary files /dev/null and b/data/media/direction-slightright.png differ
diff --git a/data/media/directions.svg b/data/media/directions.svg
new file mode 100644
index 0000000..d89796d
--- /dev/null
+++ b/data/media/directions.svg
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="32px"
+   height="32px"
+   id="svg13790"
+   version="1.1"
+   inkscape:version="0.48+devel r12417"
+   sodipodi:docname="directions.svg"
+   inkscape:export-filename="/home/andreasn/SparkleShare/gnome-icons/maps-symbolic/direction-roundabout.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs13792" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2"
+     inkscape:cx="66.547746"
+     inkscape:cy="19.043947"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:snap-global="true"
+     inkscape:snap-nodes="false"
+     inkscape:snap-bbox="true"
+     inkscape:bbox-paths="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     showborder="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1021"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid13798" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata13795">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13852-7-44"
+       width="32.10268"
+       height="31.942713"
+       x="160.00635"
+       y="0.0831604"
+       rx="2.9755306"
+       ry="2.9755306" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-7-84"
+       width="3.9737358"
+       height="11.347995"
+       x="9.9818344"
+       y="-180.36581"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-3-4-0"
+       width="4.0049858"
+       height="17.051868"
+       x="-170.02029"
+       y="-27.035873"
+       transform="scale(-1,-1)" />
+    <rect
+       
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13852-7-8-3"
+       width="32.10268"
+       height="31.942713"
+       x="200.00635"
+       y="0.0831604"
+       rx="2.9755306"
+       ry="2.9755306" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-7-6-3"
+       width="3.9737358"
+       height="10.972995"
+       x="-144.88109"
+       y="157.918"
+       transform="matrix(-0.70710678,0.70710678,0.70710678,0.70710678,0,0)" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-3-4-2-2"
+       width="4.1924858"
+       height="10.054085"
+       x="217.91138"
+       y="-27.059189"
+       transform="scale(1,-1)" />
+    <rect
+       
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13852-7-4-7"
+       width="32.10268"
+       height="31.942713"
+       x="120.00635"
+       y="0.0831604"
+       rx="2.9755306"
+       ry="2.9755306" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 124.6453,12.01558 8.42654,5.950595 L 133.07184,6.064983 Z"
+       id="rect13802-1-3-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-7-8-9"
+       width="3.9737358"
+       height="11.347995"
+       x="9.9818344"
+       y="131.67984"
+       transform="matrix(0,1,1,0,0,0)" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-3-4-8-3"
+       width="4.0049858"
+       height="17.051868"
+       x="142.02536"
+       y="-27.035873"
+       transform="scale(1,-1)" />
+    <rect
+       
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13852-7-8-4-2-7"
+       width="32.10268"
+       height="31.942713"
+       x="-352.10901"
+       y="0.0831604"
+       rx="2.9755306"
+       ry="2.9755306"
+       transform="scale(-1,1)" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 328.01905,10.939736 11.2672,8.045185 2.30944,-3.233739 L 328.01579,6.054647 Z"
+       id="rect13805-7-6-7-7-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-3-4-2-5-0-6"
+       width="3.9936121"
+       height="17.505117"
+       x="-332.01636"
+       y="-27.000946"
+       transform="scale(-1,-1)" />
+    <rect
+       
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13852-7-4-9-5"
+       width="32.10268"
+       height="31.942713"
+       x="80.006348"
+       y="0.0831604"
+       rx="2.9755306"
+       ry="2.9755306" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 96.00234,6.033529 90.34282,14.039892 101.66187,14.039892 Z"
+       id="rect13802-1-3-1-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-3-4-8-8-8"
+       width="4.0049858"
+       height="18.024139"
+       x="94.047668"
+       y="-27.039391"
+       transform="scale(1,-1)" />
+    <rect
+       
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13852-7-4-9-4-97"
+       width="32.10268"
+       height="31.942713"
+       x="40.006348"
+       y="0.0831604"
+       rx="2.9755306"
+       ry="2.9755306" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-3-4-8-8-7-9"
+       width="4.0049858"
+       height="8.3306971"
+       x="-63.996399"
+       y="11.774483"
+       transform="scale(-1,1)" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-3-4-8-8-7-5-1"
+       width="4.0049858"
+       height="13.009145"
+       x="-50.022888"
+       y="11.908539"
+       transform="scale(-1,1)" />
+    <path
+       
style="fill:none;stroke:#555753;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 48.04469,13.008885 c 0,0 0.11927,-7.046316 7.04632,-7.046316 6.92704,0 6.94646,6.985563 
6.94646,6.985563"
+       id="path14648-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="czc" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 188.39767,12.01558 179.97112,17.966175 179.97112,6.064983 Z"
+       id="rect13802-1-3-2-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 61.98801,24.993885 67.64754,16.987522 56.32848,16.987522 Z"
+       id="rect13802-1-3-1-2-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 208.16883,5.957036 218.335,7.707799 209.91959,16.123212 Z"
+       id="rect13802-1-3-2-0-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13852-7-8-3-8"
+       width="32.10268"
+       height="31.942713"
+       x="-272.10901"
+       y="0.0831604"
+       rx="2.9755306"
+       ry="2.9755306"
+       transform="scale(-1,1)" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-7-6-3-5"
+       width="3.9737358"
+       height="10.972995"
+       x="188.9549"
+       y="-175.91797"
+       transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-3-4-2-2-1"
+       width="4.1924858"
+       height="10.054085"
+       x="-254.20398"
+       y="-27.059189"
+       transform="scale(-1,-1)" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 263.94653,5.957036 253.78036,7.707799 262.19577,16.123212 Z"
+       id="rect13802-1-3-2-0-0-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 347.01125,21.98242 343.52037,12.275209 336.69551,22.02506 Z"
+       id="rect13802-1-3-2-0-0-5-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13852-7-8-4-2-7-1"
+       width="32.10268"
+       height="31.942713"
+       x="280.00635"
+       y="0.0831604"
+       rx="2.9755306"
+       ry="2.9755306" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 304.09632,10.939736 -11.2672,8.045185 -2.30944,-3.233739 L 304.09958,6.054647 Z"
+       id="rect13805-7-6-7-7-9-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <rect
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13805-3-4-2-5-0-6-9"
+       width="3.9936121"
+       height="17.505117"
+       x="300.099"
+       y="-27.000946"
+       transform="scale(1,-1)" />
+    <path
+       
style="color:#000000;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 285.10412,21.98242 288.595,12.275209 295.41986,22.02506 Z"
+       id="rect13802-1-3-2-0-0-5-0-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect13852-7-4-9-4-9-3-04-4"
+       width="32.10268"
+       height="31.942713"
+       x="0.0063476562"
+       y="0.0831604"
+       rx="2.9755306"
+       ry="2.9755306" />
+    <path
+       
style="font-size:xx-small;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#555753;fill-opacity:1;stroke:none;stroke-width:2.8946228;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;font-family:sans-serif;-inkscape-font-specification:sans-serif"
+       d="m 13.97683,4.317626 c -5.62461,0.953573 -9.94198,5.849698 -9.94198,11.721069 0,1.600593 
0.32477,3.12763 0.90503,4.524568 l 3.44473,-2.204142 c -0.2228,-0.733042 -0.34428,-1.511518 
-0.34428,-2.320426 0,-3.702207 2.51084,-6.773804 5.9365,-7.64886 L 16.62848,6.100499 z m 4,0.0024 0,4.073763 
c 3.4178,0.880328 5.92114,3.948279 5.92114,7.644953 0,0.803474 -0.1205,1.576647 -0.34043,2.305381 l 
0.0596,3.32594 3.38654,-1.120919 C 27.5803,19.155966 27.90349,17.634026 27.90349,16.038742 27.90345,10.172644 
23.59396,5.279848 17.97683,4.319979 z m 3.48373,17.431085 c -1.42166,1.35889 -3.35077,2.19475 
-5.49141,2.19475 -2.13509,0 -4.05947,-0.831849 -5.48008,-2.184491 l -3.0995,-0.926067 -0.30913,3.10712 c 
2.1892,2.444729 5.36093,3.997962 8.88873,3.997962 C 19.50231,27.940338 22.67845,26.382505 24.86795,23.931318 
Z"
+       id="path15446"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csccscccccscccscccccccccc" />
+  </g>
+</svg>
diff --git a/src/route.js b/src/route.js
index ac78703..ac18f0f 100644
--- a/src/route.js
+++ b/src/route.js
@@ -80,7 +80,7 @@ Utils.addSignalMethods(Route.prototype);
 const TurnPoint = new Lang.Class({
     Name: 'TurnPoint',
 
-    _init: function({ coordinate, type, direction, distance, instruction }) {
+    _init: function({ coordinate, type, distance, instruction }) {
         this.coordinate = coordinate;
         this._type = type;
         this.distance = distance;
diff --git a/src/sidebar.js b/src/sidebar.js
index ba4462c..a9887c7 100644
--- a/src/sidebar.js
+++ b/src/sidebar.js
@@ -29,6 +29,8 @@ const Lang    = imports.lang;
 
 const Application = imports.application;
 const PlaceStore  = imports.placeStore;
+const Route       = imports.route;
+const RouteQuery  = imports.routeQuery;
 const SearchPopup = imports.searchPopup;
 const Utils       = imports.utils;
 
@@ -51,11 +53,14 @@ const Sidebar = new Lang.Class({
                                                 'mode-pedestrian-toggle',
                                                 'mode-bike-toggle',
                                                 'mode-car-toggle']);
-
-        ui.instructionList.connect('row-activated', (function(list, row) {
-            this.emit('instruction-selected', row.instruction);
-        }).bind(this));
-
+        this._instructionList = ui.instructionList;
+        this._initInstructionList();
+        
+        this._initModeToggle({ "PEDESTRIAN": ui.modePedestrianToggle,
+                               "BIKE":       ui.modeBikeToggle,
+                               "CAR":        ui.modeCarToggle
+                             });
+        
         ui.grid.attach(this._createEntry("from", ui.fromCompletion),
                        1, 0, 1, 1);
         ui.grid.attach(this._createEntry("to",   ui.toCompletion),
@@ -63,6 +68,15 @@ const Sidebar = new Lang.Class({
         this.add(ui.grid);
     },
 
+    _initModeToggle: function(toggles) {
+        for(let mode in toggles) {
+            toggles[mode].connect('toggled', function(button) {
+                if (button.active)
+                    Application.routeService.query.transportation = mode;
+            });                       
+        }
+    },
+
     _createEntry: function(propName, completion) {
         completion.model      = Application.placeStore;
         completion.match_func = PlaceStore.completionMatchFunc;
@@ -74,6 +88,28 @@ const Sidebar = new Lang.Class({
                             Application.routeService.query, propName,
                             GObject.BindingFlags.BIDIRECTIONAL);
         return entry;
+    },
+
+    _initInstructionList: function() {
+        this._instructionList.connect('row-activated', (function(list, row) {
+            this.emit('instruction-selected', row.instruction);
+        }).bind(this));
+
+        let route = Application.routeService.route;
+
+        route.connect('reset', this._clearInstructions.bind(this));
+        route.connect('update', (function() {
+            this._clearInstructions();
+
+            route.turnPoints.forEach((function(turnPoint) {
+                this._instructionList.add(new InstructionRow(turnPoint));
+            }).bind(this));
+        }).bind(this));
+    },
+
+    _clearInstructions: function() {
+        let listBox = this._instructionList;
+        listBox.forall(listBox.remove.bind(listBox));
     }
 });
 
@@ -124,6 +160,7 @@ const PlaceEntry = new Lang.Class({
     _onActivate: function(popover) {
         if (this.text.length > 0) {
             popover.showSpinner();
+            //TODO: How to do the geocoding in a good way?
             Application
                 .application
                 ._mainWindow
@@ -139,3 +176,43 @@ const PlaceEntry = new Lang.Class({
         }
     }
 });
+
+const InstructionRow = new Lang.Class({
+    Name: "InstructionRow",
+    Extends: Gtk.ListBoxRow,
+
+    _init: function(params) {
+        this.turnPoint = params.turnPoint;
+        delete params.turnPoint;
+        
+        this.parent(params);
+
+        this.visible = true;
+        let ui = Utils.getUIObject('sidebar', ['instruction-box',
+                                               'direction-image',
+                                               'instruction-label']);
+        ui.instructionLabel.label  = this.turnPoint.instruction;
+        ui.directionImage.resource = directionToResource(this.turnPoint.direction);
+        
+        this.add(ui.instructionBox);
+    }
+});
+
+function directionToResource(direction) {
+    let dir = Route.TurnPointType;
+    switch(direction) {
+    case dir.SHARP_LEFT:   return '/org/gnome/maps/direction-sharpleft';
+    case dir.LEFT:         return '/org/gnome/maps/direction-left';
+    case dir.SLIGHT_LEFT:  return '/org/gnome/maps/direction-slightleft';
+    case dir.CONTINUE:     return '/org/gnome/maps/direction-continue';
+    case dir.SLIGHT_RIGHT: return '/org/gnome/maps/direction-slightright';
+    case dir.RIGHT:        return '/org/gnome/maps/direction-right';
+    case dir.SHARP_RIGHT:  return '/org/gnome/maps/direction-sharpright';
+
+    // TODO: get icons for these
+    // case dir.END:          return '/org/gnome/maps/direction-end';
+    // case dir.VIA:          return '/org/gnome/maps/direction-via';
+    // case dir.START:        return '/org/gnome/maps/direction-start';
+    default:               return "";
+    }
+}
diff --git a/src/sidebar.ui b/src/sidebar.ui
index ad9a2ac..7b4900b 100644
--- a/src/sidebar.ui
+++ b/src/sidebar.ui
@@ -117,7 +117,7 @@
             <property name="xalign">0.5</property>
             <property name="active">True</property>
             <property name="draw_indicator">False</property>
-            <property name="group">mode-pedestrian-toggle</property>
+            <property name="group">mode-bike-toggle</property>
             <child>
               <object class="GtkImage" id="mode-car-image">
                 <property name="visible">True</property>
@@ -212,4 +212,43 @@
       </packing>
     </child>
   </object>
+
+  <object class="GtkBox" id="instruction-box">
+    <property name="height_request">48</property>
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="spacing">6</property>
+    <property name="baseline_position">top</property>
+    <child>
+      <object class="GtkImage" id="direction-image">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xpad">2</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="instruction-label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="halign">start</property>
+        <property name="xalign">0</property>
+        <property name="ypad">3</property>
+        <property name="use_underline">True</property>
+        <property name="wrap">True</property>
+        <property name="ellipsize">end</property>
+        <property name="max_width_chars">28</property>
+        <property name="lines">3</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
 </interface>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]