Imgorg.AlbumTree = Ext.extend(Ext.tree.TreePanel,{
initComponent: function() {
Ext.apply(this,{
loader: new Ext.ux.tree.DirectTreeLoader({
api: Imgorg.ss.Albums
}),
root: new Ext.tree.TreeNode({
text:'dummynode',
expanded: true,
leaf: false,
cls:'album-node'
}),
rootVisible: false,
clearOnLoad: false,
autoScroll: true,
containerScroll: true,
enableDrop: true,
dropConfig: {
ddGroup: 'organizerDD',
notifyDrop: this.onNotifyDrop.createDelegate(this)
}
});
Imgorg.AlbumTree.superclass.initComponent.call(this);
this.loader.load(this.root);
this.editor = new Ext.tree.TreeEditor(this, {
allowBlank: false,
blankText: 'A name is required',
selectOnFocus: true
});
this.editor.on('complete', this.onEditComplete, this);
this.on('contextmenu', this.onContextMenu, this);
},
onContextMenu: function(node, e) {
e.stopEvent();
if(!this.contMenu) {
this.contMenu = new Ext.menu.Menu({
items: [{
text: 'Remove',
handler: function() {
var node = this.currentNode;
node.unselect();
Ext.fly(node.ui.elNode).ghost('l', {
callback: function() {
Imgorg.ss.Albums.remove({
album: node.id
});
node.remove();
}, scope: node, duration: 0.4
});
},
scope: this
}]
});
}
this.currentNode = node;
this.contMenu.showAt(e.getXY());
},
onNotifyDrop: function(src, e, data) {
var nodes = data.nodes;
var nodeIds = [];
for (var i = 0;i < nodes.length;i++) {
nodeIds.push(nodes[i].id);
}
this.addToAlbum(nodeIds, this.dropZone.dragOverData.target.attributes.id);
return true; // cancell repair anim
},
addToAlbum: function(nodes, album) {
Imgorg.ss.Images.addToAlbum({
images: nodes,
album: album
});
},
addAlbum: function() {
var root = this.root;
var node = root.appendChild(new Ext.tree.TreeNode({
text:'Album',
cls:'album-node',
allowDrag:false
}));
this.getSelectionModel().select(node);
var ge = this.editor;
setTimeout(function(){
ge.editNode = node;
ge.startEdit(node.ui.textNode);
}, 10);
},
onEditComplete: function(editor, newVal, oldVal) {
var n = editor.editNode;
Imgorg.ss.Albums.addOrUpdate({node: n.id, text: newVal, id: n.attributes.id});
}
});
Ext.reg('img-albumtree', Imgorg.AlbumTree);
Ext.ns('Ext.ux.tree');
Ext.ux.tree.DirectTreeLoader = Ext.extend(Ext.tree.TreeLoader,{
baseAttrs: {
cls:'album-node'
},
load : function(node, callback){
this.requestData(node, callback);
},
requestData : function(node, callback){
if(this.fireEvent("beforeload", this, node, callback) !== false){
this.api.loadtree({
node: node.id
}, this.processResponse.createDelegate(this, [node, callback], true));
}else{
// if the load is cancelled, make sure we notify
// the node that we are done
if(typeof callback == "function"){
callback();
}
}
},
processResponse : function(res, trans, node, callback){
try {
node.beginUpdate();
for(var i = 0, len = res.length; i < len; i++){
var n = this.createNode(res[i]);
if(n){
node.appendChild(n);
}
}
node.endUpdate();
if(typeof callback == "function"){
callback(this, node);
}
}catch(e){
this.handleFailure(res);
}
}
});