diff --git a/js/iD/controller/edit/EditBaseState.js b/js/iD/controller/edit/EditBaseState.js new file mode 100644 index 000000000..4a36fc26b --- /dev/null +++ b/js/iD/controller/edit/EditBaseState.js @@ -0,0 +1,35 @@ +// iD/controller/edit/EditBaseState.js + +define(['dojo/_base/declare','dijit/TooltipDialog','dijit/popup', + 'iD/controller/ControllerState'], function(declare){ + +// ---------------------------------------------------------------------- +// EditBaseState class - provides shared UI functions to edit mode states + +declare("iD.controller.edit.EditBaseState", [iD.controller.ControllerState], { + + editortooltip: null, + + constructor:function() { + }, + + openEditorTooltip:function(x,y) { +console.log("opening at "+x+","+y); + editortooltip = new dijit.TooltipDialog({ + content: "Fred's House
"+ + " "+ + " ", + autoFocus: false + }); + dijit.popup.open({ popup: editortooltip, x: x, y: y }); + }, + + closeEditorTooltip:function() { + dijit.popup.close(editortooltip); + }, + +}); + +// ---------------------------------------------------------------------- +// End of module +}); diff --git a/js/iD/controller/edit/NoSelection.js b/js/iD/controller/edit/NoSelection.js index e4d4939c1..4eddd7cf7 100755 --- a/js/iD/controller/edit/NoSelection.js +++ b/js/iD/controller/edit/NoSelection.js @@ -1,7 +1,7 @@ // iD/controller/edit/NoSelection.js define(['dojo/_base/declare', - 'iD/controller/ControllerState', + 'iD/controller/edit/EditBaseState', 'iD/controller/edit/SelectedWay', 'iD/controller/edit/SelectedWayNode', 'iD/controller/edit/SelectedPOINode', @@ -10,7 +10,7 @@ define(['dojo/_base/declare', // ---------------------------------------------------------------------- // ControllerState base class -declare("iD.controller.edit.NoSelection", [iD.controller.ControllerState], { +declare("iD.controller.edit.NoSelection", [iD.controller.edit.EditBaseState], { constructor:function() { }, @@ -30,7 +30,7 @@ declare("iD.controller.edit.NoSelection", [iD.controller.ControllerState], { if (ways.length==0) { return new iD.controller.edit.SelectedPOINode(entity); } else { return new iD.controller.edit.SelectedWayNode(entity,ways[0]); } case 'way': - return new iD.controller.edit.SelectedWay(entityUI.entity); + return new iD.controller.edit.SelectedWay(entityUI.entity, event); } } return this; diff --git a/js/iD/controller/edit/SelectedPOINode.js b/js/iD/controller/edit/SelectedPOINode.js index 9bdcdd06c..cb8752944 100755 --- a/js/iD/controller/edit/SelectedPOINode.js +++ b/js/iD/controller/edit/SelectedPOINode.js @@ -1,11 +1,11 @@ // iD/controller/edit/SelectedPOINode.js -define(['dojo/_base/declare','iD/controller/ControllerState'], function(declare){ +define(['dojo/_base/declare','iD/controller/edit/EditBaseState'], function(declare){ // ---------------------------------------------------------------------- // SelectedPOINode class -declare("iD.controller.edit.SelectedPOINode", [iD.controller.ControllerState], { +declare("iD.controller.edit.SelectedPOINode", [iD.controller.edit.EditBaseState], { node: null, nodeUI: null, @@ -14,13 +14,17 @@ declare("iD.controller.edit.SelectedPOINode", [iD.controller.ControllerState], { this.node=_node; }, enterState:function() { - this.nodeUI=this.controller.map.getUI(this.node); + var map=this.controller.map; + this.nodeUI=map.getUI(this.node); this.nodeUI.setStateClass('selected'); this.nodeUI.redraw(); + this.openEditorTooltip(map.lon2screen(this.node.lon), + map.lat2screen(this.node.lat)); }, exitState:function() { this.nodeUI.resetStateClass('selected'); this.nodeUI.redraw(); + this.closeEditorTooltip(); }, processMouseEvent:function(event,entityUI) { @@ -31,7 +35,7 @@ declare("iD.controller.edit.SelectedPOINode", [iD.controller.ControllerState], { switch (entityType) { case null: return new iD.controller.edit.NoSelection(); case 'node': return new iD.controller.edit.SelectedPOINode(entityUI.entity); - case 'way': return new iD.controller.edit.SelectedWay(entityUI.entity); + case 'way': return new iD.controller.edit.SelectedWay(entityUI.entity, event); } } return this; diff --git a/js/iD/controller/edit/SelectedWay.js b/js/iD/controller/edit/SelectedWay.js index 420a1b434..3beb146bb 100755 --- a/js/iD/controller/edit/SelectedWay.js +++ b/js/iD/controller/edit/SelectedWay.js @@ -1,28 +1,32 @@ // iD/controller/edit/SelectedWay.js -define(['dojo/_base/declare','iD/controller/ControllerState'], function(declare){ +define(['dojo/_base/declare','iD/controller/edit/EditBaseState'], function(declare){ // ---------------------------------------------------------------------- // SelectedWay class -declare("iD.controller.edit.SelectedWay", [iD.controller.ControllerState], { +declare("iD.controller.edit.SelectedWay", [iD.controller.edit.EditBaseState], { way: null, wayUI: null, + entryevent: null, - constructor:function(_way) { + constructor:function(_way,_event) { this.way=_way; + this.entryevent=_event; }, enterState:function() { this.wayUI=this.controller.map.getUI(this.way); this.wayUI.setStateClass('selected'); this.wayUI.setStateClass('shownodes'); + this.openEditorTooltip(this.entryevent.clientX, this.entryevent.clientY); this.wayUI.redraw(); }, exitState:function() { this.wayUI.resetStateClass('selected'); this.wayUI.resetStateClass('shownodes'); this.wayUI.redraw(); + this.closeEditorTooltip(); }, processMouseEvent:function(event,entityUI) { @@ -39,7 +43,7 @@ declare("iD.controller.edit.SelectedWay", [iD.controller.ControllerState], { else if (ways.length==0) { return new iD.controller.edit.SelectedPOINode(entity); } else { return new iD.controller.edit.SelectedWayNode(entity,ways[0]); } case 'way': - return new iD.controller.edit.SelectedWay(entityUI.entity); + return new iD.controller.edit.SelectedWay(entityUI.entity, event); } } else { } diff --git a/js/iD/controller/edit/SelectedWayNode.js b/js/iD/controller/edit/SelectedWayNode.js index 85b78a8d8..cb3ce6fd7 100755 --- a/js/iD/controller/edit/SelectedWayNode.js +++ b/js/iD/controller/edit/SelectedWayNode.js @@ -1,11 +1,11 @@ // iD/controller/edit/SelectedWayNode.js -define(['dojo/_base/declare','iD/controller/ControllerState'], function(declare){ +define(['dojo/_base/declare','iD/controller/edit/EditBaseState'], function(declare){ // ---------------------------------------------------------------------- // SelectedWayNode class -declare("iD.controller.edit.SelectedWayNode", [iD.controller.ControllerState], { +declare("iD.controller.edit.SelectedWayNode", [iD.controller.edit.EditBaseState], { node: null, way: null, @@ -15,12 +15,17 @@ declare("iD.controller.edit.SelectedWayNode", [iD.controller.ControllerState], { this.way=_way; }, enterState:function() { - this.controller.map.getUI(this.way ).setStateClass('shownodes').redraw(); - this.controller.map.getUI(this.node).setStateClass('selected' ).redraw(); + var map=this.controller.map; + map.getUI(this.way ).setStateClass('shownodes').redraw(); + map.getUI(this.node).setStateClass('selected' ).redraw(); + this.openEditorTooltip(map.lon2screen(this.node.lon), + map.lat2screen(this.node.lat)); }, exitState:function() { - this.controller.map.getUI(this.way ).resetStateClass('shownodes').redraw(); - this.controller.map.getUI(this.node).resetStateClass('selected' ).redraw(); + var map=this.controller.map; + map.getUI(this.way ).resetStateClass('shownodes').redraw(); + map.getUI(this.node).resetStateClass('selected' ).redraw(); + this.closeEditorTooltip(); }, processMouseEvent:function(event,entityUI) { @@ -37,7 +42,7 @@ declare("iD.controller.edit.SelectedWayNode", [iD.controller.ControllerState], { else if (ways.length==0) { return new iD.controller.edit.SelectedPOINode(entity); } else { return new iD.controller.edit.SelectedWayNode(entity,ways[0]); } case 'way': - return new iD.controller.edit.SelectedWay(entityUI.entity); + return new iD.controller.edit.SelectedWay(entityUI.entity, event); } } return this; diff --git a/js/iD/controller/shape/DrawWay.js b/js/iD/controller/shape/DrawWay.js index bb8ecff0d..00e015f63 100644 --- a/js/iD/controller/shape/DrawWay.js +++ b/js/iD/controller/shape/DrawWay.js @@ -94,12 +94,12 @@ declare("iD.controller.shape.DrawWay", [iD.controller.ControllerState], { if (entity==this.getDrawingNode()) { // Double-click, so complete drawing this.controller.stepper.highlight('tag'); - return new iD.controller.edit.SelectedWay(this.way); + return new iD.controller.edit.SelectedWay(this.way, event); } else if (entity==this.getStartNode()) { // Start of this way, so complete drawing this.appendNode(entity, this.undoAdder() ); this.controller.stepper.highlight('tag'); - return new iD.controller.edit.SelectedWay(this.way); + return new iD.controller.edit.SelectedWay(this.way, event); } else { // Add to way this.appendNode(entity, this.undoAdder() ); diff --git a/js/iD/renderer/Map.js b/js/iD/renderer/Map.js index 932d3654c..01879438e 100755 --- a/js/iD/renderer/Map.js +++ b/js/iD/renderer/Map.js @@ -424,10 +424,13 @@ declare("iD.renderer.Map", null, { coord2latp:function(a) { return a/-this.scalefactor+this.baselatp; }, lon2coord:function(a) { return (a-this.baselon)*this.scalefactor; }, coord2lon:function(a) { return a/this.scalefactor+this.baselon; }, + lon2screen:function(a) { return this.lon2coord(a) + domGeom.getMarginBox(this.div).l + this.containerx; }, + lat2latp:function(a) { return 180/Math.PI * Math.log(Math.tan(Math.PI/4+a*(Math.PI/180)/2)); }, latp2lat:function(a) { return 180/Math.PI * (2 * Math.atan(Math.exp(a*Math.PI/180)) - Math.PI/2); }, lat2coord:function(a) { return -(this.lat2latp(a)-this.baselatp)*this.scalefactor; }, coord2lat:function(a) { return this.latp2lat(a/-this.scalefactor+this.baselatp); }, + lat2screen:function(a) { return this.lat2coord(a) + domGeom.getMarginBox(this.div).t + this.containery; }, lon2tile:function(a) { return (Math.floor((a+180)/360*Math.pow(2,this.scale))); }, lat2tile:function(a) { return (Math.floor((1-Math.log(Math.tan(a*Math.PI/180) + 1/Math.cos(a*Math.PI/180))/Math.PI)/2 *Math.pow(2,this.scale))); },