Ik heb een treeview in flash gemaakt waarvan de data wordt ingelezen uit een XML bestand. Weergave, inklappen, uitklappen etc werkt allemaal goed. Alleen de sleepfunctie niet helemaal, ik heb een functie geschreven die er voor zou moeten zorgen dat de node (= folder of file) terug gezet wordt op zijn oude plaats wanneer je niet in het rechtervlak loslaat. Zodra je de muis echter los laat op een andere node wordt stopDrag() niet aangeroepen en moet je nog een keer klikken om te stopen, waarna de node niet meer terug gezet wordt.
zie de http://www.pulse-djs.com/sms.swf
de (relevante) code:
iemand die misschien ziet wat er mis gaat?
zie de http://www.pulse-djs.com/sms.swf
de (relevante) code:
code:
1
2
3
| contactHandler.prototype.setLock = function(folder, bool, node) {
// zorgt er voor dat alle nodes 'gelocked' worden zodra er gesleept wordt
} |
code:
1
2
3
4
5
6
7
8
| function node() {
// event methodes toewijzen aan de node
this.onPress = this.toggle;
this.onRollOver = this.mouseOver;
this.onRollOut = this.mouseOut;
this.onRelease = this.releaseMe;
} |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| node.prototype.releaseMe = function() {
trace("entered releaseMe function");
if (this.contactHandler.moveNode == 1) {
trace("eerste if statement entered");
if ( (_root._xmouse > _root.smsHandler.getLeft() && _root._xmouse < _root.smsHandler.getRight()) && (_root._ymouse > _root.smsHandler.getTop() && _root._ymouse < _root.smsHandler.getBottom()) ) {
trace("gedropped in rechtervak");
this._x = _root._xmouse;
this._y = _root._ymouse;
}
else {
trace("buiten rechtervak gedropped");
trace(this.xvalue);
trace(this.yvalue);
this._x = this.xvalue;
this._y = this.yvalue;
}
stopDrag();
trace("stop drag" + this._name);
this.contactHandler.moveNode--;
this.contactHandler.setLock(_root["root"].folder, false, this);
}
} |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| node.prototype.toggle = function() {
// Deze functie kijkt of de node een folder object heeft en opent of sluit deze
if ( (_root._xmouse > this.contactHandler.getLeft() && _root._xmouse < this.contactHandler.getRight()) && (_root._ymouse > this.contactHandler.getTop() && _root._ymouse < this.contactHandler.getBottom()) )
{
if (this.folder != undefined) {
if (this.folder._visible==true) {
this.collapse();
}
else {
this.expand();
}
}
this.xvalue = this._x;
trace("xvalue heeft nieuwe waarde gekregen");
this.yvalue = this._y;
trace("yvalue heeft nieuwe waarde gekregen");
if ( (this.contactHandler.DragX != _root._xmouse || this.contactHandler.DragY != _root._ymouse) && (this.contactHandler.moveNode == 0) ) {
trace("start drag " + this._name);
_root["root"].onPress = null;
_root["root"].onRollOut = null;
_root["root"].onRollOver = null;
this.contactHandler.DragX = _root._xmouse;
this.contactHandler.DragY = _root._ymouse;
this.contactHandler.setLock(_root["root"].folder, true, this);
this.contactHandler.moveNode++;
this.startDrag (false);
}
}
} |
iemand die misschien ziet wat er mis gaat?