#include <qtobject.h>
Inheritance diagram for Kross::Api::QtObject:


This class publishs all SIGNAL's, SLOT's and Q_PROPERTY's the QObject has.
Definition at line 45 of file qtobject.h.
Public Types | |
| typedef KSharedPtr< QtObject > | Ptr |
Public Member Functions | |
| QtObject (Object::Ptr parent, QObject *object, const QString &name=QString::null) | |
| virtual | ~QtObject () |
| virtual const QString | getClassName () const |
| QObject * | getObject () |
| void | addFunction (const QString &name, FunctionPtr function, const ArgumentList &=ArgumentList()) |
| void | addFunction (const QString &name, Function *function) |
| void | addProxyFunction (const QString &name, INSTANCE *instance, METHOD method) |
| void | addProxyFunction (const QString &name, INSTANCE *instance, METHOD method) |
| Same as above, but with three arguments. | |
| void | addProxyFunction (const QString &name, INSTANCE *instance, METHOD method) |
| Same as above, but with two arguments. | |
| void | addProxyFunction (const QString &name, INSTANCE *instance, METHOD method) |
| Same as above, but with one argument. | |
| void | addProxyFunction (const QString &name, INSTANCE *instance, METHOD method) |
| Same as above, but with no arguments. | |
| bool | isAFunction (const QString &name) const |
| virtual Object::Ptr | call (const QString &name, List::Ptr arguments) |
| virtual Object::Ptr | call (const QString &name, KSharedPtr< List > arguments) |
| Object::Ptr | hasChild (List::Ptr args) |
| bool | hasChild (const QString &name) const |
| Object::Ptr | getChild (List::Ptr args) |
| Object::Ptr | getChild (const QString &name) const |
| Object::Ptr | getChildrenList (List::Ptr args) |
| Object::Ptr | getChildrenDict (List::Ptr args) |
| Object::Ptr | callChild (List::Ptr args) |
| const QString & | getName () const |
| virtual const QString | toString () |
| Object::Ptr | getParent () const |
| QMap< QString, Object::Ptr > | getChildren () const |
| bool | addChild (Object::Ptr object, const QString &name=QString::null) |
| void | removeChild (const QString &name) |
| void | removeAllChildren () |
| virtual QStringList | getCalls () |
Static Public Member Functions | |
| static QUObject * | toQUObject (const QString &signature, List::Ptr arguments) |
| template<class T> | |
| static T * | fromObject (Object::Ptr object) |
Protected Attributes | |
| ArgumentList | m_arglist |
|
|
Shared pointer to implement reference-counting. Reimplemented from Kross::Api::Callable. Definition at line 52 of file qtobject.h. |
|
||||||||||||||||
|
Constructor.
Definition at line 38 of file qtobject.cpp. References Kross::Api::Object::addChild(), and QObject::metaObject(). 00039 : Kross::Api::Class<QtObject>(name.isEmpty() ? object->name() : name, parent) 00040 , m_object(object) 00041 { 00042 // Walk through the signals and slots the QObject has 00043 // and attach them as events to this QtObject. 00044 00045 QStrList slotnames = m_object->metaObject()->slotNames(false); 00046 for(char* c = slotnames.first(); c; c = slotnames.next()) { 00047 QCString s = c; 00048 addChild( new EventSlot(s, this, object, s) ); 00049 } 00050 00051 QStrList signalnames = m_object->metaObject()->signalNames(false); 00052 for(char* c = signalnames.first(); c; c = signalnames.next()) { 00053 QCString s = c; 00054 addChild( new EventSignal(s, this, object, s) ); 00055 } 00056 00057 // Add functions to wrap QObject methods into callable 00058 // Kross objects. 00059 00060 addFunction("propertyNames", &QtObject::propertyNames); 00061 addFunction("hasProperty", &QtObject::hasProperty, 00062 Kross::Api::ArgumentList() << Kross::Api::Argument("Kross::Api::Variant::String")); 00063 addFunction("getProperty", &QtObject::getProperty, 00064 Kross::Api::ArgumentList() << Kross::Api::Argument("Kross::Api::Variant::String")); 00065 addFunction("setProperty", &QtObject::setProperty, 00066 Kross::Api::ArgumentList() 00067 << Kross::Api::Argument("Kross::Api::Variant::String") 00068 << Kross::Api::Argument("Kross::Api::Variant")); 00069 00070 addFunction("slotNames", &QtObject::slotNames); 00071 addFunction("hasSlot", &QtObject::hasSlot, 00072 Kross::Api::ArgumentList() << Kross::Api::Argument("Kross::Api::Variant::String")); 00073 addFunction("slot", &QtObject::callSlot, 00074 Kross::Api::ArgumentList() << Kross::Api::Argument("Kross::Api::Variant::String")); 00075 00076 addFunction("signalNames", &QtObject::signalNames); 00077 addFunction("hasSignal", &QtObject::hasSignal, 00078 Kross::Api::ArgumentList() << Kross::Api::Argument("Kross::Api::Variant::String")); 00079 addFunction("signal", &QtObject::emitSignal, 00080 Kross::Api::ArgumentList() << Kross::Api::Argument("Kross::Api::Variant::String")); 00081 00082 addFunction("connect", &QtObject::connectSignal, 00083 Kross::Api::ArgumentList() 00084 << Kross::Api::Argument("Kross::Api::Variant::String") 00085 << Kross::Api::Argument("Kross::Api::QtObject") 00086 << Kross::Api::Argument("Kross::Api::Variant::String")); 00087 addFunction("disconnect", &QtObject::disconnectSignal, 00088 Kross::Api::ArgumentList() << Kross::Api::Argument("Kross::Api::Variant::String")); 00089 }
|
|
|
Destructor. Definition at line 91 of file qtobject.cpp.
|
|
||||||||||||
|
Add a new child. Replaces a possible already existing child with such a name.
Definition at line 79 of file object.cpp. References QString::arg(), QString::isEmpty(), QString::isNull(), and QMap::replace(). Referenced by Kross::Api::MainModule::addKAction(), Kross::Api::MainModule::addQObject(), Kross::Api::MainModule::addSignal(), Kross::Api::MainModule::addSlot(), QtObject(), and TestPluginModule::TestPluginModule(). 00080 { 00081 QString n = name.isNull() ? object->getName() : name; 00082 00083 #ifdef KROSS_API_OBJECT_ADDCHILD_DEBUG 00084 kdDebug() << QString("Kross::Api::Object::addChild() object.name='%2' object.classname='%3'") 00085 .arg(n).arg(object->getClassName()) << endl; 00086 #endif 00087 00088 if(n.isEmpty()) // prevent invalid items. 00089 return false; //throw Exception::Ptr( new Exception( QString("Failed to add child object to object '%1'. Invalid name for class '%2'.").arg(getName()).arg(object->getClassName()) ) ); 00090 00091 object->m_parent = this; 00092 m_children.replace(n, object); 00093 return true; 00094 }
|
|
||||||||||||
|
Add a methodfunction to the list of functions this Object supports.
Definition at line 119 of file event.h. References QMap::replace(). 00120 { 00121 m_functions.replace(name, function); 00122 }
|
|
||||||||||||||||
|
Add a Callable methodfunction to the list of functions this Object supports. The FunctionPtr points to the concret Object::Ptr myfuncname(List::Ptr) method in the class defined with template T.
Definition at line 101 of file event.h. References QMap::replace(). 00102 { 00103 m_functions.replace(name, new VarFunction0<T>(static_cast<T*>(this), function)); 00104 }
|
|
||||||||||||||||
|
Template function to add a Kross::Api::ProxyFunction as builtin-function to this Event instance. Definition at line 129 of file event.h. References QMap::replace(). 00130 { 00131 m_functions.replace(name, 00132 new Kross::Api::ProxyFunction < 00133 INSTANCE, METHOD, 00134 RET, ARG1, ARG2, ARG3, ARG4 00135 > ( instance, method ) ); 00136 }
|
|
||||||||||||
|
Pass a call to the object and evaluated it recursive down the object-hierachy. Objects like Class are able to handle call's by just implementing this function. If the call is done the called() method will be executed recursive from bottom up the call hierachy.
Reimplemented in Kross::Api::EventScript, Kross::Api::EventSignal, and Kross::Api::EventSlot. Referenced by Kross::Api::Callable::call(), and Kross::Api::Callable::callChild(). |
|
||||||||||||
|
Overloaded method to handle function-calls.
Reimplemented from Kross::Api::Callable. Definition at line 210 of file event.h. References Kross::Api::Function::call(), Kross::Api::Object::getName(), and QString::isNull(). 00211 { 00212 #ifdef KROSS_API_EVENT_CALL_DEBUG 00213 kdDebug() << QString("Event::call() name='%1' getName()='%2'").arg(name).arg(getName()) << endl; 00214 #endif 00215 00216 Function* function = m_functions[name]; 00217 if(function) { 00218 #ifdef KROSS_API_EVENT_CALL_DEBUG 00219 kdDebug() << QString("Event::call() name='%1' is a builtin function.").arg(name) << endl; 00220 #endif 00221 00222 //FIXME checkArguments(arguments); 00223 return function->call(arguments); 00224 } 00225 00226 if(name.isNull()) { 00227 // If no name is defined, we return a reference to our instance. 00228 return this; 00229 } 00230 00231 // Redirect the call to the Kross::Api::Callable we are inheritated from. 00232 return Callable::call(name, arguments); 00233 }
|
|
|
Wrapper for the Kross::Api::Object::call() method to call a children. Definition at line 172 of file callable.cpp. References Kross::Api::Object::call(), and Kross::Api::Variant::toString(). Referenced by Kross::Api::Callable::call(). 00173 { 00174 //kdDebug() << QString("Kross::Api::Callable::callChild() getName()=%1").arg(getName()) << endl; 00175 return Object::call(Variant::toString(args->item(0)), args); 00176 }
|
|
||||||||||
|
Try to convert the Object instance to the template class T.
Definition at line 198 of file object.h. 00199 { 00200 T* t = (T*) object.data(); 00201 if(! t) 00202 throw KSharedPtr<Exception>( new Exception(QString("Object \"%1\" invalid.").arg(object ? object->getClassName() : "")) ); 00203 return t; 00204 }
|
|
|
Return a list of supported callable objects.
Reimplemented in Kross::Python::PythonObject. Definition at line 186 of file object.h. 00186 { return QStringList(); }
|
|
|
Return the defined child or NULL if there is no such object with that name avaible.
Definition at line 69 of file object.cpp. Referenced by Kross::Api::Callable::getChild().
|
|
|
Wrapper for the Kross::Api::Object::getChild() method to return a children this object has. Definition at line 146 of file callable.cpp. References Kross::Api::Object::getChild(), Kross::Api::Object::getName(), and Kross::Api::Variant::toString(). Referenced by Kross::Api::Callable::call(). 00147 { 00148 QString s = Variant::toString(args->item(0)); 00149 //kdDebug() << QString("Kross::Api::Callable::getChild() getName()=%1 childName=%2").arg(getName()).arg(s) << endl; 00150 Object::Ptr obj = Object::getChild(s); 00151 if(! obj) 00152 throw Exception::Ptr( new Exception(QString("The object '%1' has no child object '%2'").arg(getName()).arg(s)) ); 00153 return obj; 00154 }
|
|
|
Return all children.
Definition at line 74 of file object.cpp. Referenced by Kross::Api::Callable::getChildrenDict(), and Kross::Api::Callable::getChildrenList().
|
|
|
Wrapper for the Kross::Api::Object::getChild() method to return a dictonary of children this object has.
Definition at line 166 of file callable.cpp. References Kross::Api::Object::getChildren(). Referenced by Kross::Api::Callable::call(). 00167 { 00168 //kdDebug()<<"Kross::Api::Callable::getChildrenDict()"<<endl; 00169 return new Dict(Object::getChildren(), "Kross::Api::Callable::getChildrenDict::Dict"); 00170 }
|
|
|
Wrapper for the Kross::Api::Object::getChildren() method to return a list of childrennames this object has.
Definition at line 156 of file callable.cpp. References QMap::begin(), QMap::end(), and Kross::Api::Object::getChildren(). Referenced by Kross::Api::Callable::call(). 00157 { 00158 QStringList list; 00159 QMap<QString, Object::Ptr> children = getChildren(); 00160 QMap<QString, Object::Ptr>::Iterator it( children.begin() ); 00161 for(; it != children.end(); ++it) 00162 list.append( it.key() ); 00163 return new Variant(list); 00164 }
|
|
|
Reimplemented from Kross::Api::Callable. Definition at line 95 of file qtobject.cpp.
|
|
|
Return the name this object has.
Reimplemented in Kross::Api::ScriptContainer. Definition at line 49 of file object.cpp. Referenced by Kross::Api::Event< QtObject >::call(), Kross::Api::Callable::call(), Kross::Api::Callable::getChild(), and Kross::Api::Module::~Module().
|
|
|
Return the QObject instance this class wraps.
Definition at line 100 of file qtobject.cpp.
|
|
|
Return the parent object or NULL if this object doesn't has a parent.
Definition at line 59 of file object.cpp.
|
|
|
Returns if the defined child is avaible.
Reimplemented in Kross::Api::MainModule. Definition at line 64 of file object.cpp. References QMap::contains(). Referenced by Kross::Api::MainModule::hasChild(), and Kross::Api::Callable::hasChild(). 00065 { 00066 return m_children.contains(name); 00067 }
|
|
|
Wrapper for the Kross::Api::Object::hasChild() method to check if this object has children. Definition at line 139 of file callable.cpp. References Kross::Api::Object::hasChild(), and Kross::Api::Variant::toString(). Referenced by Kross::Api::Callable::call(). 00140 { 00141 //kdDebug() << QString("Kross::Api::Callable::hasChild() getName()=%1").arg(getName()) << endl; 00142 return new Variant( Object::hasChild( Variant::toString(args->item(0)) ), 00143 "Kross::Api::Callable::hasChild::Bool" ); 00144 }
|
|
|
Check if a function is a member of this Callable
Definition at line 187 of file event.h. References QMap::contains(). 00188 { 00189 return m_functions.contains(name); 00190 }
|
|
|
Remove all children. Definition at line 104 of file object.cpp. References QMap::clear(). 00105 { 00106 #ifdef KROSS_API_OBJECT_REMCHILD_DEBUG 00107 kdDebug() << "Kross::Api::Object::removeAllChildren()" << endl; 00108 #endif 00109 m_children.clear(); 00110 }
|
|
|
Remove an existing child.
Definition at line 96 of file object.cpp. References QMap::remove(). 00097 { 00098 #ifdef KROSS_API_OBJECT_REMCHILD_DEBUG 00099 kdDebug() << QString("Kross::Api::Object::removeChild() name='%1'").arg(name) << endl; 00100 #endif 00101 m_children.remove(name); 00102 }
|
|
||||||||||||
|
Build a Qt QUObject struct out of the Qt signal or slot signature and the passed List arguments.
Definition at line 105 of file qtobject.cpp. References QString::find(), QString::findRev(), QStringList::split(), and Kross::Api::Variant::toString(). Referenced by Kross::Api::EventSignal::call(). 00106 { 00107 int startpos = signature.find("("); 00108 int endpos = signature.findRev(")"); 00109 if(startpos < 0 || startpos > endpos) 00110 throw Exception::Ptr( new Exception(QString("Invalid Qt signal or slot signature '%1'").arg(signature)) ); 00111 00112 //QString sig = signature.left(startpos); 00113 QString params = signature.mid(startpos + 1, endpos - startpos - 1); 00114 QStringList paramlist = QStringList::split(",", params); // this will fail on something like myslot(QMap<QString,QString> arg), but we don't care jet. 00115 uint paramcount = paramlist.size(); 00116 00117 // The first item in the QUObject-array is for the returnvalue 00118 // while everything >=1 are the passed parameters. 00119 QUObject* uo = new QUObject[ paramcount + 1 ]; 00120 uo[0] = QUObject(); // empty placeholder for the returnvalue. 00121 00122 //QString t; 00123 //for(int j=0; j<argcount; j++) t += "'" + Variant::toString(arguments->item(j)) + "' "; 00124 //kdDebug()<<"1 --------------------- ("<<argcount<<"): "<<t<<endl; 00125 00126 // Fill parameters. 00127 uint argcount = arguments ? arguments->count() : 0; 00128 for(uint i = 0; i < paramcount; i++) { 00129 if(paramlist[i].find("QString") >= 0) { 00130 const QString s = (argcount > i) ? Variant::toString(arguments->item(i)) : QString::null; 00131 //kdDebug()<<"EventSlot::toQUObject s="<<s<<endl; 00132 static_QUType_QString.set( &(uo[i + 1]), s ); 00133 } 00134 //TODO handle int, long, char*, QStringList, etc. 00135 else { 00136 throw Exception::Ptr( new Exception(QString("Unknown Qt signal or slot argument '%1' in signature '%2'.").arg(paramlist[i]).arg(signature)) ); 00137 } 00138 } 00139 00140 //kdDebug()<<"2 --------------------- "<<endl; 00141 return uo; 00142 }
|
|
|
Reimplemented in Kross::Api::Dict, Kross::Api::Exception, Kross::Api::List, and Kross::Api::Variant. Definition at line 54 of file object.cpp. References QString::arg(), and Kross::Api::Object::getClassName(). 00055 { 00056 return QString("%1 (%2)").arg(m_name).arg(getClassName()); 00057 }
|
|
|
List of arguments this callable object supports. Definition at line 123 of file callable.h. |
1.4.6