this.methods = methods;
this.allmethods = methods;
this.implementations = implementations;
- print(JSON.stringify(methods,null,4)); Seed.exit();
+ //print(JSON.stringify(methods,null,4)); Seed.exit();
// dump out a usage file..
+ function verifyUsageMethod(parent,child,method)
+ {
+ // currently only verifies add on container.
+ if (method !='Gtk.Container:add') {
+ return true;
+ }
+
+ var cls = parent.split('.').pop();
+
+
+ if (parent == 'Gtk.Bin' || methods['Gtk.Bin'].extendsClasses.indexOf(parent) > -1) {
+ return false;
+ }
+ if (['GtkSource.CompletionInfo',
+ 'Gtk.MenuShell',
+ 'GtkSource.View', // ??? nothing can be added to it?
+ 'WebKit.WebView', // ??? nothing can be added to it?
+ 'GtkClutter.Embed'
+ ].indexOf(parent) > -1) {
+ return false;
+ }
+
+ //print("TRY ctor: " + parent );
+
+ var x = new imports.gi.Gtk[cls]();
+ //print("TRY child type: " + parent);
+
+ print(parent + " : says children are of type : " + x.child_type());
+ // get the Gtype for the child?
+
+
+ return true;
+
+ }
-
-
+ function is_a(cls, instance_of) {
+ return methods[cls].extendsClasses.indexOf(instance_of) > -1;
+ }
function verifyUsage(parent,child)
{
-
-
+ // find all the methods that child can be added to parent.
+ var mts = methods[parent].can_contain_using;
+ for(var i =0;i<mts.length;i++) {
+ var m = mts[i].split(':');
+ if (!is_a(child,m[0])) {
+ continue;
+
+ }
+ if (verifyUsageMethod(parent,child,mts[i])) {
+ return true;
+ }
+ }
+ return false;
}
}
for (var par in methods[cls].can_be_added_to_as) {
+ if (!verifyUsage(par,cls)) {
+ continue;
+ }
+
if (typeof(usage[par]) == 'undefined') {
usage[par] = [];
}
- verifyUsage(par,cls);
+
usage[par].pushUnique(cls);
if (typeof(tops[cls]) == 'undefined') {
return false;
}
+
+
+
+ print (JSON.stringify(usage,null,4));
var nusage = {};
var usage_left = {};
for(var par in usage) {
//print(JSON.stringify(implementations,null,4));
}
+imports.gi.Gtk.init(Seed.argv);
BuildLists();
// we now have a list of classes / methods that can be used..