Builder/Window.js
authorAlan Knowles <alan@akbkhome.com>
Thu, 27 May 2010 10:12:26 +0000 (18:12 +0800)
committerAlan Knowles <alan@akbkhome.com>
Thu, 27 May 2010 10:12:26 +0000 (18:12 +0800)
Builder/Window.js

index dbd9473..f2cc7a3 100644 (file)
@@ -1821,8 +1821,208 @@ Window=new XObject({
                                                             items : [
                                                                 {
                                                                     xtype: Gtk.TreeStore,
-                                                                    pack : "set_model",
+                                                                    activePath : false,
                                                                     id : "model",
+                                                                    pack : "set_model",
+                                                                    getIterValue : function(iter, col) {
+                                                                         var gval = new GObject.Value('');
+                                                                        this.get('/LeftPanel.model').el.get_value(iter, col ,gval);
+                                                                        return '' + gval.value;
+                                                                    },
+                                                                    add : function(info) {
+                                                                          // info includes key, val, skel, etype..
+                                                                                  console.dump(info);
+                                                                                type = info.type.toLowerCase();
+                                                                                var data = this.toJS();
+                                                                                
+                                                                                if (info.etype == 'events') {
+                                                                                    data.listeners = data.listeners || { };
+                                                                                    if (typeof(data.listeners[info.key]) != 'undefined') {
+                                                                                        return; //already set!
+                                                                                    }
+                                                                                } else {
+                                                                                    if (typeof(data[info.key]) != 'undefined') {
+                                                                                        return;
+                                                                                    }
+                                                                                }
+                                                                                
+                                                                                if (typeof(info.val) == 'undefined') {
+                                                                                        
+                                                                                    info.val = '';
+                                                                                    if (info.type == 'boolean') {
+                                                                                        info.val = true;
+                                                                                    }
+                                                                                    if (type == 'number') {
+                                                                                        info.val = 0;
+                                                                                    }
+                                                                                    // utf8 == string..
+                                                                                    
+                                                                                    
+                                                                                }
+                                                                                var k = info.key;
+                                                                                if (info.etype == 'events') {
+                                                                                 
+                                                                                    data.listeners[info.key] = info.val;
+                                                                                    k = '!' + info.key;
+                                                                                } else {
+                                                                                    data[info.key] = info.val;
+                                                                                }
+                                                                                
+                                                                                
+                                                                                var map = this.load(data);
+                                                                                
+                                                                                // flag it as changed to the interface..
+                                                                    
+                                                                                this.get('/LeftTree.model').changed(data, true); 
+                                                                                
+                                                                                
+                                                                                this.startEditing(map[k]);
+                                                                                 
+                                                                                /*
+                                                                                LeftPanel.get('view').el.row_activated(
+                                                                                    new Gtk.TreePath.from_string(map[k]), 
+                                                                                    LeftPanel.editableColumn.el
+                                                                                );
+                                                                                */
+                                                                    },
+                                                                    changed : function(str, doRefresh) {
+                                                                        if (!this.activePath) {
+                                                                            return;
+                                                                        }
+                                                                        var iter = new Gtk.TreeIter();
+                                                                        this.el.get_iter(iter, new Gtk.TreePath.from_string(this.activePath));
+                                                                        
+                                                                        this.el.set_value(iter, 1, '' +str);
+                                                                        this.el.set_value(iter, 3, '' + this.toShort(str));
+                                                                        var type = this.getIterValue(iter, 4);
+                                                                    
+                                                                        this.el.set_value(iter, 5, type + ' : ' + str);
+                                                                        // update the tree...  
+                                                                    
+                                                                        this.get('/LeftTree.model').changed(this.toJS(), doRefresh); 
+                                                                    },
+                                                                    deleteSelected : function() {
+                                                                         var data = this.toJS();
+                                                                        var iter = new Gtk.TreeIter();
+                                                                        var s = this.get('/LeftPanel.view').selection;
+                                                                        s.get_selected(this.el, iter);
+                                                                             
+                                                                           
+                                                                        var gval = new GObject.Value('');
+                                                                       this.get('/LeftPanel.model').el.get_value(iter, 0 ,gval);
+                                                                        
+                                                                        var val = gval.value;
+                                                                        if (val[0] == '!') {
+                                                                            // listener..
+                                                                            if (!data.listeners || typeof(data.listeners[  val.substring(1)]) == 'undefined') {
+                                                                                return;
+                                                                            }
+                                                                            delete data.listeners[  val.substring(1)];
+                                                                            if (!XObject.keys(data.listeners).length) {
+                                                                                delete data.listeners;
+                                                                            }
+                                                                            
+                                                                        } else {
+                                                                            if (typeof(data[val]) == 'undefined') {
+                                                                                return;
+                                                                            }
+                                                                            delete data[val];
+                                                                        }
+                                                                        
+                                                                        
+                                                                        this.load(data);
+                                                                        this.get('/LeftTree.model').changed(data, true);
+                                                                        
+                                                                    },
+                                                                    editSelected : function(e) {
+                                                                        print("EDIT SELECTED?");
+                                                                        var iter = new Gtk.TreeIter();
+                                                                        var s = this.get('/LeftPanel.view').selection;
+                                                                        s.get_selected(this.get('/LeftPanel.model').el, iter);
+                                                                        var m = this.get('/LeftPanel.model')
+                                                                       
+                                                                        var gval = new GObject.Value('');
+                                                                        this.el.get_value(iter, 0 ,gval);
+                                                                        var val = '' + gval.value;
+                                                                        
+                                                                        gval = new GObject.Value('');
+                                                                        this.el.get_value(iter, 1 ,gval);
+                                                                        var rval = gval.value;
+                                                                        var activePath = this.el.get_path(iter).to_string(); 
+                                                                        this.activePath = activePath ;
+                                                                        // was activeIter...
+                                                                        //  not listener...
+                                                                    
+                                                                        var showEditor = false;
+                                                                        
+                                                                        if (val[0] == '!') {
+                                                                            showEditor = true;
+                                                                        }
+                                                                        if (val[0] == '|') {
+                                                                            if (rval.match(/function/g) || rval.match(/\n/g)) {
+                                                                                showEditor = true;
+                                                                            }
+                                                                        }
+                                                                        
+                                                                        if (showEditor) {
+                                                                            var _this = this;
+                                                                            this.activePath = false;
+                                                                            GLib.timeout_add(0, 1, function() {
+                                                                                //   Gdk.threads_enter();
+                                                                                _this.get('/BottomPane').el.show();
+                                                                                _this.get('/RightEditor').el.show();
+                                                                       _this.get('/RightEditor.view').load( rval );
+                                                                                
+                                                                                e.editing_done();
+                                                                                e.remove_widget();
+                                                                                _this.activePath = activePath ;
+                                                                                
+                                                                         //       Gdk.threads_leave();
+                                                                                return false;
+                                                                            });
+                                                                            return;
+                                                                        }
+                                                                          this.get('/BottomPane').el.hide();
+                                                                        this.get('/RightEditor').el.hide();
+                                                                    
+                                                                            //var type = this.getValue(this.el.get_path(iter).to_string(),4);
+                                                                            
+                                                                            
+                                                                    },
+                                                                    getType : function(treepath) {
+                                                                         return this.getValue(treepath, 4);
+                                                                    },
+                                                                    getValue : function(treepath_str, col) {
+                                                                          var iter = new Gtk.TreeIter();
+                                                                        this.el.get_iter(iter, new Gtk.TreePath.from_string(treepath_str));
+                                                                        
+                                                                        var gval = new GObject.Value('');
+                                                                        this.get('/LeftPanel.model').el.get_value(iter, col ,gval);
+                                                                        var val = '' + gval.value;
+                                                                        if (col != 1) {
+                                                                            return val;
+                                                                        }
+                                                                        var type = this.getType(this.el.get_path(iter).to_string());
+                                                                        print("TYPE: " +type + " -  val:" + val);
+                                                                        switch(type.toLowerCase()) {
+                                                                            case 'number':
+                                                                            case 'uint':
+                                                                            case 'int':
+                                                                                return parseFloat(val); // Nan ?? invalid!!?        
+                                                                            case 'float':
+                                                                            case 'gfloat':
+                                                                                return 1.0 * parseFloat(val); // Nan ?? invalid!!?
+                                                                            case 'boolean':
+                                                                                return val == 'true' ? true : false;
+                                                                            default: 
+                                                                                var nv = parseFloat(val);
+                                                                                if (!isNaN(nv) && (val == ''+nv)) {
+                                                                                    return nv;
+                                                                                }
+                                                                                return val;
+                                                                        }
+                                                                                                
+                                                                    },
                                                                     init : function() {
                                                                         XObject.prototype.init.call(this);
                                                                     this.el.set_column_types ( 6, [
@@ -1835,10 +2035,6 @@ Window=new XObject({
                                                                                                   
                                                                                                 ]);
                                                                     },
-                                                                    toShort : function(str) {
-                                                                        var a = typeof(str) == 'string' ? str.split("\n") : [];
-                                                                            return a.length > 1 ? a[0] + '....' : '' + str;
-                                                                    },
                                                                     load : function(ar) {
                                                                       this.el.clear();
                                                                                             
@@ -1893,62 +2089,6 @@ Window=new XObject({
                                                                         })
                                                                         return ret;
                                                                     },
-                                                                    add : function(info) {
-                                                                          // info includes key, val, skel, etype..
-                                                                                  console.dump(info);
-                                                                                type = info.type.toLowerCase();
-                                                                                var data = this.toJS();
-                                                                                
-                                                                                if (info.etype == 'events') {
-                                                                                    data.listeners = data.listeners || { };
-                                                                                    if (typeof(data.listeners[info.key]) != 'undefined') {
-                                                                                        return; //already set!
-                                                                                    }
-                                                                                } else {
-                                                                                    if (typeof(data[info.key]) != 'undefined') {
-                                                                                        return;
-                                                                                    }
-                                                                                }
-                                                                                
-                                                                                if (typeof(info.val) == 'undefined') {
-                                                                                        
-                                                                                    info.val = '';
-                                                                                    if (info.type == 'boolean') {
-                                                                                        info.val = true;
-                                                                                    }
-                                                                                    if (type == 'number') {
-                                                                                        info.val = 0;
-                                                                                    }
-                                                                                    // utf8 == string..
-                                                                                    
-                                                                                    
-                                                                                }
-                                                                                var k = info.key;
-                                                                                if (info.etype == 'events') {
-                                                                                 
-                                                                                    data.listeners[info.key] = info.val;
-                                                                                    k = '!' + info.key;
-                                                                                } else {
-                                                                                    data[info.key] = info.val;
-                                                                                }
-                                                                                
-                                                                                
-                                                                                var map = this.load(data);
-                                                                                
-                                                                                // flag it as changed to the interface..
-                                                                    
-                                                                                this.get('/LeftTree.model').changed(data, true); 
-                                                                                
-                                                                                
-                                                                                this.startEditing(map[k]);
-                                                                                 
-                                                                                /*
-                                                                                LeftPanel.get('view').el.row_activated(
-                                                                                    new Gtk.TreePath.from_string(map[k]), 
-                                                                                    LeftPanel.editableColumn.el
-                                                                                );
-                                                                                */
-                                                                    },
                                                                     startEditing : function(path,col) {
                                                                     /**
                                                                     * start editing path (or selected if not set..)
@@ -2009,53 +2149,6 @@ Window=new XObject({
                                                                                 });
                                                                                 
                                                                     },
-                                                                    deleteSelected : function() {
-                                                                         var data = this.toJS();
-                                                                        var iter = new Gtk.TreeIter();
-                                                                        var s = this.get('/LeftPanel.view').selection;
-                                                                        s.get_selected(this.el, iter);
-                                                                             
-                                                                           
-                                                                        var gval = new GObject.Value('');
-                                                                       this.get('/LeftPanel.model').el.get_value(iter, 0 ,gval);
-                                                                        
-                                                                        var val = gval.value;
-                                                                        if (val[0] == '!') {
-                                                                            // listener..
-                                                                            if (!data.listeners || typeof(data.listeners[  val.substring(1)]) == 'undefined') {
-                                                                                return;
-                                                                            }
-                                                                            delete data.listeners[  val.substring(1)];
-                                                                            if (!XObject.keys(data.listeners).length) {
-                                                                                delete data.listeners;
-                                                                            }
-                                                                            
-                                                                        } else {
-                                                                            if (typeof(data[val]) == 'undefined') {
-                                                                                return;
-                                                                            }
-                                                                            delete data[val];
-                                                                        }
-                                                                        
-                                                                        
-                                                                        this.load(data);
-                                                                        this.get('/LeftTree.model').changed(data, true);
-                                                                        
-                                                                    },
-                                                                    activePath : false,
-                                                                    changed : function(str, doRefresh) {
-                                                                        if (!this.activePath) {
-                                                                            return;
-                                                                        }
-                                                                        var iter = new Gtk.TreeIter();
-                                                                        this.el.get_iter(iter, new Gtk.TreePath.from_string(this.activePath));
-                                                                        
-                                                                        this.el.set_value(iter, 1, '' +str);
-                                                                        this.el.set_value(iter, 3, '' + this.toShort(str));
-                                                                        // update the tree...  
-                                                                    
-                                                                        this.get('/LeftTree.model').changed(this.toJS(), doRefresh); 
-                                                                    },
                                                                     toJS : function() {
                                                                          var iter = new Gtk.TreeIter();
                                                                         this.get('/LeftPanel.model').el.get_iter_first(iter);
@@ -2083,89 +2176,9 @@ Window=new XObject({
                                                                         return ar;
                                                                         // convert the l
                                                                     },
-                                                                    getType : function(treepath) {
-                                                                         return this.getValue(treepath, 4);
-                                                                    },
-                                                                    getValue : function(treepath_str, col) {
-                                                                          var iter = new Gtk.TreeIter();
-                                                                        this.el.get_iter(iter, new Gtk.TreePath.from_string(treepath_str));
-                                                                        
-                                                                        var gval = new GObject.Value('');
-                                                                        this.get('/LeftPanel.model').el.get_value(iter, col ,gval);
-                                                                        var val = '' + gval.value;
-                                                                        if (col != 1) {
-                                                                            return val;
-                                                                        }
-                                                                        var type = this.getType(this.el.get_path(iter).to_string());
-                                                                        print("TYPE: " +type + " -  val:" + val);
-                                                                        switch(type.toLowerCase()) {
-                                                                            case 'number':
-                                                                            case 'uint':
-                                                                            case 'int':
-                                                                            case 'float':
-                                                                            case 'gfloat':
-                                                                                return parseFloat(val); // Nan ?? invalid!!?
-                                                                            case 'boolean':
-                                                                                return val == 'true' ? true : false;
-                                                                            default: 
-                                                                                return val;
-                                                                        }
-                                                                                                
-                                                                    },
-                                                                    editSelected : function(e) {
-                                                                        print("EDIT SELECTED?");
-                                                                        var iter = new Gtk.TreeIter();
-                                                                        var s = this.get('/LeftPanel.view').selection;
-                                                                        s.get_selected(this.get('/LeftPanel.model').el, iter);
-                                                                        var m = this.get('/LeftPanel.model')
-                                                                       
-                                                                        var gval = new GObject.Value('');
-                                                                        this.el.get_value(iter, 0 ,gval);
-                                                                        var val = '' + gval.value;
-                                                                        
-                                                                        gval = new GObject.Value('');
-                                                                        this.el.get_value(iter, 1 ,gval);
-                                                                        var rval = gval.value;
-                                                                        var activePath = this.el.get_path(iter).to_string(); 
-                                                                        this.activePath = activePath ;
-                                                                        // was activeIter...
-                                                                        //  not listener...
-                                                                    
-                                                                        var showEditor = false;
-                                                                        
-                                                                        if (val[0] == '!') {
-                                                                            showEditor = true;
-                                                                        }
-                                                                        if (val[0] == '|') {
-                                                                            if (rval.match(/function/g) || rval.match(/\n/g)) {
-                                                                                showEditor = true;
-                                                                            }
-                                                                        }
-                                                                        
-                                                                        if (showEditor) {
-                                                                            var _this = this;
-                                                                            this.activePath = false;
-                                                                            GLib.timeout_add(0, 1, function() {
-                                                                                //   Gdk.threads_enter();
-                                                                                _this.get('/BottomPane').el.show();
-                                                                                _this.get('/RightEditor').el.show();
-                                                                       _this.get('/RightEditor.view').load( rval );
-                                                                                
-                                                                                e.editing_done();
-                                                                                e.remove_widget();
-                                                                                _this.activePath = activePath ;
-                                                                                
-                                                                         //       Gdk.threads_leave();
-                                                                                return false;
-                                                                            });
-                                                                            return;
-                                                                        }
-                                                                          this.get('/BottomPane').el.hide();
-                                                                        this.get('/RightEditor').el.hide();
-                                                                    
-                                                                            //var type = this.getValue(this.el.get_path(iter).to_string(),4);
-                                                                            
-                                                                            
+                                                                    toShort : function(str) {
+                                                                        var a = typeof(str) == 'string' ? str.split("\n") : [];
+                                                                            return a.length > 1 ? a[0] + '....' : '' + str;
                                                                     }
                                                                 },
                                                                 {
@@ -2561,19 +2574,17 @@ Window=new XObject({
                                                                                 },
                                                                                 {
                                                                                     xtype: Gtk.Button,
-                                                                                    pack : "pack_start,false,false,0",
-                                                                                    label : "Set extra HTML in render",
                                                                                     listeners : {
                                                                                         button_press_event : function (self, event) {
                                                                                             this.get('/RooProjectProperties').show();
                                                                                             return false;
                                                                                         }
-                                                                                    }
+                                                                                    },
+                                                                                    label : "Set extra HTML in renderer",
+                                                                                    pack : "pack_start,false,false,0"
                                                                                 },
                                                                                 {
                                                                                     xtype: Gtk.Button,
-                                                                                    pack : "pack_start,false,false,0",
-                                                                                    label : "test in Firefox",
                                                                                     listeners : {
                                                                                         button_press_event : function (self, event) 
                                                                                         {
@@ -2631,7 +2642,9 @@ Window=new XObject({
                                                                                             this.get('/Terminal').el.feed_child(cmd, cmd.length);
                                                                                              return false;
                                                                                         }
-                                                                                    }
+                                                                                    },
+                                                                                    label : "Test in Firefox",
+                                                                                    pack : "pack_start,false,false,0"
                                                                                 }
                                                                             ]
                                                                         },
@@ -2880,8 +2893,17 @@ Window=new XObject({
                                                                 },
                                                                 {
                                                                     xtype: Gtk.VBox,
-                                                                    pack : "add",
                                                                     id : "RightGtkView",
+                                                                    pack : "add",
+                                                                    redraw : function() {
+                                                                       this.highlightWidget = false;
+                                                                        print("REDRAW CALLED");
+                                                                        this.activePath = this.get('/LeftTree').getActivePath();
+                                                                        if (this.renderedEl) {
+                                                                          print("QUEUE DRAW CALLING");
+                                                                          this.renderedEl.queue_draw();
+                                                                       }
+                                                                    },
                                                                     renderJS : function(data, withDebug)
                                                                     {
                                                                           this.highlightWidget = false;
@@ -2978,6 +3000,7 @@ Window=new XObject({
                                                                             return;
                                                                         }
                                                                         print("CREATE: " + item['|xns'] + '.' + item['xtype']);
+                                                                        var type = item['|xns'] + '.' + item['xtype'];
                                                                         var ns = imports.gi[item['|xns']];
                                                                         var ctr = ns[item['xtype']];
                                                                         var ctr_args = { };
@@ -3027,7 +3050,7 @@ Window=new XObject({
                                                                         
                                                                         var el = new ctr(ctr_args);
                                                                         
-                                                                        //print("PACK");
+                                                                        print("PACK" + item.pack);
                                                                         //console.dump(item.pack);
                                                                         
                                                                         
@@ -3074,7 +3097,22 @@ Window=new XObject({
                                                                         
                                                                         var _this = this;
                                                                         item.items = item.items || [];
-                                                                        item.items.forEach(function(ch) {
+                                                                        item.items.forEach(function(ch,n) {
+                                                                    
+                                                                              print ("type:" + type);
+                                                                              
+                                                                               print ("ch.pack:" + ch.pack);
+                                                                             if (type == 'Gtk.Table' && ch.pack == 'add') {
+                                                                                var c = n % item.n_columns;
+                                                                                var r = Math.floor(n/item.n_columns);
+                                                                                ch.pack = [ 'attach', c, c+1, r, r+1, 
+                                                                                         typeof(ch.x_options) == 'undefined' ?  5 : ch.x_options,
+                                                                                            typeof(ch.y_options) == 'undefined' ?  5 : ch.y_options,
+                                                                                            typeof(ch.x_padding) == 'undefined' ?  0 : ch.x_padding,
+                                                                                            typeof(ch.x_padding) == 'undefined' ?  0 : ch.x_padding
+                                                                                ].join(',');
+                                                                            }
+                                                                        
                                                                             _this.viewAdd(ch, el);
                                                                         });
                                                                         
@@ -3101,6 +3139,14 @@ Window=new XObject({
                                                                         return el;
                                                                         
                                                                     },
+                                                                    widgetDragDropEvent : function() {
+                                                                          print("WIDGET DRAGDROP"); 
+                                                                                return true;
+                                                                    },
+                                                                    widgetDragMotionEvent : function() {
+                                                                         print("WIDGET DRAGMOTION"); 
+                                                                                return true;
+                                                                    },
                                                                     widgetExposeEvent : function(w, evt, ud, item) {
                                                                         var widget = w;
                                                                          if (this.inRender) {
@@ -3170,14 +3216,6 @@ Window=new XObject({
                                                                                 this.inRender = false;
                                                                                 return false;
                                                                     },
-                                                                    widgetDragMotionEvent : function() {
-                                                                         print("WIDGET DRAGMOTION"); 
-                                                                                return true;
-                                                                    },
-                                                                    widgetDragDropEvent : function() {
-                                                                          print("WIDGET DRAGDROP"); 
-                                                                                return true;
-                                                                    },
                                                                     widgetPressEvent : function(w,e,u,d) {
                                                                          if (this.get('view').pressed) {
                                                                             return false;
@@ -3191,15 +3229,6 @@ Window=new XObject({
                                                                         this.get('view').pressed = false;
                                                                        return false;
                                                                     },
-                                                                    redraw : function() {
-                                                                       this.highlightWidget = false;
-                                                                        print("REDRAW CALLED");
-                                                                        this.activePath = this.get('/LeftTree').getActivePath();
-                                                                        if (this.renderedEl) {
-                                                                          print("QUEUE DRAW CALLING");
-                                                                          this.renderedEl.queue_draw();
-                                                                       }
-                                                                    },
                                                                     items : [
                                                                         {
                                                                             xtype: Gtk.HBox,