New file |
0,0 → 1,171 |
if(!dojo._hasResource["dijit._tree.dndSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dijit._tree.dndSelector"] = true; |
dojo.provide("dijit._tree.dndSelector"); |
dojo.require("dojo.dnd.common"); |
dojo.require("dijit._tree.dndContainer"); |
|
dojo.declare("dijit._tree.dndSelector", |
dijit._tree.dndContainer, |
{ |
constructor: function(tree, params){ |
this.selection={}; |
this.anchor = null; |
this.simpleSelection=false; |
|
this.events.push( |
dojo.connect(this.tree.domNode, "onmousedown", this,"onMouseDown"), |
dojo.connect(this.tree.domNode, "onmouseup", this,"onMouseUp") |
); |
}, |
|
// object attributes (for markup) |
singular: false, // is singular property |
|
// methods |
getSelectedItems: function(){ |
var selectedItems = [] |
for (var i in this.selection){ |
selectedItems.push(dijit.getEnclosingWidget(this.selection[i]).item); |
} |
return selectedItems; |
}, |
|
getSelectedNodes: function(){ |
return this.selection; |
}, |
|
selectNone: function(){ |
// summary: unselects all items |
return this._removeSelection()._removeAnchor(); // self |
}, |
|
insertItems: function(item, parent){ |
// summary: inserts new data items (see Container's insertNodes method for details) |
|
//we actually need to add things to the store here instead of adding noes to the tree directly |
}, |
|
destroy: function(){ |
// summary: prepares the object to be garbage-collected |
dojo.dnd.Selector.superclass.destroy.call(this); |
this.selection = this.anchor = null; |
}, |
|
// mouse events |
onMouseDown: function(e){ |
// summary: event processor for onmousedown |
// e: Event: mouse event |
if(!this.current){ return; } |
|
var item = dijit.getEnclosingWidget(this.current).item |
var id = this.tree.store.getIdentity(item); |
|
if (!this.current.id) { |
this.current.id=id; |
} |
|
if (!this.current.type) { |
this.current.type="data"; |
} |
|
if(!this.singular && !dojo.dnd.getCopyKeyState(e) && !e.shiftKey && (this.current.id in this.selection)){ |
this.simpleSelection = true; |
dojo.stopEvent(e); |
return; |
} |
|
if(this.singular){ |
if(this.anchor == this.current){ |
if(dojo.dnd.getCopyKeyState(e)){ |
this.selectNone(); |
} |
}else{ |
this.selectNone(); |
this.anchor = this.current; |
this._addItemClass(this.anchor, "Anchor"); |
|
this.selection[this.current.id] = this.current; |
} |
}else{ |
if(!this.singular && e.shiftKey){ |
if (dojo.dnd.getCopyKeyState(e)){ |
//TODO add range to selection |
}else{ |
//TODO select new range from anchor |
} |
}else{ |
if(dojo.dnd.getCopyKeyState(e)){ |
if(this.anchor == this.current){ |
delete this.selection[this.anchor.id]; |
this._removeAnchor(); |
}else{ |
if(this.current.id in this.selection){ |
this._removeItemClass(this.current, "Selected"); |
delete this.selection[this.current.id]; |
}else{ |
if(this.anchor){ |
this._removeItemClass(this.anchor, "Anchor"); |
this._addItemClass(this.anchor, "Selected"); |
} |
this.anchor = this.current; |
this._addItemClass(this.current, "Anchor"); |
this.selection[this.current.id] = this.current; |
} |
} |
}else{ |
var item = dijit.getEnclosingWidget(this.current).item |
var id = this.tree.store.getIdentity(item); |
if(!(id in this.selection)){ |
this.selectNone(); |
this.anchor = this.current; |
this._addItemClass(this.current, "Anchor"); |
this.selection[id] = this.current; |
} |
} |
} |
} |
|
dojo.stopEvent(e); |
}, |
|
onMouseMove: function() { |
|
}, |
|
onOverEvent: function() { |
this.onmousemoveEvent = dojo.connect(this.node, "onmousemove", this, "onMouseMove"); |
}, |
|
onMouseUp: function(e){ |
// summary: event processor for onmouseup |
// e: Event: mouse event |
if(!this.simpleSelection){ return; } |
this.simpleSelection = false; |
this.selectNone(); |
if(this.current){ |
this.anchor = this.current; |
this._addItemClass(this.anchor, "Anchor"); |
this.selection[this.current.id] = this.current; |
} |
}, |
_removeSelection: function(){ |
// summary: unselects all items |
var e = dojo.dnd._empty; |
for(var i in this.selection){ |
if(i in e){ continue; } |
var node = dojo.byId(i); |
if(node){ this._removeItemClass(node, "Selected"); } |
} |
this.selection = {}; |
return this; // self |
}, |
_removeAnchor: function(){ |
if(this.anchor){ |
this._removeItemClass(this.anchor, "Anchor"); |
this.anchor = null; |
} |
return this; // self |
} |
}); |
|
} |