QSA 1.2.0 is a minor release which is a port of QSA 1.1.3 from Qt 3 to
Qt 4. It provides no new features but a significant part of the engine
is rewritten to match the meta object model of Qt 4. There have also
been made some changes to the public API to better fit QSA 1.2.0 into
the Qt 4 programming world.

Some minor changes have been made to the public API to accomodate for
changes in Qt 4:

********************************************************************************

QSArgument is redundant as QVariant in Qt 4 supports QObject*,
QWidget* and void*, and any other user defined type. The same is thus
true for QSArgumentList which is replaced by QVariantList. The
following replacements can be used to access the old constructions.

QSArgument::variant() -> the variant itself
QSArgument::qobject() -> qvariant_cast<QObject *>(variant);
QSArgument::ptr() -> qvariant_cast<PointerType or void *>(variant);
QSArgument::type() -> QVariant::type()
QSArgument::typeName() -> QVariant::typeName();

Please note that qvariant_cast for arbitrary pointer types requires
the type to be registered with QMetaType.

QSArgument::Invalid -> QVariant::Invalid
QSArgument::Variant -> not relevant anymore
QSArgument::QObjectPtr -> QMetaType::QObjectStar
QSArgument::VoidPointer -> QMetaType::VoidStar or type for registered metatype

********************************************************************************

In Qt 3 all meta objects were registered in a global map so that one
could always query for a QMetaObject through its name. This map was in
QSA used to validate cast for QObject based subclasses objects passed
as return values of slots.

In Qt 4 this map does not exist anymore so QSA does not have this ability
off hand. This error will manifest itself if you have a slot returning
a QObject or QWidget subclass.

To compensate for the global map, we provide the possibility to
register meta objects with the QSA runtime so that these checks can
still be made using the function:

QSInterpterer::registerMetaobject();

Most relevant QObject subclasses from the Qt library are already
preregistered with the QSA runtime.

This also introduces a minor API change to compensate for the new
model:

Replaced functions:

QSObjectFactory::registerClass(const QString &className, 
                               QObject *staticInstance);
QSObjectFactory::registerClass(const QString &className,
                               const QString &cppClassName,
                               QObject *staticInstance);
with

QSObjectFactory::registerClass(const QString &className,
                               const QMetaObject *metaObject
                               QObject *staticInstance);

********************************************************************************

QSStackTrace::toString() -> QSinterpreter::stackTraceString();

********************************************************************************

The function: 
Q3TextEdit *QSEditor::editor() has been removed.

********************************************************************************

The Tulip tool classes are used in the public API rather than the Qt 3
container classes, QValueList, QPtrList etc.

********************************************************************************
********************************************************************************

QSA 1.2.0 also inherits several changes from 1.1.3

********************************************************************************
Interpreter/Language:

  * using var statements inside a with statement would crash. This
  could not be made to work due to architecual limitations so this
  will now produce a parse error.

  * Bugfix: internal debug() and print() functions would sometimes
    produce faulty output

  * Bugfix: millisecond presicion of Date objects was sometimes not
    maintained properly

  * Bugfix: slots taking QStringLists and QValueList<QVariant> where
  not resolved correctly.

********************************************************************************
QSWorkbench:
 
  * Bugfix: Two workbench instances could not be active simultaneously.


********************************************************************************
QSInterpreter:

  * Bugfix: interpreter would sometimes crash when returning a QObject
  that was deleted.  

********************************************************************************
QSUtilFactory:

  * Process.stdout and Process.stderr would sometimes contain junk at
    the end.

********************************************************************************
QSEditor:

  * Bugfix: it was not possible to undo commenting of code.
