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

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

Potlatch 0.11b

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