X-Git-Url: http://git.roojs.org/?p=app.Builder.js;a=blobdiff_plain;f=XObject.js;h=05463b0d291ecc904b4f60290696dcd4a8f331ee;hp=83e335ad1d740af7ce64f0f5e44d2916f46d6e0b;hb=refs%2Fheads%2Forigin.version_1_1;hpb=f89e29cc068d45e9f8f985b6b1dc5d8e083a78ad diff --git a/XObject.js b/XObject.js index 83e335ad1..05463b0d2 100644 --- a/XObject.js +++ b/XObject.js @@ -30,7 +30,7 @@ GObject = imports.gi.GObject; * * use XObject.debug = 1 to turn on debugging * - * If XObject/[xns]/[xtype].js exists, it will use this to override properties.. + * If XObjectBase/[xns]/[xtype].js exists, it will use this to override properties.. * * * He's some questions. @@ -58,34 +58,26 @@ function XObject (cfg) { //print ("XObject ctr"); - this.config = {}; - this.constructor = XObject; + this.config = {}; // used to initialize GObject + this.cfg = XObject.extend({}, cfg); // used to store original configuration.. for referencing.. + // we could use this to determine if + // we are actually inside a inherited class... + // as define() should actually set this up.. - // start by seeing if we have a base class.... - try { - // loocks for XObject/Gtk/TreeView.js [ TreeView = { .... } ] - // xns is not a string!!!? - var gname = false; - if (typeof(cfg.xtype) == 'object') { - gname = GObject.type_name(cfg.xtype.type); - // print("GNAME:" +gname + " GTYPE:"+cfg.xtype.type); - } + if (!this.constructor) { - var base = gname ? imports.XObjectBase[gname][gname] : false; + this.constructor = XObject; + var base = XObject.baseXObject(cfg); if (base) { - // print("Overlaying XOBJBECT-BASE." + cfg.xtype); - XObject.extend(this,base); + XObject.extend(this,base.prototype); } - } catch (e) { - // if debug? - print("error finding " + gname + " - " + e.toString()); } - // copy down all elements into self.. + // make an extra copy in this.config?? - which is the one used in the constructor later for (var i in cfg) { this[i] = cfg[i]; @@ -134,29 +126,16 @@ function XObject (cfg) { items.push(i); }); this.items = []; + // create XObject for all the children. items.forEach(function(i,n) { - /* - - if (type == 'GtkTable' && i.pack == 'add') { - var c = n % _this.config.n_columns; - var r = Math.floor(n/_this.config.n_columns); - i.pack = [ 'attach', c, c+1, r, r+1, - typeof(i.x_options) == 'undefined' ? 5 : i.x_options, - typeof(i.y_options) == 'undefined' ? 5 : i.y_options, - typeof(i.x_padding) == 'undefined' ? 0 : i.x_padding, - typeof(i.x_padding) == 'undefined' ? 0 : i.x_padding - - ] - } - */ - var item = (i.constructor == XObject) ? o : new XObject(i); + var base = XObject.baseXObject(i); + base = base || XObject; + var item = (i.constructor == XObject) ? i : new base(i); item.parent = _this; _this.items.push(item); //_this.addItem(i); }); - if (this.onConstruct) { - this.onConstruct.call(this); - } + } @@ -207,14 +186,14 @@ XObject.prototype = { var isSeed = typeof(Seed) != 'undefined'; // xtype= Gtk.Menu ?? what about c_new stuff? - if (XObject.debug) print("init: ID:"+ this.id +" typeof(xtype): " + typeof(this.xtype)); + XObject.log("init: ID:"+ this.id +" typeof(xtype): " + typeof(this.xtype)); if (!this.el && typeof(this.xtype) == 'function') { - if (XObject.debug) print("func?" + XObject.keys(this.config).join(',')); + XObject.log("func?" + XObject.keys(this.config).join(',')); this.el = this.xtype(this.config); } if (!this.el && typeof(this.xtype) == 'object') { - if (XObject.debug) print("obj?" + XObject.keys(this.config).join(',')); + XObject.log("obj?" + XObject.keys(this.config).join(',')); this.el = new (this.xtype)(this.config); } @@ -223,16 +202,16 @@ XObject.prototype = { var NS = imports.gi[this.xns]; if (!NS) { - Seed.print('Invalid xns: ' + this.xns); + XObject.error('Invalid xns: ' + this.xns, true); } constructor = NS[this.xtype]; if (!constructor) { - Seed.print('Invalid xtype: ' + this.xns + '.' + this.xtype); + XObject.error('Invalid xtype: ' + this.xns + '.' + this.xtype); } this.el = isSeed ? new constructor(this.config) : new constructor(); } - if (XObject.debug) print("init: ID:"+ this.id +" typeof(el):" + this.el); + XObject.log("init: ID:"+ this.id +" typeof(el):" + this.el); // always overlay props.. // check for 'write' on object.. @@ -276,7 +255,7 @@ XObject.prototype = { //} var type = this.xtype.type ? GObject.type_name(this.xtype.type) : ''; - print("add children to " + type); + XObject.log("add children to " + type); var _this=this; this.items.forEach(function(i,n) { @@ -307,8 +286,8 @@ XObject.prototype = { { if (typeof(item) == 'undefined') { - print("Invalid Item added to this!"); - imports.console.dump(this); + XObject.error("Invalid Item added to this!"); + imports.console.dump(this.cfg); Seed.quit(); } // what about extended items!?!?!? @@ -317,11 +296,11 @@ XObject.prototype = { //print("CTR:PROTO:" + ( item.id ? item.id : '??')); // print("addItem - call init [" + item.pack.join(',') + ']'); if (!item.el) { - print("NO EL!"); + XObject.error("NO EL!"); imports.console.dump(item); Seed.quit(); } - + print(XObject.type(this.xtype) + ":pack=" + item.pack); if (item.pack===false) { // no packing.. various items have this .. return; @@ -372,24 +351,11 @@ XObject.prototype = { args.unshift(item.el); - - - if (this.parent && this.parent.xtype == 'GtkTable' && item.pack == 'add') { - var c = n % this.parent.config.n_columns; - var r = Math.floor(pos/_this.parent.config.n_columns); - item.pack = [ 'attach', c, c+1, r, r+1, - typeof(item.x_options) == 'undefined' ? 5 : item.x_options, - typeof(item.y_options) == 'undefined' ? 5 : item.y_options, - typeof(item.x_padding) == 'undefined' ? 0 : item.x_padding, - typeof(item.x_padding) == 'undefined' ? 0 : item.x_padding - - ]; - } - + - if (XObject.debug) print(pack_m + '[' + args.join(',') +']'); + XObject.log(pack_m + '[' + args.join(',') +']'); //Seed.print('args: ' + args.length); if (pack_m) { this.el[pack_m].apply(this.el, args); @@ -408,7 +374,7 @@ XObject.prototype = { addListener : function(sig, fn) { - if (XObject.debug) Seed.print("Add signal " + sig); + XObject.log("Add signal " + sig); fn.id= sig; var _li = XObject.createDelegate(fn,this); // private listeners that are not copied to GTk. @@ -434,7 +400,7 @@ XObject.prototype = { */ get : function(xid) { - if (XObject.debug) print("SEARCH FOR " + xid + " in " + this.id); + XObject.log("SEARCH FOR " + xid + " in " + this.id); var ret= false; var oid = '' + xid; if (!xid.length) { @@ -530,7 +496,7 @@ XObject.prototype = { return; } if (!ch.get) { - print("invalid item..."); + XObject.error("invalid item..."); imports.console.dump(_this); Seed.quit(); } @@ -603,7 +569,43 @@ XObject.extend(XObject, * */ emptyFn : function () { }, + + + + /** + * Debug Logging + * @param {String|Object} output String to print. + */ + log : function(output) + { + if (!this.debug) { + return; + } + print("LOG:" + output); + }, + + /** + * Error Logging + * @param {String|Object} output String to print. + */ + error : function(output) + { + print("ERROR: " + output); + }, + /** + * fatal error + * @param {String|Object} output String to print. + */ + fatal : function(output) + { + throw { + name: "ArgumentError", + message : output + + } + }, + /** * Copies all the properties of config to obj, if the do not exist. * @param {Object} obj The receiver of the properties @@ -661,14 +663,14 @@ XObject.extend(XObject, }; return function(constructor, parentClass, overrides) { if (typeof(parentClass) == 'undefined') { - print("XObject.define: Missing parentClass: when applying: " ); - print(new String(constructor)); + XObject.error("XObject.define: Missing parentClass: when applying: " ); + XObject.error(new String(constructor)); Seed.quit(); } if (typeof(parentClass.prototype) == 'undefined') { - print("Missing protype: when applying: " ); - print(new String(constructor)); - print(new String(parentClass)); + XObject.error("Missing protype: when applying: " ); + XObject.error(new String(constructor)); + XObject.error(new String(parentClass)); Seed.quit(); } var F = function(){}; @@ -709,7 +711,52 @@ XObject.extend(XObject, } return ret; }, - + /** + * return the Gobject name of a constructor - does not appear to work on structs.. + * @param {Object} gobject ctr + * @return {String} returns name + * @member XObject type + */ + type : function(o) + { + if (typeof(o) == 'object') { + return GObject.type_name(o.type); + // print("GNAME:" +gname + " GTYPE:"+cfg.xtype.type); + } + return 'unknown'; + }, + /** + * return the XObjectBase class for a cfg (which includes an xtype) + * @param {Object} configuration. + * @return {function} constructor + * @member XObject baseXObject + */ + baseXObject : function(cfg) + { + try { + // loocks for XObject/Gtk/TreeView.js [ TreeView = { .... } ] + // xns is not a string!!!? + var gname = false; + if (typeof(cfg.xtype) == 'object') { + gname = XObject.type(cfg.xtype); + + } + print("TRYING BASE OBJECT : " + gname); + // in the situation where we have been called and there is a base object + // defining the behavior.. + // then we should copy the prototypes from the base object into this.. + var base = gname ? imports.XObjectBase[gname][gname] : false; + return base; + + } catch (e) { + // if debug? + XObject.log("error finding " + gname + " - " + e.toString()); + return false; + } + + + }, + /** * @member XObject createDelegate * creates a delage metdhod @@ -723,7 +770,7 @@ XObject.extend(XObject, createDelegate : function(method, obj, args, appendArgs){ return function() { - if (XObject.debug) print("CALL: " + obj.id + ':'+ method.id); + XObject.log("CALL: " + obj.id + ':'+ method.id); var callArgs = args || arguments; if(appendArgs === true){