suvarnal
10 Dec 2008, 3:19 AM
Hi,
I am using Ext GWT 1.2.
I have a left side panel having a Tree and a right side panel having ListView and Grid.
When any tree item is clicked its children are shown in the right panel ListView and Grid.
I have added drag and drop functionality within the tree (like reordering tree example http://extjs.com/explorer-dev/#reorderingtree) and also drag and drop from the right panel Grid/ListView to the Tree.
When I drag any item from right side ListView or Grid or from the Tree itseft and drop it to any other item in Tree, sometimes the item is lost. Sometimes its not shown under the Tree item to which it was dropped, but it is there in its children list. Sometimes the dropped item is shown below the tree item to which it was dropped, it should be shown inside it.
I tried combinations of Feedback and Operation types, but none worked properly.
The Tree has no TreeStore, the Grid and ListView have same ListStore.
Following is the code:
leftPane.getTree().addListener(Events.OnClick, new Listener<TreeEvent>() {
public void handleEvent( TreeEvent be)
{
// show children in Grin and ListView
showContents((TreeItem)leftPane.getTree().getSelectedItem());
}
});
// tree to tree
TreeDragSource source = new TreeDragSource(leftPane.getTree());
source.addDNDListener(new DNDListener() {
@Override
public void dragStart(DNDEvent e) {
TreeItem item = leftPane.getTree().findItem(e.getTarget());
if (item != null && item == leftPane.getTree().getRootItem().getItem(0)) {
e.doit = false;
e.status.setStatus(false);
return;
}
super.dragStart(e);
}
});
// thumb-nails view to tree
new ListViewDragSource(rightPane.getThumbNailsView());
new GridDragSource(rightPane.getGrid());
TreeDropTarget target = new TreeDropTarget(leftPane.getTree()) {
@Override
protected void handleAppendDrop(DNDEvent event, TreeItem item){
DragSource source = event.source;
if(source instanceof ListViewDragSource || source instanceof GridDragSource)
{
List<BeanModel> sel = (List) event.data;
for (BeanModel bean : sel)
{
Folder folder = bean.getBean();
TreeItem newItem = new TreeItem();
newItem = new TreeItem(folder.getName());
newItem.setId(folder.getId());
String isFile = folder.getIsFile();
if("false".equals(isFile))
newItem.setLeaf(false);
else
newItem.setLeaf(true);
newItem.setData("name", folder.getName());
newItem.setData("status", folder.getStatus());
newItem.setData("isFile", folder.getIsFile());
TreeItem removeItem = leftPane.getTree().getItemById(folder.getId());
if(removeItem != null)
{
removeItem.getParentItem().remove(removeItem);
}
item.add(newItem);
}
}
else
{
super.handleAppendDrop(event, item);
}
}
};
target.setAllowSelfAsSource(true);
target.setFeedback(Feedback.APPEND);
What am I missing?
I am using Ext GWT 1.2.
I have a left side panel having a Tree and a right side panel having ListView and Grid.
When any tree item is clicked its children are shown in the right panel ListView and Grid.
I have added drag and drop functionality within the tree (like reordering tree example http://extjs.com/explorer-dev/#reorderingtree) and also drag and drop from the right panel Grid/ListView to the Tree.
When I drag any item from right side ListView or Grid or from the Tree itseft and drop it to any other item in Tree, sometimes the item is lost. Sometimes its not shown under the Tree item to which it was dropped, but it is there in its children list. Sometimes the dropped item is shown below the tree item to which it was dropped, it should be shown inside it.
I tried combinations of Feedback and Operation types, but none worked properly.
The Tree has no TreeStore, the Grid and ListView have same ListStore.
Following is the code:
leftPane.getTree().addListener(Events.OnClick, new Listener<TreeEvent>() {
public void handleEvent( TreeEvent be)
{
// show children in Grin and ListView
showContents((TreeItem)leftPane.getTree().getSelectedItem());
}
});
// tree to tree
TreeDragSource source = new TreeDragSource(leftPane.getTree());
source.addDNDListener(new DNDListener() {
@Override
public void dragStart(DNDEvent e) {
TreeItem item = leftPane.getTree().findItem(e.getTarget());
if (item != null && item == leftPane.getTree().getRootItem().getItem(0)) {
e.doit = false;
e.status.setStatus(false);
return;
}
super.dragStart(e);
}
});
// thumb-nails view to tree
new ListViewDragSource(rightPane.getThumbNailsView());
new GridDragSource(rightPane.getGrid());
TreeDropTarget target = new TreeDropTarget(leftPane.getTree()) {
@Override
protected void handleAppendDrop(DNDEvent event, TreeItem item){
DragSource source = event.source;
if(source instanceof ListViewDragSource || source instanceof GridDragSource)
{
List<BeanModel> sel = (List) event.data;
for (BeanModel bean : sel)
{
Folder folder = bean.getBean();
TreeItem newItem = new TreeItem();
newItem = new TreeItem(folder.getName());
newItem.setId(folder.getId());
String isFile = folder.getIsFile();
if("false".equals(isFile))
newItem.setLeaf(false);
else
newItem.setLeaf(true);
newItem.setData("name", folder.getName());
newItem.setData("status", folder.getStatus());
newItem.setData("isFile", folder.getIsFile());
TreeItem removeItem = leftPane.getTree().getItemById(folder.getId());
if(removeItem != null)
{
removeItem.getParentItem().remove(removeItem);
}
item.add(newItem);
}
}
else
{
super.handleAppendDrop(event, item);
}
}
};
target.setAllowSelfAsSource(true);
target.setFeedback(Feedback.APPEND);
What am I missing?