//<script type="text/javascript">
-GIRepository = imports.gi.GIRepository;
-GObject = imports.gi.GObject;
+const GIRepository = imports.gi.GIRepository;
+const GObject = imports.gi.GObject;
/**
* XObject
* Yet another attempt to create a usable object construction library for seed..
* @cfg listeners {Object} (optional) map Gobject signals to functions
* @cfg pack {Function|String|Array} (optional) how this object gets added to it's parent
* @cfg el {Object} (optional) premade GObject
- *
- *
- *
- *
- *
- *
+ *
*/
function XObject (cfg) {
this.cfg = XObject.extend({}, cfg); // used to store original configuration.. for referencing..
+ // used by baseobject to create fake child elements on init..
+ if (cfg.el) {
+ this.el = cfg.el;
+ }
+
// we could use this to determine if
// we are actually inside a inherited class...
// as define() should actually set this up..
this.constructor = XObject;
var base = XObject.baseXObject(cfg);
if (base) {
- XObject.extend(this,base.prototype);
+ XObject.extend(this, base.prototype);
}
}
// interesting question should we call constructor on items here...
// as the real work is done in init anyway..
var _this= this;
-
- var items = [];
- this.items.forEach(function(i) {
- items.push(i);
- });
+
+ var items = []
+ for(var i = 0; i < this.items.length;i++) {
+ items.push(this.items[i]);
+ }
+
+
+
this.items = [];
// create XObject for all the children.
- items.forEach(function(i,n) {
- var base = XObject.baseXObject(i);
+ for(var i = 0; i < items.length;i++) {
+
+ var base = XObject.baseXObject(items[i]);
base = base || XObject;
- var item = (i.constructor == XObject) ? i : new base(i);
+ var item = (items[i].constructor == XObject) ? items[i] : new base(items[i]);
item.parent = _this;
_this.items.push(item);
//_this.addItem(i);
- });
+ };
}
* XObject.prototype.init.call(this);
*
*/
- init : function()
+ init : function(parent)
{
// var items = [];
// xtype= Gtk.Menu ?? what about c_new stuff?
XObject.log("init: ID:"+ this.id +" typeof(xtype): " + typeof(this.xtype));
- if (!this.el && typeof(this.xtype) == 'function') {
+
+ var xtypeof = isSeed ? typeof(this.xtype) :
+ // oterhwise it's gjs, which case ctors are functions, not objects...
+ ( typeof(this.xtype) == 'function' ? 'object' : typeof(this.xtype) );
+
+ if (!this.el && xtypeof == 'function') {
XObject.log("func?" + XObject.keys(this.config).join(','));
this.el = this.xtype(this.config);
}
- if (!this.el && typeof(this.xtype) == 'object') {
+ if (!this.el && xtypeof == 'object') {
+ XObject.log(this.xtype.toString());
+
XObject.log("obj?" + XObject.keys(this.config).join(','));
- this.el = new (this.xtype)(this.config);
+ try {
+ if (!isSeed) {
+ // gjs does not like properties that do not exist..
+
+ this.el = new (this.xtype)({});
+ XObject.extend(this.el, this.config);
+
+ } else {
+
+ this.el = new (this.xtype)(this.config);
+ }
+ } catch(e) {
+ print(JSON.stringify(e,null,4));
+ print(JSON.stringify(this.config,null,4));
+ print(e.stack);
+
+ throw {
+ name: "ArgumentError",
+ message :"Error creating object from xtype(object)"
+ };
+ }
+
}
//print(this.el);
// XObject.registry[o.xnsid][o.id] = this;
//}
- var type = this.xtype.type ? GObject.type_name(this.xtype.type) : '';
+ var type = this.xtype && this.xtype.type ? GObject.type_name(this.xtype.type) : '';
XObject.log("add children to " + type);
var _this=this;
- this.items.forEach(function(i,n) {
- _this.addItem(i,n);
- })
+ for (var i = 0; i < this.items.length;i++) {
+ _this.addItem(this.items[i],i);
+ }
for (var i in this.listeners) {
/**
- * @method addItem
* Adds an item to the object using a new XObject
* uses pack property to determine how to add it.
* @arg cfg {Object} same as XObject constructor.
}
// what about extended items!?!?!?
- item.init();
+ item.init(this);
//print("CTR:PROTO:" + ( item.id ? item.id : '??'));
// print("addItem - call init [" + item.pack.join(',') + ']');
if (!item.el) {
imports.console.dump(item);
Seed.quit();
}
- print(XObject.type(this.xtype) + ":pack=" + item.pack);
+ XObject.log(XObject.type(this.xtype) + ":pack=" + item.pack);
if (item.pack===false) { // no packing.. various items have this ..
return;
},
/**
- * @method addListener
- * Connects a method to a signal. (gjs/Seed aware)
- *
- * @arg sig {String} name of signal
- * @arg fn {Function} handler.
- */
+ * Connects a method to a signal. (gjs/Seed aware)
+ *
+ * @param {String} sig name of signal
+ * @param {Function} fn handler.
+ */
addListener : function(sig, fn)
{
var _li = XObject.createDelegate(fn,this);
// private listeners that are not copied to GTk.
+ if (!this.el) {
+ print('missing el?');
+ print(fn);
+ print(JSON.stringify(this.cfg));
+ }
+
+
if (typeof(Seed) != 'undefined') {
// Seed.print(typeof(_li));
this.el.signal[sig].connect(_li);
* prefix with multiple '..' to look further up..
* prefix with '/' to look from the top, eg. '^LeftTree.model'
*
- * @arg name {String} name of signal
- * @return {XObject|false} the object if found.
+ * @param {String} name name of signal
+ * @return {XObject|false} the object if found.
*/
get : function(xid)
{
}
},
-
+ /**
+ * usefull for compatibilyt.
+ *
+ */
+ isSeed : typeof(Seed) != 'undefined',
/**
* Copies all the properties of config to obj, if the do not exist.
* @param {Object} obj The receiver of the properties
gname = XObject.type(cfg.xtype);
}
- print("TRYING BASE OBJECT : " + gname);
+ if (typeof(cfg.xtype) == 'string') {
+ gname = cfg.xtype;
+ }
+
+ XObject.log("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..
+
+ // see if file exists???
+
var base = gname ? imports.XObjectBase[gname][gname] : false;
return base;
};
}
-});
\ No newline at end of file
+});