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

Last change on this file since 14979 was 14904, checked in by richard, 10 years ago

Potlatch 0.11b

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