source: subversion/applications/editors/potlatch/anchorpoint.as @ 16526

Last change on this file since 16526 was 16416, checked in by richard, 10 years ago

a bit more Potlatch 1.1

File size: 7.3 KB
RevLine 
[6739]1
2        // =====================================================================================
3        // OOP classes - AnchorPoint
4        // click behaviour:
5        // - click and drag: move point
6        // - click (not drag) start/end point: go into draw mode extend line
7       
8        function AnchorPoint() {
[8894]9                this.way=null;
[6739]10                this.node=0;
11        };
12        AnchorPoint.prototype=new MovieClip();
13        AnchorPoint.prototype.onPress=function() {
[8894]14                removeWelcome(true);
[7604]15                var t=new Date();
[8894]16                if (this._name==0 && this.way.path.length==1) {
[6739]17                        // solo double-click - create new POI
18                        stopDrawing();
[15136]19                        _root.map.pois.attachMovie("poi",--newnodeid,++poidepth);
20                        _root.map.pois[newnodeid]._x=_root.map._xmouse;
21                        _root.map.pois[newnodeid]._y=_root.map._ymouse;
22                        _root.map.pois[newnodeid].select();
23                        _root.map.pois[newnodeid].clean=false;
[6739]24                        markClean(false);
[7718]25                        _root.undo.append(UndoStack.prototype.undo_createpoi,
[15136]26                                                          [_root.map.pois[newnodeid]],iText("creating a POI",'action_createpoi'));
[7718]27
[11859]28                } else if (Key.isDown(Key.SHIFT) && !this.way.historic) {
[7984]29                        _root.junction=true;                            // flag to prevent elastic band stopping on _this_ mouseUp
[8894]30                        startNewWay(this.node);
[7604]31                } else if (this._name==_root.drawpoint ||
32                                  (this._name==_root.lastpoint && (t.getTime()-_root.lastpointtime)<700)) {
[6739]33                        // double-click at end of route
[7604]34                        _root.lastpoint=_root.drawpoint;        // trap triple-click
35                        _root.lastpointtime=new Date();         //  |
[6739]36                        stopDrawing();
37                } else {
38//                      _root.lastxmouse=_root._xmouse;
39//                      _root.lastymouse=_root._ymouse;
40                        _root.clicktime=new Date();
41                        this.beginDrag();
[7658]42                        this.select();
[6739]43                }
44        };
45
[7658]46        AnchorPoint.prototype.select=function() {
[8894]47                _root.panel.properties.tidy();
[7658]48                _root.panel.properties.saveAttributes();
49                _root.pointselected=this._name;
[8894]50                this.way.highlight();
51                setTypeText(iText("Point",'point'),this.node);
[16416]52                removeIconPanel();
[7658]53                _root.panel.properties.init('point',getPanelColumns(),4);
54                _root.panel.presets.init(_root.panel.properties);
55                updateButtons();
56                updateScissors(true);
[8894]57                setTooltip(iText("point selected\n(shift-click point to\nstart new line)",'hint_pointselected'),0);
[7658]58        };
59
[6739]60        AnchorPoint.prototype.beginDrag=function() {
61                this.onMouseMove=function() { this.trackDrag(); };
62                this.onMouseUp  =function() { this.endDrag();   };
63                _root.firstxmouse=_root.map._xmouse;
64                _root.firstymouse=_root.map._ymouse;
[16412]65                _root.oldx=_root.ws.path[this._name].x;
66                _root.oldy=_root.ws.path[this._name].y;
67                clearFloater();
[6739]68        };
69
70        AnchorPoint.prototype.trackDrag=function() {
71                this._x=_root.map._xmouse;
72                this._y=_root.map._ymouse;
[16412]73                _root.ws.path[this._name].moveTo(this._x,this._y,undefined);
74                _root.ws.highlight();
[6739]75        };
76       
77        AnchorPoint.prototype.endDrag=function() {
[10776]78                delete this.onMouseMove;
79                delete this.onMouseUp;
[6739]80                var newx=_root.map._xmouse;
81                var newy=_root.map._ymouse;
82                var t=new Date();
83                var xdist=Math.abs(newx-_root.firstxmouse);
84                var ydist=Math.abs(newy-_root.firstymouse);
85                var longclick=(t.getTime()-_root.clicktime)>300;
86
87                if ((xdist>=tolerance   || ydist>=tolerance  ) ||
88                   ((xdist>=tolerance/2 || ydist>=tolerance/2) && longclick)) {
89                        // ==== Move existing point
[16412]90                        _root.ws.path[this._name].x=_root.oldx; // just so it's saved for undo
91                        _root.ws.path[this._name].y=_root.oldy; //  |
[7658]92                        _root.undo.append(UndoStack.prototype.undo_movenode,
[10776]93                                                          new Array(deepCopy(_root.ws.path[this._name])),
[8894]94                                                          iText("moving a point",'action_movepoint'));
[10776]95                        _root.ws.path[this._name].moveTo(newx,newy,undefined);
[6739]96                        _root.ws.highlightPoints(5000,"anchor");
97                        _root.ws.highlight();
[8894]98                        _root.ws.redraw();
[6739]99                        _root.ws.clean=false;
100                        markClean(false);
101
102                } else {
[16412]103                        _root.ws.path[this._name].moveTo(_root.oldx,_root.oldy,undefined);      // Return point to original position
[6739]104                        if ((this._name==0 || this._name==_root.ws.path.length-1) && !Key.isDown(17)) {
105                                // ===== Clicked at start or end of line
106                                if (_root.drawpoint==0 || _root.drawpoint==_root.ws.path.length-1) {
107                                        // - Join looping path
[8894]108                                        addEndPoint(_root.ws.path[this._name]);
[7604]109                                        _root.lastpoint=_root.drawpoint;        // trap triple-click
110                                        _root.lastpointtime=new Date();         //  |
[6739]111                                        stopDrawing();
112                                } else if (_root.drawpoint==-1) {
113                                        // - Start elastic line for adding new point
[8894]114                                        setTooltip(iText("click to add point\ndouble-click/Return\nto end line",'hint_drawmode'),0);
[6739]115                                        _root.drawpoint=this._name;
116                                        this.startElastic();
117                                }
118       
119                        } else {
120                                // ===== Clicked elsewhere in line
121                                if (_root.drawpoint>-1) {
[8894]122                                        addEndPoint(_root.ws.path[this._name]);
[6739]123                                        _root.junction=true; restartElastic();
124                                }
125                        }
126                }
127        };
128
129        AnchorPoint.prototype.startElastic=function() {
130                this.onMouseMove=function() { this.trackElastic(); };
131                this.onMouseUp  =function() { this.endElastic();   };
132        };
133       
134        AnchorPoint.prototype.trackElastic=function() {
135                _root.map.elastic.clear();
[7604]136                _root.map.elastic.lineStyle(Math.min(linewidth,6),0x000000,100,false,"none");
[6739]137                _root.map.elastic.moveTo(_root.map._xmouse,_root.map._ymouse);
138                _root.map.elastic.lineTo(this._x,this._y);
139        };
140       
141        AnchorPoint.prototype.endElastic=function() {
142                if (_root.junction) { _root.junction=false; }
[10776]143                                           else { delete this.onMouseMove; 
144                                                          delete this.onMouseUp; }
[6739]145        };
146
147        function restartElastic() {
148                if (_root.drawpoint!=-1) {
149                        _root.map.anchors[_root.drawpoint].startElastic();
150                        _root.map.anchors[_root.drawpoint].trackElastic();
151                }
152        }
153
154        AnchorPoint.prototype.onRollOver=function() {
155                if (_root.drawpoint>-1) {
[8894]156                        if (this._name==0 || this._name==this.way.path.length-1) {
[6739]157                                setPointer('penso');
158                        } else {
159                                setPointer('penx');
160                        }
161                } else {
162                        setPointer('');
163                }
[14904]164                var a=getName(_root.nodes[this.node].attr,nodenames); if (a) { setFloater(a); }
[6739]165        };
[14904]166       
167        AnchorPoint.prototype.onRollOut=function() { clearFloater(); };
[6739]168
169        Object.registerClass("anchor",AnchorPoint);
[15136]170        Object.registerClass("anchor_junction",AnchorPoint);
[6739]171
172
173
174        // =====================================================================================
175        // OOP classes - AnchorHint
176
177        function AnchorHint() {
[8894]178                this.way=null;
[6739]179                this.node=0;
180        };
181        AnchorHint.prototype=new MovieClip();
182        AnchorHint.prototype.onRollOver=function() {
[8894]183                if (this._name==0 || this._name==this.way.path.length-1) {
[14904]184                        setTooltip(iText("over endpoint ($1)\nclick to join\nshift-click to merge",'hint_overendpoint',this.node));
[6739]185                        setPointer('peno');
186                } else {
[14904]187                        setTooltip(iText("over point ($1)\nclick to join",'hint_overpoint',this.node));
[6739]188                        setPointer('penx');
189                }
[14904]190                var a=getName(_root.nodes[this.node].attr,nodenames); if (a) { setFloater(a); }
[6739]191        };
192        AnchorHint.prototype.onRollOut=function() {
193                clearTooltip();
[14904]194                clearFloater();
[6739]195        };
196
197        AnchorHint.prototype.onPress=function() {
[11859]198                if (this.way.historic) {
[6739]199                        _root.junction=true;
200                        restartElastic(); return;       // can't merge/join to historic ways
201                }
202                var i,z;
203                if (Key.isDown(Key.SHIFT)) {
204                        // Merge ways
[8894]205                        if (this._name==0 || this._name==this.way.path.length-1) {
206                                _root.ws.mergeWay(_root.drawpoint,this.way,this._name);
[6739]207                                _root.drawpoint=-1;
208                                _root.ws.redraw();
209//                              _root.ws.upload();
[8894]210//                              this.way.remove(wayselected);
[6739]211                                clearTooltip();
212                                _root.map.elastic.clear();
213                                _root.ws.select();      // removes anchorhints, so must be last
214                        }
215                } else { 
216                        // Join ways (i.e. junction)
[11040]217                        addEndPoint(_root.nodes[this.node]);
[6739]218                        _root.junction=true;                                            // flag to prevent elastic band stopping on _this_ mouseUp
219                        restartElastic();
220                }
221        };
222        Object.registerClass("anchorhint",AnchorHint);
[15136]223        Object.registerClass("anchorhint_junction",AnchorHint);
[6739]224
Note: See TracBrowser for help on using the repository browser.