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

Last change on this file since 14716 was 14695, checked in by richard, 10 years ago

change relation_member 'type' case, to match change in database

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