/*************************************************************************** * Copyright (C) 2006-2012 by Thomas Schweitzer * * thomas-schweitzer(at)arcor.de * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License version 2.0 as * * published by the Free Software Foundation. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program in the file LICENSE.GPL; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "UiGuiSettings.h" #include "SettingsPaths.h" #include #include #include #include #include #include #include #include #include #include //! \defgroup grp_Settings All concerning the settings. /*! \class UiGuiSettings \ingroup grp_Settings \brief Handles the settings of the program. Reads them on startup and saves them on exit. Is a singleton class and can only be accessed via getInstance(). */ // Inits the single class instance pointer. TQWeakPointer UiGuiSettings::_instance; /*! \brief The constructor for the settings. */ UiGuiSettings::UiGuiSettings() : TQObject() { // Create the main application settings object from the UniversalIndentGUI.ini file. _qsettings = new TQSettings( SettingsPaths::getSettingsPath() + "/UniversalIndentGUI.ini", TQSettings::IniFormat, this); _indenterDirctoryStr = SettingsPaths::getGlobalFilesPath() + "/indenters"; readAvailableTranslations(); initSettings(); } /*! \brief Returns the instance of the settings class. If no instance exists, ONE will be created. */ TQSharedPointer UiGuiSettings::getInstance() { TQSharedPointer sharedInstance = _instance.toStrongRef(); if (sharedInstance.isNull()) { // Create the settings object, which loads all UiGui settings from a file. sharedInstance = TQSharedPointer(new UiGuiSettings()); _instance = sharedInstance.toWeakRef(); } return sharedInstance; } /*! \brief The destructor saves the settings to a file. */ UiGuiSettings::~UiGuiSettings() { // Convert the language setting from an integer index to a string. int index = _qsettings->value("UniversalIndentGUI/language", 0).toInt(); if (index < 0 || index >= _availableTranslations.size()) { index = 0; } _qsettings->setValue("UniversalIndentGUI/language", _availableTranslations.at(index)); } /*! \brief Scans the translations directory for available translation files and stores them in the TQList \a _availableTranslations. */ void UiGuiSettings::readAvailableTranslations() { TQString languageShort; TQStringList languageFileList; // English is the default language. A translation file does not exist but to have a menu entry, // added here. languageFileList << "universalindent_en.qm"; // Find all translation files in the "translations" directory. TQDir translationDirectory = TQDir(SettingsPaths::getGlobalFilesPath() + "/translations"); languageFileList << translationDirectory.entryList(TQStringList("universalindent_*.qm")); // Loop for each found translation file foreach(languageShort, languageFileList) { // Remove the leading string "universalindent_" from the filename. languageShort.remove(0, 16); // Remove trailing file extension ".qm". languageShort.chop(3); _availableTranslations.append(languageShort); } } /*! \brief Returns a list of the mnemonics of the available translations. */ TQStringList UiGuiSettings::getAvailableTranslations() { return _availableTranslations; } /*! \brief Returns the value of the by \a settingsName defined setting as TQVariant. If the named setting does not exist, 0 is being returned. */ TQVariant UiGuiSettings::getValueByName(TQString settingName) { return _qsettings->value("UniversalIndentGUI/" + settingName); } /*! \brief Loads the settings for the main application. Settings are for example last selected indenter, last loaded source code file and so on. */ bool UiGuiSettings::initSettings() { // Read the version string saved in the settings file. _qsettings->setValue("UniversalIndentGUI/version", _qsettings->value("UniversalIndentGUI/version", "")); // Read windows last size and position from the settings file. _qsettings->setValue("UniversalIndentGUI/maximized", _qsettings->value("UniversalIndentGUI/maximized", false)); _qsettings->setValue("UniversalIndentGUI/position", _qsettings->value("UniversalIndentGUI/position", TQPoint(50, 50))); _qsettings->setValue("UniversalIndentGUI/size", _qsettings->value("UniversalIndentGUI/size", TQSize(800, 600))); // Read last selected encoding for the opened source code file. _qsettings->setValue("UniversalIndentGUI/encoding", _qsettings->value("UniversalIndentGUI/encoding", "UTF-8")); // Read maximum length of list for recently opened files. _qsettings->setValue("UniversalIndentGUI/recentlyOpenedListSize", _qsettings->value("UniversalIndentGUI/recentlyOpenedListSize", 5)); // Read if last opened source code file should be loaded on startup. _qsettings->setValue("UniversalIndentGUI/loadLastSourceCodeFileOnStartup", _qsettings->value("UniversalIndentGUI/loadLastSourceCodeFileOnStartup", true)); // Read last opened source code file from the settings file. _qsettings->setValue("UniversalIndentGUI/lastSourceCodeFile", _qsettings->value("UniversalIndentGUI/lastSourceCodeFile", _indenterDirctoryStr + "/example.cpp")); // Read last selected indenter from the settings file. int selectedIndenter = _qsettings->value("UniversalIndentGUI/selectedIndenter", 0).toInt(); if (selectedIndenter < 0) { selectedIndenter = 0; } _qsettings->setValue("UniversalIndentGUI/selectedIndenter", selectedIndenter); // Read if syntax highlighting is enabled. _qsettings->setValue("UniversalIndentGUI/SyntaxHighlightingEnabled", _qsettings->value("UniversalIndentGUI/SyntaxHighlightingEnabled", true)); // Read if white space characters should be displayed. _qsettings->setValue("UniversalIndentGUI/whiteSpaceIsVisible", _qsettings->value("UniversalIndentGUI/whiteSpaceIsVisible", false)); // Read if indenter parameter tool tips are enabled. _qsettings->setValue("UniversalIndentGUI/indenterParameterTooltipsEnabled", _qsettings->value("UniversalIndentGUI/indenterParameterTooltipsEnabled", true)); // Read the tab width from the settings file. _qsettings->setValue("UniversalIndentGUI/tabWidth", _qsettings->value("UniversalIndentGUI/tabWidth", 4)); // Read the last selected language and stores the index it has in the list of available // translations. _qsettings->setValue("UniversalIndentGUI/language", _availableTranslations.indexOf(_qsettings->value("UniversalIndentGUI/language", "").toString())); // Read the main window state. _qsettings->setValue("UniversalIndentGUI/MainWindowState", _qsettings->value("UniversalIndentGUI/MainWindowState", TQByteArray())); return true; } /*! \brief Register the by \a propertyName defined property of \a obj to be connected to the setting defined by \a settingName. The \a propertyName must be one of those that are listed in the TQt "Properties" documentation section of a TQt Object. All further needed info is retrieved via the \a obj's MetaObject, like the to the property bound signal. */ bool UiGuiSettings::registerObjectProperty(TQObject *obj, const TQString &propertyName, const TQString &settingName) { const TQMetaObject *metaObject = obj->metaObject(); bool connectSuccess = false; // Connect to the objects destroyed signal, so that it will be correctly unregistered. connectSuccess = connect(obj, SIGNAL(destroyed(TQObject*)), this, SLOT(unregisterObjectProperty(TQObject*))); int indexOfProp = metaObject->indexOfProperty(qPrintable(propertyName)); if (connectSuccess && indexOfProp > -1) { TQMetaProperty mProp = metaObject->property(indexOfProp); // Connect to the property's value changed signal. if (mProp.hasNotifySignal()) { TQMetaMethod signal = mProp.notifySignal(); //TQString teststr = qPrintable(SIGNAL() + TQString(signal.signature())); // The command "SIGNAL() + TQString(signal.signature())" assembles the signal methods // signature to a valid TQt SIGNAL. connectSuccess = connect(obj, qPrintable(SIGNAL() + TQString(signal.signature())), this, SLOT(handleObjectPropertyChange())); } if (connectSuccess) { _registeredObjectProperties[obj] = TQStringList() << propertyName << settingName; } else { //TODO: Write a debug warning to the log. disconnect(obj, SIGNAL(destroyed(TQObject*)), this, SLOT(unregisterObjectProperty(TQObject*))); return false; } // If setting already exists, set the objects property to the setting value. if (_qsettings->contains("UniversalIndentGUI/" + settingName)) { mProp.write(obj, _qsettings->value("UniversalIndentGUI/" + settingName)); } // Otherwise add the setting and set it to the value of the objects property. else { _qsettings->setValue("UniversalIndentGUI/" + settingName, mProp.read(obj)); } } else { //TODO: Write a debug warning to the log. disconnect(obj, SIGNAL(destroyed(TQObject*)), this, SLOT(unregisterObjectProperty(TQObject*))); return false; } return true; } /*! \brief Searches the child TQObjects of \a obj for a property name and setting name definition within their custom properties and registers this property name to that setting name if both were found. The custom properties, for which are searched, are "connectedPropertyName" and "connectedSettingName", where "connectedPropertyName" is the name of a TQObject property as it is documented in the TQtDocs, and "connectedSettingName" is the name of a setting here within UiGuiSettings. If the mentioned setting name doesn't exist, it will be created. Returns true, if all found property and setting definitions could be successfully registered. Returns false, if any of those registrations fails. */ bool UiGuiSettings::registerObjectPropertyRecursive(TQObject *obj) { return checkCustomPropertiesAndCallFunction(obj, &UiGuiSettings::registerObjectProperty); } /*! \brief Assigns the by \a settingName defined setting value to the by \a propertyName defined property of \a obj. Returns true, if the value could be assigned, otherwise returns false, which is the case if settingName doesn't exist within the settings or if the mentioned propertyName wasn't found for the \a obj. */ bool UiGuiSettings::setObjectPropertyToSettingValue(TQObject *obj, const TQString &propertyName, const TQString &settingName) { const TQMetaObject *metaObject = obj->metaObject(); int indexOfProp = metaObject->indexOfProperty(qPrintable(propertyName)); if (indexOfProp > -1) { TQMetaProperty mProp = metaObject->property(indexOfProp); // If setting already exists, set the objects property to the setting value. if (_qsettings->contains("UniversalIndentGUI/" + settingName)) { mProp.write(obj, _qsettings->value("UniversalIndentGUI/" + settingName)); } // The setting didn't exist so return that setting the objects property failed. else { //TODO: Write a debug warning to the log. return false; } } else { //TODO: Write a debug warning to the log. return false; } return true; } /*! \brief Searches the child TQObjects of \a obj for a property name and setting name definition within their custom properties and sets each property to settings value. The custom properties, for which are searched, are "connectedPropertyName" and "connectedSettingName", where "connectedPropertyName" is the name of a TQObject property as it is documented in the TQtDocs, and "connectedSettingName" is the name of a setting here within UiGuiSettings. Returns true, if all found property and setting definitions could be successfully registered. Returns false, if any of those registrations fails. */ bool UiGuiSettings::setObjectPropertyToSettingValueRecursive(TQObject *obj) { return checkCustomPropertiesAndCallFunction(obj, &UiGuiSettings::setObjectPropertyToSettingValue); } /*! \brief Assigns the by \a propertyName defined property's value of \a obj to the by \a settingName defined setting. If the \a settingName didn't exist yet, it will be created. Returns true, if the value could be assigned, otherwise returns false, which is the case if the mentioned propertyName wasn't found for the \a obj. */ bool UiGuiSettings::setSettingToObjectPropertyValue(TQObject *obj, const TQString &propertyName, const TQString &settingName) { const TQMetaObject *metaObject = obj->metaObject(); int indexOfProp = metaObject->indexOfProperty(qPrintable(propertyName)); if (indexOfProp > -1) { TQMetaProperty mProp = metaObject->property(indexOfProp); setValueByName(settingName, mProp.read(obj)); } else { //TODO: Write a debug warning to the log. return false; } return true; } /*! \brief Searches the child TQObjects of \a obj for a property name and setting name definition within their custom properties and sets each setting to the property value. The custom properties, for which are searched, are "connectedPropertyName" and "connectedSettingName", where "connectedPropertyName" is the name of a TQObject property as it is documented in the TQtDocs, and "connectedSettingName" is the name of a setting here within UiGuiSettings. If the settingName didn't exist yet, it will be created. Returns true, if all found property and setting definitions could be successfully registered. Returns false, if any of those registrations fails. */ bool UiGuiSettings::setSettingToObjectPropertyValueRecursive(TQObject *obj) { return checkCustomPropertiesAndCallFunction(obj, &UiGuiSettings::setSettingToObjectPropertyValue); } /*! \brief Iterates over all \a objs child TQObjects and checks whether they have the custom properties "connectedPropertyName" and "connectedSettingName" set. If both are set, it invokes the \a callBackFunc with both. */ bool UiGuiSettings::checkCustomPropertiesAndCallFunction(TQObject *obj, bool (UiGuiSettings::*callBackFunc)( TQObject *obj, const TQString &propertyName, const TQString &settingName)) { bool success = true; // Find all widgets that have PropertyName and SettingName defined in their style sheet. TQList allObjects = obj->findChildren(); foreach(TQObject * object, allObjects) { TQString propertyName = object->property("connectedPropertyName").toString(); TQString settingName = object->property("connectedSettingName").toString(); // If property and setting name were found, register that widget with the settings. if (!propertyName.isEmpty() && !settingName.isEmpty()) { success &= (this->*callBackFunc)(object, propertyName, settingName); } } return success; } /*! \brief The with a certain property registered \a obj gets unregistered. */ void UiGuiSettings::unregisterObjectProperty(TQObject *obj) { if (_registeredObjectProperties.contains(obj)) { const TQMetaObject *metaObject = obj->metaObject(); TQString propertyName = _registeredObjectProperties[obj].first(); TQString settingName = _registeredObjectProperties[obj].last(); bool connectSuccess = false; int indexOfProp = metaObject->indexOfProperty(qPrintable(propertyName)); if (indexOfProp > -1) { TQMetaProperty mProp = metaObject->property(indexOfProp); // Disconnect to the property's value changed signal. if (mProp.hasNotifySignal()) { TQMetaMethod signal = mProp.notifySignal(); // The command "SIGNAL() + TQString(signal.signature())" assembles the signal methods // signature to a valid TQt SIGNAL. connectSuccess = disconnect(obj, qPrintable(SIGNAL() + TQString( signal.signature())), this, SLOT(handleObjectPropertyChange())); } } _registeredObjectProperties.remove(obj); } } /*! \brief Registers a slot form the \a obj by its \a slotName to be invoked, if the by \a settingName defined setting changes. The registered slot may have no parameters or exactly one. If it accepts one parameter, whenever the setting \a settingName changes the slot gets tried to be invoked with the settings value as parameter. This only works, if the slot parameter is of the same type as the setting. */ bool UiGuiSettings::registerObjectSlot(TQObject *obj, const TQString &slotName, const TQString &settingName) { const TQMetaObject *metaObject = obj->metaObject(); bool connectSuccess = false; // Connect to the objects destroyed signal, so that it will be correctly unregistered. connectSuccess = connect(obj, SIGNAL(destroyed(TQObject*)), this, SLOT(unregisterObjectSlot(TQObject*))); TQString normalizedSlotName = TQMetaObject::normalizedSignature(qPrintable(slotName)); int indexOfMethod = metaObject->indexOfMethod(qPrintable(normalizedSlotName)); if (connectSuccess && indexOfMethod > -1) { TQMetaMethod mMethod = metaObject->method(indexOfMethod); //TQMetaMethod::Access access = mMethod.access(); //TQMetaMethod::MethodType methType = mMethod.methodType(); // Since the method can at maximum be invoked with the setting value as argument, // only methods taking max one argument are allowed. if (mMethod.parameterTypes().size() <= 1) { _registeredObjectSlots.insert(obj, TQStringList() << normalizedSlotName << settingName); } else { //TODO: Write a debug warning to the log. disconnect(obj, SIGNAL(destroyed(TQObject*)), this, SLOT(unregisterObjectSlot(TQObject*))); return false; } } else { //TODO: Write a debug warning to the log. disconnect(obj, SIGNAL(destroyed(TQObject*)), this, SLOT(unregisterObjectSlot(TQObject*))); return false; } return true; } /*! \brief If \a obj, \a slotName and \a settingName are given, that certain connection is unregistered. If only \a obj is given, all to this object registered slot-setting connections are unregistered. */ void UiGuiSettings::unregisterObjectSlot(TQObject *obj, const TQString &slotName, const TQString &settingName) { //const TQMetaObject *metaObject = obj->metaObject(); TQString normalizedSlotName = TQMetaObject::normalizedSignature(qPrintable(slotName)); TQMutableMapIterator it(_registeredObjectSlots); while (it.hasNext()) { it.next(); if (it.key() == obj && slotName.isEmpty() && settingName.isEmpty()) { it.remove(); } else if (it.key() == obj && it.value().first() == slotName && it.value().last() == settingName) { it.remove(); } } } /*! \brief This private slot gets invoked whenever a registered objects property changes and distributes the new value to all other to the same settingName registered objects. */ void UiGuiSettings::handleObjectPropertyChange() { TQObject *obj = TQObject::sender(); TQString className = obj->metaObject()->className(); const TQMetaObject *metaObject = obj->metaObject(); TQString propertyName = _registeredObjectProperties[obj].first(); TQString settingName = _registeredObjectProperties[obj].last(); int indexOfProp = metaObject->indexOfProperty(qPrintable(propertyName)); if (indexOfProp > -1) { TQMetaProperty mProp = metaObject->property(indexOfProp); setValueByName(settingName, mProp.read(obj)); } } /*! \brief Sets the setting defined by \a settingName to \a value. When setting a changed value, all to this settingName registered objects get the changed value set too. If the \a settingName didn't exist yet, it will be created. */ void UiGuiSettings::setValueByName(const TQString &settingName, const TQVariant &value) { // Do the updating only, if the setting was really changed. if (_qsettings->value("UniversalIndentGUI/" + settingName) != value) { _qsettings->setValue("UniversalIndentGUI/" + settingName, value); // Set the new value for all registered object properties for settingName. for (TQMap::ConstIterator it = _registeredObjectProperties.begin(); it != _registeredObjectProperties.end(); ++it) { if (it.value().last() == settingName) { TQObject *obj = it.key(); const TQMetaObject *metaObject = obj->metaObject(); TQString propertyName = it.value().first(); int indexOfProp = metaObject->indexOfProperty(qPrintable(propertyName)); if (indexOfProp > -1) { TQMetaProperty mProp = metaObject->property(indexOfProp); mProp.write(obj, value); } } } // Invoke all registered object methods for settingName. for (TQMap::ConstIterator it = _registeredObjectSlots.begin(); it != _registeredObjectSlots.end(); ++it) { if (it.value().last() == settingName) { TQObject *obj = it.key(); const TQMetaObject *metaObject = obj->metaObject(); TQString slotName = it.value().first(); int indexOfMethod = metaObject->indexOfMethod(qPrintable(slotName)); if (indexOfMethod > -1) { TQMetaMethod mMethod = metaObject->method(indexOfMethod); //TQMetaMethod::Access access = mMethod.access(); //TQMetaMethod::MethodType methType = mMethod.methodType(); bool success = false; // Handle registered slots taking one parameter. if (mMethod.parameterTypes().size() == 1) { if (mMethod.parameterTypes().first() == value.typeName()) { success = invokeMethodWithValue(obj, mMethod, value); } } // Handle registered slots taking zero parameters. else { success = mMethod.invoke(obj, TQt::DirectConnection); } if (success == false) { // TODO: Write a warning to the log if no success. } } } } } } #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if TQT_VERSION >= 0x040600 #include #include #endif bool UiGuiSettings::invokeMethodWithValue(TQObject *obj, TQMetaMethod mMethod, TQVariant value) { switch (value.type()) { case TQVariant::BitArray: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQBitArray, value.toBitArray())); } case TQVariant::Bitmap: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQBitmap, value.value())); } case TQVariant::Bool: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(bool, value.toBool())); } case TQVariant::Brush: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQBrush, value.value())); } case TQVariant::ByteArray: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQByteArray, value.toByteArray())); } case TQVariant::Char: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQChar, value.toChar())); } case TQVariant::Color: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQColor, value.value())); } case TQVariant::Cursor: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQCursor, value.value())); } case TQVariant::Date: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQDate, value.toDate())); } case TQVariant::DateTime: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQDateTime, value.toDateTime())); } case TQVariant::Double: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(double, value.toDouble())); } case TQVariant::Font: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQFont, value.value())); } case TQVariant::Hash: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQVariantHash, value.toHash())); } case TQVariant::Icon: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQIcon, value.value())); } case TQVariant::Image: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQImage, value.value())); } case TQVariant::Int: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(int, value.toInt())); } case TQVariant::KeySequence: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQKeySequence, value.value())); } case TQVariant::Line: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQLine, value.toLine())); } case TQVariant::LineF: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQLineF, value.toLineF())); } case TQVariant::List: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQVariantList, value.toList())); } case TQVariant::Locale: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQLocale, value.toLocale())); } case TQVariant::LongLong: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(qlonglong, value.toLongLong())); } case TQVariant::Map: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQVariantMap, value.toMap())); } case TQVariant::Matrix: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQMatrix, value.value())); } case TQVariant::Transform: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQTransform, value.value())); } #if TQT_VERSION >= 0x040600 case TQVariant::Matrix4x4: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQMatrix4x4, value.value())); } #endif case TQVariant::Palette: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQPalette, value.value())); } case TQVariant::Pen: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQPen, value.value())); } case TQVariant::Pixmap: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQPixmap, value.value())); } case TQVariant::Point: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQPoint, value.toPoint())); } // case TQVariant::PointArray : // return Q_ARG(TQPointArray, value.value()) ); case TQVariant::PointF: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQPointF, value.toPointF())); } case TQVariant::Polygon: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQPolygon, value.value())); } #if TQT_VERSION >= 0x040600 case TQVariant::Quaternion: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQQuaternion, value.value())); } #endif case TQVariant::Rect: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQRect, value.toRect())); } case TQVariant::RectF: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQRectF, value.toRectF())); } case TQVariant::RegExp: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQRegExp, value.toRegExp())); } case TQVariant::Region: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQRegion, value.value())); } case TQVariant::Size: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQSize, value.toSize())); } case TQVariant::SizeF: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQSizeF, value.toSizeF())); } case TQVariant::SizePolicy: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQSizePolicy, value.value())); } case TQVariant::String: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQString, value.toString())); } case TQVariant::StringList: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQStringList, value.toStringList())); } case TQVariant::TextFormat: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQTextFormat, value.value())); } case TQVariant::TextLength: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQTextLength, value.value())); } case TQVariant::Time: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQTime, value.toTime())); } case TQVariant::UInt: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(uint, value.toUInt())); } case TQVariant::ULongLong: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(qulonglong, value.toULongLong())); } case TQVariant::Url: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQUrl, value.toUrl())); } #if TQT_VERSION >= 0x040600 case TQVariant::Vector2D: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQVector2D, value.value())); } case TQVariant::Vector3D: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQVector3D, value.value())); } case TQVariant::Vector4D: { return mMethod.invoke(obj, TQt::DirectConnection, Q_ARG(TQVector4D, value.value())); } #endif default: { return false; } } }