Hi,

Amit Rana wrote:
Hi Fritz,

Fritz Zaucker wrote:
Hi Amit,

thanks for coming up with the code snippet.

For dropping to work in the drop-listener you must replace the line

     this.addBefore(sel[i], orig); //error - this.addBefore is not a function

with

     orig.getParent().addBefore(sel[i], orig);

You must drop (e.g. add) to the parentFolder in a tree.

thanks for the tip but i guess I was not using that properly. After removal of "for" loop, now its working fine.
However, there are still issues:

1) The indicator is not shown (it is probably at the wrong place as the call

        var origCoords = orig.getContainerLocation();

    gets the coordinates of the "surrounding" parent part of the tree.

    This is the problem I originally described in my posting. Your code
    snippet nicely describes the problem (with the above change for
    dropping).

as you already know, same problem with me but i guess we can try solving this in case no-one else comes up with any suggestions :-)
2) Depending on where the drop occurs the call to getOriginalTarget() seems
    to pick up the label part of the TreeFolder widget and thus the attempt
    to add the droppable widget to its parent (the labels) fails with the
    following error in the firebug console:

           orig.getParent is not a function
           var cz=new qx.ui.basic.Label(this.tr(bn));

    This can be reproduced with your code snippet in the playground by
    experimenting with dragging/dropping.

    I guess the logic of detecting the widget to drop to needs some
    improvement (probably some instanceOf magic).
The List example works perfect (it doesn't allow you to drop on the label and only allows the drop at place when indicator is seen between the items). So, we need to do something similar. Even without indicator, the cursor changes to cursor with a small box at top and if we can make this appear only between the nodes, then maybe this error will not come. BTW, in my code, if I try dropping on the label, the script simply hangs (without giving any error). :-(
I solved this problem by modifying my "drop" eventlistener as :
----snip----
tree.addListener("drop", function(e)
     {
       var sel = this.getSortedSelection();
       var src = sel[0];
       var dest = e.getOriginalTarget();
var p1 = src.getParent();
       var p2 = dest.getParent();
if(p1 == p2) //solves issue 4)
         if(dest instanceof qx.ui.tree.TreeFolder){   //solves issue 2)
           dest.getParent().addBefore(src, dest);
         }
});
----snip----
But, if I try dropping after the last node, I get error. So need to handle this special case.

Amit
3) The for loop in the drop listener is probably not needed, as in a tree
    only one Folder can be selected at a time, so sel.length is always 1. So
    I guess this could be simplified a bit.

Yeah... I changed it to orig.getParent().addBefore(sel[0], orig); and its working fine. thnks
4) For my application I need to limit the dragging of a folder to within the
    same sub-tree (e.g. the parent folder cannot change). So more drag
    detection logic is needed, but this shouldn't be too difficult.
same in my case too. :-)
So currently I am in need for some help on 1) and if somebody has a hint for
2) that would even be better.

Thanks,
Fritz

thanks
Amit
On Mon, 23 Mar 2009, Amit Rana wrote:

Hi,

As mentioned before, I am also working on drag-drop feature on tree. I have made a sample code, but I am stuck up with :

1. moving the folder at the right place (How to get the list of parsed nodes - I tried to add them to an array on "dragover" event but same node gets added multiple times and also node label gets added separately, so need to write lot of code to avoid all that and I am lokking at some simplified method possible)

2. Indicator position (indicator gets shown at wrong place - it has to do with the container but not sure how to rectify that)

Please find the code snippet (made on Playground) and let me know your suggestions.
Please note that the "drop" part does not work properly.

Amit

P.S. : I am sorry that I have added my doubt in the same thread. Please let me know if I should create a new thread or its ok in this one (created by Fritz)


Fritz Zaucker wrote:
Hi Amit,

I'll have to extract the relevant code from my application (I currently use
a class derived from TreeFolder and a somewhat complex code to dynamically
create the Folders). I'll post the snippet on the mailing list asap.

Cheers,
Fritz

On Mon, 23 Mar 2009, Amit Rana wrote:


Hi Fritz,

I am also trying to implement the drag-drop feature on tree but  the
script hangs if I try in playground application. Can you please pass me
your code snippet ?

BR
Amit

Christian Schmidt wrote:

Hi Fritz,

could you please send a code snipped or an example, that would make it
easier to help you by this problem.

Thanks,
Chris

Fritz Zaucker schrieb:


Hi,

I have started to implement drag/drop in my application for the
qx .ui.tree.TreeFolder()s of a qx.ui.tree.Tree(). I followed the
Drag/Drop-Demo for Lists in the demobrowser. I had to change the line

      orig.addBefore(sel[i], orig);

to

      orig.getParent().addBefore(sel[i], orig);

to drop the folder into the correct widget.

The only problem I have is to figure out how to get the coordinates for the
drag/drop indicator right. The demo code has the line

     var orig = e.getOriginalTarget();
     var origCoords = orig.getContainerLocation();

but this places the indicator several folders below where it should. I guess that this actually gives the lower end of the sub-tree in which the folder
lives.

So my question is, which widget would I have to call getContainerLocation()
or some other method on to get the right coordinates?

Thanks for your help,
Fritz
--
Amit Rana ________________________________________ SpagoBI Consultant Research & Innovation Division Engineering Ingegneria Informatica S.p.A. www.eng.it www.spagoworld.org ________________________________________

------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to