sync
[app.Builder.js] / Builder / RightGtkView.js
index 955dedd..609e079 100755 (executable)
@@ -68,22 +68,25 @@ RightGtkView = new XObject({
                     {
                         
                         id : 'view-vbox',
-                        xtype : Gtk.Viewport,
+                        xtype : Gtk.Fixed,
                         init : function () {
                             XObject.prototype.init.call(this); 
-                            this.el.set_hadjustment(this.parent.el.get_hadjustment());
-                            this.el.set_vadjustment(this.parent.el.get_vadjustment());
+                           // this.el.set_hadjustment(this.parent.el.get_hadjustment());
+                            //this.el.set_vadjustment(this.parent.el.get_vadjustment());
                                 
                         },
-                        packing : ['add' ],
+                        pack  : 'add_with_viewport' ,
                         items: [
                             {
                                 id : 'view',
+                                xtype : Gtk.VBox,
+                                /*
                                 xtype : function() {
                                     return new Gtk.Image.from_stock (Gtk.STOCK_HOME, 100) 
 
                                 },
-                                packing : ['add' ],
+                                */
+                                pack : 'put,10,10',
                                 ready : false,
                                 init : function() {
                                     XObject.prototype.init.call(this); 
@@ -288,7 +291,8 @@ RightGtkView = new XObject({
             */
         },
         
-        buildJS: function(data,withDebug) {
+        buildJS: function(data,withDebug) 
+        {
             var i = [ 'Gtk', 'Gdk', 'Pango', 'GLib', 'Gio', 'GObject', 'GtkSource', 'WebKit', 'Vte' ];
             var src = "";
             i.forEach(function(e) {
@@ -338,10 +342,26 @@ RightGtkView = new XObject({
                  return; 
             }
             this.withDebug = false;
-            //data.xtype = 'OffscreenWindow'
             
-            var src = this.buildJS(data,withDebug);
+            if (this.renderedEl) {
+                this.get('view').el.remove(this.renderedEl);
+                this.renderedEl.destroy();
+                this.renderedEl = false;
+            }
+            
+            var tree =  this.get('/LeftTree.model').toJS()[0];
+            // in theory tree is actually window..
+            this.renderedEl = this.viewAdd(tree.items[0], this.get('view').el);
+            this.get('view').el.set_size_request(
+                tree.default_width * 1 || 400, tree.default_height * 1 || 400
+            ) ;
+            
+            this.get('view').el.show_all();
+            
+            return;
+            
             
+            var src = this.buildJS(data,withDebug);
             var x = new imports.sandbox.Context();
             x.add_globals();
             //x.get_global_object().a = "hello world";
@@ -350,46 +370,41 @@ RightGtkView = new XObject({
                 Seed.check_syntax('var e = ' + src);
                 x.eval(src);
             } catch( e) {
-                if (!withDebug) {
-                   return this.renderJS(data,true);
-                }
+                //if (!withDebug) {
+                //   return this.renderJS(data,true);
+               // }
                 print(e.message || e.toString());
                 console.dump(e);
                 return;
             }
             
-            
-            //var r = new Gdk.Rectangle();
+            var r = new Gdk.Rectangle();
             var _top = x.get_global_object()._top;
             
-            //_top.el.set_screen(Gdk.Screen.get_default()); // just in case..
+            _top.el.set_screen(Gdk.Screen.get_default()); // just in case..
             _top.el.show_all();
+              
+            
             if (_top.el.popup) {
                 _top.el.popup(null, null, null, null, 3, null);
             }
             
-            var pb = _top.el.get_pixbuf();  
             
             
-          
-            //var pb = _top.el.get_snapshot(r);
+            var pb = _top.items[0].el.get_snapshot(r);
+            _top.el.hide();
             if (!pb) {
                 return;
             }
-            var pb = pb.copy();
-            this.get('view').el.set_from_pixbuf(pb);
-            return;
-            //_top.el.hide();
             
+            _top.el.destroy();
+            x._top = false;
             var Window = imports.Builder.Window.Window;
-            print("new gc");
-            
             var gc = new Gdk.GC.c_new(Window.el.window);
-            
+                
                 // 10 points all round..
             var full = new Gdk.Pixmap.c_new (Window.el.window, r.width+20, r.height+20, pb.get_depth());
             // draw a white background..
-            print("draw rect");
            // gc.set_rgb_fg_color({ red: 0, white: 0, black : 0 });
             Gdk.draw_rectangle(full, gc, true, 0, 0, r.width+20, r.height+20);
             // paint image..
@@ -397,11 +412,7 @@ RightGtkView = new XObject({
             // boxes..
             //gc.set_rgb_fg_color({ red: 255, white: 255, black : 255 });
             Gdk.draw_rectangle(full, gc, true, 0, 0, 10, 10);
-            print("show it.");
             this.get('view').el.set_from_pixmap(full, null);
-            print("destroy.");
-            _top.el.destroy();
-            x._top = false;
             //this.get('view-vbox').el.set_size_request( r.width+20, r.height+20);
             //var img = new Gtk.Image.from_file("/home/alan/solarpanels.jpeg");
             
@@ -410,7 +421,7 @@ RightGtkView = new XObject({
         },
         mungeToString:  function(obj, isListener, pad)
         {
-            pad = pad || '    ';
+            pad = pad || '';
             var keys = [];
             var isArray = false;
             isListener = isListener || false;
@@ -496,8 +507,99 @@ RightGtkView = new XObject({
                
             
             
+        },
+        
+        buildView : function()
+        {
+            
+            
+        },
+        viewAdd : function(item, par)
+        {
+            // does something similar to xobject..
+            item.pack = (typeof(item.pack) == 'undefined') ?  'add' : item.pack;
+            
+            if (item.pack===false || item.pack === 'false') {  // no ;
+                return;
+            }
+            print("CREATE: " + item['|xns'] + '.' + item['xtype']);
+            var ns = imports.gi[item['|xns']];
+            var ctr = ns[item['xtype']];
+            var ctr_args = { };
+            for(var k in item) {
+                var kv = item[k];
+                if (typeof(kv) == 'object' || typeof(kv) == 'function') {
+                    continue;
+                }
+                if ( 
+                    k == 'pack' ||
+                    k == 'items' ||
+                    k == 'id' ||
+                    k == 'xtype' ||
+                    k == 'xdebug' ||
+                    k == 'xns' ||
+                    k == '|xns'
+                ) {
+                    continue;
+                }
+                ctr_args[k] = kv;
+                
+            } 
+            
+            
+            var el = new ctr(ctr_args);
+            
+            print("PACK");
+            console.dump(item.pack);
+            
+            
+            
+            
+            var args = [];
+            var pack_m  = false;
+            if (typeof(item.pack) == 'string') {
+                 
+                item.pack.split(',').forEach(function(e, i) {
+                    
+                    if (e == 'false') { args.push( false); return; }
+                    if (e == 'true') {  args.push( true);  return; }
+                    if (!isNaN(parseInt(e))) { args.push( parseInt(e)); return; }
+                    args.push(e);
+                });
+                //print(args.join(","));
+                
+                pack_m = args.shift();
+            } else {
+                pack_m = item.pack.shift();
+                args = item.pack;
+            }
+            
+            // handle error.
+            if (pack_m && typeof(par[pack_m]) == 'undefined') {
+                Seed.print('pack method not available : ' + item.xtype + '.' +  pack_m);
+                return;
+            }
+            
+            console.dump(args);
+            args.unshift(el);
+            //if (XObject.debug) print(pack_m + '[' + args.join(',') +']');
+            //Seed.print('args: ' + args.length);
+            if (pack_m) {
+                par[pack_m].apply(par, args);
+            }
+            
+            var _this = this;
+            item.items = item.items || [];
+            item.items.forEach(function(ch) {
+                _this.viewAdd(ch, el);
+            });
+            
+            return el;
+            
         }
         
+        
+        
     }