- move lots of connection.map to connection.map.editableLayer
- remove all references to getConnection etc. - there can now be more than one Connection
- remove all back-references to Map except where necessary for lat/long/scale
-- Controllers are full of references to controller.map and to controller.connection
- getParam is broken - there needs to be a global equivalent (not in Connection) for stuff sent via flashvars - i.e. loaderInfo.parameters (but that's Flex-only)
- Look for Connection. - lots of static stuff which shouldn't be that any more
private var toolbox:Toolbox;
public var state:ControllerState;
- private var _connection:Connection;
private var keys:Object={};
public var clipboards:Object={};
public function setActive():void {
map.setController(this);
- _connection = map.connection;
}
/** Accesses map object. */
return _map;
}
- /** Accesss connection object. */
- public function get connection():Connection {
- return _connection;
- }
-
/**
* Updates the various user interfaces that change when the selection changes.
* Currently this is the TagViewer and the Toolbox
import mx.managers.PopUpManager;
private var entity:Entity;
+ private var connection:Connection;
private var relid:Number;
public function setEntity(e:Entity):void {
entity=e;
+ connection=e.connection;
}
private function loadRelation():void {
relid = Number(requestedID.text);
PopUpManager.removePopUp(this);
- var conn:Connection = Connection.getConnection();
if (!relid) return;
- if (conn.getRelation(relid)) {
+ if (connection.getRelation(relid)) {
relationLoaded(null);
} else {
- conn.loadEntityByID("relation",relid);
- conn.addEventListener(Connection.LOAD_COMPLETED, relationLoaded);
+ connection.loadEntityByID("relation",relid);
+ connection.addEventListener(Connection.LOAD_COMPLETED, relationLoaded);
}
}
private function relationLoaded(event:Event):void {
- var conn:Connection = Connection.getConnection();
- var relation:Relation = conn.getRelation(relid);
- conn.removeEventListener(Connection.LOAD_COMPLETED, relationLoaded);
+ var relation:Relation = connection.getRelation(relid);
+ connection.removeEventListener(Connection.LOAD_COMPLETED, relationLoaded);
if (!relation) return;
var undo:CompositeUndoableAction = new CompositeUndoableAction("Add to relation");
*/
public function init(e:Entity, t:Object):void {
entity = e;
+ conn = e.connection;
defaulttags = {};
for (var k:String in t) {
//tagmatches[k]=t[k];// deep copy match pattern tags
PopUpManager.centerPopUp(this);
var titles:Array = [];
- conn = Connection.getConnection();
relationList = conn.getMatchingRelationIDs(t);
if (relationList.length == 0) {
warning.text = "No relations available";
public function doDelete():void {
var undo:CompositeUndoableAction = new CompositeUndoableAction("Delete objects");
for each (var entity:Entity in controller.state.selection) {
- if (entity is Node) { controller.connection.unregisterPOI(Node(entity)); }
+ if (entity is Node) { entity.connection.unregisterPOI(Node(entity)); }
entity.remove(undo.push);
}
MainUndoStack.getGlobalStack().addAction(undo);
protected function sharedKeyboardEvents(event:KeyboardEvent):ControllerState {
switch (event.keyCode) {
case 66: setSourceTag(); break; // B - set source tag for current object
- case 67: controller.connection.closeChangeset(); break; // C - close changeset
+ case 67: editableLayer.connection.closeChangeset(); break; // C - close changeset
case 68: editableLayer.alpha=1.3-editableLayer.alpha; return null; // D - dim
- case 83: SaveManager.saveChanges(controller.connection); break; // S - save
+ case 83: SaveManager.saveChanges(editableLayer.connection); break; // S - save
case 84: controller.tagViewer.togglePanel(); return null; // T - toggle tags panel
case 90: if (!event.shiftKey) { MainUndoStack.getGlobalStack().undo(); return null;}// Z - undo
else { MainUndoStack.getGlobalStack().redo(); return null; } // Shift-Z - redo
if ( paint && paint.isBackground ) {
if ( event.type == MouseEvent.MOUSE_DOWN && ((event.shiftKey && event.ctrlKey) || event.altKey) ) {
// alt-click to pull data out of vector background layer
- var newEntity:Entity=paint.findSource().pullThrough(entity,controller.connection);
+ var newEntity:Entity=paint.findSource().pullThrough(entity,editableLayer.connection);
if (entity is Way) { return new SelectedWay(newEntity as Way); }
else if (entity is Node) { return new SelectedPOINode(newEntity as Node); }
} else if (event.type == MouseEvent.MOUSE_DOWN && entity is Marker) {
protected function revertHandler(event:CloseEvent):void {
if (event.detail==Alert.CANCEL) return;
for each (var item:Entity in _selection) {
- controller.connection.loadEntity(item);
+ item.connection.loadEntity(item);
}
}
var lat:Number = controller.map.coord2lat(event.localY);
var lon:Number = controller.map.coord2lon(event.localX);
var undo:CompositeUndoableAction = new CompositeUndoableAction("Insert node");
- var node:Node = controller.connection.createNode({}, lat, lon, undo.push);
+ var node:Node = selectedWay.connection.createNode({}, lat, lon, undo.push);
var index:int = selectedWay.insertNodeAtClosestPosition(node, true, undo.push);
for each (w in ways) { w.insertNodeAtClosestPosition(node, true, undo.push); }
MainUndoStack.getGlobalStack().addAction(undo);
return new SelectedWayNode(parentWay,draggingIndex);
} else if (event.shiftKey && !isNew) {
// start new way
- var way:Way = controller.connection.createWay({}, [entity],
+ var way:Way = entity.connection.createWay({}, [entity],
MainUndoStack.getGlobalStack().addAction);
return new DrawWay(way, true, false);
} else if (event.shiftKey && isNew) {
override public function enterState():void {
controller.map.draggable=false;
- var conn:Connection=controller.connection;
+ var conn:Connection=sourceNode.connection;
var undo:CompositeUndoableAction = new CompositeUndoableAction("Draw quadrilateral");
var cornerlon:Number =controller.map.coord2lon(controller.map.mouseX);
var cornerlat:Number =controller.map.coord2lat(controller.map.mouseY);
var lat:Number = controller.map.coord2lat(event.localY);
var lon:Number = controller.map.coord2lon(event.localX);
var undo:CompositeUndoableAction = new CompositeUndoableAction("Insert node");
- node = controller.connection.createNode({}, lat, lon, undo.push);
+ node = firstSelected.connection.createNode({}, lat, lon, undo.push);
Way(firstSelected).insertNodeAtClosestPosition(node, true, undo.push);
appendNode(node,undo.push);
MainUndoStack.getGlobalStack().addAction(undo);
var lat:Number = controller.map.coord2lat(event.localY);
var lon:Number = controller.map.coord2lon(event.localX);
- var node:Node = controller.connection.createNode({}, lat, lon, undo.push);
+ var node:Node = firstSelected.connection.createNode({}, lat, lon, undo.push);
appendNode(node, undo.push);
performAction(undo);
// Only actually delete the node if it has no other tags, and is not part of other ways (or part of this way twice)
if (node.numParentWays==1 && Way(firstSelected).hasOnceOnly(node) && !node.hasInterestingTags()) {
editableLayer.setPurgable([node], true);
- controller.connection.unregisterPOI(node);
+ node.connection.unregisterPOI(node);
node.remove(undo.push);
}
if (event.type==MouseEvent.MOUSE_UP && (focus==null || (paint && paint.isBackground)) && map.dragstate!=map.DRAGGING) {
map.dragstate=map.NOT_DRAGGING;
var undo:CompositeUndoableAction = new BeginWayAction();
- var startNode:Node = controller.connection.createNode(
+ var conn:Connection = editableLayer.connection;
+ var startNode:Node = conn.createNode(
{},
controller.map.coord2lat(event.localY),
controller.map.coord2lon(event.localX), undo.push);
- var way:Way = controller.connection.createWay({}, [startNode], undo.push);
+ var way:Way = conn.createWay({}, [startNode], undo.push);
MainUndoStack.getGlobalStack().addAction(undo);
return new DrawWay(way, true, false);
}
}
public function deletePOI():ControllerState {
- controller.connection.unregisterPOI(firstSelected as Node);
+ firstSelected.connection.unregisterPOI(firstSelected as Node);
firstSelected.remove(MainUndoStack.getGlobalStack().addAction);
return new NoSelection();
}
if ( event.type == MouseEvent.MOUSE_UP && entity is Node && event.shiftKey ) {
// start new way
- var way:Way = controller.connection.createWay({}, [entity], MainUndoStack.getGlobalStack().addAction);
+ var way:Way = entity.connection.createWay({}, [entity], MainUndoStack.getGlobalStack().addAction);
return new DrawWay(way, true, false);
} else if ( event.type == MouseEvent.MOUSE_DOWN && entity is Way && focus==firstSelected && event.shiftKey) {
// insert node within way (shift-click)
if ( event.type == MouseEvent.MOUSE_UP && entity is Node && event.shiftKey ) {
// start new way
- var way:Way = controller.connection.createWay({}, [entity],
+ var way:Way = entity.connection.createWay({}, [entity],
MainUndoStack.getGlobalStack().addAction);
return new DrawWay(way, true, false);
} else if ( event.type == MouseEvent.MOUSE_UP && entity is Node && focus == parentWay ) {
var q:Point = map.localToGlobal(p);
// First, look for POI nodes in 20x20 pixel box around the current node
- var hitnodes:Array = controller.connection.getObjectsByBbox(
+ var hitnodes:Array = editableLayer.connection.getObjectsByBbox(
map.coord2lon(p.x-10),
map.coord2lon(p.x+10),
map.coord2lat(p.y-10),
}
public function addNewTurnRestriction():void {
- var conn:Connection = Connection.getConnection();
- var relation:Relation = conn.createRelation(
+ var relation:Relation = _entity.connection.createRelation(
{ type: 'restriction' },
[ new RelationMember(_entity, 'via') ],
MainUndoStack.getGlobalStack().addAction);
import net.systemeD.potlatch2.RelationEditorPanel;
import net.systemeD.potlatch2.mapfeatures.*;
import net.systemeD.halcyon.Map;
+ import net.systemeD.halcyon.MapPaint;
import net.systemeD.halcyon.Globals;
import flash.events.*;
import mx.collections.ArrayCollection;
}
private function setHighlights(bool:Boolean):void {
- var map:Map = Globals.vars.root;
- var from:Object=findSelected('from'); if (from) { map.setHighlight(from.data, { restrictfrom: bool } ); }
- var to:Object =findSelected('to' ); if (to ) { map.setHighlight(to.data , { restrictto: bool } ); }
+ var paint:MapPaint = Map(Globals.vars.root).editableLayer; // ** FIXME: should really be the mapPaint layer where the objects are located
+ var from:Object=findSelected('from'); if (from) { paint.setHighlight(from.data, { restrictfrom: bool } ); }
+ var to:Object =findSelected('to' ); if (to ) { paint.setHighlight(to.data , { restrictto: bool } ); }
}
]]></mx:Script>
private function getAuthText():String {
return "To save data you must authorise this application to edit "+
- Connection.serverName + " on your behalf.";
+ connection.serverName + " on your behalf.";
}
+ public function setConnection(connection:Connection):void {
+ this.connection=connection;
+ }
+
private function openURL(url:String):void {
if (ExternalInterface.available) {
var winH:int = 560;
}
private function getRequestToken():void {
- connection = Connection.getConnection();
-
var sig:IOAuthSignatureMethod = new OAuthSignatureMethod_HMAC_SHA1();
var consumer:OAuthConsumer = getConsumer();
var url:String = Connection.getParam("oauth_request_url", "http://127.0.0.1:3000/oauth/request_token");
PopUpManager.removePopUp(this);
_accessToken = getResponseToken(URLLoader(event.target));
- Connection.getConnection().setAuthToken(_accessToken);
+ connection.setAuthToken(_accessToken);
dispatchEvent(new Event(ACCESS_TOKEN_EVENT));
}
var oauthPanel:OAuthPanel = OAuthPanel(
PopUpManager.createPopUp(Application(Application.application), OAuthPanel, true));
PopUpManager.centerPopUp(oauthPanel);
+ oauthPanel.setConnection(_connection);
var listener:Function = function(event:Event):void {
var accessToken:OAuthToken = oauthPanel.accessToken;
var lon:Number = cx+Math.sin(ang*Math.PI/180)*d;
lats.splice(index, 0, lat);
lons.splice(index, 0, lon);
- var newNode:Node = map.connection.createNode({}, map.latp2lat(lat), lon, action.push);
+ var newNode:Node = way.connection.createNode({}, map.latp2lat(lat), lon, action.push);
way.insertNode(index, newNode, action.push);
}
}