-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3819888
By: nobody
<grid>
<columns>
<column label="Type" draggable="true" droppable="true" onDrop="move(event.dragged)"/> <column label="Content" draggable="true" droppable="true"
onDrop="move(event.dragged)"/>
<column label="Action" draggable="true" droppable="true"
onDrop="move(event.dragged)"/>
</columns>
<rows>
<row draggable="true" droppable="true" onDrop="move(event.dragged)"> <label value="A" /> <label value="98" /> <button label="X"/> </row> <row draggable="true" droppable="true" onDrop="move(event.dragged)"> <label value="B" /> <label value="54" /> <button label="Y"/> </row> <row draggable="true" droppable="true" onDrop="move(event.dragged)"> <label value="C" /> <label value="73" /> <button label="Z"/> </row> </rows> </grid> <zscript> void move(Component dragged) {
if(dragged.getClass().getName().endsWith("Column") &&
self.getClass().getName().endsWith("Column")){
int maxCols=dragged.getParent().getChildren().size();
int maxRows=dragged.getGrid().getRows().getChildren().size();
int i=-1;//Is there any easy way to find an object's index in an List of its siblings?
for(Column c:dragged.getParent().getChildren()){
i++;
if(dragged==c) break;
}
int j=-1;//Is there any easy way to find an object's index in an List of its siblings?
for(Column c:self.getParent().getChildren()){
j++;
if(self==c) break;
}
for(int k=0; k< maxRows; k++)
self.getGrid().getCell(k,j).parent.insertBefore(self.getGrid().getCe
ll(k,i), self.getGrid().getCell(k,j));
}
if(self.getClass()==dragged.getClass())
self.parent.insertBefore(dragged, self);
else alert("Source Object dropped to mismatching target!"); } </zscript>
Thanks
Bakoma
Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3819941
By: henrichen
Hi! Bakoma,
Thanks for the contribution. Maybe we should put this to ZK's how-to wiki. Can you do it?
I revised your code a little.
1. ZK support matching of draggable and droppable (just put them with same string) into one drag-n-drop group. i.e. only matching draggable and droppable would generate the onDrop event. (true is an "always match" keyword) Therefore I change the draggable and droppable from "true" to "col" and "row" to split column and row to two dragging group.
2. There is an Java API indexOf in List. That I changed it.
3. Since column and row have been split to two dragging group, no need to do the class name checking anymore, I remove it.
Here is the revised code:
<zk>
<grid>
<columns>
<column label="Type" draggable="col" droppable="col"
onDrop="move(event.dragged)"/>
<column label="Content" draggable="col" droppable="col"
onDrop="move(event.dragged)"/>
<column label="Action" draggable="col" droppable="col"
onDrop="move(event.dragged)"/>
</columns>
<rows>
<row draggable="row" droppable="row" onDrop="move(event.dragged)"> <label value="A" /> <label value="98" /> <button label="X"/> </row> <row draggable="row" droppable="row" onDrop="move(event.dragged)"> <label value="B" /> <label value="54" /> <button label="Y"/> </row> <row draggable="row" droppable="row" onDrop="move(event.dragged)"> <label value="C" /> <label value="73" /> <button label="Z"/> </row> </rows> </grid> <zscript><![CDATA[ void move(Component dragged) {
if(dragged.getClass().getName().endsWith("Column")) {
int maxCols=dragged.getParent().getChildren().size();
int maxRows=dragged.getGrid().getRows().getChildren().size();
int i= dragged.getParent().getChildren().indexOf(dragged);
int j= self.getParent().getChildren().indexOf(self);
//move celles for each row
for(int k=0; k < maxRows; k++)
self.getGrid().getCell(k,j).parent.insertBefore(self.getGrid().getCe
ll(k,i), self.getGrid().getCell(k,j));
}
self.parent.insertBefore(dragged, self); } ]]></zscript> </zk>
Hi,
I know that above post is very old and the code specified to swap columns works perfectly. Can all this swap operation be done on client side itself for performance improvement. I have had a quick look at the client side programming tutorial but I was wondering of there is a short way of achieving it ? sample code like above would be of immense help.
Asked: 2006-07-13 04:11:21 +0800
Seen: 809 times
Last updated: Oct 23 '10