1 package net.systemeD.potlatch2.controller {
3 import flash.display.*;
5 import net.systemeD.halcyon.connection.*;
7 public class SelectArea extends ControllerState {
9 private var startX:Number;
10 private var startY:Number;
11 private var endX:Number;
12 private var endY:Number;
13 private var box:Shape;
14 private const TOLERANCE:uint=4;
16 public function SelectArea(x:Number,y:Number) {
21 override public function processMouseEvent(event:MouseEvent, entity:Entity):ControllerState {
22 if (event.type==MouseEvent.MOUSE_MOVE) {
23 // ** FIXME: weird things happen if you mouse-over the drag-and-drop panel
27 } else if (event.type==MouseEvent.MOUSE_UP) {
28 // select everything within boundary
30 if (startX>endX) { a=startX; startX=endX; endX=a; }
31 if (startY>endY) { a=startY; startY=endY; endY=a; }
32 if (endX-startX<TOLERANCE && endY-startY<TOLERANCE) { return new NoSelection(); }
33 var left:Number=controller.map.coord2lon(startX);
34 var right:Number=controller.map.coord2lon(endX);
35 var top:Number=controller.map.coord2lat(startY);
36 var bottom:Number=controller.map.coord2lat(endY);
37 var entities:Object=editableLayer.connection.getObjectsByBbox(left,right,top,bottom);
38 for each (var way:Way in entities.waysInside) { if (way.intersects(left,right,top,bottom)) toggleSelection(way); }
39 for each (var poi:Node in entities.poisInside) { toggleSelection(poi); }
40 return controller.findStateForSelection(selection);
45 private function drawSelectionBox():void {
47 box.graphics.beginFill(0xDDDDFF,0.5);
48 box.graphics.lineStyle(1,0xFF0000);
49 box.graphics.drawRect(startX,startY,endX-startX,endY-startY);
52 override public function enterState():void {
54 var l:DisplayObject=editableLayer.getPaintSpriteAt(editableLayer.maxlayer);
55 var o:DisplayObject=Sprite(l).getChildAt(3);
56 (o as Sprite).addChild(box);
57 controller.map.draggable=false;
59 override public function exitState(newState:ControllerState):void {
60 box.parent.removeChild(box);
61 controller.map.draggable=true;
62 if (!newState.isSelectionState()) { controller.updateSelectionUI(); }
64 override public function toString():String {