Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / AlbumTree.html
diff --git a/docs/source/AlbumTree.html b/docs/source/AlbumTree.html
new file mode 100644 (file)
index 0000000..3bb4203
--- /dev/null
@@ -0,0 +1,150 @@
+<html>\r
+<head>\r
+  <title>The source code</title>\r
+    <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
+    <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
+</head>\r
+<body  onload="prettyPrint();">\r
+    <pre class="prettyprint lang-js">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);
+        }
+    }
+});</pre>    \r
+</body>\r
+</html>
\ No newline at end of file