source: subversion/applications/editors/potlatch/poi.as @ 12005

Last change on this file since 12005 was 11859, checked in by richard, 11 years ago

0.6-friendly Potlatch (work in progress). DO NOT SET POTLATCH_USE_SQL=false as it won't work

File size: 6.0 KB
Line 
1
2        // =====================================================================================
3        // OOP classes - POI
4       
5        // ---- Initialise
6       
7        function POI() {
8                this.attr=new Object();
9                this.clean=true;
10                this.uploading=false;
11                this.locked=false;
12                this.version=0;
13                this._xscale=this._yscale=Math.max(100/Math.pow(2,_root.scale-13),6.25);
14        };
15        POI.prototype=new MovieClip();
16        POI.prototype.remove=function() {
17                memberDeleted('node', this._name);
18                if (this._name>=0 && !_root.sandbox) {
19                        poidelresponder = function() { };
20                        poidelresponder.onResult = function(result) {
21                                var code=result.shift(); if (code) { handleError(code,result); return; }
22                                if (poiselected==result[0]) { deselectAll(); }
23                                removeMovieClip(_root.map.pois[result[0]]);
24                                _root.writesrequested--;
25                        };
26                        _root.writesrequested++;
27                        remote_write.call('putpoi',poidelresponder,_root.usertoken,_root.changeset,Math.floor(this._name),coord2long(this._x),coord2lat(this._y),this.attr,0);
28                } else {
29                        if (this._name==poiselected) { deselectAll(); }
30                        removeMovieClip(this);
31                }
32        };
33        POI.prototype.reload=function(timestamp) {
34                poirelresponder=function() {};
35                poirelresponder.onResult=function(result) {
36                        _root.map.pois[result[0]]._x  =long2coord(result[1]);
37                        _root.map.pois[result[0]]._y  =lat2coord (result[2]);
38                        _root.map.pois[result[0]].attr=result[3];
39                        _root.map.pois[result[0]].version=result[4];
40                        _root.map.pois[result[0]].select();
41                };
42                if (!timestamp) { timestamp=0; }
43                remote_read.call('getpoi',poirelresponder,Math.floor(this._name),timestamp);
44        };
45        POI.prototype.upload=function() {
46                poiresponder=function() { };
47                poiresponder.onResult=function(result) {
48                        var code=result.shift(); if (code) { handleError(code,result); return; }
49                        var ni=result[1];       // new POI ID
50                        if (result[0]!=ni) {
51                                _root.map.pois[result[0]]._name=ni;
52                                renumberMemberOfRelation('node', result[0], ni);
53                                if (poiselected==result[0]) {
54                                        poiselected=ni;
55                                        if (_root.panel.t_details.text==result[0]) { _root.panel.t_details.text=ni; _root.panel.t_details.setTextFormat(plainText); }
56                                }
57                        }
58                        _root.map.pois[ni].uploading=false;
59                        _root.map.pois[ni].version=result[2];
60                        _root.writesrequested--;
61                };
62                if (!this.uploading && !this.locked && !_root.sandbox) {
63                        _root.writesrequested++;
64                        remote_write.call('putpoi',poiresponder,_root.usertoken,_root.changeset,this._name,coord2long(this._x),coord2lat(this._y),this.attr,1);
65                        this.clean=true;
66                }
67        };
68        POI.prototype.onRollOver=function() {
69                setPointer('');
70        };
71        POI.prototype.onPress=function() {
72                removeWelcome(true);
73                if (_root.drawpoint>-1) {
74                        // add POI to way
75                        _root.nodes[this._name]=new Node(this._name,this._x,this._y,this.attr);
76                        addEndPoint(_root.nodes[this._name]);
77                        _root.junction=true; restartElastic();
78                        removeMovieClip(this);
79                } else {
80                        // click POI
81                        if (_root.wayselected || _root.poiselected!=this._name) {
82                                stopDrawing(); uploadSelected(); deselectAll(); 
83                        }
84                        this.select();
85                        _root.clicktime=new Date();
86                        this.beginDrag();
87                }
88        };
89        POI.prototype.beginDrag=function() {
90                this.onMouseMove=function() { this.trackDrag(); };
91                this.onMouseUp  =function() { this.endDrag();   };
92                _root.firstxmouse=_root.map._xmouse;
93                _root.firstymouse=_root.map._ymouse;
94                this.originalx=this._x;         // saved for undo
95                this.originaly=this._y;         //  |
96        };
97        POI.prototype.trackDrag=function() {
98                this._x=_root.map._xmouse;
99                this._y=_root.map._ymouse;
100        };
101        POI.prototype.endDrag=function() {
102                delete this.onMouseMove;
103                delete this.onMouseUp;
104                var t=new Date();
105                var xdist=Math.abs(_root.map._xmouse-_root.firstxmouse);
106                var ydist=Math.abs(_root.map._ymouse-_root.firstymouse);
107                var longclick=(t.getTime()-_root.clicktime)>300;
108
109                if ((xdist>=tolerance   || ydist>=tolerance  ) ||
110                   ((xdist>=tolerance/2 || ydist>=tolerance/2) && longclick)) {
111                        this.clean=false;
112                        this.select();
113                        markClean(false);
114                        _root.undo.append(UndoStack.prototype.undo_movepoi,
115                                                          new Array(this,this.originalx,this.originaly),
116                                                          iText("moving a POI",'action_movepoi'));
117                }
118        };
119        POI.prototype.select=function() {
120                _root.panel.properties.tidy();
121                _root.panel.properties.saveAttributes();
122                _root.poiselected=this._name;
123                setTypeText(iText("Point",'point'),this._name);
124                _root.panel.properties.init('POI',getPanelColumns(),4);
125                _root.panel.presets.init(_root.panel.properties);
126                updateButtons();
127                updateScissors(false);
128                highlightSquare(this._x,this._y,8/Math.pow(2,Math.min(_root.scale,16)-13));
129                redrawRelationsForMember('node', this._name);
130        };
131        POI.prototype.recolour=function() { 
132                this.redden=new Color(this);
133                if (this.locked) { this.redden.setTransform(to_red); }
134                                        else { this.redden.setTransform(to_normal); }
135        };
136       
137        POI.prototype.saveUndo=function(str) {
138                // ** localisation not done
139                _root.undo.append(UndoStack.prototype.undo_deletepoi,
140                                                  new Array(this._name,this._x,this._y,
141                                                                        deepCopy(this.attr)),iText("$1 a POI",'a_poi',str));
142        };
143
144        Object.registerClass("poi",POI);
145        // **** register all POI types here
146        // Object.registerClass("poi_22",POI);
147
148
149
150        // ==============================================================
151        // Support functions
152
153        function resizePOIs() {
154                var n=Math.max(100/Math.pow(2,_root.scale-13),6.25);
155                for (var qpoi in _root.map.pois) {
156                        _root.map.pois[qpoi]._xscale=_root.map.pois[qpoi]._yscale=n;
157                }
158                if (_root.poiselected) {
159                        highlightSquare(_root.map.pois[poiselected]._x,_root.map.pois[poiselected]._y,8/Math.pow(2,Math.min(_root.scale,16)-13));
160                }
161        }
162
163
164        // purgePOIs - remove any clean POIs outside current view
165
166        function purgePOIs() {
167                var coord_l=long2coord(edge_l); var coord_t=lat2coord(edge_t);
168                var coord_r=long2coord(edge_r); var coord_b=lat2coord(edge_b);
169                for (qpoi in _root.map.pois) {
170                        if (qpoi==_root.poiselected) {
171                        } else if (!_root.map.pois[qpoi].clean) {
172                                _root.map.pois[qpoi].upload();
173                        } else if ((_root.map.pois[qpoi]._x<coord_l || _root.map.pois[qpoi]._x>coord_r) &&
174                                           (_root.map.pois[qpoi]._y<coord_b || _root.map.pois[qpoi]._y>coord_t)) {
175                                removeMovieClip(_root.map.pois[qpoi]);
176                                _root.poicount-=1;
177                        }
178                }
179        }
Note: See TracBrowser for help on using the repository browser.