# 
# Copyright (C) 2006-2018 Matthias Koefferlein
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# 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; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#

load(File.join(File.dirname(__FILE__), "common.conf"))

# --------------------------------------------------------------
# all modules

drop_method :all_classes, /::qt_check_for_QOBJECT_macro/ # don't include in API!
drop_method :all_classes, /::metaObject/ # messes up the overload scheme since it can be overloaded but is required internally before overloading is effective (on attach). Use staticMetaObject instead.
drop_method :all_classes, /::qt_/ # internal use only
drop_method :all_classes, /::d_func/ # internal use only
drop_method :all_classes, /::connectNotify/ # messes up the overload scheme since it can be overloaded but is required internally before overloading is effective (on attach). Use staticMetaObject instead.
drop_method :all_classes, /::devType\(/ # not required
drop_method :all_classes, /::x11/ # no X11 stuff
drop_method :all_classes, /::data_ptr/ # no private data

rename :all_classes, /::create\(/, "qt_create" # clashes with GSI/Ruby
rename :all_classes, /::destroy\(/, "qt_destroy" # clashes with GSI/Ruby
rename :all_classes, /::raise\(/, "qt_raise" # clashes with Ruby "raise" keyword

# --------------------------------------------------------------
# Qt

# drops enum members
drop_enum_const "Qt", /WindowType::WindowSoftkeysVisibleHint/
drop_enum_const "Qt", /WindowType::WindowSoftkeysRespondHint/
drop_enum_const "Qt", /WindowType::WindowOkButtonHint/ # only available on CE
drop_enum_const "Qt", /WindowType::WindowCancelButtonHint/ # only available on CE

# --------------------------------------------------------------
# QtCore

drop_class "QLocale", /Data/
drop_class "QVariant", /Private/
drop_class "QVariant", /Handler/
drop_class "QVariant"  # implicitly defined

# not implemented:
drop_class "QAbstractEventDispatcher"
drop_class "QAbstractFileEngineHandler"
drop_class "QAbstractFileEngineIterator"
drop_class "QAbstractFileEngine"   # read requires char *
drop_class "QAlgorithmsPrivate"
drop_class "QArgument"
drop_class "QAtomic"
drop_class "QAtomicInt"
drop_class "QAtomicPointer"
drop_class "QBasicAtomicInt"
drop_class "QBasicAtomicPointer"
drop_class "QBitArray"
drop_class "QBitRef"
drop_class "QBool"
drop_class "QByteArray"
drop_class "QByteRef"
drop_class "QCache"
drop_class "QChar"
drop_class "QCharRef"
drop_class "QConstString"
drop_class "QContiguousCache"
drop_class "QContiguousCacheData"
drop_class "QContiguousCacheTypedData"
drop_class "QDebug"
drop_class "QExplicitlySharedDataPointer"
drop_class "QFileInfoList"
drop_class "QFileInfoListIterator"
drop_class "QFlag"
drop_class "QFlags"
drop_class "QForeachContainer"
drop_class "QForeachContainerBase"
drop_class "QFSFileEngine"
drop_class "QGenericArgument"
drop_class "QGenericReturnArgument"
drop_class "QGlobalStatic"
drop_class "QGlobalStaticDeleter"
drop_class "QHash"
drop_class "QHashData"
drop_class "QHashDummyNode"
drop_class "QHashDummyValue"
drop_class "QHashIterator"
drop_class "QHashNode"
drop_class "QIncompatibleFlag"
drop_class "QInternal"
drop_class "QIntegerForSizeof"
drop_class "QLatin1Char"
drop_class "QLatin1String"
drop_class "QLinkedList"
drop_class "QLinkedListData"
drop_class "QLinkedListIterator"
drop_class "QLinkedListNode"
drop_class "QList"
drop_class "QListData"
drop_class "QListIterator"
drop_class "QMap"
drop_class "QMapData"
drop_class "QMapIterator"
drop_class "QMapNode"
drop_class "QMapPayloadNode"
drop_class "QMetaObjectExtraData"
drop_class "QMetaTypeId"
drop_class "QMetaTypeId2"
drop_class "QModelIndexList"
drop_class "QMultiHash"
drop_class "QMultiMap"
drop_class "QMutableHashIterator"
drop_class "QMutableLinkedListIterator"
drop_class "QMutableListIterator"
drop_class "QMutableMapIterator"
drop_class "QMutableSetIterator"
drop_class "QMutableStringListIterator"
drop_class "QMutableVectorIterator"
drop_class "QMutexLocker"
drop_class "QNoDebug"
drop_class "QNoImplicitBoolCast"
drop_class "QObjectCleanupHandler"
drop_class "QObjectData"
drop_class "QObjectList"
drop_class "QObjectUserData"
drop_class "QPair"
drop_class "QPointer"
drop_class "QQueue"
drop_class "QReturnArgument"
drop_class "QScopedArrayPointer"
drop_class "QScopedPointerArrayDeleter"
drop_class "QScopedPointerDeleter"
drop_class "QScopedPointerPodDeleter"
drop_class "QSet"
drop_class "QSetIterator"
drop_class "QSharedDataPointer"
drop_class "QSharedData"   # where to get QAtomic?
drop_class "QSharedPointer"
drop_class "QStack"
drop_class "QStdWString"
drop_class "QStringListIterator"
drop_class "QStringList"    # mapped otherwise
drop_class "QString"    # mapped otherwise
drop_class "QStringRef"
drop_class "QtAlgorithms"
drop_class "QtCleanUpFunction"
drop_class "QtContainerFwd"
drop_class "QtDebug"
drop_class "QtEndian"
drop_class "QTextCodecFactoryInterface"
drop_class "QTextCodecPlugin"
drop_class "QTextIStream"
drop_class "QTextOStream"
drop_class "QTextStreamFunction"
drop_class "QTextStreamManipulator"
drop_class "QtGlobal"
drop_class "QThreadStorage"
drop_class "QThreadStorageData"
drop_class "QtMsgHandler"
drop_class "QtMsgType"
drop_class "QtPlugin"
drop_class "QtPluginInstanceFunction"
drop_class "QtPrivate"
drop_class "QtSharedPointer"
drop_class "QtValidLicenseForActiveQtModule"
drop_class "QtValidLicenseForCoreModule"
drop_class "QtValidLicenseForDBusModule"
drop_class "QtValidLicenseForDeclarativeModule"
drop_class "QtValidLicenseForGuiModule"
drop_class "QtValidLicenseForHelpModule"
drop_class "QtValidLicenseForMultimediaModule"
drop_class "QtValidLicenseForNetworkModule"
drop_class "QtValidLicenseForOpenGLModule"
drop_class "QtValidLicenseForOpenVGModule"
drop_class "QtValidLicenseForQt3SupportLightModule"
drop_class "QtValidLicenseForQt3SupportModule"
drop_class "QtValidLicenseForScriptModule"
drop_class "QtValidLicenseForScriptToolsModule"
drop_class "QtValidLicenseForSqlModule"
drop_class "QtValidLicenseForSvgModule"
drop_class "QtValidLicenseForTestModule"
drop_class "QtValidLicenseForXmlModule"
drop_class "QtValidLicenseForXmlPatternsModule"
drop_class "QTypeInfo"
drop_class "QUuid"
drop_class "QUpdateLaterEvent"
drop_class "QVariantComparisonHelper"
drop_class "QVariantList"
drop_class "QVariant"
drop_class "QVariantMap"
drop_class "QVarLengthArray"
drop_class "QVector"
drop_class "QVectorData"
drop_class "QVectorIterator"
drop_class "QVectorTypedData"

drop_enum_const "QEvent", /CocoaRequestModal/ # not available on WIN
drop_method "QCollator", /QCollator::compare\(.*QStringRef/ # clashes with QString version
drop_method "QLocale", /QLocale::(toDouble|toFloat|toInt|toLongLong|toShort|quoteString|toUInt|toULongLong|toUShort)\(.*QStringRef/ # clashes with QString version
drop_method "QRegularExpression", /QRegularExpression::(match|globalMatch)\(.*QStringRef/ # clashes with QString version
drop_method "QSignalBlocker", /QSignalBlocker::QSignalBlocker\(.*&/ # clashes with pointer version
drop_method "QFont", /QFont::initialize/ # Must not hide Ruby's initialize and is not public
drop_method "QColormap", /QColormap::initialize/ # Must not hide Ruby's initialize and is not public
drop_method "QAccessible", /QAccessible::initialize/ # Must not hide Ruby's initialize and is not public
drop_method "QEasingCurve", /QEasingCurve::setCustomType/ # requires function * 
drop_method "QEasingCurve", /QEasingCurve::customType/ # requires function * 
drop_method "QMetaObject", /QMetaObject::d\(/ # invalid return value (struct)
drop_method "QMetaObject", /QMetaObject::invokeMethod/ # requires QGenericArgument which is a macro
drop_method "QMetaObject", /QMetaObject::metacall/ # requires void** 
drop_method "QMetaMethod", /QMetaMethod::invoke/ # requires QGenericArgument which is a macro
drop_method "QMetaMethod", /QMetaMethod::newInstance/ # requires QGenericArgument which is a macro
drop_method "QMetaObject", /QMetaObject::cast\(/ # internal
drop_method "QMetaObject", /QMetaObject::activate/ # requires void**
drop_method "QMetaObject", /QMetaObject::static_metacall/ # requires void**
drop_method "QMetaObject", /QMetaObject::addGuard/ # requires QObject**
drop_method "QMetaObject", /QMetaObject::changeGuard/ # requires QObject**
drop_method "QMetaObject", /QMetaObject::removeGuard/ # requires QObject**
drop_method "QMetaObject", /QMetaObject::newInstance/ # requires QGenericArgument
drop_method "QMetaType", /QMetaType::registerStreamOperators/ # requires callbacks
drop_method "QMetaType", /QMetaType::registerType/ # requires callbacks
drop_method "QMatrix4x4", /QMatrix4x4::QMatrix4x4.*GenericMatrix/ # GenericMatrix is a template
drop_method "QMatrix4x4", /QMatrix4x4::normalMatrix/ # return value GenericMatrix is a template
drop_method "QMatrix4x4", /QMatrix4x4::toGenericMatrix/ # return value GenericMatrix is a template
drop_method "QCoreApplication", /QCoreApplication::setEventFilter/ # requires callbacks
drop_method "QCoreApplication", /QCoreApplication::argv/ # requires char **
drop_method "QCoreApplication", /QCoreApplication::argc/ # does not make sense without argv ..
drop_method "QCoreApplication", /QCoreApplication::compressEvent/ # QPostEventList is missing
drop_method "QCoreApplication", /QCoreApplication::watchUnixSignal/ # not available on WIN
keep_arg "QCoreApplication", /::postEvent/, 1    # will take ownership of event
drop_method "", /::operator\s*>>\(QDataStream\s*&/ # implemented through "read" below
drop_method "", /::operator\s*<<\(QDataStream\s*&/ # implemented through "put" below
drop_method "QDataStream", /::operator\s*>>/ # implemented through read
drop_method "QDataStream", /::operator\s*<</ # implemented through put
drop_method "QDataStream", /QDataStream::readBytes\s*\(\s*char\s*\*\s*&/ # requires "char *&"
drop_method "QStringMatcher", /QStringMatcher::QStringMatcher\(const\s+QChar\s+\*/ # requires "QChar *", alternative available
drop_method "QStringMatcher", /QStringMatcher::indexIn\(const\s+QChar\s+\*/ # requires "QChar *", alternative available
drop_method "QObject", /QObject::findChild/ # template member
drop_method "QObject", /QObject::findChildren/ # template member
drop_method "QObject", /QObject::setUserData/ # QObjectUserData not available
drop_method "QObject", /QObject::userData/ # QObjectUserData not available
drop_method "QChildEvent", /QChildEvent::child/ # provided through a special implementation
drop_method "QFile", /QFile::setDecodingFunction/ # uses callbacks
drop_method "QFile", /QFile::setEncodingFunction/ # uses callbacks
drop_method "QFile", /QFile::open.*FILE/ # uses internal struct
drop_method "QPrinter", /QPrinter::printerSelectionOption/ # not available on WIN
drop_method "QPrinter", /QPrinter::setPrinterSelectionOption/ # not available on WIN
drop_method "QSessionManager", /QSessionManager::handle/ # not available on WIN
drop_method "QPersistentModelIndex", /QPersistentModelIndex::operator\s+const\s+class\s+QModelIndex/ # implemented specially
drop_method "QSettings", /QSettings::registerFormat/ # uses callbacks
drop_method "QSettings", /QSettings::iniCodec/ # requires QTextCodec
drop_method "QSettings", /QSettings::setIniCodec/ # requires QTextCodec
drop_method "QAbstractFileEngine", /QAbstractFileEngine::supportsExtension/ # missing classes ExtensionOption etc.
drop_method "QAbstractFileEngine", /QAbstractFileEngine::extension/ # missing classes ExtensionOption etc.
drop_method "QUrl", /QUrl::data_ptr/ # QUrlPrivate not available
drop_method "QFile", /QFile::fileEngine\(\)/ # requires AbstractFileEngine
drop_method "QTemporaryFile", /QTemporaryFile::fileEngine\(\)/ # requires AbstractFileEngine
drop_method "QTemporaryFile", /QTemporaryFile::readData\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QTemporaryFile", /QTemporaryFile::readLineData\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QFile", /QFile::map\(/ # requires char * as address
drop_method "QFile", /QFile::unmap\(/ # requires char * as address
drop_method "QFile", /QFile::readData\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QFile", /QFile::readLineData\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QIODevice", /QIODevice::getChar\(/ # requires char *, TODO: provide alternative?
drop_method "QIODevice", /QIODevice::peek\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QIODevice", /QIODevice::read\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QIODevice", /QIODevice::readLine\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QIODevice", /QIODevice::readData\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QIODevice", /QIODevice::readLineData\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QIODevice", /QIODevice::write\(const\s+char\s*\*[^,]*\)/ # clashes with QByteArray version (because of handling of binary data containing 0 characters we prefer write(QByteArray))
drop_method "QProcess", /QProcess::readData\(/ # requires char * 
drop_method "QProcess", /QProcess::readLineData\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QDataStream", /QDataStream::readRawData\(char\s*\*/ # requires char *
drop_method "QFile", /QFile::open\(int/ # unsupported file descriptor
drop_method "QFile", /QFile::decodeName\(const\s+QByteArray/ # clashes with const char * version
drop_method "QTemporaryFile", /QTemporaryFile::open\(int/ # unsupported file descriptor
drop_method "QTextStream", /QTextStream::QTextStream\(QByteArray/ # clashes with QString variant
drop_method "QTextStream", /QTextStream::QTextStream\(const\s*QByteArray/ # clashes with QString variant
drop_method "QTextStream", /QTextStream::QTextStream\(.*FILE/ # unsupported FILE
drop_method "QTextStream", /QTextStream::QTextStream\(.*FILE/ # unsupported FILE
drop_method "", /::operator\s*>>\(QTextStream\s*&/ # implemented through read
drop_method "", /::operator\s*<<\(QTextStream\s*&/ # implemented through put
drop_method "QTextStream", /::operator\s*>>/ # implemented through read
drop_method "QTextStream", /::operator\s*<</ # implemented through put
drop_method "QTextStream", /QTextStream::readData\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QTextStream", /QTextStream::readLineData\(char\s*\*/ # requires char *, QByteArray alternative available
drop_method "QTextCodec", /QTextCodec::codecForName\(const\s+QByteArray/ # clashes with const char * variant
drop_method "QTextCodec", /QTextCodec::toUnicode\(const\s+QByteArray/ # clashes with const char * variant
drop_method "QTextCodec", /QTextCodec::fromUnicode\(const\s+QChar\s+\*/ # requires real QChar *
drop_method "QTextEncoder", /QTextEncoder::fromUnicode\(const\s+QChar\s+\*/ # requires real QChar *
drop_method "", /::operator\s*==\(const\s+QVariant\s*&\w+,\s*const\s+QVariantComparisonHelper/ # requires QVariantComparisonHelper
drop_method "", /::operator\s*!=\(const\s+QVariant\s*&\w+,\s*const\s+QVariantComparisonHelper/ # requires QVariantComparisonHelper
drop_method "QByteArrayMatcher", /QByteArrayMatcher::indexIn\(const\s+QByteArray/ # clashes with const char * variant
drop_method "QRegion", /QRegion::setRects/ # gets a new implementation
drop_method "QTimer", /static\s+void\s+QTimer::singleShot\(/ # requires slots, alternative impl?

rename "QLocale", /QLocale::toString\(int i/, "toString_i"
rename "QLocale", /QLocale::toString\(unsigned int/, "toString_ui"
rename "QLocale", /QLocale::toString\(short i/, "toString_s"
rename "QLocale", /QLocale::toString\(unsigned short/, "toString_us"
rename "QLocale", /QLocale::toString\(qlonglong/, "toString_ll"
rename "QLocale", /QLocale::toString\(qulonglong/, "toString_ull"
rename "QLocale", /QLocale::toString\(float/, "toString_f"
rename "QLocale", /QLocale::toString\(double/, "toString_d"

rename "QResource", /QResource::registerResource\(const\s+unsigned\s+char\s+\*/, "registerResource_data"
rename "QResource", /QResource::registerResource\(const QString/, "registerResource_file"
rename "QResource", /QResource::unregisterResource\(const\s+unsigned\s+char\s+\*/, "unregisterResource_data"
rename "QResource", /QResource::unregisterResource\(const QString/, "unregisterResource_file"

rename "QProcess", /QProcess::error\(QProcess::ProcessError/, "error_sig" # disambiguator
rename "QProcess", /QProcess::finished\(int[\s\w]*\)/, "finished_int" # disambiguator finished(int) vs. finished(int, QProcess::ExitStatus)

# alternative implementation for QCoreApplication::QCoreApplication 
drop_method "QCoreApplication", /QCoreApplication::QCoreApplication/
add_native_qapp_ctor_impl("QCoreApplication")

# Reasoning: "notify" is hardly needed (use postEvent or sendEvent instead). Reimplementing remains as a use case.
# Reimplementing this method however is questionable: providing an reimplementation hook has severe consequences as even 
# Qt object constructors will route over this slot and invoke interpreter calls. This will for example lead to preliminary
# binding of Qt objects to Python objects, hence spoil their object identity.
drop_method "QCoreApplication", /QCoreApplication::notify/
drop_method "QApplication", /QApplication::notify/

# alternative implementation for QObject::findChild
add_native_impl_QObject_findChild

# alternative implementation for QChildEvent::child
# Reason: this method does not supply a true QObject pointer. Instead it will 
# deliver a pointer to an object that is almost destroyed. Normal RTTI will 
# not work on this. Neighter can it be attached an gsi::ObjectBase object.
add_native_impl("QChildEvent", <<'CODE', <<'DECL')

  namespace gsi 
  {
    gsi::Class<QObject> &qtdecl_QObject ();
  }

  namespace
  {
    struct DummyQObject { };

    class RawQObjectClass
      : public gsi::Class<QObject>
    {
    public:
      RawQObjectClass ()
        : gsi::Class<QObject> (gsi::qtdecl_QObject (), "Qt", "QObject_Raw", gsi::Methods (), "@hide")
      {
      }

      //  Final class - because of missing RTTI, subclassing won't work.
      virtual const gsi::ClassBase *subclass_decl (const void *) const { return this; }
      virtual bool can_upcast (const void *) const { return false; }

      //  Does not bind to a particular type
      virtual bool binds () const { return false; }
      virtual const std::type_info &type () const { return typeid (DummyQObject); }
    };
  }

  static void _init_f_child (qt_gsi::GenericMethod *decl)
  {
    //  Make the QChildEvent::child method return a special class which is final 
    //  and does not try to return a gsi::ObjectBase object.
    static RawQObjectClass s_cls;
    decl->set_return<QObject * > ();
    decl->ret_type ().set_cls (&s_cls);
  }

  static void _call_f_child (const qt_gsi::GenericMethod * /*decl*/, void *cls, gsi::SerialArgs & /*args*/, gsi::SerialArgs &ret) 
  {
    ret.write<QObject * > ((QObject *)((QChildEvent *)cls)->child ());
  }
  
CODE
  gsi::Methods(new qt_gsi::GenericMethod ("child", 
      "@brief Method QObject *QChildEvent::child()\n"
      "NOTE: the object returned by this method is not memory managed. It may be destroyed internally without notice. \n"
      "The returned object shall not be stored or used outside the childEvent handler. "
      "If used outside this handler, the reference might get lost and the application may crash.\n"
      "Furthermore, the object returned will only represent a QObject, not any derived type.\n",
      true, &_init_f_child, &_call_f_child))
DECL

# alternative implementation for QFont::Light, QFont::Bold, QFont::Normal, QFont::DemiBold, QFont::Black
add_native_impl_QFont

# alternative implementation for QRegion::setRects
add_native_impl_QRegion

# alternative implementation for QPersistentQModelIndex::operator const QModelIndex &
add_native_impl_QPersistentQModelIndex

# implementation of operator<< and operator>> for QDataStream
add_native_impl_streams

final_class "QIODevice"  # because readData cannot be reimplemented 
final_class "QBuffer"  # because readData cannot be reimplemented 
final_class "QFile"  # because readData cannot be reimplemented 
final_class "QTemporaryFile"  # because readData cannot be reimplemented 
final_class "QProcess"  # because readData cannot be reimplemented 

drop_method "QPolygon", /QPolygon::putPoints\(.*const\s+int\s+\*/ # requires const int *
drop_method "QPolygon", /QPolygon::setPoints\(.*const\s+int\s+\*/ # requires const int *
drop_method "QPolygon", /QPolygon::QPolygon\(.*const\s+int\s+\*/ # requires const int *
no_imports "QPolygon"  # base class is a template. Base methods are implemented specifically.
no_imports "QPolygonF"  # base class is a template. Base methods are implemented specifically.

# enhance QPolygon by some missing methods because we dropped the base class and 
# support for db methods
add_native_impl_polygons

# --------------------------------------------------------------
# QtGui

drop_class "QAccessible2"
drop_class "QAccessibleBridgePlugin"
drop_class "QAccessibleBridge" # QAccessibleBridge not supported on Windows:
drop_class "QAccessibleInterfaceEx"
drop_class "QAccessibleObjectEx"
drop_class "QAccessiblePlugin" # difficult because of strange inheritance (through a intermediate struct) and probably never needed:
drop_class "QAccessibleWidgetEx"
drop_class "QBrushData"
drop_class "QCopChannel"
drop_class "QCustomRasterPaintDevice"
drop_class "QDecoration"
drop_class "QDecorationDefault"
drop_class "QDecorationFactory"
drop_class "QDecorationPlugin"
drop_class "QDirectPainter"
drop_class "QDrawBorderPixmap"
drop_class "QDrawPixmaps"
drop_class "QFontEngineInfo"
drop_class "QFontEnginePlugin"
drop_class "QGenericMatrix"
drop_class "QGtkStyle"  # not available on WIN
drop_class "QIconEngineFactoryInterface"
drop_class "QIconEngineFactoryInterfaceV2"
drop_class "QIconEngineV2", /AvailableSizesArgument/
drop_class "QImageIOHandlerFactoryInterface"
drop_class "QInputContextFactoryInterface"
drop_class "QItemEditorCreator"   # is a template 
drop_class "QKbdDriverFactory"
drop_class "QKbdDriverPlugin"
drop_class "QKeyEventTransition"
drop_class "QMacCocoaViewContainer"
drop_class "QMacNativeWidget"
drop_class "QMacPasteboardMime"
drop_class "QMacStyle"
drop_class "QMdi"
drop_class "QMouseDriverFactory"
drop_class "QMouseDriverPlugin"
drop_class "QMouseEventTransition"
drop_class "QPainterPathPrivate"
drop_class "QPictureIO"
drop_class "QPixmapCache", /Key/
drop_class "QProxyScreen"
drop_class "QProxyScreenCursor"
drop_class "QProxyStyle"
drop_class "QRasterPaintEngine"
drop_class "QScreen"
drop_class "QScreenCursor"
drop_class "QScreenDriverFactory"
drop_class "QScreenDriverPlugin"
drop_class "QSessionManager" # Not available always:
drop_class "QStandardItemEditorCreator"  # is a template
drop_class "QStyleFactoryInterface"
drop_class "QStyleOptionDockWidgetV2"
drop_class "QStyleOptionTabWidgetFrameV2"
drop_class "QSymbianEvent"
drop_class "QTextFrameLayoutData"
drop_class "QTileRules"
drop_class "QWidgetData"
drop_class "QWidgetItemV2"
drop_class "QWindowsVistaStyle" # not available on Unix?
drop_class "QWindowsXPStyle" # not available on Unix?
drop_class "QWSCalibratedMouseHandler"
drop_class "QWSClient"
drop_class "QWSEmbedWidget"
drop_class "QWSEvent"
drop_class "QWSInputMethod"
drop_class "QWSKeyboardHandler"
drop_class "QWSMouseHandler"
drop_class "QWSPointerCalibrationData"
drop_class "QWSScreenSaver"
drop_class "QWSServer"
drop_class "QWSWindow"

# depedencies from operators are not derived automatically currently:
include "QPolygon", [ "<QTransform>", "<QMatrix>" ]
include "QPolygonF", [ "<QTransform>", "<QMatrix>" ]
include "QPoint", [ "<QPoint>", "<QMatrix>", "<QMatrix4x4>" ]
include "QPointF", [ "<QPointF>", "<QMatrix>", "<QMatrix4x4>" ]
include "QVector3D", [ "<QVector3D>", "<QVector2D>", "<QMatrix4x4>" ]
include "QVector4D", [ "<QVector4D>", "<QVector2D>", "<QMatrix4x4>" ]
include "QAction", [ "<QAction>", "<QGraphicsWidget>", "<QMenu>" ]
include "QCursor", [ "<QCursor>", "<QScreen>", "<QBitmap>" ]
include "QGraphicsItem", [ "<QGraphicsItem>", "<QGraphicsTransform>", "<QGraphicsScene>", "<QStyleOptionGraphicsItem>", "<QGraphicsEffect>", "<QGraphicsWidget>", "<QGraphicsSceneContextMenuEvent>", "<QGraphicsSceneDragDropEvent>", "<QGraphicsSceneHoverEvent>", "<QGraphicsSceneMouseEvent>", "<QGraphicsSceneWheelEvent>", "<QPainter>" ]
include "QGraphicsScene", [ "<QGraphicsScene>", "<QGraphicsView>", "<QGraphicsItem>", "<QGraphicsWidget>", "<QGraphicsEllipseItem>", "<QGraphicsLineItem>", "<QGraphicsPathItem>", "<QGraphicsPixmapItem>", "<QGraphicsPolygonItem>", "<QGraphicsRectItem>", "<QGraphicsSimpleTextItem>", "<QGraphicsTextItem>", "<QGraphicsProxyWidget>", "<QGraphicsItemGroup>", "<QStyle>", "<QGraphicsSceneContextMenuEvent>", "<QGraphicsSceneDragDropEvent>", "<QGraphicsSceneHelpEvent>", "<QGraphicsSceneMouseEvent>", "<QGraphicsSceneWheelEvent>" ]
include "QApplication", [ "<QApplication>", "<QSessionManager>", "<QDesktopWidget>", "<QStyle>", "<QScreen>", "<QLocale>", "<QClipboard>", "<QInputContext>" ]
include "QTextStream", [ "<QTextStream>", "<QIODevice>", "<QLocale>", "<QTextCodec>", "<QDomNode>", "<QSplitter>" ]
include "QWindow", [ "<QWindow>", "<QScreen>" ]
include "QOffscreenSurface", [ "<QOffscreenSurface>", "<QScreen>" ]
include "QScreenOrientationChangeEvent", [ "<QScreenOrientationChangeEvent>", "<QScreen>" ]

drop_method "QAbstractPageSetupDialog", /QAbstractPageSetupDialog::QAbstractPageSetupDialog\(QAbstractPageSetupDialogPrivate/ 
drop_method "QClipboardEvent", /QClipboardEvent::data/ 
drop_method "QClipboardEvent", /QClipboardEvent::QClipboardEvent\(QEventPrivate/ 
drop_method "QCursor", /QCursor::QCursor\s*\(\s*Qt::HANDLE/ # not available on WIN
drop_method "QApplication", /QApplication::compressEvent/ # QPostEventList is missing
drop_method "QApplication", /QApplication::commitDataRequest/ # Signal with a out argument (QSessionManager &)
drop_method "QApplication", /QApplication::saveStateRequest/ # Signal with a out argument (QSessionManager &)
drop_method "QApplication", /QApplication::saveState\s*\(/ # QSessionManager is not always available
drop_method "QApplication", /QApplication::commitData\s*\(/ # QSessionManager is not always available
drop_method "QWidget", /QWidget::painters/ # whatever that is, it's not a method ..
drop_method "QWidget", /QWidget::handle/ # not available on WIN
drop_method "QPixmap", /QPixmap::handle/ # not available on WIN
drop_method "QPixmap", /QPixmap::fromX11Pixmap/ # not available on WIN
drop_method "QTabletEvent", /QTabletEvent::QTabletEvent/ # TODO: too many arguments
drop_method "QGraphicsProxyWidget", /QGraphicsProxyWidget::setGeometry\(double/ # not available as override (private or protected inheritance?)
drop_method "QPixmap", /QPixmap::QPixmap\(const\s+char\s+\*\s*const\s*xpm\s*\[\s*\]/ # no const char *[] - TODO: provide differen implementation?
drop_method "QImage", /QImage::QImage\(.*unsigned\s+char\s+\*\s*data\W/ # not binary data constructor - done in native implementation
add_native_impl_QImage()
drop_method "QImage", /QImage::QImage\(const\s+char\s+\*\s*const\s*xpm\s*\[\s*\]/ # no const char *[] - TODO: provide differen implementation?
drop_method "QImage", /QImage::QImage\(const\s+char\s+\*\s*fileName/ # not available for QT_NO_CAST_TO_ASCII
drop_method "QAccessibleInterface", /QAccessibleInterface::imageInterface/ # Interface is not officially available 
drop_method "QAccessibleInterface", /QAccessibleInterface::actionInterface/ # Interface is not officially available 
drop_method "QAccessible", /QAccessible::installFactory/ # requires function ptr
drop_method "QAccessible", /QAccessible::removeFactory/ # requires function ptr
drop_method "QAccessible", /QAccessible::installRootObjectHandler/ # requires function ptr
drop_method "QAccessible", /QAccessible::installUpdateHandler/ # requires function ptr
drop_method "QPixmapCache", /QPixmapCache::find\s*\(\s*const\s+QPixmapCache::Key/ # requires Key subclass
drop_method "QPixmapCache", /QPixmapCache::insert\s*\(\s*const\s+QPixmap\s+\&pixmap\s*\)/ # requires Key subclass
drop_method "QPixmapCache", /QPixmapCache::remove\s*\(\s*const\s+QPixmapCache::Key/ # requires Key subclass
drop_method "QPixmapCache", /QPixmapCache::replace\s*\(\s*const\s+QPixmapCache::Key/ # requires Key subclass
drop_method "QGraphicsItem", /QGraphicsItem::isBlockedByModalPanel/  # requires QGraphicsItem **
drop_method "QGraphicsEffect", /QGraphicsEffect::source\s*\(\s*\)/  # requires QGraphicsEffectSource, not an official method
drop_method "QGraphicsScene", /QGraphicsScene::drawItems/  # requires QGraphicsItem *[], TODO: provide an alternative!
drop_method "QGraphicsView", /QGraphicsView::drawItems/  # requires QGraphicsItem *[], TODO: provide an alternative!
# drop_method "QGtkStyle", /QGtkStyle::QGtkStyle\s*\(\s*QGtkStylePrivate/  # requires QGtkStylePrivate
drop_method "QTextList", /QTextList::setFormat\(const\s+QTextFormat\s+/ # got mixed in somehow(?). Not part of API
drop_method "QTextTable", /QTextTable::setFormat\(const\s+QTextFormat\s+/ # got mixed in somehow(?). Not part of API
drop_method "QTextTableCell", /QTextTableCell::begin/ # requires template type return value (TODO: provide alternative?)
drop_method "QTextTableCell", /QTextTableCell::end/ # requires template type return value
drop_method "QRegion", /QRegion::handle/ # requires XRegion
drop_method "QFont", /QFont::freetypeFace/ # required FT_FACE struct
def_alias "QFont", /toString\(/, "to_s"
drop_method "QPixmap", /QPixmap::QPixmap\(QPixmapData/ # QPixmapData not available
drop_method "QPixmap", /QPixmap::pixmapData/ # QPixmapData not available
drop_method "QImage", /^\s*unsigned\s+char\s+\*\s*QImage::bits/ # TODO: requires non-const char *
drop_method "QImage", /^\s*unsigned\s+char\s+\*\s*QImage::scanLine/ # TODO: requires non-const char *
drop_method "QImage", /QImage::QImage\(unsigned\s+char\s+\*data/ # TODO: requires non-const char *
drop_method "QImage", /QImage::text\(const\s+QString/ # clashes with const char *version
drop_method "QTextDocument", /QTextDocument::appendUndoItem/ # requires QAbstractUndoItem which is not available
drop_method "QAccessibleInterface", /QAccessibleInterface::editableTextInterface/ # requires QAccessibleEditableTextInterface which is not available
drop_method "QAccessibleInterface", /QAccessibleInterface::tableInterface/ # requires QAccessibleTableInterface which is not available
drop_method "QAccessibleInterface", /QAccessibleInterface::textInterface/ # requires QAccessibleTextInterface which is not available
drop_method "QAccessibleInterface", /QAccessibleInterface::valueInterface/ # requires QAccessibleValueInterface which is not available
drop_method "QAccessibleObject", /QAccessibleObject::navigate/ # requires QAccessibleInterface **
drop_method "QAccessibleWidget", /QAccessibleWidget::navigate/ # requires QAccessibleInterface **
drop_method "QAccessibleInterface", /QAccessibleInterface::navigate/ # requires QAccessibleInterface **
drop_method "QAccessibleApplication", /QAccessibleApplication::navigate/ # requires QAccessibleInterface **
drop_method "QTextCursor", /QTextCursor::QTextCursor\(QTextCursorPrivate/ # Private data not available
drop_method "QTextCursor", /QTextCursor::QTextCursor\(QTextCursorPrivate/ # Private data not available
drop_method "QTextBlock", /QTextBlock::QTextBlock\(QTextDocumentPrivate/ # Private data not available
drop_method "QTextBlock", /QTextBlock::docHandle/ # Private data not available
drop_method "QTextCursor", /QTextCursor::QTextCursor\(QTextDocumentPrivate/ # Private data not available
drop_method "QTextDocument", /QTextDocument::docHandle/ # Private data not available
drop_method "QTextObject", /QTextObject::docHandle/ # Private data not available
drop_method "QTextFragment", /QTextFragment::QTextFragment\(const\s+QTextDocumentPrivate/ # Private data not available
drop_method "QTextInlineObject", /QTextInlineObject::QTextInlineObject\(int.*QTextEngine/ # QTextEngine not available
drop_method "QTextLayout", /QTextLayout::engine/ # QTextEngine not available
drop_method "QTextFrame", /QTextFrame::layoutData/ # QTextFrameLayoutData not available
drop_method "QTextFrame", /QTextFrame::begin/ # iterator not available
drop_method "QTextFrame", /QTextFrame::end/ # iterator not available
drop_method "QTextFrame", /QTextFrame::setLayoutData/ # QTextFrameLayoutData not available
drop_method "QWidget", /QWidget::windowSurface/ # QWindowSurface not available
drop_method "QWidget", /QWidget::setWindowSurface/ # QWindowSurface not available
drop_method "QFont", /QFont::resolve\s*\(\s*unsigned\s+int/ # internal? Messes up the generation (non-const?)
drop_method "QFont", /QFont::resolve\s*\(\s*\)/ # internal? Messes up the generation (non-const?)
drop_method "QPalette", /QPalette::resolve\s*\(\s*unsigned\s+int/ # internal? Messes up the generation (non-const?)
drop_method "QPalette", /QPalette::resolve\s*\(\s*\)/ # internal? Messes up the generation (non-const?)
drop_method "QMessageBox", /QMessageBox::warning.*int\s+\w+\s*,\s*int\s+\w+\s*\)/ # obsolete
drop_method "QMessageBox", /QMessageBox::question.*int\s+\w+\s*,\s*int\s+\w+\s*\)/ # obsolete
drop_method "QMessageBox", /QMessageBox::information.*int\s+\w+\s*,\s*int\s+\w+\s*\)/ # obsolete
drop_method "QMessageBox", /QMessageBox::critical.*int\s+\w+\s*,\s*int\s+\w+\s*\)/ # obsolete
drop_method "QMessageBox", /QMessageBox::standardIcon/ # obsolete
drop_method "QMessageBox", /QMessageBox::warning.*QMessageBox::StandardButton\s+\w+,\s*QMessageBox::StandardButton\s+\w+\s*\)/ # clashes with enum version
drop_method "QMessageBox", /QMessageBox::question.*QMessageBox::StandardButton\s+\w+,\s*QMessageBox::StandardButton\s+\w+\s*\)/ # clashes with enum version
drop_method "QMessageBox", /QMessageBox::critical.*QMessageBox::StandardButton\s+\w+,\s*QMessageBox::StandardButton\s+\w+\s*\)/ # clashes with enum version
drop_method "QMessageBox", /QMessageBox::information.*QMessageBox::StandardButton\s+\w+,\s*QMessageBox::StandardButton\s+\w+\s*\)/ # clashes with enum version
drop_method "QTreeWidgetItem", /::QTreeWidgetItem\(const\s+QTreeWidgetItem\s*&/  # will hide the parent-constructor otherwise. Use dup/copy protocol instead.

rename "QRawFont", /QRawFont::supportsCharacter\(.*ucs4/, "supportsCharacter_ucs4"
drop_method "QTextLine", /QTextLine::cursorToX\(.*int\s*\*/  # clashes with int-only version
drop_method "QPainter", /QPainter::drawRects.*QRect\s+\*/  # requires pointers, alternative available
drop_method "QPainter", /QPainter::drawRects.*QRectF\s+\*/  # requires pointers, alternative available
drop_method "QPainter", /QPainter::drawConvexPolygon.*QPoint\s+\*/  # requires pointers, alternative available
drop_method "QPainter", /QPainter::drawConvexPolygon.*QPointF\s+\*/  # requires pointers, alternative available
drop_method "QPainter", /QPainter::drawPoints.*QPoint\s+\*/  # requires pointers, alternative available
drop_method "QPainter", /QPainter::drawPoints.*QPointF\s+\*/  # requires pointers, alternative available
drop_method "QPainter", /QPainter::drawPolygon.*QPoint\s+\*/  # requires pointers, alternative available
drop_method "QPainter", /QPainter::drawPolygon.*QPointF\s+\*/  # requires pointers, alternative available
drop_method "QPainter", /QPainter::drawPolyline.*QPoint\s+\*/  # requires pointers, alternative available
drop_method "QPainter", /QPainter::drawPolyline.*QPointF\s+\*/  # requires pointers, alternative available
drop_method "QPaintEngine", /QPaintEngine::drawRects.*QRect\s+\*/  # requires pointers, alternative available
drop_method "QPaintEngine", /QPaintEngine::drawRects.*QRectF\s+\*/  # requires pointers, alternative available
drop_method "QPaintEngine", /QPaintEngine::drawLines.*QLine\s+\*/  # requires pointers, alternative available
drop_method "QPaintEngine", /QPaintEngine::drawLines.*QLineF\s+\*/  # requires pointers, alternative available
drop_method "QPaintEngine", /QPaintEngine::drawPoints.*QPoint\s+\*/  # requires pointers, alternative available
drop_method "QPaintEngine", /QPaintEngine::drawPoints.*QPointF\s+\*/  # requires pointers, alternative available
drop_method "QPaintEngine", /QPaintEngine::drawPolygon.*QPoint\s+\*/  # requires pointers, alternative available
drop_method "QPaintEngine", /QPaintEngine::drawPolygon.*QPointF\s+\*/  # requires pointers, alternative available
drop_method "QPaintEngine", /QPaintEngine::fix_neg_rect/ # ?? 
rename "QPainter", /QPainter::drawRects.*QVector<QRect>/, "drawRects_i"
rename "QPainter", /QPainter::drawRects.*QVector<QRectF>/, "drawRects_f"
drop_method "QPainter", /QPainter::drawLines.*QLine\s+\*/
drop_method "QPainter", /QPainter::drawLines.*QLineF\s+\*/
drop_method "QPainter", /QPainter::drawLines.*QPoint\s+\*/
drop_method "QPainter", /QPainter::drawLines.*QPointF\s+\*/
rename "QPainter", /QPainter::drawLines.*QVector<QPoint>/, "drawLines_ip"
rename "QPainter", /QPainter::drawLines.*QVector<QPointF>/, "drawLines_fp"
rename "QPainter", /QPainter::drawLines.*QVector<QLine>/, "drawLines_i"
rename "QPainter", /QPainter::drawLines.*QVector<QLineF>/, "drawLines_f"
drop_method "QColor", /QColor::QColor\(const\s+QString/ # clashes with const char * version
drop_method "QColor", /QColor::allowX11ColorNames/ # not available in WIN
drop_method "QColor", /QColor::setAllowX11ColorNames/ # not available in WIN
drop_method "Qimage", /Qimage::text\(const\s+QString/ # clashes with const char * version
rename "QDialogButtonBox", /QDialogButtonBox::QDialogButtonBox\(QFlags/, "new_buttons"
rename "QIcon", /QIcon::pixmap\(int\s+extent/, "pixmap_ext"
rename "QKeySequence", /QKeySequence::QKeySequence\(QKeySequence::StandardKey/, "new_std"

# TODO: basically, the layout object only takes ownership over the objects when 
# it has a QWidget parent itself. This is not reflected in the following simple scheme
keep_arg "QBoxLayout", /::addLayout/, 0    # will take ownership of layout
keep_arg "QBoxLayout", /::addSpacerItem/, 0    # will take ownership of item
keep_arg "QBoxLayout", /::addWidget/, 0    # will take ownership of item
keep_arg "QBoxLayout", /::insertItem/, 1    # will take ownership of item
keep_arg "QBoxLayout", /::insertLayout/, 1    # will take ownership of item
keep_arg "QBoxLayout", /::insertSpacerItem/, 1    # will take ownership of item
keep_arg "QBoxLayout", /::insertWidget/, 1    # will take ownership of item
keep_arg "QGridLayout", /::addLayout/, 0  # will take ownership of layout
keep_arg "QGridLayout", /::addItem/, 0  # will take ownership of layout
keep_arg "QGridLayout", /::addWidget/, 0  # will take ownership of layout
keep_arg "QLayout", /::addChildLayout/, 0  # will take ownership of layout
keep_arg "QLayout", /::addItem/, 0  # will take ownership of item
keep_arg "QLayout", /::addWidget/, 0  # will take ownership of item
keep_arg "QStackedLayout", /::addWidget/, 0  # will take ownership of item
keep_arg "QStackedLayout", /::insertWidget/, 1  # will take ownership of item

keep_arg "QWidget", /::setLayout\s*\(/, 0  # will take ownership of layout
keep_arg "QTreeWidgetItem", /::addChild\(/, 0  # will take ownership of the child
keep_arg "QTreeWidgetItem", /::addChildren\(/, 0  # will take ownership of the children
keep_arg "QTreeWidgetItem", /::insertChild\(/, 1  # will take ownership of the child
keep_arg "QTreeWidgetItem", /::insertChildren\(/, 1  # will take ownership of the children
keep_arg "QGraphicsScene", /::addItem\(/, 0  # will take ownership of the children
keep_arg "QListWidget", /::addItem\(QListWidgetItem/, 0  # will take ownership of the child
keep_arg "QListWidget", /::insertItem\(int.*QListWidgetItem/, 1  # will take ownership of the child
keep_arg "QTreeWidget", /::addTopLevelItem\(/, 0  # will take ownership of the child
keep_arg "QTreeWidget", /::addTopLevelItems\(/, 0  # will take ownership of the child
keep_arg "QTreeWidget", /::insertTopLevelItem\(/, 1  # will take ownership of the child
keep_arg "QTreeWidget", /::insertTopLevelItems\(/, 1  # will take ownership of the child
keep_arg "QTableWidget", /::setItem\(/, 2  # will take ownership of the child
keep_arg "QGraphicsItemGroup", /::addToGroup\(/, 0  # will take ownership of the child
keep_arg "QGraphicsScene", /::addItem\(/, 0 # will take ownership of the item
# constructors with "owner" arguments:
# (NOTE: QObject and QGraphicsItem is handled per specific base-class implementation)
owner_arg "QTreeWidgetItem", /::QTreeWidgetItem\(QTreeWidgetItem\s+\*/, 0 # will construct a new object owned by arg #0
owner_arg "QTreeWidgetItem", /::QTreeWidgetItem\(QTreeWidget\s+\*/, 0 # will construct a new object owned by arg #0
owner_arg "QListWidgetItem", /::QListWidgetItem\(QListWidget\s+\*/, 0 # will construct a new object owned by arg #0
owner_arg "QObject", /::setParent\(QObject\s+\*/, 0 # will make self owned by arg #0
owner_arg "QWidget", /::setParent\(QWidget\s+\*/, 0 # will make self owned by arg #0
# this would make sense, but the pointer is const: so how can setItemPrototype take
# over ownership of it?
# keep_arg "QTableWidget", /::setItemPrototype\(/, 0  # will take ownership of the child
return_new "QLayout", /::takeAt/   # returns a free object
return_new "QBoxLayout", /::takeAt/   # returns a free object
return_new "QFormLayout", /::takeAt/   # returns a free object
return_new "QGridLayout", /::takeAt/   # returns a free object
return_new "QStackedLayout", /::takeAt/   # returns a free object
return_new "QStandardItem", /::take/   # returns a free object
return_new "QStandardItemModel", /::take/   # returns a free object
return_new "QTreeWidgetItem", /::take/   # returns a free object
return_new "QTableWidget", /::take/   # returns a free object
return_new "QTreeWidget", /::take/   # returns a free object
return_new "QListWidget", /::take/   # returns a free object
return_new "QScrollArea", /::takeWidget\(/   # returns a free object

rename "QPrintDialog", /QPrintDialog::accepted\(QPrinter/, "accepted_sig"

# special implementations:

drop_method "QApplication", /QApplication::QApplication/ # uses char **
add_native_qapp_ctor_impl("QApplication")

no_imports "QItemSelection"  # base class is a template. TODO: provide a solution (i.e. additional manual declarations)
no_imports "QPageSetupDialog"  # base class is a QAbstractPageSetupDialog which is not readily available
# QAccessibleBridge not supported on Windows
# no_imports "QAccessibleBridgePlugin","QAccessibleBridgeFactoryInterface" # base class is a QAbstractPageSetupDialog which is not readily available
# no_imports "QAccessiblePlugin","QAccessibleFactoryInterface" # base class is a QAbstractPageSetupDialog which is not readily available
no_imports "QIconEnginePlugin","QIconEngineFactoryInterface" # base class is not readily available
no_imports "QIconEnginePluginV2","QIconEngineFactoryInterfaceV2" # base class is not readily available
no_imports "QImageIOPlugin","QImageIOHandlerFactoryInterface" # base class is not readily available
no_imports "QInputContextPlugin","QInputContextFactoryInterface" # base class is not readily available
no_imports "QStylePlugin","QStyleFactoryInterface" # base class is not readily available

final_class "QAccessible"  # because navigate cannot be implemented
# QAccessibleBridge not supported on Windows
# final_class "QAccessibleBridge"  # because navigate cannot be implemented
# final_class "QAccessibleBridgePlugin"  # because navigate cannot be implemented
final_class "QAccessibleEvent"  # because navigate cannot be implemented
final_class "QAccessibleInterface"  # because navigate cannot be implemented
final_class "QAccessibleObject"  # because navigate cannot be implemented
# Strange inheritance (through a intermediate struct) and probably never needed:
# final_class "QAccessiblePlugin"  # because navigate cannot be implemented
final_class "QAccessibleWidget"  # because navigate cannot be implemented

# --------------------------------------------------------------
# QtXml

drop_method "QXmlReader", /QXmlReader::parse\(.*QXmlInputSource\s*&/ # Clashes with pointer version
drop_method "QXmlStreamReader", /QXmlStreamReader::QXmlStreamReader\(.*const\s+char\s*\*/ # Clashes with QString version
drop_method "QXmlStreamReader", /QXmlStreamReader::addData\(.*const\s+char\s*\*/ # Clashes with QString version
drop_method "QXmlStreamStringRef", /QXmlStreamStringRef::QXmlStreamStringRef\(.*const\s+char\s*\*/ # Clashes with QString version
drop_method "QXmlAttributes", /QXmlAttributes::value\(\s*const\s+QLatin1String/ # QLatin1String not available
drop_method "QXmlAttributes", /QXmlAttributes::index\(\s*const\s+QLatin1String/ # QLatin1String not available
drop_method "QXmlInputSource", /QXmlInputSource::setData\(.*QByteArray/ # clashes with QString version
drop_method "QXmlEntityResolver", /QXmlEntityResolver::resolveEntity/ # requires pointer return value
drop_method "QXmlDefaultHandler", /QXmlDefaultHandler::resolveEntity/ # requires pointer return value
drop_method "QXmlSimpleReader", /QXmlSimpleReader::parse\(.*QXmlInputSource\s*&/ # clashes with QXmlInputSource * version
rename "QDomElement", /QDomElement::setAttribute\(.*qulonglong/, "setAttribute_ull|attribute_ull="
rename "QDomElement", /QDomElement::setAttribute\(.*qlonglong/, "setAttribute_ll|attribute_ll="
rename "QDomElement", /QDomElement::setAttribute\(.*unsigned int/, "setAttribute_ui|attribute_ui="
rename "QDomElement", /QDomElement::setAttribute\(.*int value/, "setAttribute_i|attribute_i="
rename "QDomElement", /QDomElement::setAttribute\(.*double value/, "setAttribute_d|attribute_d="
rename "QDomElement", /QDomElement::setAttribute\(.*float value/, "setAttribute_f|attribute_f="
rename "QDomElement", /QDomElement::setAttributeNS\(.*qulonglong/, "setAttributeNS_ull|attributeNS_ull="
rename "QDomElement", /QDomElement::setAttributeNS\(.*qlonglong/, "setAttributeNS_ll|attributeNS_ll="
rename "QDomElement", /QDomElement::setAttributeNS\(.*unsigned int/, "setAttributeNS_ui|attributeNS_ui="
rename "QDomElement", /QDomElement::setAttributeNS\(.*int value/, "setAttributeNS_i|attributeNS_i="
rename "QDomElement", /QDomElement::setAttributeNS\(.*double value/, "setAttributeNS_d|attributeNS_d="
rename "QDomElement", /QDomElement::setAttributeNS\(.*float value/, "setAttributeNS_f|attributeNS_f="
drop_method "QDomDocument", /QDomDocument::setContent\(const\s+QByteArray/ # clashes with QString version

# --------------------------------------------------------------
# QtNetwork

drop_method "QUrlInfo", /QUrlInfo::QUrlInfo\(.*permissions/ # too many arguments (13)
drop_method "QHostAddress", /QHostAddress::QHostAddress\(\s*quint8\s*\*/ # requires char *, a string version is available for IPv6
drop_method "QHostAddress", /QHostAddress::QHostAddress\(\s*const\s+QIPv6Address/ # requires QIPv6Address struct, a string version is available for IPv6
drop_method "QHostAddress", /QHostAddress::QHostAddress\(\s*const\s+sockaddr/ # requires sockaddr struct, a string version is available for IPv6
drop_method "QHostAddress", /QHostAddress::setAddress\(\s*quint8\s*\*/ # requires char *, a string version is available for IPv6
drop_method "QHostAddress", /QHostAddress::setAddress\(\s*const\s+QIPv6Address/ # requires QIPv6Address struct, a string version is available for IPv6
drop_method "QHostAddress", /QHostAddress::setAddress\(\s*const\s+sockaddr/ # requires sockaddr struct, a string version is available for IPv6
drop_method "QHostAddress", /QHostAddress::toIPv6Address\(/ # requires QIPv6Address struct
def_alias "QHostAddress", /toString\(/, "to_s"
drop_method "QNetworkCacheMetaData", /QNetworkCacheMetaData::attributes/ # requires Hash
drop_method "QNetworkCacheMetaData", /QNetworkCacheMetaData::setAttributes/ # requires Hash
drop_method "QSslCertificate", /QSslCertificate::alternateSubjectNames/ # requires MultiMap
drop_method "QFtp", /QFtp::read\(/ # requires char * - readAll may be an alternative. TODO: implement a real alternative!
drop_method "QUdpSocket", /QUdpSocket::readDatagram/ # requires "char *" - TODO: provide an alternative, because otherwise there is none!

rename "QHostAddress", /::QHostAddress\(quint/, "new_ip4"  # disambiguator
rename "QHostAddress", /::QHostAddress\(QHostAddress::SpecialAddress/, "new_special"  # disambiguator
rename "QLocalSocket", /::error\(QLocalSocket::LocalSocketError/, "error_sig"  # disambiguator
rename "QNetworkReply", /::error\(QNetworkReply::NetworkError/, "error_sig"  # disambiguator
rename "QAbstractSocket", /::error\(QAbstractSocket::SocketError/, "error_sig"  # disambiguator
rename "QSslSocket", /::sslErrors\(const\s+QList/, "sslErrors_sig"  # disambiguator

final_class "QAbstractSocket"  # because readData cannot be reimplemented 
final_class "QTcpSocket"  # because readData cannot be reimplemented 
final_class "QUdpSocket"  # because readData cannot be reimplemented 
final_class "QLocalSocket"  # because readData cannot be reimplemented 
final_class "QNetworkReply"  # because readData cannot be reimplemented 
final_class "QSslSocket"  # because readData cannot be reimplemented 

# --------------------------------------------------------------
# QtSql

include "QSql", [ "<QtSql>" ]

drop_class "QSqlDriverCreator" # is a template
drop_class "QSqlDriverPlugin" # not required ?

# --------------------------------------------------------------
# QtDesigner

drop_method "QFormBuilder", /QFormBuilder::customWidgets\(\s*\)/ # Requires QDesignerCustomWidgetInterface which is not (yet) available

return_new "QAbstractFormBuilder", /::load/   # returns a free object

no_copy_ctor "QAbstractFormBuilder"
no_copy_ctor "QFormBuilder"

final_class "QAbstractFormBuilder"  # requires a lot of Dom* classes
final_class "QFormBuilder"  # requires a lot of Dom* classes

# --------------------------------------------------------------

no_default_ctor "QDirIterator"
no_default_ctor "QUnixPrintWidget"
no_default_ctor "QToolBarChangeEvent"
no_default_ctor "QClipboardEvent"
no_default_ctor "QDragResponseEvent"
no_default_ctor "QAbstractPageSetupDialog"
no_default_ctor "QSqlResult"
no_default_ctor "QCryptographicHash"
no_default_ctor "QAbstractPrintDialog"
no_default_ctor "QSyntaxHighlighter"
no_default_ctor "QAbstractTextDocumentLayout"
no_default_ctor "QAccessibleEvent"
no_default_ctor "QAccessibleWidget"
no_default_ctor "QTouchEvent"
no_default_ctor "QAction"
no_default_ctor "QActionEvent"
no_default_ctor "QActionGroup"
no_default_ctor "QApplication"
no_default_ctor "QBoxLayout"
no_default_ctor "QClipboard"
no_default_ctor "QContextMenuEvent"
no_default_ctor "QDoubleValidator"
no_default_ctor "QDrag"
no_default_ctor "QDragEnterEvent"
no_default_ctor "QDragMoveEvent"
no_default_ctor "QDropEvent"
no_default_ctor "QFileOpenEvent"
no_default_ctor "QFocusEvent"
no_default_ctor "QFontInfo"
no_default_ctor "QFontMetrics"
no_default_ctor "QFontMetricsF"
no_default_ctor "QGraphicsSceneEvent"
no_default_ctor "QGestureEvent"
no_default_ctor "QGraphicsAnchor"
no_default_ctor "QHeaderView"
no_default_ctor "QHelpEvent"
no_default_ctor "QHoverEvent"
no_default_ctor "QInputEvent"
no_default_ctor "QItemSelectionModel"
no_default_ctor "QKeyEvent"
no_default_ctor "QMouseEvent"
no_default_ctor "QMoveEvent"
no_default_ctor "QPaintEvent"
no_default_ctor "QPlainTextDocumentLayout"
no_default_ctor "QRegExpValidator"
no_default_ctor "QResizeEvent"
no_default_ctor "QRubberBand"
no_default_ctor "QSessionManager"
no_default_ctor "QShortcut"
no_default_ctor "QShortcutEvent"
no_default_ctor "QSizeGrip"
no_default_ctor "QSound"
no_default_ctor "QSpacerItem"
no_default_ctor "QSplitterHandle"
no_default_ctor "QStatusTipEvent"
no_default_ctor "QTabletEvent"
no_default_ctor "QTextBlockGroup"
no_default_ctor "QTextFrame"
no_default_ctor "QTextList"
no_default_ctor "QTextObject"
no_default_ctor "QTextTable"
no_default_ctor "QTreeWidgetItemIterator"
no_default_ctor "QWhatsThisClickedEvent"
no_default_ctor "QWheelEvent"
no_default_ctor "QWidgetAction"
no_default_ctor "QWidgetItem"
no_default_ctor "QWindowStateChangeEvent"
no_default_ctor "QChildEvent"
no_default_ctor "QCoreApplication"
no_default_ctor "QDynamicPropertyChangeEvent"
no_default_ctor "QEvent"
no_default_ctor "QReadLocker"
no_default_ctor "QSocketNotifier"
no_default_ctor "QTimerEvent"
no_default_ctor "QWriteLocker"
no_default_ctor "QTextDecoder"
no_default_ctor "QTextEncoder"
no_default_ctor "QColormap"
no_default_ctor "QToolTip"
no_default_ctor "QWhatsThis"
no_default_ctor "QLibraryInfo"
no_default_ctor "QAbstractSocket"
no_default_ctor "QInputMethodEvent::Attribute"

no_copy_ctor "QGraphicsLayoutItem"
no_copy_ctor "QCDEStyle"
no_copy_ctor "QMotifStyle"
no_copy_ctor "QWindowsStyle"
no_copy_ctor "QCleanlooksStyle"
# no_copy_ctor "QGtkStyle"
no_copy_ctor "QDateTimeEdit"
no_copy_ctor "QDateEdit"
no_copy_ctor "QLayout"
no_copy_ctor "QDialog"
no_copy_ctor "QAbstractPageSetupDialog"
no_copy_ctor "QAbstractTextDocumentLayout"
no_copy_ctor "QPageSetupDialog"
no_copy_ctor "QPainterPathStroker"
no_copy_ctor "QGraphicsSceneContextMenuEvent"
no_copy_ctor "QGraphicsSceneDragDropEvent"
no_copy_ctor "QGraphicsSceneHelpEvent"
no_copy_ctor "QGraphicsSceneHoverEvent"
no_copy_ctor "QGraphicsSceneMouseEvent"
no_copy_ctor "QGraphicsSceneMoveEvent"
no_copy_ctor "QGraphicsSceneResizeEvent"
no_copy_ctor "QGraphicsSceneWheelEvent"
no_copy_ctor "QGraphicsSceneEvent"
no_copy_ctor "QPlainTextDocumentLayout"
no_copy_ctor "QPrintDialog"
no_copy_ctor "QPrintPreviewDialog"
no_copy_ctor "QPrintPreviewWidget"
no_copy_ctor "QStandardItem"
no_copy_ctor "QTimeEdit"
no_copy_ctor "QEventLoop"
no_copy_ctor "QFileSystemWatcher"
no_copy_ctor "QResource"
no_copy_ctor "QThread"
no_copy_ctor "QRubberBand"
no_copy_ctor "QSound"
no_copy_ctor "QCoreApplication"
no_copy_ctor "QLayout"
no_copy_ctor "QSessionManager"
no_copy_ctor "QShortcut"
no_copy_ctor "QFormLayout"
no_copy_ctor "QXmlParseException"
no_copy_ctor "QNetworkAccessManager"

# --------------------------------------------------------------
# QtUiTools

include "QUiLoader", [ "<QUiLoader>", "<QDir>", "<QAction>", "<QActionGroup>", "<QLayout>", "<QWidget>", "<QChildEvent>", "<QEvent>", "<QTimerEvent>" ]

# --------------------------------------------------------------
# events and properties
# NOTE: to generate these files use scripts/mkqtdecl/mkqtdecl_extract_props.rb
# and scripts/mkqtdecl/mkqtdecl_extract_signals.rb

load "mkqtdecl.events"
load "mkqtdecl.properties"

