Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var QMeta = ruby.define_module("QMeta");
- function wrapQtObject(object) {
- if(typeof object == "number") {
- return object;
- } else if(object == null) {
- return ruby.builtin.Qnil;
- } else if(object == true) {
- return ruby.builtin.Qtrue;
- } else if(object == false) {
- return ruby.builtin.Qfalse;
- } else if(typeof object == "string") {
- return ruby.string_new(object);
- } else if(typeof object == "array") {
- var new_ary = [];
- for(var i = 0; i < object.length; i++)
- new_ary.push(wrapQtObject(object[i]);
- return new_ary;
- } else { // Qt Object
- var qtKlass = getQtClass(object.metaObject);
- return {
- klass: qtKlass,
- qt_internal: object,
- };
- }
- }
- function unwrapRubyObject(object) {
- if(object.klass == ruby.c.Fixnum) {
- return object;
- } else if(object == ruby.builtin.Qnil) {
- return null;
- } else if(object == ruby.builtin.Qtrue) {
- return true;
- } else if(object == ruby.builtin.Qfalse) {
- return false;
- } else if(object.klass == ruby.c.String) {
- return object.value;
- } else if(object.klass == ruby.c.Array) {
- var new_ary = [];
- for(var i = 0; i < object.length; i++)
- new_ary.push(unwrapRubyObject(object[i]);
- return new_ary;
- } else if(object.qt_internal) {
- return object.qt_internal;
- } else {
- throw new Error("unwrapRubyObject: cannot unwrap " + ruby.obj_classname(object));
- }
- }
- function getQtClass(metaObject) {
- if(ruby.const_defined(QMeta, metaObject.className))
- return ruby.const_get(QMeta, metaObject.className);
- var superklass = metaObject.superClass;
- if(superklass) superklass = makeQtClass(superklass);
- var klass = ruby.define_class_under(QMeta, metaObject.className, superklass);
- for(var i = metaObject.propertyOffset; i < metaObject.propertyCount; i++) {
- var property = metaObject.properties[i];
- if(property.isReadable) {
- ruby.define_method(klass, property.name, 0, function(self) {
- return wrapQtObject(self.qt_internal[property.name]);
- });
- }
- if(property.isWritable) {
- ruby.define_method(klass, property.name + "=", 1, function(self, value) {
- self.qt_internal[property.name] = unwrapRubyObject(value);
- });
- }
- }
- for(var i = metaObject.propertyOffset; i < metaObject.methodCount; i++) {
- var method = metaObject.methods[i];
- ruby.define_method(klass, method.match(/^[^(]+/)[0], -1, function(self, args) {
- return wrapQtObject(self.qt_internal.apply(self.qt_internal, unwrapRubyObject(args)));
- });
- }
- };
- var $i = { print: print };
- debugger;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement