From 74b19ac00c70a32f0cfe25893ac2e32750e527dd Mon Sep 17 00:00:00 2001
From: Tom Cooksey <thomas.cooksey@nokia.com>
Date: Mon, 11 May 2009 10:15:22 +0200
Subject: Only link against opengles .LIB files if on WinCE

Task-number: 251685
Reviewed-by: mauricek
---
 examples/opengl/hellogl_es/hellogl_es.pro | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/examples/opengl/hellogl_es/hellogl_es.pro b/examples/opengl/hellogl_es/hellogl_es.pro
index 7459456..3168743 100644
--- a/examples/opengl/hellogl_es/hellogl_es.pro
+++ b/examples/opengl/hellogl_es/hellogl_es.pro
@@ -20,11 +20,13 @@ HEADERS += bubble.h
 RESOURCES += texture.qrc
 QT += opengl
 
-contains(QT_CONFIG,opengles1) {
-        QMAKE_LIBS += "libGLES_CM.lib"
-}
-contains(QT_CONFIG,opengles1cl) {
-        QMAKE_LIBS += "libGLES_CL.lib"
+wince*:{
+    contains(QT_CONFIG,opengles1) {
+            QMAKE_LIBS += "libGLES_CM.lib"
+    }
+    contains(QT_CONFIG,opengles1cl) {
+            QMAKE_LIBS += "libGLES_CL.lib"
+    }
 }
 
 # install
-- 
cgit v0.12


From 2120b410752d6777430c33807548022722c5a9ad Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Mon, 11 May 2009 11:31:42 +0200
Subject: Add a license file for the XML Conformance Testsuite.

The source of the license text is
http://www.w3.org/Consortium/Legal/copyright-software-19980720

Reviewed-by: Trust Me
---
 tests/auto/qxmlstream/XML-Test-Suite-LICENSE.txt | 59 ++++++++++++++++++++++++
 1 file changed, 59 insertions(+)
 create mode 100644 tests/auto/qxmlstream/XML-Test-Suite-LICENSE.txt

diff --git a/tests/auto/qxmlstream/XML-Test-Suite-LICENSE.txt b/tests/auto/qxmlstream/XML-Test-Suite-LICENSE.txt
new file mode 100644
index 0000000..bd84fae
--- /dev/null
+++ b/tests/auto/qxmlstream/XML-Test-Suite-LICENSE.txt
@@ -0,0 +1,59 @@
+The XML testsuite available here is a copy of the Extensible Markup
+Language (XML) Conformance Test Suites provided by W3C. Please see
+http://www.w3.org/XML/Test/ for updates and other information.
+
+These files are licensed under the W3C Software License (19980720),
+reproduced below:
+
+---
+W3C® SOFTWARE NOTICE AND LICENSE
+
+Copyright © 1994-2002 World Wide Web Consortium, (Massachusetts
+Institute of Technology, Institut National de Recherche en
+Informatique et en Automatique, Keio University). All Rights
+Reserved. http://www.w3.org/Consortium/Legal/
+
+This W3C work (including software, documents, or other related items)
+is being provided by the copyright holders under the following
+license. By obtaining, using and/or copying this work, you (the
+licensee) agree that you have read, understood, and will comply with
+the following terms and conditions:
+
+Permission to use, copy, modify, and distribute this software and its
+documentation, with or without modification, for any purpose and
+without fee or royalty is hereby granted, provided that you include
+the following on ALL copies of the software and documentation or
+portions thereof, including modifications, that you make:
+
+ 1. The full text of this NOTICE in a location viewable to users of
+    the redistributed or derivative work.
+
+ 2. Any pre-existing intellectual property disclaimers, notices, or
+    terms and conditions. If none exist, a short notice of the
+    following form (hypertext is preferred, text is permitted) should
+    be used within the body of any redistributed or derivative code:
+    "Copyright © [$date-of-software] World Wide Web Consortium,
+    (Massachusetts Institute of Technology, Institut National de
+    Recherche en Informatique et en Automatique, Keio University). All
+    Rights Reserved. http://www.w3.org/Consortium/Legal/"
+
+ 3. Notice of any changes or modifications to the W3C files, including
+    the date changes were made. (We recommend you provide URIs to the
+    location from which the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
+HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
+DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
+TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
+DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in
+advertising or publicity pertaining to the software without specific,
+written prior permission. Title to copyright in this software and any
+associated documentation will at all times remain with copyright
+holders.
-- 
cgit v0.12


From 5299240db14579960358edeebfc72fcef905af13 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Mon, 11 May 2009 11:34:10 +0200
Subject: Make sure syncqt creates the Phonon/Global file.

The standard Phonon package has this file and it points to
phononnamespace.h
---
 src/3rdparty/phonon/phonon/phononnamespace.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/3rdparty/phonon/phonon/phononnamespace.h b/src/3rdparty/phonon/phonon/phononnamespace.h
index 0bbf4f4..2492ee6 100644
--- a/src/3rdparty/phonon/phonon/phononnamespace.h
+++ b/src/3rdparty/phonon/phonon/phononnamespace.h
@@ -25,6 +25,11 @@
 
 #include "phonon_export.h"
 
+#ifdef __QT_SYNCQT__
+// Tell syncqt to create a "Global" header here
+#pragma qt_class(Phonon::Global)
+#endif
+
 /**
  * Helper macro that can be used like
  * \code
-- 
cgit v0.12


From 887b6074e149d5302316eb57b908c051955fa4f6 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Mon, 11 May 2009 13:18:27 +0200
Subject: Clean up old Qt 3 stuff.

Reviewed-By: TrustMe
---
 util/install/archive/archive.pro               |    9 -
 util/install/archive/qarchive.cpp              |  471 -----
 util/install/archive/qarchive.h                |  138 --
 util/install/configure_installer.cache         |   30 -
 util/install/install.pro                       |    9 -
 util/install/keygen/keygen.pro                 |   13 -
 util/install/keygen/keyinfo.cpp                |  164 --
 util/install/keygen/keyinfo.h                  |  123 --
 util/install/keygen/main.cpp                   |  250 ---
 util/install/mac/licensedlg.ui                 |  134 --
 util/install/mac/licensedlgimpl.cpp            |   65 -
 util/install/mac/licensedlgimpl.h              |   55 -
 util/install/mac/mac.pro                       |   11 -
 util/install/mac/main.cpp                      |  117 --
 util/install/mac/unpackage.icns                |  Bin 29372 -> 0 bytes
 util/install/mac/unpackdlg.ui                  |  330 ---
 util/install/mac/unpackdlgimpl.cpp             |  200 --
 util/install/mac/unpackdlgimpl.h               |   63 -
 util/install/package/main.cpp                  |  397 ----
 util/install/package/package.pro               |   25 -
 util/install/win/archive.cpp                   |  115 --
 util/install/win/archive.h                     |   49 -
 util/install/win/dialogs/folderdlg.ui          |  184 --
 util/install/win/dialogs/folderdlgimpl.cpp     |  119 --
 util/install/win/dialogs/folderdlgimpl.h       |   65 -
 util/install/win/environment.cpp               |  362 ----
 util/install/win/environment.h                 |   73 -
 util/install/win/globalinformation.cpp         |  168 --
 util/install/win/globalinformation.h           |   93 -
 util/install/win/install-edu.rc                |    3 -
 util/install/win/install-eval.rc               |    3 -
 util/install/win/install-noncommercial.rc      |    4 -
 util/install/win/install-qsa.rc                |    5 -
 util/install/win/install.ico                   |  Bin 2998 -> 0 bytes
 util/install/win/install.rc                    |    4 -
 util/install/win/main.cpp                      |  100 -
 util/install/win/pages/buildpage.ui            |   92 -
 util/install/win/pages/configpage.ui           |  474 -----
 util/install/win/pages/finishpage.ui           |   63 -
 util/install/win/pages/folderspage.ui          |  259 ---
 util/install/win/pages/licenseagreementpage.ui |  202 --
 util/install/win/pages/licensepage.ui          |  264 ---
 util/install/win/pages/optionspage.ui          |  503 -----
 util/install/win/pages/pages.cpp               |  349 ----
 util/install/win/pages/pages.h                 |  226 ---
 util/install/win/pages/progresspage.ui         |   78 -
 util/install/win/pages/sidedecoration.ui       |  108 -
 util/install/win/pages/sidedecorationimpl.cpp  |  205 --
 util/install/win/pages/sidedecorationimpl.h    |   70 -
 util/install/win/pages/winintropage.ui         |   39 -
 util/install/win/qt.arq                        |    3 -
 util/install/win/resource.cpp                  |  162 --
 util/install/win/resource.h                    |   77 -
 util/install/win/setupwizardimpl.cpp           | 2571 ------------------------
 util/install/win/setupwizardimpl.h             |  276 ---
 util/install/win/setupwizardimpl_config.cpp    | 1564 --------------
 util/install/win/shell.cpp                     |  472 -----
 util/install/win/shell.h                       |   87 -
 util/install/win/uninstaller/quninstall.pro    |    7 -
 util/install/win/uninstaller/uninstall.ui      |  167 --
 util/install/win/uninstaller/uninstaller.cpp   |  142 --
 util/install/win/uninstaller/uninstallimpl.cpp |   75 -
 util/install/win/uninstaller/uninstallimpl.h   |   54 -
 util/install/win/win.pro                       |  136 --
 64 files changed, 12676 deletions(-)
 delete mode 100644 util/install/archive/archive.pro
 delete mode 100644 util/install/archive/qarchive.cpp
 delete mode 100644 util/install/archive/qarchive.h
 delete mode 100644 util/install/configure_installer.cache
 delete mode 100644 util/install/install.pro
 delete mode 100644 util/install/keygen/keygen.pro
 delete mode 100644 util/install/keygen/keyinfo.cpp
 delete mode 100644 util/install/keygen/keyinfo.h
 delete mode 100644 util/install/keygen/main.cpp
 delete mode 100644 util/install/mac/licensedlg.ui
 delete mode 100644 util/install/mac/licensedlgimpl.cpp
 delete mode 100644 util/install/mac/licensedlgimpl.h
 delete mode 100644 util/install/mac/mac.pro
 delete mode 100644 util/install/mac/main.cpp
 delete mode 100644 util/install/mac/unpackage.icns
 delete mode 100644 util/install/mac/unpackdlg.ui
 delete mode 100644 util/install/mac/unpackdlgimpl.cpp
 delete mode 100644 util/install/mac/unpackdlgimpl.h
 delete mode 100644 util/install/package/main.cpp
 delete mode 100644 util/install/package/package.pro
 delete mode 100644 util/install/win/archive.cpp
 delete mode 100644 util/install/win/archive.h
 delete mode 100644 util/install/win/dialogs/folderdlg.ui
 delete mode 100644 util/install/win/dialogs/folderdlgimpl.cpp
 delete mode 100644 util/install/win/dialogs/folderdlgimpl.h
 delete mode 100644 util/install/win/environment.cpp
 delete mode 100644 util/install/win/environment.h
 delete mode 100644 util/install/win/globalinformation.cpp
 delete mode 100644 util/install/win/globalinformation.h
 delete mode 100644 util/install/win/install-edu.rc
 delete mode 100644 util/install/win/install-eval.rc
 delete mode 100644 util/install/win/install-noncommercial.rc
 delete mode 100644 util/install/win/install-qsa.rc
 delete mode 100644 util/install/win/install.ico
 delete mode 100644 util/install/win/install.rc
 delete mode 100644 util/install/win/main.cpp
 delete mode 100644 util/install/win/pages/buildpage.ui
 delete mode 100644 util/install/win/pages/configpage.ui
 delete mode 100644 util/install/win/pages/finishpage.ui
 delete mode 100644 util/install/win/pages/folderspage.ui
 delete mode 100644 util/install/win/pages/licenseagreementpage.ui
 delete mode 100644 util/install/win/pages/licensepage.ui
 delete mode 100644 util/install/win/pages/optionspage.ui
 delete mode 100644 util/install/win/pages/pages.cpp
 delete mode 100644 util/install/win/pages/pages.h
 delete mode 100644 util/install/win/pages/progresspage.ui
 delete mode 100644 util/install/win/pages/sidedecoration.ui
 delete mode 100644 util/install/win/pages/sidedecorationimpl.cpp
 delete mode 100644 util/install/win/pages/sidedecorationimpl.h
 delete mode 100644 util/install/win/pages/winintropage.ui
 delete mode 100644 util/install/win/qt.arq
 delete mode 100644 util/install/win/resource.cpp
 delete mode 100644 util/install/win/resource.h
 delete mode 100644 util/install/win/setupwizardimpl.cpp
 delete mode 100644 util/install/win/setupwizardimpl.h
 delete mode 100644 util/install/win/setupwizardimpl_config.cpp
 delete mode 100644 util/install/win/shell.cpp
 delete mode 100644 util/install/win/shell.h
 delete mode 100644 util/install/win/uninstaller/quninstall.pro
 delete mode 100644 util/install/win/uninstaller/uninstall.ui
 delete mode 100644 util/install/win/uninstaller/uninstaller.cpp
 delete mode 100644 util/install/win/uninstaller/uninstallimpl.cpp
 delete mode 100644 util/install/win/uninstaller/uninstallimpl.h
 delete mode 100644 util/install/win/win.pro

diff --git a/util/install/archive/archive.pro b/util/install/archive/archive.pro
deleted file mode 100644
index e313a4a..0000000
--- a/util/install/archive/archive.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TEMPLATE = lib
-CONFIG += staticlib
-CONFIG += qt x11
-CONFIG -= dll
-TARGET = arq
-
-SOURCES += qarchive.cpp ../keygen/keyinfo.cpp
-HEADERS += qarchive.h
-!zlib:unix:LIBS += -lz
diff --git a/util/install/archive/qarchive.cpp b/util/install/archive/qarchive.cpp
deleted file mode 100644
index dd51c65..0000000
--- a/util/install/archive/qarchive.cpp
+++ /dev/null
@@ -1,471 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "qarchive.h"
-#include <qdatastream.h>
-#include <qfileinfo.h>
-#include <qdir.h>
-#include <qapplication.h>
-#include "../../../src/3rdparty/zlib/zlib.h"
-#include "../keygen/keyinfo.h"
-#ifdef Q_OS_UNIX
-#  include <sys/stat.h>
-#  include <unistd.h>
-#  include <sys/types.h>
-#  include <utime.h>
-#endif
-
-enum ChunkType {
-    ChunkDirectory	= 0,
-    ChunkFile		= 1,
-    ChunkSymlink	= 2,
-    ChunkBeginHeader	= 3,
-    ChunkEndHeader	= 4
-};
-
-static bool createDir( const QString& fullPath )
-{
-    QStringList hierarchy = QStringList::split( QDir::separator(), fullPath );
-    QString pathComponent, tmpPath;
-    QDir dirTmp;
-#ifdef Q_OS_UNIX
-    dirTmp = "/";
-#endif
-
-    for( QStringList::Iterator it = hierarchy.begin(); it != hierarchy.end(); ++it ) {
-	pathComponent = *it + QDir::separator();
-	tmpPath += pathComponent;
-	if (!dirTmp.exists(tmpPath) && !dirTmp.mkdir(tmpPath))
-            return false;
-    }
-    return true;
-}
-
-QArchive::QArchive( const QString& archivePath )
-{
-    setPath( archivePath );
-
-    bufferSize = 512 * 1024;
-}
-
-QArchive::~QArchive()
-{
-}
-
-void QArchive::setPath( const QString& archivePath )
-{
-    QString fullName = archivePath;
-    if( fullName.right( 4 ) != ".arq" )
-	fullName += ".arq";
-    arcFile.setName( fullName );
-}
-
-bool QArchive::open( int mode )
-{
-    switch( mode ) {
-    case IO_ReadOnly:
-	// Fallthrough intentional
-    case IO_WriteOnly:
-	if( arcFile.open( mode ) )
-	    return true;
-	break;
-    }
-    return false;
-}
-
-void QArchive::close()
-{
-    if( arcFile.isOpen() )
-	arcFile.close();
-}
-
-bool QArchive::writeFile( const QString& fileName, const QString& localPath )
-{
-    if( arcFile.isOpen() ) {
-	QDataStream outStream( &arcFile );
-	QFileInfo fi( fileName );
-
-	QFile inFile( fi.absFilePath() );
-	QByteArray inBuffer;
-	QByteArray outBuffer( bufferSize );
-	z_stream ztream;
-	bool continueCompressing;
-
-	if(symbolicLinks() && fi.isSymLink()) {
-	    outStream << (int)ChunkSymlink;
-	    outStream << fi.fileName().latin1();
-	    outStream << fi.readLink().latin1();
-	} else if( inFile.open( IO_ReadOnly ) ) {
-	    if( inBuffer.resize( fi.size() ) ) {
-		outStream << (int)ChunkFile;
-		outStream << fi.fileName().latin1();
-		outStream << fi.lastModified();
-		{
-		    int perm = -1;
-#ifdef Q_OS_UNIX
-		    struct stat st;
-		    if(!::stat(fi.filePath().latin1(), &st))
-			perm = (int)st.st_mode;
-#endif
-		    outStream << perm;
-		}
-	        if( verbosityMode & Source )
-		    emit operationFeedback( "Deflating " + fi.absFilePath() + "..." );
-		else if( verbosityMode & Destination )
-		    emit operationFeedback( "Deflating " + localPath + "/" + fi.fileName() + "..." );
-		ztream.next_in = (unsigned char*)inBuffer.data();
-		ztream.avail_in = inBuffer.size();
-		ztream.total_in = 0;
-		ztream.next_out = (unsigned char*)outBuffer.data();
-		ztream.avail_out = outBuffer.size();
-		ztream.total_out = 0;
-		ztream.msg = NULL;
-		ztream.zalloc = (alloc_func)NULL;
-		ztream.zfree = (free_func)NULL;
-		ztream.opaque = (voidpf)NULL;
-		ztream.data_type = Z_BINARY;
-		deflateInit( &ztream, 9 );
-		if ( inBuffer.data() )
-		    inFile.readBlock( inBuffer.data(), inBuffer.size() );
-
-		continueCompressing = true;
-		while( continueCompressing ) {
-		    if(qApp)
-			qApp->processEvents();
-		    continueCompressing = ( deflate( &ztream, Z_FINISH ) == Z_OK );
-		    if( !ztream.avail_out ) {
-			if( !outBuffer.resize( outBuffer.size() + bufferSize ) )
-			    qFatal( "Could not allocate compression buffer!" );
-			ztream.next_out = (unsigned char*)&outBuffer.data()[ ztream.total_out ];
-			ztream.avail_out = bufferSize;
-		    }
-		}
-
-		emit operationFeedback( QString( "done. %1 => %2 (%3%)\n" )
-					.arg( ztream.total_in )
-					.arg( ztream.total_out )
-					.arg( int(
-					    double( ztream.total_out ) / double( ztream.total_in ) * 100 ) ) );
-		deflateEnd( &ztream );
-		// Now write the compressed data to the output
-		outStream << ztream.total_out;
-		outStream.writeRawBytes( outBuffer.data(), ztream.total_out );
-	    }
-	    inFile.close();
-	    return true;
-	} else {
-	    return false;
-	}
-    }
-    return false;
-}
-
-bool QArchive::setDirectory( const QString& dirName )
-{
-    if( arcFile.isOpen() ) {
-	QString fullName = dirName;
-	QDataStream outStream( &arcFile );
-	if( fullName.right( 1 ) != "/" )
-	    fullName += "/";
-	outStream << (int)ChunkDirectory;
-	outStream << fullName.latin1();
-	return true;
-    }
-    return false;
-}
-
-bool QArchive::writeHeader( const QArchiveHeader header )
-{
-    if( arcFile.isOpen() ) {
-	QDataStream outStream( &arcFile );
-	outStream << (int)ChunkBeginHeader;
-	outStream << header.mayorVersion();
-	outStream << header.minorVersion();
-	outStream << header.features();
-	outStream << header.description();
-	outStream << header.extraData;
-	outStream << (int)ChunkEndHeader;
-	return true;
-    }
-    return false;
-}
-
-bool QArchive::writeDir( const QString &dirName1, bool includeLastComponent, const QString &localPath1 )
-{
-    if( arcFile.isOpen() ) {
-	QString localPath = localPath1, dirName = dirName1;
-	if(localPath.right(1) == "/")
-	    localPath.truncate(localPath.length()-1);
-	if(dirName.right(1) == "/")
-	    dirName.truncate(dirName.length()-1);
-
-	QFileInfo fi( dirName );
-
-	if( includeLastComponent )
-	    setDirectory( fi.fileName() );
-	QDir dir( dirName );
-	const QFileInfoList* dirEntries = dir.entryInfoList();
-	QFileInfoListIterator dirIter( *dirEntries );
-	QDataStream outStream( &arcFile );
-	QFileInfo* pFi;
-
-	dirIter.toLast();
-	while( ( pFi = dirIter.current() ) ) {
-	    if( pFi->fileName() != "." && pFi->fileName() != ".." ) {
-		if( pFi->isDir() )
-		    writeDir( pFi->absFilePath(), true, localPath + "/" +
-			      pFi->fileName() ); // Subdirs should always get its name in the archive.
-		else
-		    writeFile( pFi->absFilePath(), localPath );
-	    }
-	    --dirIter;
-	}
-	setDirectory( ".." );
-	return true;
-    }
-    return false;
-}
-
-bool QArchive::writeFileList( const QStringList fileList )
-{
-    for( QStringList::ConstIterator it = fileList.begin(); it != fileList.end(); ++it ) {
-	if( !writeFile( (*it) ) )
-	    return false;
-    }
-    return true;
-}
-
-bool QArchive::writeDirList( const QStringList dirList, bool includeLastComponent )
-{
-    for( QStringList::ConstIterator it = dirList.begin(); it != dirList.end(); ++it ) {
-	QString lastComponent = (*it).mid( (*it).findRev( "/" ) + 1 );
-	if( !writeDir( (*it), includeLastComponent, lastComponent ) )
-	    return false;
-    }
-    return true;
-}
-
-void QArchive::setVerbosity( int verbosity )
-{
-    verbosityMode = verbosity;
-}
-
-QArchiveHeader* QArchive::readArchiveHeader()
-{
-    QDataStream inStream( &arcFile );
-    return readArchiveHeader( &inStream );
-}
-
-/*
-   Reads the archive header and returns it on success. If an error occurs, it
-   returns 0. The caller has to delete the object.
-*/
-QArchiveHeader* QArchive::readArchiveHeader( QDataStream *inStream )
-{
-    int chunktype;
-    QArchiveHeader *header = new QArchiveHeader;
-
-    *inStream >> chunktype;
-    if( chunktype == ChunkBeginHeader ) {
-	*inStream >> header->_mayorVersion;
-	*inStream >> header->_minorVersion;
-	if ( header->mayorVersion()!=1 || header->minorVersion()!=0 ) {
-	    emit operationFeedback( "Incompatible package version" );
-	    delete header;
-	    return 0;
-	}
-	*inStream >> header->_features;
-	*inStream >> header->_description;
-	*inStream >> header->extraData;
-	*inStream >> chunktype;
-	if ( chunktype != ChunkEndHeader ) {
-	    emit operationFeedback( "Invalid package header" );
-	    delete header;
-	    return 0;
-	}
-    } else {
-	emit operationFeedback( "No package header found." );
-	delete header;
-	return 0;
-    }
-    return header;
-}
-
-bool QArchive::readArchive( const QString &outpath, const QString &key )
-{
-    QDataStream inStream( &arcFile );
-    return readArchive( &inStream, outpath, key );
-}
-
-bool QArchive::readArchive( QDataStream *inStream, const QString &outpath, const QString &key )
-{
-    QDataStream outStream;
-    QFile outFile;
-    QDir outDir;
-    QByteArray inBuffer;
-    QByteArray outBuffer( bufferSize );
-    z_stream ztream;
-    bool continueDeCompressing;
-    QString entryName, dirName, symName;
-    int entryLength, chunktype;
-
-    //get the key
-    QArchiveHeader *header = readArchiveHeader( inStream );
-    if ( header == 0 )
-	return false;
-    uint infeatures = featuresForKey( key );
-    if( (header->features() & infeatures) != header->features()) {
-	emit operationFeedback( "Invalid key" );
-	return false;
-    }
-
-    // Set up the initial directory.
-    // If the dir does not exist, try to create it
-    dirName = QDir::toNativeSeparators( outpath );
-    outDir.setPath( dirName );
-    if( !outDir.exists( dirName ) && !createDir( dirName ) )
-	return false;
-    outDir.cd( dirName );
-
-    while(  !inStream->atEnd()  ) {
-	//get our type
-	*inStream >> chunktype;
-	if(chunktype == ChunkDirectory) {
-	    *inStream >> entryLength;
-	    inBuffer.resize( entryLength );
-	    inStream->readRawBytes( inBuffer.data(), entryLength );
-	    entryName = inBuffer.data();
-
-	    if( verbosityMode & Source )
-		emit operationFeedback( "Directory " + entryName + "... " );
-	    if( entryName == "../" ) {
-		outDir.cdUp();
-	    } else {
-		dirName = QDir::toNativeSeparators( outDir.absPath() +
-						   QString( "/" ) + entryName.left( entryName.length() - 1 ) );
-		if( verbosityMode & Destination )
-		    emit operationFeedback( "Directory " + dirName + "... " );
-
-		if( !outDir.exists( dirName ) && !createDir( dirName ) ) {
-		    emit operationFeedback( "Cannot create directory: " + dirName );
-		    return false;
-		}
-		outDir.cd( dirName );
-	    }
-	} else if(chunktype == ChunkFile) {
-	    *inStream >> entryLength;
-	    inBuffer.resize( entryLength );
-	    inStream->readRawBytes( inBuffer.data(), entryLength );
-	    entryName = inBuffer.data();
-
-	    int filePerm;
-	    QDateTime timeStamp;
-	    QString fileName = QDir::toNativeSeparators( outDir.absPath() + QString( "/" ) + entryName );
-	    outFile.setName( fileName );
-	    if( outFile.open( IO_WriteOnly ) ) {
-		*inStream >> timeStamp; 		// Get timestamp from the archive
-		*inStream >> filePerm;
-		outStream.setDevice( &outFile );
-		*inStream >> entryLength;
-		if( verbosityMode & Source )
-		    emit operationFeedback( "Expanding " + entryName + "..." );
-		else if( verbosityMode & Destination )
-		    emit operationFeedback( "Expanding " + fileName + "..." );
-		inBuffer.resize( entryLength );
-		inStream->readRawBytes( inBuffer.data(), entryLength );
-		ztream.next_in = (unsigned char*)inBuffer.data();
-		ztream.avail_in = entryLength;
-		ztream.total_in = 0;
-		ztream.msg = NULL;
-		ztream.zalloc = (alloc_func)0;
-		ztream.zfree = (free_func)0;
-		ztream.opaque = (voidpf)0;
-		ztream.data_type = Z_BINARY;
-		inflateInit( &ztream );
-		continueDeCompressing = true;
-		while( continueDeCompressing ) {
-		    ztream.next_out = (unsigned char*)outBuffer.data();
-		    ztream.avail_out = outBuffer.size();
-		    ztream.total_out = 0;
-		    continueDeCompressing = ( inflate( &ztream, Z_NO_FLUSH ) == Z_OK );
-		    outStream.writeRawBytes( outBuffer.data(), ztream.total_out );
-		}
-		inflateEnd( &ztream );
-		outFile.close();
-#ifdef Q_OS_UNIX
-		QDateTime t; t.setTime_t(0); //epoch
-		struct utimbuf tb;
-		tb.actime = tb.modtime = t.secsTo(timeStamp);
-		utime(fileName.local8Bit(), &tb);
-		if(filePerm != -1)
-		    chmod(fileName.local8Bit(), (mode_t)filePerm);
-#endif
-	    } else {
-		emit operationFeedback( "Cannot open: " + fileName );
-		return false;
-	    }
-	} else if(chunktype == ChunkSymlink) {
-	    *inStream >> entryLength;
-	    inBuffer.resize( entryLength );
-	    inStream->readRawBytes( inBuffer.data(), entryLength );
-	    entryName = inBuffer.data();
-	    QString fileName = QDir::toNativeSeparators( outDir.absPath() + QString( "/" ) + entryName );
-
-	    *inStream >> entryLength;
-	    inBuffer.resize( entryLength );
-	    inStream->readRawBytes( inBuffer.data(), entryLength );
-	    symName = inBuffer.data();
-	    if( verbosityMode & Source )
-		emit operationFeedback( "Linking " + symName + "... " );
-	    else if( verbosityMode & Destination )
-		emit operationFeedback( "Linking " + fileName + "... " );
-#ifdef Q_OS_UNIX
-	    symlink( symName.local8Bit(), fileName.local8Bit() );
-#endif
-	} else {
-	    if( verbosityMode & Source )
-		emit operationFeedback( QString("Unknown chunk: %d") .arg(chunktype) );
-	}
-	if( verbosityMode & Progress )
-	    emit operationFeedback( inStream->device()->at() );
-    }
-    return true;
-}
-
diff --git a/util/install/archive/qarchive.h b/util/install/archive/qarchive.h
deleted file mode 100644
index 351a48b..0000000
--- a/util/install/archive/qarchive.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef QARCHIVE_H
-#define QARCHIVE_H
-
-#include <qstring.h>
-#include <qfile.h>
-#include <qstringlist.h>
-#include <qobject.h>
-
-class QArchiveHeader
-{
-public:
-    QArchiveHeader( uint feat, const QString& desc=QString(), uchar mayorVer = 1, uchar minorVer = 0 )
-	: _features(feat), _description(desc), _mayorVersion(mayorVer), _minorVersion(minorVer)
-    {}
-    
-    uint features() const
-    { return _features; }
-
-    QString description() const
-    { return _description; }
-
-    uchar mayorVersion() const
-    { return _mayorVersion; }
-
-    uchar minorVersion() const
-    { return _minorVersion; }
-
-    void addExtraData( const QString& key, const QString& value )
-    { extraData.insert( key, value ); }
-
-    QString findExtraData( const QString& key ) const
-    { return extraData[key]; }
-
-private:
-    QArchiveHeader()
-    {}
-
-    uint _features;
-    QString _description;
-    uchar _mayorVersion;
-    uchar _minorVersion;
-    QMap<QString,QString> extraData;
-
-    friend class QArchive;
-};
-
-class QArchive : public QObject
-{
-    Q_OBJECT
-public:
-    QArchive( const QString& archivePath = QString() );
-    ~QArchive();
-
-    void setPath( const QString& archivePath );
-    void setVerbosity( int verbosity );
-
-    bool symbolicLinks() const { return doSyms; }
-    void setSymbolicLinks(bool b) { doSyms = b; }
-
-    bool open( int mode );
-    void close();
-    bool isOpen() { return arcFile.isOpen(); }
-
-    bool writeHeader( const QArchiveHeader header );
-    bool writeFile( const QString& fileName, const QString& localPath = QString() );
-    bool writeFileList( const QStringList fileList );
-    bool writeDir( const QString& dirName, bool includeLastComponent = false, 
-		   const QString& localPath = QString() );
-    bool writeDirList( const QStringList dirList, bool includeLastComponent = true );
-
-    QArchiveHeader* readArchiveHeader();
-    QArchiveHeader* readArchiveHeader( QDataStream *inStream );
-
-    bool readArchive( const QString &outpath, const QString &key = QString() );
-    bool readArchive( QDataStream *inStream, const QString &outpath, const QString &key = QString() );
-private:
-    QFile arcFile;
-
-    int bufferSize;
-    int verbosityMode;
-    uint doSyms : 1;
-    bool setDirectory( const QString& dirName );
-signals:
-    void operationFeedback( const QString& );
-    void operationFeedback( int );
-
-public:
-    enum {
-	NoFeedback = 0x00,
-	OnlyNames = 0x01,
-	Verbose = 0x02,
-	Source = 0x10,
-	Destination = 0x20,
-	Progress = 0x40
-    };
-};
-
-#endif
diff --git a/util/install/configure_installer.cache b/util/install/configure_installer.cache
deleted file mode 100644
index 9427b74..0000000
--- a/util/install/configure_installer.cache
+++ /dev/null
@@ -1,30 +0,0 @@
--disable-table
--disable-iconview
--disable-workspace
--disable-xml
--disable-network
--disable-canvas
--disable-opengl
--disable-sql
--release
--static
--lean
--no-dsp
--no-thread
--no-accessibility
--qt-style-windowsxp
--no-style-motif
--no-style-cde
--no-style-sgi
--no-style-motifplus
--no-style-platinum
--no-big-codecs
--no-jpeg
--no-png
--spec win32-msvc
--saveconfig installer
--D QT_NO_COLORNAMES
--D QT_NO_BEZIER
--D QT_NO_EFFECTS
--D QT_NO_DIRECTPAINTER
--D QT_NO_SVG
diff --git a/util/install/install.pro b/util/install/install.pro
deleted file mode 100644
index 4106453..0000000
--- a/util/install/install.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TEMPLATE = subdirs
-CONFIG += ordered
-
-SUBDIRS += archive \
-           package \
-	   keygen
-
-win32:SUBDIRS += win
-mac:SUBDIRS += mac
diff --git a/util/install/keygen/keygen.pro b/util/install/keygen/keygen.pro
deleted file mode 100644
index 59daf75..0000000
--- a/util/install/keygen/keygen.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-CONFIG += qt console
-SOURCES += keyinfo.cpp
-keychk {
-  TEMPLATE = lib
-  TARGET = keychk
-  DESTDIR = ../../../lib/
-  CONFIG -= shared dll
-  CONFIG += staticlib
-} else {
-  TEMPLATE = app
-  TARGET = keygen
-  SOURCES += main.cpp
-}
\ No newline at end of file
diff --git a/util/install/keygen/keyinfo.cpp b/util/install/keygen/keyinfo.cpp
deleted file mode 100644
index 9ad5404..0000000
--- a/util/install/keygen/keyinfo.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <qregexp.h>
-
-#include "keyinfo.h"
-
-// Magic values
-enum {
-    ProductMagic = 0xB292,
-    PlatformMagic = 0x5C7E,
-    LicenseSchemaMagic = 0xE3B,
-    LicenseIDMagic = 0xCE57,
-    FeatureMagic = 0x4D5
-};
-
-static const char Xalphabet[] = "WX9MUEC7AJH3KS6DB4YFG2L5PQRT8VNZ";
-static const int XAlphabetSize = sizeof(Xalphabet) - 1;
-
-static QString encodeBaseX(uint k)
-{
-    QString str;
-    do {
-	str += QChar(Xalphabet[ k % XAlphabetSize ]);
-	k /= XAlphabetSize;
-    } while (k > 0u);
-    return str;
-}
-
-static uint decodeBaseX(const QString &str)
-{
-    uint k = 0;
-    int i = str.length();
-    while (i > 0) {
-	i--;
-	const char *p = strchr(Xalphabet, str[i].unicode());
-	if (p == 0) {
-	    return 0;
-	} else {
-	    k = (k * XAlphabetSize) + (p - Xalphabet);
-	}
-    }
-    return k;
-}
-
-static const QDate StartDate(2001, 1, 1);
-static const uint MaxDays = 4000;
-    
-static QString encodedExpiryDate(const QDate &date)
-{
-    uint days = StartDate.daysTo(date);
-    if (days >= MaxDays)
-	days = MaxDays - 1;
-    uint x = (days << 7) ^ days;
-    return encodeBaseX(x ^ 0x0000beef);
-}
-
-static QDate decodedExpiryDate(const QString &encodedDate)
-{
-    QDate date;
-    uint y = decodeBaseX(encodedDate);
-    uint x = y ^ 0x0000beef;
-    uint days = ( (x >> 7) ^ x ) >> 7;
-    if (days >= MaxDays)
-        return QDate();
-    date = StartDate.addDays( days );
-    if (encodedExpiryDate(date) != encodedDate)
-        return QDate();
-    return date;
-}
-
-bool decodeLicenseKey(const QString &licenseKey,
-                      uint *products,
-                      uint *platforms,
-                      uint *licenseSchema,
-                      uint *licenseFeatures,
-                      uint *licenseID,
-                      QDate *expiryDate)
-{
-    QStringList licenseParts;
-    int dash = -1;
-    do {
-        int start = dash + 1;
-        dash = licenseKey.indexOf('-', start);
-        licenseParts.append(licenseKey.mid(start, dash - start));
-    } while (dash != -1);
-
-    // license keys have 7 fields
-    if (licenseParts.size() != 7) {
-        // invalid key
-        return false;
-    }
-    QString productPart = licenseParts.at(0);
-    QString platformPart = licenseParts.at(1);
-    QString licenseSchemaPart = licenseParts.at(2);
-    QString licenseFeaturesPart = licenseParts.at(3);
-    QString licenseIDPart = licenseParts.at(4);
-    QString expiryDatePart = licenseParts.at(5);
-    QString checksumPart = licenseParts.at(6);
-    QString keyPart = productPart
-                      + '-' + platformPart
-                      + '-' + licenseSchemaPart
-                      + '-' + licenseFeaturesPart
-                      + '-' + licenseIDPart
-                      + '-' + expiryDatePart;
-
-    // verify the crc
-    QByteArray ba = keyPart.toLatin1();
-    int crc = qChecksum(ba.constData(), ba.size());
-    QString checksumVerification = QString("%1%2")
-                                   .arg((crc & 0xff),2,16,QChar('0'))
-                                   .arg((crc >> 8 & 0xff),2,16,QChar('0'))
-                                   .toUpper();
-    if (checksumPart != checksumVerification) {
-        // invalid checksum
-        return false;
-    }
-
-    *products = decodeBaseX(productPart) ^ ProductMagic;
-    *platforms = decodeBaseX(platformPart) ^ PlatformMagic;
-    *licenseSchema = decodeBaseX(licenseSchemaPart) ^ LicenseSchemaMagic;
-    *licenseFeatures = decodeBaseX(licenseFeaturesPart) ^ FeatureMagic;
-    *licenseID = decodeBaseX(licenseIDPart) ^ LicenseIDMagic;
-    *expiryDate = decodedExpiryDate(expiryDatePart);
-    return true;
-}
diff --git a/util/install/keygen/keyinfo.h b/util/install/keygen/keyinfo.h
deleted file mode 100644
index 9b3687a..0000000
--- a/util/install/keygen/keyinfo.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef KEYINFO_H
-#define KEYINFO_H
-
-// Products
-enum {
-    // the first 10 bits are reserved for Qt editions
-    QtUniversal     = 0x00000001,
-    QtDesktop       = 0x00000002,
-    QtDesktopLight  = 0x00000004,
-    QtConsole       = 0x00000008,
-    QtDesignerOnly  = 0x00000010,
-    QtReserved1     = 0x00000020,
-    QtReserved2     = 0x00000040,
-    QtReserved3     = 0x00000080,
-    QtReserved4     = 0x00000100,
-    QtReserved5     = 0x00000200,
-    QtProductMask   = 0x000003ff,
-
-    // the next 10 bits are reserved for Qtopia editions
-    QtopiaPDA       = 0x00000400,
-    QtopiaPhone     = 0x00000800,
-    QtopiaRefboard  = 0x00001000,
-    QtopiaReserved1 = 0x00002000,
-    QtopiaReserved2 = 0x00004000,
-    QtopiaReserved3 = 0x00008000,
-    QtopiaReserved4 = 0x00010000,
-    QtopiaReserved5 = 0x00020000,
-    QtopiaReserved6 = 0x00040000,
-    QtopiaReserved7 = 0x00080000,
-
-    // other products get the upper 12 bits
-    Teambuilder     = 0x00100000,
-    Solutions       = 0x00200000,
-    QSA             = 0x00400000,
-    OtherReserved1  = 0x00800000,
-    OtherReserved2  = 0x01000000,
-    OtherReserved3  = 0x02000000,
-    OtherReserved4  = 0x04000000,
-    OtherReserved5  = 0x08000000,
-    OtherReserved6  = 0x10000000,
-    OtherReserved7  = 0x20000000,
-    OtherReserved8  = 0x40000000,
-    OtherReserved9  = 0x80000000,
-};
-
-// Platforms
-enum {
-    PlatformX11 = 0x01,
-    PlatformEmbedded = 0x02,
-    PlatformWindows = 0x04,
-    PlatformMac = 0x08
-};
-
-// LicenseSchema
-enum {
-    SupportedEvaluation = 0x01,
-    UnsupportedEvaluation = 0x02,
-    FullSourceEvaluation = 0x04,
-    FullCommercial = 0x08
-};
-
-// LicenseFeatures
-enum {
-    USCustomer = 0x01
-};
-
-#include <qdatetime.h>
-#include <qstring.h>
-
-/*
-    Decodes the \a licenseKey.  This function returns true if 1) decoding
-    was successful and 2) the checksum matches, otherwise it returns false.
-*/
-bool decodeLicenseKey(const QString &licenseKey,
-                      uint *products,
-                      uint *platforms,
-                      uint *licenseSchema,
-                      uint *licenseFeatures,
-                      uint *licenseID,
-                      QDate *expiryDate);
-
-#endif
diff --git a/util/install/keygen/main.cpp b/util/install/keygen/main.cpp
deleted file mode 100644
index b6eee41..0000000
--- a/util/install/keygen/main.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <qfile.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "keyinfo.h"
-
-static void printNewKey( uint features, const QDate& expiryDate )
-{
-    QFile in;
-    QFile out;
-    QString fn;
-    char block[10];
-
-    fn.sprintf( "next.%.2x", features );
-    in.setFileName( fn );
-    if ( !in.open(QFile::ReadOnly) )
-	return;
-    int ent = QString( in.readAll() ).toInt();
-    in.close();
-
-    fn.sprintf( "table.%.2x", features );
-    in.setFileName( fn );
-    if ( !in.open(QFile::ReadOnly) )
-	return;
-    in.seek( ent * 10 );
-    in.read( block, 9 );
-    block[9] = '\0';
-    in.close();
-
-    ent++;
-    if ( ent == (1 << NumRandomBits) )
-	ent = 1; // skip first entry
-
-    fn.sprintf( "next.%.2x", features );
-    out.setFileName( fn );
-    if ( !out.open(QFile::WriteOnly) )
-	return;
-    QString s = QString::number( ent ) + QChar( '\n' );
-    out.write( s.toLocal8Bit(), s.length() );
-    out.close();
-
-    if ( strlen(block) == 9 && block[4] == '-' )
-	printf( "%s%s\n", block, qPrintable(encodedExpiryDate(expiryDate)) );
-}
-
-static QString textForFeatures( uint features )
-{
-    QString text;
-
-    if ( (features & Feature_US) != 0 )
-	text += QString( " -us" );
-    if ( (features & Feature_Enterprise) != 0 )
-	text += QString( " -enterprise" );
-    if ( (features & Feature_Unix) != 0 )
-	text += QString( " -unix" );
-    if ( (features & Feature_Windows) != 0 )
-	text += QString( " -windows" );
-    if ( (features & Feature_Mac) != 0 )
-	text += QString( " -mac" );
-    if ( (features & Feature_Embedded) != 0 )
-	text += QString( " -embedded" );
-    if ( (features & Feature_Extra1) != 0 )
-	text += QString( " -extra1" );
-    if ( (features & Feature_Extra2) != 0 )
-	text += QString( " -extra2" );
-
-    text = text.trimmed();
-    if ( text.isEmpty() )
-	text = QString( "invalid key" );
-    return text;
-}
-
-static QString textForDate( const QDate& date )
-{
-    if ( date.isValid() ) {
-	return date.toString( Qt::ISODate );
-    } else {
-	return QString( "invalid date" );
-    }
-}
-
-static void reset()
-{
-    for ( uint features = 0; features < (1 << NumFeatures); features++ ) {
-	printf( "Resetting 'table.%.2x' and 'next.%.2x' (%s)\n", features,
-		features, qPrintable(textForFeatures(features)) );
-
-	QFile out;
-	QString fn;
-
-	fn.sprintf( "table.%.2x", features );
-	out.setFileName( fn );
-	if ( !out.open(QFile::WriteOnly) ) {
-	    fprintf( stderr, "Cannot open '%s' for writing\n", qPrintable(fn) );
-	    exit( EXIT_FAILURE );
-	}
-
-	for ( uint bits = 0; bits < (1 << NumRandomBits); bits++ ) {
-	    QString k = keyForFeatures( features, bits ) + QChar( '\n' );
-	    out.write( k.toLatin1(), k.length() );
-
-	    /*
-	      We check that the generated keys give access to the
-	      correct feature sets. This accounts for most of the
-	      processing time of the function.
-	    */
-#if 1
-	    if ( featuresForKey(k) != features ) {
-		fprintf( stderr, "Internal error in featuresForKey(\"%s\")\n",
-			 qPrintable(k.trimmed()) );
-		exit( EXIT_FAILURE );
-	    }
-	    if ( (features & ~(Feature_US | Feature_Enterprise |
-			       Feature_Unix)) == 0 ) {
-		if ( featuresForKeyOnUnix(k) != features ) {
-		    fprintf( stderr,
-			     "Internal error in featuresForKeyOnUnix(\"%s\")\n",
-			     qPrintable(k.trimmed()) );
-		    exit( EXIT_FAILURE );
-		}
-	    }
-#endif
-	}
-	out.close();
-
-	fn.sprintf( "next.%.2x", features );
-	out.setFileName( fn );
-	if ( !out.open(QFile::WriteOnly) ) {
-	    fprintf( stderr, "Cannot open '%s' for writing\n", qPrintable(fn) );
-	    exit( EXIT_FAILURE );
-	}
-	out.write( "1\n", 2 ); // skip first key
-	out.close();
-    }
-}
-
-int main( int argc, char **argv )
-{
-    if ( argc == 1 || (strcmp(argv[1], "check") != 0 &&
-		       strcmp(argv[1], "new") != 0 &&
-		       strcmp(argv[1], "reset") != 0) ) {
-	fprintf( stderr, "Usage:\n"
-		"    keygen check <key>\n"
-		"    keygen new YYYY-MM-DD [-us] [-enterprise] [-unix]\n"
-		"        [-windows] [-mac] [-embedded] [-extra1] [-extra2]\n"
-		"    keygen reset\n" );
-	exit( EXIT_FAILURE );
-    }
-
-    if ( strcmp(argv[1], "check") == 0 ) {
-	if ( argc != 3 ) {
-	    fprintf( stderr, "Usage:\n"
-		    "    mkcode check <key>\n" );
-	    exit( EXIT_FAILURE );
-	}
-
-	QString key( argv[2] );
-
-	printf("Unix check: %s\n",
-               qPrintable(textForFeatures(featuresForKeyOnUnix(QString(argv[2])))));
-	printf("Full check: %s\n",
-               qPrintable(textForFeatures(featuresForKey(QString(argv[2])))));
-	if ( featuresForKey(QString(argv[2])) != 0 )
-	    printf("Expiry date: %s\n",
-                   qPrintable(textForDate(decodedExpiryDate(key.mid(9)))));
-    } else if ( strcmp(argv[1], "new") == 0 ) {
-	uint features = 0;
-
-	if ( argc < 3 ) {
-	    fprintf( stderr, "Usage:\n"
-		     "    mkcode new YYYY-MM-DD [features]\n" );
-	    exit( EXIT_FAILURE );
-	}
-
-	QDate expiryDate = QDate::fromString( QString(argv[2]), Qt::ISODate );
-	if ( !expiryDate.isValid() ) {
-	    fprintf( stderr, "Date '%s' not in YYYY-MM-DD format\n", argv[2] );
-	    exit( EXIT_FAILURE );
-	}
-
-	for ( int i = 3; i < argc; i++ ) {
-	    if ( strcmp(argv[i], "-us") == 0 ) {
-		features |= Feature_US;
-	    } else if ( strcmp(argv[i], "-enterprise") == 0 ) {
-		features |= Feature_Enterprise;
-	    } else if ( strcmp(argv[i], "-unix") == 0 ) {
-		features |= Feature_Unix;
-	    } else if ( strcmp(argv[i], "-windows") == 0 ) {
-		features |= Feature_Windows;
-	    } else if ( strcmp(argv[i], "-mac") == 0 ) {
-		features |= Feature_Mac;
-	    } else if ( strcmp(argv[i], "-embedded") == 0 ) {
-		features |= Feature_Embedded;
-	    } else if ( strcmp(argv[i], "-extra1") == 0 ) {
-		features |= Feature_Extra1;
-	    } else if ( strcmp(argv[i], "-extra2") == 0 ) {
-		features |= Feature_Extra2;
-	    } else {
-		fprintf( stderr, "Unknown flag '%s'\n", argv[i] );
-		exit( EXIT_FAILURE );
-	    }
-	}
-	printNewKey( features, expiryDate );
-    } else {
-	reset();
-    }
-    return 0;
-}
diff --git a/util/install/mac/licensedlg.ui b/util/install/mac/licensedlg.ui
deleted file mode 100644
index a20bd44..0000000
--- a/util/install/mac/licensedlg.ui
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>LicenseDialog</class>
-<widget class="QDialog">
-    <property name="name">
-        <cstring>LicenseDialog</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>582</width>
-            <height>531</height>
-        </rect>
-    </property>
-    <property name="sizePolicy">
-        <sizepolicy>
-            <hsizetype>5</hsizetype>
-            <vsizetype>5</vsizetype>
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-        </sizepolicy>
-    </property>
-    <property name="caption">
-        <string>License Agreement</string>
-    </property>
-    <property name="sizeGripEnabled">
-        <bool>true</bool>
-    </property>
-    <vbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QTextView">
-            <property name="name">
-                <cstring>licenseText</cstring>
-            </property>
-            <property name="text">
-                <string>License text goes here</string>
-            </property>
-        </widget>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>Layout1</cstring>
-            </property>
-            <hbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>0</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <spacer>
-                    <property name="name" stdset="0">
-                        <cstring>Horizontal Spacing2</cstring>
-                    </property>
-                    <property name="orientation">
-                        <enum>Horizontal</enum>
-                    </property>
-                    <property name="sizeType">
-                        <enum>Expanding</enum>
-                    </property>
-                    <property name="sizeHint">
-                        <size>
-                            <width>20</width>
-                            <height>20</height>
-                        </size>
-                    </property>
-                </spacer>
-                <widget class="QPushButton">
-                    <property name="name">
-                        <cstring>buttonReject</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Reject</string>
-                    </property>
-                    <property name="accel">
-                        <number>0</number>
-                    </property>
-                    <property name="autoDefault">
-                        <bool>true</bool>
-                    </property>
-                    <property name="default">
-                        <bool>true</bool>
-                    </property>
-                </widget>
-                <widget class="QPushButton">
-                    <property name="name">
-                        <cstring>buttonAccept</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Accept</string>
-                    </property>
-                    <property name="accel">
-                        <number>0</number>
-                    </property>
-                    <property name="autoDefault">
-                        <bool>true</bool>
-                    </property>
-                </widget>
-            </hbox>
-        </widget>
-    </vbox>
-</widget>
-<connections>
-    <connection>
-        <sender>buttonReject</sender>
-        <signal>pressed()</signal>
-        <receiver>LicenseDialog</receiver>
-        <slot>reject()</slot>
-    </connection>
-    <connection>
-        <sender>buttonAccept</sender>
-        <signal>clicked()</signal>
-        <receiver>LicenseDialog</receiver>
-        <slot>reject()</slot>
-    </connection>
-    <connection>
-        <sender>buttonAccept</sender>
-        <signal>pressed()</signal>
-        <receiver>LicenseDialog</receiver>
-        <slot>accept()</slot>
-    </connection>
-</connections>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/mac/licensedlgimpl.cpp b/util/install/mac/licensedlgimpl.cpp
deleted file mode 100644
index ed2998a..0000000
--- a/util/install/mac/licensedlgimpl.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "licensedlgimpl.h"
-#include <qfile.h>
-#include <qtextview.h>
-
-LicenseDialogImpl::LicenseDialogImpl( QWidget *parent )
-    : LicenseDialog( parent )
-{
-}
-
-bool LicenseDialogImpl::showLicense( bool licenseUs )
-{
-    QFile f;
-    QString path = "qt-mac-commercial-3.0.0.app/Contents/Qt/LICENSE";
-    if (licenseUs)
-	path.append( "-US" );
-    f.setName( path );
-    if ( !f.open( IO_ReadOnly ) )
-	return false;
-    
-    QTextStream ts( &f );
-    licenseText->setText( ts.read() );
-    return true;
-}
-
-
diff --git a/util/install/mac/licensedlgimpl.h b/util/install/mac/licensedlgimpl.h
deleted file mode 100644
index 90f8809..0000000
--- a/util/install/mac/licensedlgimpl.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef __LICENSEDLGIMPL_H__
-#define __LICENSEDLGIMPL_H__
-
-#include "licensedlg.h"
-
-class LicenseDialogImpl : public LicenseDialog
-{
-    Q_OBJECT
-
-public:
-    LicenseDialogImpl( QWidget* parent = 0 );
-    bool showLicense( bool licenseUs );
-};
-
-#endif /* __LICENSEDLGIMPL_H__ */
diff --git a/util/install/mac/mac.pro b/util/install/mac/mac.pro
deleted file mode 100644
index ad13bea..0000000
--- a/util/install/mac/mac.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-TEMPLATE = app
-TARGET 	 = unpackage
-mac:TARGET = qt-mac-commercial-3.0.0
-mac:RC_FILE = unpackage.icns
-HEADERS = unpackdlgimpl.h licensedlgimpl.h
-SOURCES = main.cpp unpackdlgimpl.cpp licensedlgimpl.cpp
-INTERFACES += unpackdlg.ui licensedlg.ui
-INCLUDEPATH += ../archive ../keygen
-CONFIG += qt
-unix:LIBS += -L$$QT_BUILD_TREE/util/install/archive -larq
-
diff --git a/util/install/mac/main.cpp b/util/install/mac/main.cpp
deleted file mode 100644
index ede85a6..0000000
--- a/util/install/mac/main.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "unpackdlgimpl.h"
-#include "qarchive.h"
-#include <qapplication.h>
-#include <qdir.h>
-#include <qfileinfo.h>
-
-class ConsoleOutput : public QObject
-{
-    Q_OBJECT
-public:
-    ConsoleOutput() : QObject() { }
-    ~ConsoleOutput() { }
-public slots:
-    void updateProgress( const QString& str) {	qDebug("%s", str.latin1());   }
-};
-#include "main.moc"
-
-static int usage(const char *argv0, const char *un=NULL) {
-    if(un)
-	fprintf(stderr, "Unknown command: %s\n", un);
-    else
-	fprintf(stderr, "Usage:\n");
-    fprintf(stderr, "%s [options] files...\n", argv0);
-
-    fprintf(stderr, "\nOptions:\n");
-    fprintf(stderr, " -k [k]     : Use k as the key to open provided files\n");
-    fprintf(stderr, " -s         : Quiet mode, will not output process\n");
-    fprintf(stderr, " -h         : This help\n");
-    return 665;
-}
-
-int main( int argc, char** argv )
-{
-    QString key;
-    bool output = true;
-    QStringList files;
-    QApplication app( argc, argv );
-    for(int i = 1; i < argc; i++) {
-	//options
-	if(!strcmp(argv[i], "-s")) 
-	    output = false;
-	else if(!strcmp(argv[i], "-k")) 
-	    key = argv[++i];
-	else if(!strcmp(argv[i], "-h"))
-	    return usage(argv[0]);
-	//files
-	else if(*(argv[i]) != '-')  
-	    files.append(argv[i]); 
-	//unknown
-	else 
-	    return usage(argv[0], argv[i]); 
-    }
-    if(!files.isEmpty()) {
-	QArchive archive;
-	ConsoleOutput out;
-	QObject::connect( &archive, SIGNAL( operationFeedback( const QString& ) ), 
-			  &out, SLOT( updateProgress( const QString& ) ) );
-	if(output) 
-	    archive.setVerbosity( QArchive::Destination | QArchive::Verbose );
-	for(QStringList::Iterator it = files.begin(); it != files.end(); ++it) {
-	    archive.setPath( (*it) );
-	    if( !archive.open( IO_ReadOnly ) ) {
-		qDebug("Failed to open input %s", (*it).latin1());
-		continue;
-	    } 
-	    if(!archive.readArchive( QDir::currentDirPath(), key )) 
-		qDebug("Failed to unpack %s", (*it).latin1());
-	    archive.close();
-	}
-    } else {
-	UnpackDlgImpl dlg(key);
-	dlg.exec();
-    }
-    return 0;
-}
-
diff --git a/util/install/mac/unpackage.icns b/util/install/mac/unpackage.icns
deleted file mode 100644
index 20139b9..0000000
Binary files a/util/install/mac/unpackage.icns and /dev/null differ
diff --git a/util/install/mac/unpackdlg.ui b/util/install/mac/unpackdlg.ui
deleted file mode 100644
index ba4898e..0000000
--- a/util/install/mac/unpackdlg.ui
+++ /dev/null
@@ -1,330 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>UnpackDlg</class>
-<widget class="QDialog">
-    <property name="name">
-        <cstring>UnpackDlg</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>678</width>
-            <height>337</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Install unpacking tool</string>
-    </property>
-    <vbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>Layout24</cstring>
-            </property>
-            <hbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>0</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QLabel">
-                    <property name="name">
-                        <cstring>pixmapLabel</cstring>
-                    </property>
-                    <property name="pixmap">
-                        <pixmap>image0</pixmap>
-                    </property>
-                    <property name="scaledContents">
-                        <bool>false</bool>
-                    </property>
-                    <property name="alignment">
-                        <set>AlignAuto|AlignTop</set>
-                    </property>
-                </widget>
-                <widget class="QLayoutWidget">
-                    <property name="name">
-                        <cstring>Layout23</cstring>
-                    </property>
-                    <vbox>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <property name="margin">
-                            <number>0</number>
-                        </property>
-                        <property name="spacing">
-                            <number>6</number>
-                        </property>
-                        <widget class="QLabel">
-                            <property name="name">
-                                <cstring>headerLabel</cstring>
-                            </property>
-                            <property name="font">
-                                <font>
-                                    <bold>1</bold>
-                                </font>
-                            </property>
-                            <property name="text">
-                                <string>Open Qt/CD Package</string>
-                            </property>
-                        </widget>
-                        <widget class="QLayoutWidget">
-                            <property name="name">
-                                <cstring>Layout22</cstring>
-                            </property>
-                            <vbox>
-                                <property name="name">
-                                    <cstring>unnamed</cstring>
-                                </property>
-                                <property name="margin">
-                                    <number>0</number>
-                                </property>
-                                <property name="spacing">
-                                    <number>6</number>
-                                </property>
-                                <widget class="QLayoutWidget">
-                                    <property name="name">
-                                        <cstring>Layout21</cstring>
-                                    </property>
-                                    <vbox>
-                                        <property name="name">
-                                            <cstring>unnamed</cstring>
-                                        </property>
-                                        <property name="margin">
-                                            <number>0</number>
-                                        </property>
-                                        <property name="spacing">
-                                            <number>6</number>
-                                        </property>
-                                        <widget class="QLayoutWidget">
-                                            <property name="name">
-                                                <cstring>Layout19</cstring>
-                                            </property>
-                                            <hbox>
-                                                <property name="name">
-                                                    <cstring>unnamed</cstring>
-                                                </property>
-                                                <property name="margin">
-                                                    <number>0</number>
-                                                </property>
-                                                <property name="spacing">
-                                                    <number>6</number>
-                                                </property>
-                                                <widget class="QLabel">
-                                                    <property name="name">
-                                                        <cstring>destLabel</cstring>
-                                                    </property>
-                                                    <property name="text">
-                                                        <string>Destination path:</string>
-                                                    </property>
-                                                </widget>
-                                                <spacer>
-                                                    <property name="name">
-                                                        <cstring>Spacer12</cstring>
-                                                    </property>
-                                                    <property name="orientation">
-                                                        <enum>Horizontal</enum>
-                                                    </property>
-                                                    <property name="sizeType">
-                                                        <enum>Fixed</enum>
-                                                    </property>
-                                                    <property name="sizeHint">
-                                                        <size>
-                                                            <width>1</width>
-                                                            <height>20</height>
-                                                        </size>
-                                                    </property>
-                                                </spacer>
-                                                <widget class="QLineEdit">
-                                                    <property name="name">
-                                                        <cstring>destPath</cstring>
-                                                    </property>
-                                                </widget>
-                                                <widget class="QPushButton">
-                                                    <property name="name">
-                                                        <cstring>destButton</cstring>
-                                                    </property>
-                                                    <property name="text">
-                                                        <string></string>
-                                                    </property>
-                                                    <property name="pixmap">
-                                                        <pixmap>image1</pixmap>
-                                                    </property>
-                                                </widget>
-                                            </hbox>
-                                        </widget>
-                                        <widget class="QLayoutWidget">
-                                            <property name="name">
-                                                <cstring>Layout20</cstring>
-                                            </property>
-                                            <hbox>
-                                                <property name="name">
-                                                    <cstring>unnamed</cstring>
-                                                </property>
-                                                <property name="margin">
-                                                    <number>0</number>
-                                                </property>
-                                                <property name="spacing">
-                                                    <number>6</number>
-                                                </property>
-                                                <widget class="QLabel">
-                                                    <property name="name">
-                                                        <cstring>TextLabel1</cstring>
-                                                    </property>
-                                                    <property name="text">
-                                                        <string>License Key:</string>
-                                                    </property>
-                                                </widget>
-                                                <spacer>
-                                                    <property name="name">
-                                                        <cstring>Spacer13</cstring>
-                                                    </property>
-                                                    <property name="orientation">
-                                                        <enum>Horizontal</enum>
-                                                    </property>
-                                                    <property name="sizeType">
-                                                        <enum>Fixed</enum>
-                                                    </property>
-                                                    <property name="sizeHint">
-                                                        <size>
-                                                            <width>24</width>
-                                                            <height>20</height>
-                                                        </size>
-                                                    </property>
-                                                </spacer>
-                                                <widget class="QLineEdit">
-                                                    <property name="name">
-                                                        <cstring>srcKey</cstring>
-                                                    </property>
-                                                </widget>
-                                            </hbox>
-                                        </widget>
-                                    </vbox>
-                                </widget>
-                                <widget class="QTextView">
-                                    <property name="name">
-                                        <cstring>logOutput</cstring>
-                                    </property>
-                                </widget>
-                                <widget class="QLayoutWidget">
-                                    <property name="name">
-                                        <cstring>Layout4</cstring>
-                                    </property>
-                                    <hbox>
-                                        <property name="name">
-                                            <cstring>unnamed</cstring>
-                                        </property>
-                                        <property name="margin">
-                                            <number>0</number>
-                                        </property>
-                                        <property name="spacing">
-                                            <number>6</number>
-                                        </property>
-                                        <spacer>
-                                            <property name="name">
-                                                <cstring>Spacer1</cstring>
-                                            </property>
-                                            <property name="orientation">
-                                                <enum>Horizontal</enum>
-                                            </property>
-                                            <property name="sizeType">
-                                                <enum>Expanding</enum>
-                                            </property>
-                                            <property name="sizeHint">
-                                                <size>
-                                                    <width>20</width>
-                                                    <height>20</height>
-                                                </size>
-                                            </property>
-                                        </spacer>
-                                        <widget class="QPushButton">
-                                            <property name="name">
-                                                <cstring>unpackButton</cstring>
-                                            </property>
-                                            <property name="text">
-                                                <string>Unpack</string>
-                                            </property>
-                                        </widget>
-                                        <widget class="QPushButton">
-                                            <property name="name">
-                                                <cstring>cancelButton</cstring>
-                                            </property>
-                                            <property name="text">
-                                                <string>Cancel</string>
-                                            </property>
-                                        </widget>
-                                        <spacer>
-                                            <property name="name">
-                                                <cstring>Spacer2</cstring>
-                                            </property>
-                                            <property name="orientation">
-                                                <enum>Horizontal</enum>
-                                            </property>
-                                            <property name="sizeType">
-                                                <enum>Expanding</enum>
-                                            </property>
-                                            <property name="sizeHint">
-                                                <size>
-                                                    <width>20</width>
-                                                    <height>20</height>
-                                                </size>
-                                            </property>
-                                        </spacer>
-                                    </hbox>
-                                </widget>
-                            </vbox>
-                        </widget>
-                    </vbox>
-                </widget>
-            </hbox>
-        </widget>
-    </vbox>
-</widget>
-<images>
-    <image name="image0">
-        <data format="XPM.GZ" length="30371">789cdd7c594f23cbb6e6fbf9155b27de8e5a716d8c01abd50f600633786286abfb105366da608cb10dc657fddf7bc51ac269a04e517b975abbbb5096fd919991b1e62122f98f7ffd71db6bfff1affff8c774666603f7872bcccb1ffff2f3d1e8fd3fffeb7ffdf73ffe59ad54fe88c7d646e58f8d7ffe8f7ffc53cdff707fa80afe43dc4f782762a30457f1bc394b18cfab19e34dbebf9730ddff2e98eeb72b4cf74f19efd0fdd6248ce77d5730df5f3076747d6811aef2fc3d3fbfcaf3b123c43b429f794a98e6f72898c7cf12a6f97519f378669430ddaf05f3fd2a61babfc398e9332661ba7f2998ef6f244cf4df0bdea0f33963a6df0e13a6f17605d378be92309ecf64fe8ec653fc3ce15fe8264ce38d198b7c5f18333de18cb1cce736e26a925fa831e6f3d95ec278de6ac134df704f58e6935f0ba6f3ee2561baff5c30d1631e18f37cf384f9fe5dc63c7f25f7f3fc4c9bf0063fdf0e180bfd743ed16b4e09cbf5ca3296eb0d63799e62ccf717680f1b69fcbc9730c9eb5630db5f83318f97df244cfab2c758e4b1245c93f9bd32e6e76533c63c9ea7f934d2f58eb15c7f9f30e9478db1e8f73963b14f7a5e6393c7731b11d7aae9fa2163996f3f611aff96b0dcaf7cc278de7519cbfc91dfb586dcef2784e5fe2c4b18cf177b8299bf0bc64caf9b264cf67c2698ae57323e3fdf2d13a6f9cbf8c28f9384c93e503f37abc25ff3cc58c6d38465bce25030db4b9b318faf2e1226fa2f05b37fb9215c677ee846c244df1be33af3eb4130dd5ff0fcea0dd63ff4a79b46e6af34639e8fa3f99a3af3d7e78cebec8f9a8c793c95254cf2ed0866fb1d11deaa32fde8bfeb1b222f7b40b8eed97eee046f3470fea784b7aa3cfebd60a66f91309d7f124cfea5088c991fe199313f2f3f466c923ce8fa447f7e4578ab5aabe2f88e318f674e12a6f17605d3f39d67ccfc513b8299bf4a305d9f3f32e6f915fb82f9fa8b84495f3a82f9fe82f036f3c7d884c9fff604d3f5d99c31cfdf22ffb622bf895f0709d3f3d279a6f79031df1f3619376a28bf7cc998e71b2e05f3f3657c4fd79b09e134df8560be7e85f1fac0e36fb33cec3861badf0a667d183166fdcd0682999f7dc1cc4f94d7569257a810deaed27cb30ee33acd27ef0a267db1778c797cbd2d98c6f7af09d3787dc1747fd64d18cfab0563d607fb9030f1775f308d1f2e12267eed08e6f15b8477449efb82597ff1feed9ae89f191016f9e81dc6cc6fffc058ec792998edf55130c7ff3bc2f2bc6012c6f9fa53c1345fb3c198e5998784897fcf82f9fa2663e66f2ef7337f3deacbb615f9e409f3f89631cfd70f09efb07db93bc1ac9f26619acf89e04d7c5ede66ccf32d0ac63c1fbbcb58f8f396305eef2682e9fa624ab8c1f2c85e04d3f5f655305d1fd0de776a22ff901396f9fbbb8489ff4782999f3b8c99ff99dccffcf655c144af4dd76f1a9caf8cc7fc0e0973be7c4138cdff50308f7fc258ec6b9f31cb571582f97c3761a207ed6fc726fadf0927fd538c79fcec5430d1137a09233de1867183ce671b09e3f9ec9c31dba7ca05337d6f82e97e759a30deef7705d7b1fecb1e090b3f4c9f31d39b6f3266fad43861d2b71661c3fc35178299bf3709d3f58e31f3a358264cfc467b83f4899f5f78c6a2af81b03ccfdf32167db109133f268299dfe709233f6c87b161792e04d3f9fc8471e0e769c1747d1809a6f1dd3161bbc1f16e2298ed7f85e9fe5dc1ccdf47c65b9ccf5e274cfe50c6dfe27c82e76f0d3f6f2b61b2df84e9fa8cf8e7c41ecc0d63d68f6c4ad8883fda13ccf6dc14ccfabe4818c7d35b82693c2798e3697ecf98f96d3a8c997f393f5ff851d88469fcba60f607b384c91f9c31667e8553c11c2f2682891e7d2198e7e304b3fd1c3166fe9aed84299f7a124ce3eb56c2943fee0be6e79d0ba6e7b903c681f3f1b784291e2e05f3f8bb09537d91eee7f8ba9d308d5f25ec581ff553c2347e5330d733370913ffe47ad647779d30c5b7b960be5f9e27fa87f1c26c8abf7433c2a23ff65930f9a3d04998ecafce98edd96f3236ac2f2f8c597fc21be1646f23c12ccf9384493f9560f687d78c591fc28660badf5f254cfe54c6dfa2fb2dcf4ff4c1e582391e68c1accf321ed3139a09533c180ae6f9ed30667df13e61f20f9960ce2f5dc224cf3bc13c9f743fe98bee09667e0f0433fd8709e3fc4c9570d2af79c2a45f23c1acbfd384e9fc9160b68f76c2c4ff743dfbf715a6f3db82997f45c2383f2df363fdd579c2f47c2598e7e712a6f30bc1ccaf9784499fdf0573bc64fe3bf617fa24611a6f28989f374998e2f9bd60ce876a8c59deea3661b2bf9660d6b746c2647f581f1927f1d1927c92ffcc170993bd9d0b26fb53ef8c99beec4a30eb7f4d305def041b8e0fb70953fc6f0b66fdae0a66fd3e4b98e27385b1c487ad84e9f9424fa0fb0be27ff267619630f1e34830e7871b09533ebf2d98e3f1306192f75830ebdb0ad37cde04d37c8ccc87f5cdbd0a6679bd254cf2ac08e67cbd9e30c5a7749ee6a7bb0953feb414ccf9c8ad609a8f67fe893eaa03c1ac8f0f09537ce909e67e712b61f217f78259bf9a09d37cae04d37cf44dc2649fc78cc57f05c1cc9fab8469be323ff657f99e60eea76c264cfac6fcf6ec8f544530c7e71bc19cdfa17ddb941f1686b0f87ff79830e97b8f31d3afb61326ff742598ef3f12ccfafe9630f9537ebef85f35104cd7ab4dc2e25fb34230fb9f61c2c41f2f98f3a5c098fda1bd4a98f44f09e67cad9630e53b5dc1dcff90e7b1feb9b9608e17fb09933dcb7cc43f1e244cf2d910ccfab897303d7f2c98fd914b98eca32598f9bdc224af07c1ccffe384e97c9db1c4d7f384c91e847fac9fc52c61ea0f3d0ae678b69130f1c70ae67a2b4f98e63f15ccfeee2c61cacf593e9ee36d3e4898e6772598e3e546c2d43f60fa3cfb138ffec27ad14f7bcd38b03e1e0bde227eed124efef34530fbc346c2144faa82d93f7704d378f96dc2e43feb8c59ffb271c294bf5c0be6783c4898fc515f30e7579782b99e3e14ccf9da5430cd47a5eb693ec51b63d657b59f30d99f16ccfdac79c2a40f35c1eccf3705b37c9b0993fe9d32967ae03561ca1f841f520fbc244ce7df05b3fe9d254cfe2017ccfeba2598f3efc38449fe5b8445df7425617a9e17ccf30909933def09e6fa649130e9df8e60f65f078c255f2b12a6e76582b9de68264cfe4b0b667f83f1c9d545dfb21bc6e2bf2f05b33e9a84c9deb61973bcb32782b93e550993bf7e12cccf3f12ccfa9f274cfa95c6a3e7bb016396afad274cf1aa10ccf1789430c59b3dc1ec5f2e1326fb9f08667b6f274cf27e15ccf9cb7dc234df343fe65743f0760dcfcf098bbeb8938469fe6782595f6cc224df8160b697a384c97fb60573fed34998ecfd5030e71bd70993bc8d60a24f6f0a66fd784f98e8ed31667d34d709d37c653cd6c7fe2c613aff2898eb519730e9d3a960b6c7b384c95ed378ec5fb384293fdf124cf4e4321efb2bdf4e98e6b32f98eda796309d7f16ccfe238dc7fd50a19ff53d7f154cf32b8e0573be72c798f5d9cc1226ff89fec3adfc4f5f30cbc3264cf181f897fc85ad264cfa9109667fdf10ccf5c4b6601e7f9830c9fb4030e973088c25ffd182b93eab08e678db4a98e623e38bfc6cc2444f2198edad9b30c9f75830cdd79f254cfe49e89778b32798ede730619acfb360b69fbb8429fff082397f6a264cf97a4d30d713070913ff7605733c95e74b3edf4f98f46d2698fb8b8d8469be3b82d9bfcaf8e2bfb612267e907ec3edecefb0bfe7933fc813a6f986bae01d9477fece98e553bc0866fa9a82595f1e0493be646dc13b16714f706313e77bcc58facb7dc12cff4230f1cfba8469bee97e7a5efe96303e4f093decfffd4c30dbc366c224cf5bc1f47c5711ccf6f64c38883fde17ccfafb2898f5f14930cf4fee97fa09f3691f84defc5270c321be232ce3db4bc17cfd91601abf3fd34a1badfeeca7b6dac1f1f1f36707dd5b3afeea3c50164afbdf7c846f1cf1ba4ce770fca6e7525cfccb3cc94b47fa3d9eb33f91e96f9249fcfc2d72c97581fc2d1ff4fbdf2def9fcae577f024c9c17c3ecae759562bbb1968f73b9eff1bede5a31df84f32fad1f5ae74cfdfc15e4abee947b2e1e3935dfdedece56b1ff599df24a7e2837dfdddec65283e0b3e1ff4236ace28da027eb7681378c4dfc3e7283e9d3f1ffe66f6e2f5931ec3cca22ce4f311a87ad613b689917e81c3027ed6d3f81da90e7ceddfc75e6630434fb3433cd673b48348e1ab7ec3dfd1aca3df5ac031d5ef48d192a9fa3bd98b476d899a3644cba6dfcd35c598b7282bd4b017bdabf79092056b6213cefd8dec05789feb7da022cefa000ecec970f616671ced66a10ff51150d142b944998cf1bee3dfe5cb7e8b5c4e60462738a338eb5398f1996eeb8eeec2ec7bbaafcfe1b8d097fa4a5feb1b7d0bbfbfd3f72897785fe577f9b2df622ffbba0a335260d51bba0633ddd475bda5b7f58e6e28ad9432cac26194535e0595a95c156aa086fa4e81f5abc7ffabf18562b7c4ef726c9798f1aa976aa4bbea498dd5b39ac0ac5fd454cdf098a979e988bf9bc2d957f5a616ea5d2dd5ae3e52d186c287677cf46f3ff577dfb11778c2091c43d564dda71c6aa4f6d5813a54477aac5aea589da85375a6da30db0ece79a6bafcd9537d38e678ac288ac7b9bad0dbea525da96b75a35fd5adbad34f30f654eda97ba0700972ab94ea2255ce2dfe84bd60ac56d5c833a1466d002535fda636e1b3aeb6d4b6da01593460f6f338b85130fb3eccba7cccf1137fe07ccf18a42ad2a38c35ce78bd3001bcb8070fff883ecf81d62a93e9efe414dfb517960b5343779a181b4c6e0a5d370333340f2403a4e4118e11ccb49b6413bfa34ccc53a4847fb4c8c88ccdb399981733057b6b452a805371c631875896e5f117ed252bd90b1d2706ee34733534afe6cd2c505f70e6c86b91c3ec8b036563de8916f8a6cdc82ccd2e52f462f64c13e4b36f0ed05bc7383506591dfe8a1ffb99bd4459c801387ad13773645ae6d89c9853a06004735ac2ff239e6dd4b4b25cc45e84a2a865ac89789c01654b944f5bef988ee9aa163c1ba85107fad1f47e947bffb9f892342b03ef5ba82373a896a6af1b668c1cc5d9e00c4dc96fad66bfb29fd5b9deca76e02752f30ebf07eb31e7e6c25c9a2b98e113cc70887941f69dbcfa3bf6122d5e6462aee1730094dc80ad47ddea1a93ac7d8e728832e927bbd125fb50289fbed9859f25caa7079f4857f4064cfdd4dc9a3b736f2a603773736daa5fd53c7fd25ec47f88dd0c74d76c40f48b966cd8024630ab51b215f155fd0f3f2b5bead12752326759aeec6c666a60399ba60e165f355b9f7a09f9a7f97d3fbe440f1933156fb6cd11c864c734924f026aac260aac688b42ea66e2bb30de4cd9cf81fb055b5fd1d7b3265d471c204fddb6d63ad5b21ef3b5396a9bd14f36fc457b89f12466816f68271bca20254bd479b48028934883cdc04769f9ad9adadc16aa61dacada0148f25c35387ac28f1db2cdf430d64ca3ada1762ae4d05439fb602eeda32ddb6d8d8ebf908f3d42461f7d4ad4ae1ba6e4294a0564429ad5b3620fa8253607ffe6ec931ddb673bb12fc6d9a99dd9b97db56f76616a4015c9a967dfc9ee8d66fbd1384e0fa95dda5d885f475cd5c5fae74162cc47dff66d7b79b37bb12eb44dbb0f163fa3d89e62f99cf88bf612e7d780391cd8437b645bf6580ded896e8307afdb537d6fcf74d7b66dc7766dcff6416630963d8f1187c763ef069862e8d05ed84ba02670f6142bba55bd937f96cbcfecc55ec108efa662afed0df033ca44a34c6e55274615e0e4083406754a4dec9dbdb7155bb51bb666376d5d3f002762351cabe8784ced9699da6d90d70ee46fe7e4b36d2346a8e401a2d67560b4a903057706a889d967ac8106a6f7b117fd4bf632b457ceea6be7209ecc536c8fb1503c30ccc216a611d7df5ce67257c08ceb7ae40668b5944f57b0ff7282f8c51cb8a17b708f6e14a36d1c0dc6eda16f331c69e7400b48d93db9b17bc67a7481f9f473c977adf5dfbe155f208b50c76e824fed925f8a76021683f6e25ee273ddd4cddcdc1e47db72affd191eb1c68cd573dea75ecd10e354cced82ba710bf76e5ba6e3966e173517e502f18af30763306b38777bfade35dd3ed4a447585d7fd187fb81bdace7a040b73b5075c82c16e82b3bc94ae66c231da4e4d01db996adb96377e20edca99ebb33d4ed68b1f3943bc4fa3e56d219c6f337d554f7ae0dd474d0766664779441a36f1c459fe8baae67725b03d9bc60b5fdb1b6ca3fdb0b1e94933eb87e9c01f8ae421dd8ba3b77179839aeb214e05ab49b2813c87227ee522df5a17b5bd365a93b629efdecae8092a1de77d7b15ae8cfb8fb3a7637a0bdb7ee2e5203f9c03bc7a6197be8c7c84177ef2a2013b07ae0d0c3daf8d917f6427ac7311ecfbee293ab1021eb6adb6dc47c9e231965f0e2c71ac6ba9adb3447d88d7883fb3efa981357d74f989d6ec0358faae5b6dcb6dbd1bbaae91afa006475e68171187d7a6b791be70bde78eb9df7baa20e809a3c1e31eeadd5a25fc9c521f67aae6a3ee8579f9942ed407d12a3631fe36017eb14f2c01d9fdba9db744db04abfaec3c9de6af0f43ec8057c982ffcc00fcdb97fd057ba03b50a7a5875e31ffdc83fb1a6f5487b25af032ddbf56337078f32f2cfd47beb539f54f2c4757b59e95d406b7d420d83ac01f85dc7a8d2659e75390644ad9efa897ff150d1629f0b3b4bcc89728f1fb20f5581dfeffa999ffb57ec059c5bebdfa0d66fd93d770df71de96bbf70cb186739cef456725133ffee97906d0e40c324beacf2c47f2317b86292f0a369f95d947e47ea77ce8b418ffd9e6ffa7d7dc8bd2eeef2f178abdc76df1d80262dfc813ff4471851a217797177eec1b7fcb1aef80079560b6473e2f7906b7db61b3c50171afed49f41b63976afe5f59b28971fd80bd1dbc4fe6306b20990ddb521a249cdd8e17ae5318e0f1ab1035eb806a3beeadcb7c1b65eb93f1c3ef4f35fc13676fd9befc48a2766291e46f43ddfd757ae0d9ca8b8aa3f572d90cd05663752ddb06ca2c7f197fe0a28bfc67cccb2adacf56b3eca85fdcb84fac2a607fa7d13bd3f669233ae4f204d8cb49885bfd5b7661be24995ebcd917e4e7139875a872263ec9dd56026775126d6f87ba0a50299c254195f051fd65637a0655011fb0d5f3398aba1ec4729e644cfd6f69ba02375b47ea2866a5e27f9d95a7c117b71c8570ffc3a055b78c6917bab5e0a771d1af6ce0d21b69ff82d8ce9867b282f3c56116b501ef35d5ff96db013a024d53694dbbfd80568da0e7021cab6114015b87f20754e4fea9a604015dd9a0ffb54bf7c8aa3312fae20ed6dbda926907529e9ad48561eadd1de071fc2aaee13df82b5fabe3e8e72018d7021b39590636cefa53c9fabaea8a9ee2e146e07e45bd10f611086e101ad739ee2ff0873804e78f4fb9019e51885b98e11b994ec25acc518879960fc7e1646d187a56cbe97783a855cb8e20ab0c44ac967d138735d094f668becc7b5c3d82ed0e2a977b694aa2cc65ea4c886e710d76580dfe1c56c3acc2ab99f26fd9b1ed6002f7aea4e308f18fd582ea2e3bcb2e0c8a785a9de420fba92c923ca680e75dfa1ad8659085fac41eeebaa6f433d089484cc8dc31c2999c6f824b5096792317e4c6d115ec31b64afc04de3752f2c4c1b3d739f7d18710146b1d16752a6bada37f0d15e42d2f1f87d17b48c74b2e3fba8bdc29f3e575c51c38eec86b6ee15f5777d0df2186af413ec06dec1ccded1a3a74a9a7361c98d63e6d50ecbb0abcf30568cc25e68725f64955bcca94b13f621c68c29bf13fb4e3d22918bec4f21dec61a215e39801c6b0746eda69e17c9e509463d0887e08d69edd1acc513f202d10b6f8571a078b2aa4b34e5c258ffe8c8f3d0b26ffa1c72805dd4fb03530fc75827cd52a48cf97f23d20279d9d0676cfdd223fa185f5672c9d15e9e5d5c8570fa309cacf5ea492e9017db853d0ea7509f288ec3ebebf96390ed9d3f349370861e76c4d9e8aada22cb9e9953bbf0037b165ef400b21cef6277af65261fe4d2a72810da6e6ce6b4729b8eec47f60287c3fa3aae750d744fe9558715e3f163d4319b878e1b834f99637d62573a8bf6f6a8a721f383701429095dee6f18d632d219ccb3cc69e8f937a89e15f790632c72c0fb138ca95ce5518f07fe9f9a5ae8bbc8ede8cbe479c32fea9750f663c09f0cb2c53e752a520f92e5a21ae1dc9eb8377706b9ebf843fc0dfa28ecf9c37011bd46e8a2adcf57f2e0efd12f15e112b470007695e926f67ab0e60cd370156351eaf3cc531c005b0ad72897951ffbaaae74124bd977cff500bed8d298e2913ba66d8e751beaf89c471baa1a64a2b462a7205778f347d89f8db5dbaa53f4245dc068296e37dc845bb0b9f8ec26e8fd84c601ca0ef59569f3733b29fb47efed2ec31dead000e79a7faa5f441ed3241bf2110b7d6907eb7acb5e32ae971c81740bc871e15a7f4ef527d62eefb692e2c988fd955af531639f42f5c37da884aaadc62e2bd635919a3713ab35d050b389b4248fac648dc0860d35c28a2ce6e68a7de75772615a396b8ffb262e14adf890a58a5c80163b05ef48757cd4f327904b0572e1a52ff455c8a91f917afd7d96498f7a9d51f7432d6c86ba83fc0ae49f61a536d1e3b015edc61c85ed923ecc1225605fe638468275b9acd98be4612297b8badd8c7a6f5fd85ee66b7201fee8d8ef7a028d8add8809d4ed077165cef8b01176205b99829dee52fe51f65da9d3ba5473b76b17a1117ca6dd75a6dcb5012b06b92cd51ef8b44b940bd9a9746823771aba0e7975e4f49473f12fea17c9a522addce574516fb10a5bb37efc3cb7737d1f7d9dd4ed99864aebc0bf6506b36a8331fec92ce3ac4526b246063876d267e6c12e329b454f53852a3aae50417e0eb1edda76504729779ba57c3946e829cbc5fec05ec4ffb8642f16f7af1c41ede2d7ec85bec7dee4ab3d83da9ef28421e8fbd4ec43a5c573b0641bd2fbef97ee979e7e0fbd024497ccab56d452b2393d527ba69285d0c23ae99db8881519dc9d65901390bda8926d7f968b4bb4e2dea1e0f4bb7b5081abafa7922f03bd8358dd056f7c021a36027e36a3efcaf2e849e37a0c75c8b9472c3e6cae646d997cfb082bbb76b8cc0a15fbc5b1eb01f9023cb7930d62af9cf3a555be305517d990fc5869cdeeabfa6525972718d9417cddd5b7d90366aca9eec6181cabbc8e6deb26f820a01c7cd93344c60baab4b86fdfe3da6396a2c3aabfd251abd5898e2dcc4656e87bf44b316f18b8b1da89fd25be66657553d7710f1c5fcaf5d65775a54d7e6c14d75c60f46ef6489911d65f31f3884f889588331dd7a44a1a34e4de0f5126ef19d5e71df263e493b15b2c729aa7be1755da5dccc8c6d91368d61862d4abe9857eacfa639f9a7433c5ff69f69c4df451796fed0fea7d5fb21792d1d29e652f54a1336f7b69d5e5458d6d136b4888d9d934c3d5225ecb33680b86b57cce1e6dc9155869ed2c5597e7d91c624aecb32ccd912a40c273a99295746566669cbd8266bfa3bdacf5f3d6e3cb87ded824f62ea1deaf676f7609baab793dbec73d32f0b9d9227b87ba33a0576e674bf0a253dff515f23d7668a81ad6e4b1c23df2b7875c794c3d96b9f428d5b9996443d0835d37771750d38c582fbbc88579b617bd58d8f04558ed39a73ecc677b29d7d04ddc21528b39ab9f664deebeaed61fe77185c2f6ed04eafddd787d063eccda2841388319b1352c8ba853e350c90e541b65d043cdfab0fe8ff9e73968da21d84303fb4a587db15ce2d51de0df5bb0196958d956febd5ce27e87107517e47397b5386b2f5113addf1676273b768bd879028a3aee363b092d8c92185da43e518dec343bcbda5927eecd40aee8b49eb9ea81c61d3f8dac9bf5b27e94a1ea82bd3c81749eb8dee982269c6717e0911e925c065ff4c7a4672972910a0b6a18d5ca2ed38a0279d7a5e4b9ea2cbb72efd8bb0fba65b7dc83b5907b507f4b6ac653d0c56b5b75adec06b2b4f65ac495b57ed65ad0a4dbec2ebb4fde4e5610694de6d4df6615b39d5591eb71be94937d5cafcccb7d798e3539d4ec55fde2c6fe926c99b30feca5609d77ee46b615ed4ac5cab565cf20d3bfc1fc784e76a26cb611c6b1fef475bb9159a4a6c375ea6a5502e41c3f2daf21dbf89dd7a171ad3a7eeff84bbb1d3b4aa02f2bb92c3ef593cbbde4d551c96a66cb5f679b5907fd8ae1ce03ae609977177d703be647591db2ca273dcbb6eca9bb858ab340df14b5700111745b2b739ded649048678d70b956a74aff6b1ebd0266d0144f9e56392073a5611739a457b1f64c75ac43b97c692f5fadd1c2f7766ec01aa7e099240e477fcbeb24666167fa1ad74162edd2f43bee36b77600740c2037b8ca1ddb2079d0fbdce741d68dd2ea395394728bd5aa2e69d83b543b4bdbd135ea11c5fe9bb9ce33ac81eda7fed8bfdb0bb3e7e6507f377005ff4cc9ea1b652173f3e03a61accf621755dd466af2dc1fe64578cd0b7de176f4301f60cd18f3ad984fdce7431b57fa67f9431c09d76ce71f7e66bc262d786a8bfc517720371ee37e67de97f355dcffc97aa5f3ad7c943fc59eb239438f3ac79c8b346266f37c6c3bfe512f6c8027eceb51fe9c4ff2977c9acf207b1fc7da249f47bd066a9af9ab6de66f26faef6959db64f6a55ee58c8fe819cff385b9d2afae1afba0e5b5b75fdc0f6383cbdff325ae26d18e84954fa3194cf35d3f024ddbc5950bf035fa31df833a6317f78a7bcc748690819e00356f20e7f7bc692631b67247efa35c5639f99cc7dfb7d15756f3038c00e26fffc4fa3e2866dd2f9d46be3d96e2367a68dcfb31ce0ffd223f522d3d7655ebb16e1f415d72e5fa9cad56f29699e1ea858218719f0d7d1fb3a325f6db3ec946aaebf89bfc383ff10d57cd4fb117baaa5dfec4fabedf32f3fc2c6fa7ae9d64f39c57c55cd316609daffadae4b8feeeb1e68c4f8b1d9f937c90774026201f57c59a27f65a1a7937ef7177f58b1fee6dcea0fe9ce833983dad1b0cd7d6773ed52f3f5bdf071b98e7fdec5aeff09a56bfbc36127d90c5d565bfe73bf979d0612fee61716fdaab235ac1cd5b489d41b9c41ed8c86ce617f9657e8571eb0b7b419b8433f9757e93df86a95404257bc97fdd5edc993b7067603377f9bda9513ce6b58719c750ac35719744ecc6297f05b54d17eabf297618e23a7e8d570e21f7d683bc12776ee5d5bccb31fe4b4b61aaa05acb376c3b4cf31aae70ad7a969fde79fae67efe870c94df17f9a69f8864d866651db3c73a1ebd9376f7793ddfb2ceb55c966fd37b30aa15ac6dbaa16965d6f4f31dbf0779d78c7a66dca3e5ff45e6c96e629c6ca865cc1fb06f67535cc9b11a34dfb7173d2d347c8ef34aa1cc5d5ce9a748873b2464ef7479271b3c5d5933b437766c0f0b53d8b8a73ff7852b7c5e140122efb9dc93fce267c994f69a9b36d4b147660a5ee309bc89f48c547acfe9dbf1450fb2a3108a4c5b0741ab2828a78abb7153964879f43b579f1df4b610e1a0fe7d80cc14324e13a93bc5a88254f07e1aea03947b2df33599509c891c3bcf16c5c0e4295f5cbdff97ff4a7cc92b51ba50cb8174a192857cd7d3feaeceaa5faf569dc08f3d97d52751bd4499aa5437764be70c57f6eb72e96176709e0db289e9adadef97d7bfbfb7df12ac1577509df9cccc8b61f1503cc60c4d7520475baed6e1d3a1a973b1c220b1f7555d2c14a34c70df56c956cc67b9c40a0f57fd4c3102aeaef6c39472c8efda4bf1640edd1ba4a5afd8d7b7c5389bd85d3354ab370f64cd57e423bb3ffac98ed6f6c2727642f5c957d1fed39e73c84741678be762f2e3f72fbe135fc02bbfe94198e18ade89aeda601f8b177b01c1f701ede691a36757a5fdc93273a89687f0437d8c1eea3ef668d25adb135fc7ab4df9f5ca76d6fa01408d392fa621d3cbd27af52fc7976266afccb68dd1ead5548b79f15abc4134bcb5b3624135e79a5c64c5a4b4237e8dc7e2f7a45b245dc0598cf1c53bbe75f2c18f41ec2fecd2765d139ebbeae5add6e3be6f2feb07af69066f5e6dc5edb92e76034b3ba4d63cacac3ab0ccb8e2ed49bdc2fe2feee19de6c77692df1605afdca4ddbfe0e121532e96c56eecfbb8abd2bcd6d6afbff9bed8873ddbd8c11ee823b793efe5c322147bf8ce08e51dbd354ad67a2ed8555a96282699a1fee4fbf9893e0bdeb66d0f3ba043eccecca21f377be602df9c1bf3be832fdf77feeefb626bc718fb9a0bc82a5aa0bfdda2e9ad1fbb0d7e07866a68b8d036e0476a51a62cfe1e7e4cb60776d3c1cca7e196c57ebeb04ddf88556f981607be1375379e233afd4d7e84fbfb2771cfc5c7daf717e2cbea28d70bf89661dc03696b7925abb87161fc6b71684eb19335fb20978fbe8adf1b330d7f691750fd76a0d28a6ba49043e73575658f7c07f7484c43cb2efd8d3e044af64a7bc6bf7a9fecdbef579679c1fb8da75071c5aea9cba02cd01093ad0bd5bcee5fc3a35de2cef0cf6fbf51be36552fa696358ba3a265b78b634dbbb6a03e811a3ed30fb666a6c5897d500a65728276f2cefb6c3cf661d6de49ff95f8f28907f8562eee9d7cc1b7d30edc89f7902bb57dcbb4f2bedfb72f763fec17a7a16d6a10552de62f0dbf9765eac27582c95ec3866b9a695681fc5bc55c1a2aad83ac1673ab980b63b5362946104fa6d177018e32996325365e9b4fbe2e979fda4be96f8cd0de08de0bfe8c3dc4d81f3bf0cff6d1d68b335ff719e408d3a8156ea896a15fb4dd65d8283af9c84ef3ad6ce81eec76dc091fee62050db1eb153e1f78a6588fe2f717bd28ba6e1fbd70c03d0443f23af4fed89fb4972ffe860856c0633d51b8a21d77a7d13a7ffc1ebd2444d4b8b30d321e9787eb70a74676c3b5ed861a853b5b8bab54402d7720788d4bdebec6bd9eb8a3788cbb8097f15335b1371af7342fb97bbfeecbbe1f5f3efcfd971ffa384b33e3fd2ab2cf6b547a3772fdefc394df975cffbdfba0176bf7fd689ebf602f3ffefb2eb8a383726afc8cbc9d970ea1eed367ead9afafa5acf759fedddfc658c3bff43ef217b259eb8508ef429a256910bdb35fbeaf1caf655fe62aa7b069afc1577f0ba8ac2b097f3bbee45fcac77f88bbab73eb7f2b21603f7efae93e1977d5835cf556567b3ecbfb6cdc9a4e7c8a31dfccc7f28fb25993cb0ffe46d257f1794d8683d55e8f8fcff918db4a357e19af8dfb4db9145ff0bf2cb3affe3eccc7fb0b5d5e4f7022aff535948fbee9836d7c96c9afd5fbf1f3447f5ea359f1245b7b3756d610e327fdd588d21bc072be7c7cf25bf4bc75b9969e9be402d7153decf7ff8abdacf3f48b7764b42af9a2c873c76fedacbfcffc950c3ffba7b2dd7c96fd4a4e701d50b22697efe6c8bf92b77dd4f9ef9effd1f3beb4a1b2effb7e7cf97fe2f84d7f7fec6ff1f9ff955cfef7fffcc7ff011f3a1368</data>
-    </image>
-    <image name="image1">
-        <data format="XPM.GZ" length="1085">789c5dd0cd6ee2301000e03b4f11911b5ad1189290a8da0324a5e90f29941e2aadf6e0d84ea10d1020849ad5befb7a3cceaa29e2e06f663c33ce55cf7a9dcfacde55e758d16acd2cb6a207abc74f9b8dfcf5fbe79f4e97f896fabb8145ba3f3addbec5ac74b715704ed5d9769c01cb73e0423368f80224c190e53e70091c389e83d98366e83942679f0c43cc7e0087c4f3307b63c8b1d559337459c6810f48df137aab49436c750f748917320f78418e4cf65993fa04b33572c4313b067a039f333de80e39e238680ff4d5d2581c69d2c0c3ad8e0db1f30619127cd1dcd00c7a4452824c80a321359d73cd8c129c1b1b0acc726030a414b31299f9989d1952a4d0ccc23073819f861c973c2133d3b904aacf6ceeda9a8c12bc5b219929de21f9005900a99bf9f8e9a8a159728a5477f5d77847367719305373b1788b14668d4c9337d95b2437ef5d03b9c84df10a28fc866fc05c9522fbf0b369c6b8d0c7ffb1fc6db57effb0bfc68acd7657ee0fedba63599dea73d18a7dca525ec6ed3aa16293a81d2bf232beb1bfc578d58a416731ad641da95381b1e3f496ca939432c9f3bb7b8c450f8fb39994b18c93493a36fda2a7b9aa8ae3e4b278b69b192aa822499dc2d6cddc68b94ff697f46c7fdd255ad6f5e2dbdbfac7c3cbd8ecf7f7baf30f538f0154</data>
-    </image>
-</images>
-<connections>
-    <connection>
-        <sender>cancelButton</sender>
-        <signal>clicked()</signal>
-        <receiver>UnpackDlg</receiver>
-        <slot>reject()</slot>
-    </connection>
-    <connection>
-        <sender>destButton</sender>
-        <signal>clicked()</signal>
-        <receiver>UnpackDlg</receiver>
-        <slot>clickedDestButton()</slot>
-    </connection>
-    <connection>
-        <sender>unpackButton</sender>
-        <signal>clicked()</signal>
-        <receiver>UnpackDlg</receiver>
-        <slot>clickedUnpack()</slot>
-    </connection>
-</connections>
-<slots>
-    <slot>clickedDestButton()</slot>
-    <slot>clickedUnpack()</slot>
-    <slot>destroy()</slot>
-    <slot>init()</slot>
-</slots>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/mac/unpackdlgimpl.cpp b/util/install/mac/unpackdlgimpl.cpp
deleted file mode 100644
index 5538f4d..0000000
--- a/util/install/mac/unpackdlgimpl.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "unpackdlgimpl.h"
-#include "licensedlgimpl.h"
-#include "keyinfo.h"
-#include <qdir.h>
-#include <qfiledialog.h>
-#include <qlineedit.h>
-#include <qtextview.h>
-#include <qpushbutton.h>
-#include <qarchive.h>
-#include <qmessagebox.h>
-#include <qregexp.h>
-#include <qapplication.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-UnpackDlgImpl::UnpackDlgImpl( QString key, QWidget* pParent, const char* pName, WindowFlags f ) : 
-    UnpackDlg( pParent, pName, f )
-{
-    destPath->setText( QDir::currentDirPath() );
-    if(!key.isNull()) {
-	srcKey->setText(key);
-    } else if(QFile::exists( QDir::homeDirPath() + "/.qt-license")) {
-	QFile lic( QDir::homeDirPath() + "/.qt-license");
-	if( lic.open( IO_ReadOnly ) ) {
-	    QString buffer;
-	    while( lic.readLine( buffer, 1024 ) != -1 ) {
-		if( buffer[ 0 ] != '#' ) {
-		    QStringList components = QStringList::split( '=', buffer );
-		    QStringList::Iterator it = components.begin();
-		    QString key = (*it++).stripWhiteSpace().replace( QRegExp( QString( "\"" ) ), QString() );
-		    if(key.upper() == "LICENSEKEY") {
-			QString value = (*it++).stripWhiteSpace().replace( QRegExp( QString( "\"" ) ), QString() );
-			srcKey->setText(value);
-		    }
-		}
-	    }
-	    lic.close();
-	}
-    }
-    connect( srcKey, SIGNAL( textChanged( const QString& ) ), this, SLOT( licenseKeyChanged() ) );
-    licenseKeyChanged();
-    logOutput->setWordWrap( QTextView::WidgetWidth );
-    logOutput->setWrapPolicy( QTextView::Anywhere );
-}
-
-void UnpackDlgImpl::clickedDestButton()
-{
-    QString dest =  QFileDialog::getExistingDirectory( destPath->text(), this, NULL, "Select destination directory" );
-    if (!dest.isNull())
-	destPath->setText( dest );
-}
-
-void UnpackDlgImpl::clickedUnpack()
-{
-    QArchive archive;
-    connect( &archive, SIGNAL( operationFeedback( const QString& ) ), this, SLOT( updateProgress( const QString& ) ) );
-    connect( &archive, SIGNAL( operationFeedback( int ) ), this, SLOT( updateProgress( int ) ) );
-
-    archive.setVerbosity( QArchive::Destination | QArchive::Verbose | QArchive::Progress );
-
-    QString dest = destPath->text(), src="qt-mac-commercial-3.0.0.app/Contents/Qt/qtmac.arq";
-    if(!dest.isEmpty() && dest.right(1) != "/")
-	dest += "/";
-    archive.setPath( src );
-    if( !archive.open( IO_ReadOnly ) ) {
-	QMessageBox::critical( NULL, "Failure", "Failed to open input " + src);
-	return;
-    } else if(!QFile::exists(dest) ) {
-	QDir d;
-	if(!d.mkdir(dest)) {
-	    QMessageBox::critical( NULL, "Failure", "Failed to open directory " + dest);
-	    return;
-	}
-    }
-    unpackButton->setDisabled( true );
-    srcKey->setDisabled( true );
-    destPath->setDisabled( true );
-    destButton->setDisabled( true );
-    LicenseDialogImpl licenseDialog( this );
-    if((!licenseDialog.showLicense( featuresForKeyOnUnix( srcKey->text() ) & Feature_US )) ||
-       (!licenseDialog.exec())) {
-	QMessageBox::critical( NULL, "Failure", "The license agreement was rejected." );
-	updateProgress( "License rejected" );
-	unpackButton->setDisabled( false );
-	srcKey->setDisabled( false );
-	destPath->setDisabled( false );
-	destButton->setDisabled( false );
-	return;
-    }
-
-    QString srcName  = "qt-mac-commercial-3.0.0.app/Contents/Qt/LICENSE";
-    QString destName = "/qt-mac-commercial-3.0.0/.LICENSE";
-    QString srcName2 = srcName;
-    if ( featuresForKeyOnUnix( srcKey->text() ) & Feature_US )
-	srcName2 = srcName2 + "-US";
-    if((!archive.readArchive( dest, srcKey->text() )) ||
-       (!copyFile( srcName, dest + destName )) ||
-       (!copyFile( srcName + "-US", dest + destName + "-US" )) ||
-       (!copyFile( srcName2, dest + "/qt-mac-commercial-3.0.0/LICENSE" ))) 
-    {
-	QMessageBox::critical( NULL, "Failure", "Failed to unpack " + src);
-	archive.close();
-    }	
-    else {
-	QMessageBox::information( NULL, "Archive unpacked", "Qt has been "
-	   "extracted to " + dest + "qt-mac-commerical-3.0.0\nPlease read "
-	   "the INSTALL.macosx file for installation instructions."  );
-	cancelButton->setText( "Quit" );
-    }
-}
-
-bool UnpackDlgImpl::copyFile( const QString& src, const QString& dest )
-{
-    int len;
-    const int buflen = 4096;
-    char buf[buflen];
-    QFileInfo info( src );
-    QFile srcFile( src ), destFile( dest );
-    if (!srcFile.open( IO_ReadOnly ))
-	return false;
-    destFile.remove();
-    if (!destFile.open( IO_WriteOnly )) {
-	srcFile.close();
-	return false;
-    }
-    while (!srcFile.atEnd()) {
-	len = srcFile.readBlock( buf, buflen );
-	if (len <= 0)
-	    break;
-	if (destFile.writeBlock( buf, len ) != len)
-	    return false;
-    }
-    destFile.flush();
-    return true;
-}
-
-void UnpackDlgImpl::updateProgress( const QString& message )
-{
-    logOutput->append( message );
-}
-
-void UnpackDlgImpl::updateProgress( int )
-{
-    qApp->processEvents();
-}
-
-void UnpackDlgImpl::licenseKeyChanged()
-{
-    QRegExp keyExpr("^....-....-....");
-    if ((keyExpr.search( srcKey->text() ) != -1) && 
-	(featuresForKey( srcKey->text() ) & Feature_Mac))
-	unpackButton->setEnabled( true );
-    else
-	unpackButton->setEnabled( false );
-}
-
-void UnpackDlgImpl::reject()
-{
-    exit( 0 );
-}
diff --git a/util/install/mac/unpackdlgimpl.h b/util/install/mac/unpackdlgimpl.h
deleted file mode 100644
index 11585d7..0000000
--- a/util/install/mac/unpackdlgimpl.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef UNPACKDLGIMPL_H
-#define UNPACKDLGIMPL_H
-
-#include "unpackdlg.h"
-
-class UnpackDlgImpl : public UnpackDlg
-{
-    Q_OBJECT;
-public:
-    UnpackDlgImpl( QString key = QString(), 
-		   QWidget* pParent = NULL, const char* pName = NULL, WindowFlags f = 0 );
-
-    virtual void clickedDestButton();
-    virtual void clickedUnpack();
-    virtual bool copyFile( const QString& src, const QString& dest );
-public slots:
-    virtual void updateProgress( const QString& );
-    virtual void updateProgress( int );
-    virtual void licenseKeyChanged();
-    virtual void reject();
-};
-
-#endif
diff --git a/util/install/package/main.cpp b/util/install/package/main.cpp
deleted file mode 100644
index 39c71db..0000000
--- a/util/install/package/main.cpp
+++ /dev/null
@@ -1,397 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "qarchive.h"
-#include <qapplication.h>
-#include <qfileinfo.h>
-#include "keyinfo.h"
-#if defined(Q_OS_WIN32)
-#include <windows.h>
-#endif
-
-class ConsoleOutput : public QObject
-{
-    Q_OBJECT
-public:
-    ConsoleOutput() : QObject() { }
-    ~ConsoleOutput() { }
-public slots:
-    void updateProgress( const QString& str) {	qDebug("%s", str.latin1());   }
-};
-
-static int usage(const char *argv0, const char *un=NULL) {
-    if(un)
-	fprintf(stderr, "Unknown command: %s\n", un);
-    else
-	fprintf(stderr, "Usage:\n");
-    fprintf(stderr, "%s [options] [keyinfo] files...\n", argv0);
-
-    fprintf(stderr, "\nOptions:\n");
-    fprintf(stderr, " -o file       : Outputs archive to file\n");
-    fprintf(stderr, " -n            : Follow symbolic links, do not archive the link\n");
-    fprintf(stderr, " -s            : Quiet mode, will not output process\n");
-    fprintf(stderr, " -desc text    : Add the description text to the archive (e.g. \"Qt 3.0.0\")\n");
-    fprintf(stderr, " -extra k v    : Adds the extra value v with the key k to the archive\n");
-    fprintf(stderr, " -h            : This help\n");
-
-    fprintf(stderr, "\nKey Info:\n");
-    fprintf(stderr, " -win          : Windows Archive\n");
-    fprintf(stderr, " -unix         : Unix Archive\n");
-    fprintf(stderr, " -mac          : Mac OS X Archive\n");
-    fprintf(stderr, " -embedded     : Embedded Archive\n");
-
-    fprintf(stderr, "\nThe following options are not for packaging and can't be\n" );
-    fprintf(stderr, "combined with the options above or any other option:\n\n" );
-    fprintf(stderr, " -unpack file        : Unpack the archive file to the current directory\n");
-    fprintf(stderr, " -getdesc file       : Print the description text of the archive file\n");
-    fprintf(stderr, " -getextra k file    : Print the extra value for the key k of the archive file\n");
-#if defined(Q_OS_WIN32)
-    fprintf(stderr, " -res file1 file2    : Add the archive file1 as the binary resource\n");
-    fprintf(stderr, "                       QT_ARQ to the excutable file2\n");
-    fprintf(stderr, " -getres file        : Get the binary resource QT_ARQ from the executable\n" );
-    fprintf(stderr, "                       file and store it under qt.arq\n");
-    fprintf(stderr, " -namedres RES_NAME file1 file2:\n");
-    fprintf(stderr, "                       Add the file1 as the binary resource\n");
-    fprintf(stderr, "                       RES_NAME to the excutable file2\n");
-    fprintf(stderr, " -license LICENSE file2:\n");
-    fprintf(stderr, "                       Add the license LICENSE as the binary resource\n");
-    fprintf(stderr, "                       LICENSE to the excutable file2\n");
-    fprintf(stderr, " -license-us LICENSE-US file2:\n");
-    fprintf(stderr, "                       Add the license LICENSE-US as the binary resource\n");
-    fprintf(stderr, "                       LICENSE-US to the excutable file2\n");
-#endif
-    return 665;
-}
-
-static int unpack( const char *filename, bool verbose )
-{
-    QArchive arq( filename );
-    ConsoleOutput output;
-    if ( verbose )
-	output.connect( &arq, SIGNAL(operationFeedback(const QString&)), SLOT(updateProgress(const QString&)) );
-    if ( !arq.open( IO_ReadOnly ) ) {
-	fprintf(stderr, "Can't open the archive %s file to unpack", filename);
-	return 42;
-    }
-    if ( !arq.readArchive( ".", "G87A-QJFE-DQF9" ) ) {
-	fprintf(stderr, "Couldn't unpack the archive %s", filename);
-	return 42;
-    }
-    return 0;
-}
-
-static int getdesc( const char *filename )
-{
-    QArchive arq( filename );
-    ConsoleOutput output;
-    output.connect( &arq, SIGNAL(operationFeedback(const QString&)), SLOT(updateProgress(const QString&)) );
-    if ( !arq.open( IO_ReadOnly ) ) {
-	fprintf(stderr, "Can't open the archive %s file to get description", filename);
-	return 42;
-    }
-    QArchiveHeader *header = arq.readArchiveHeader();
-    if ( !header ) {
-	fprintf(stderr, "Can't find the header in the archive %s file", filename);
-	return 42;
-    }
-    if ( !header->description().isNull() ) {
-	fprintf(stdout, header->description().latin1() );
-    }
-    return 0;
-}
-
-static int getextra( const char *key, const char *filename )
-{
-    QArchive arq( filename );
-    ConsoleOutput output;
-    output.connect( &arq, SIGNAL(operationFeedback(const QString&)), SLOT(updateProgress(const QString&)) );
-    if ( !arq.open( IO_ReadOnly ) ) {
-	fprintf(stderr, "Can't open the archive %s file to get description", filename);
-	return 42;
-    }
-    QArchiveHeader *header = arq.readArchiveHeader();
-    if ( !header ) {
-	fprintf(stderr, "Can't find the header in the archive %s file", filename);
-	return 42;
-    }
-    QString extraData = header->findExtraData(key);
-    if ( !extraData.isNull() ) {
-	fprintf(stdout, extraData.latin1() );
-    }
-    return 0;
-}
-
-
-int main( int argc, char** argv )
-{
-    uint features = 0;
-    bool output = true, doSyms = true;
-    QString desc;
-    QString dest;
-    QMap<QString,QString> extra;
-#if defined(Q_OS_WIN32)
-    QString arq, exe;
-    QString resName;
-    bool doRes = false;
-    bool doLicense = false;
-    bool doLicenseUs = false;
-    bool getRes = false;
-#endif
-    QStringList files;
-    int i;
-    for( i = 1; i < argc; i++ ) {
-	//options
-	if(!strcmp(argv[i], "-o")) {
-	    if ( ++i < argc )
-		dest = argv[i];
-	    else
-		return usage(argv[0]);
-	} else if(!strcmp(argv[i], "-n")) {
-	    doSyms = false;
-	} else if(!strcmp(argv[i], "-s")) {
-	    output = false;
-	} else if(!strcmp(argv[i], "-desc")) {
-	    if ( ++i < argc )
-		desc = argv[i];
-	    else
-		return usage(argv[0]);
-	} else if(!strcmp(argv[i], "-extra")) {
-	    QString key, value;
-	    if ( ++i < argc )
-		key = argv[i];
-	    else
-		return usage(argv[0]);
-	    if ( ++i < argc )
-		value = argv[i];
-	    else
-		return usage(argv[0]);
-	    extra.insert( key, value );
-	} else if(!strcmp(argv[i], "-h")) {
-	    return usage(argv[0]);
-	//keyinfo
-	} else if(!strcmp(argv[i], "-unix")) {
-	    features |= Feature_Unix;
-	} else if(!strcmp(argv[i], "-win")) {
-	    features |= Feature_Windows;
-	} else if(!strcmp(argv[i], "-mac")) {
-	    features |= Feature_Mac;
-	} else if(!strcmp(argv[i], "-embedded")) {
-	    features |= Feature_Embedded;
-	//unpack
-	} else if(!strcmp(argv[i], "-unpack")) {
-	    if ( ++i < argc )
-		return unpack( argv[i], output );
-	//getdesc
-	} else if(!strcmp(argv[i], "-getdesc")) {
-	    if ( ++i < argc )
-		return getdesc( argv[i] );
-	//getextra
-	} else if(!strcmp(argv[i], "-getextra")) {
-	    if ( ++i < argc ) {
-		if ( ++i < argc )
-		    return getextra( argv[i-1], argv[i] );
-	    }
-#if defined(Q_OS_WIN32)
-	//res (Windows only)
-	} else if(!strcmp(argv[i], "-res")) {
-	    doRes = true;
-	    if ( ++i < argc )
-		arq = argv[i];
-	    if ( ++i < argc )
-		exe = argv[i];
-	//getres (Windows only)
-	} else if(!strcmp(argv[i], "-getres")) {
-	    getRes = true;
-	    if ( ++i < argc )
-		exe = argv[i];
-	//res (Windows only)
-	} else if(!strcmp(argv[i], "-namedres")) {
-	    doRes = true;
-	    if ( ++i < argc )
-		resName = argv[i];
-	    if ( ++i < argc )
-		arq = argv[i];
-	    if ( ++i < argc )
-		exe = argv[i];
-	//license (Windows only)
-	} else if(!strcmp(argv[i], "-license")) {
-	    doLicense = true;
-	    if ( ++i < argc )
-		arq = argv[i];
-	    if ( ++i < argc )
-		exe = argv[i];
-	//licenseUs (Windows only)
-	} else if(!strcmp(argv[i], "-license-us")) {
-	    doLicenseUs = true;
-	    if ( ++i < argc )
-		arq = argv[i];
-	    if ( ++i < argc )
-		exe = argv[i];
-#endif
-	//files
-	} else if(*(argv[i]) != '-') {
-	    files.append(argv[i]);
-	//unknown
-	} else {
-	    return usage(argv[0], argv[i]);
-	}
-    }
-#if defined(Q_OS_WIN32)
-    if ( doRes || doLicense || doLicenseUs ) {
-	if ( arq.isEmpty() || exe.isEmpty() )
-	    return usage(argv[0], argv[i]);
-	QFile fArq( arq );
-	if ( !fArq.open( IO_ReadOnly ) ) {
-	    if ( doRes ) {
-		fprintf(stderr, "Could not open archive %s", arq.latin1() );
-	    } else {
-		fprintf(stderr, "Could not open license %s", arq.latin1() );
-	    }
-	    return -1;
-	}
-	QByteArray ba = fArq.readAll();
-	// ignore wide character versions (this is for internal use only)
-	HANDLE hExe = BeginUpdateResourceA( exe.latin1(), false );
-	if ( hExe == 0 ) {
-	    fprintf(stderr, "Could not load executable %s\n", exe.latin1() );
-	    qSystemWarning( "" );
-	    return -1;
-	}
-	if ( resName.isEmpty() ) {
-	    if ( doRes ) {
-		resName = "QT_ARQ";
-	    } else if ( doLicense ){
-		resName = "LICENSE";
-	    } else {
-		resName = "LICENSE-US";
-	    }
-	}
-	if ( !UpdateResourceA(hExe,RT_RCDATA,resName.latin1(),0,ba.data(),ba.count()) ) {
-	    EndUpdateResource( hExe, true );
-	    fprintf(stderr, "Could not update executable %s\n", exe.latin1() );
-	    qSystemWarning( "" );
-	    return -1;
-	}
-	if ( !EndUpdateResource(hExe,false) ) {
-	    fprintf(stderr, "Could not update executable %s\n", exe.latin1() );
-	    qSystemWarning( "" );
-	    return -1;
-	}
-	return 0;
-    }
-    if ( getRes ) {
-	if ( exe.isEmpty() )
-	    return usage(argv[0], argv[i]);
-	arq = "qt.arq";
-	QFile fArq( arq );
-	if ( !fArq.open( IO_WriteOnly ) ) {
-	    fprintf(stderr, "Could not open archive %s\n", arq.latin1() );
-	    return -1;
-	}
-	// ignore wide character versions (this is for internal use only)
-	HMODULE hExe = LoadLibraryA( exe.latin1() );
-	if ( hExe == NULL ) {
-	    fprintf(stderr, "Could not load executable %s\n", exe.latin1() );
-	    qSystemWarning( "" );
-	    return -1;
-	}
-	HRSRC resource = FindResource( hExe, "QT_ARQ", RT_RCDATA );
-	HGLOBAL hglobal = LoadResource( hExe, resource );
-	int arSize = SizeofResource( hExe, resource );
-	if ( arSize == 0 ) {
-	    fprintf(stderr, "Could not get size of resource\n" );
-	    qSystemWarning( "" );
-	    return -1;
-	}
-	char *arData = (char*)LockResource( hglobal );
-	if ( arData == 0 ) {
-	    fprintf(stderr, "Could not lock resource\n" );
-	    qSystemWarning( "" );
-	    return -1;
-	}
-	fArq.writeBlock( arData, arSize );
-	FreeLibrary( hExe );
-	return 0;
-    }
-#endif
-    if(!files.isEmpty()) {
-	if(dest.isEmpty()) {
-	    qDebug("Please specify an output package");
-	    return 666;
-	}
-
-	QArchive archive;
-	ConsoleOutput out;
-	if(output) {
-	    QObject::connect( &archive, SIGNAL( operationFeedback( const QString& ) ),
-		    &out, SLOT( updateProgress( const QString& ) ) );
-	    archive.setVerbosity( QArchive::Destination | QArchive::Verbose );
-	}
-	archive.setSymbolicLinks(doSyms);
-	archive.setPath( dest );
-	if( !archive.open( IO_WriteOnly ) ) {
-	    qDebug("Failed to open output %s", dest.latin1());
-	    return 666;
-	}
-	QArchiveHeader header( features, desc );
-	QMap<QString,QString>::Iterator exIt;
-	for ( exIt = extra.begin(); exIt != extra.end(); ++exIt ) {
-	    header.addExtraData( exIt.key(), exIt.data() );
-	}
-	archive.writeHeader( header );
-	for(QStringList::Iterator it = files.begin(); it != files.end(); ++it) {
-	    QFileInfo f((*it));
-	    if(!f.exists()) {
-		qDebug("Failed to open %s", (*it).latin1());
-		continue;
-	    }
-	    if(f.isDir())
-		archive.writeDir( (*it), true, (*it) );
-	    else
-		archive.writeFile( (*it), (*it) );
-	}
-	archive.close();
-    } else {
-	return usage(argv[0]);
-    }
-    return 0;
-}
-
-#include "main.moc"
diff --git a/util/install/package/package.pro b/util/install/package/package.pro
deleted file mode 100644
index 4edc96e..0000000
--- a/util/install/package/package.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-TEMPLATE = app
-SOURCES = main.cpp
-INCLUDEPATH += ../archive $$QT_SOURCE_TREE/include ../keygen
-CONFIG += qt console
-TARGET  = package
-win32:DESTDIR = ../../../bin
-unix:LIBS += -L$$QT_BUILD_TREE/util/install/archive -larq
-win32:LIBS += ../archive/arq.lib
-DEFINES -= UNICODE
-
-win32:!shared:SOURCES += \
-	../../../src/3rdparty/zlib/adler32.c \
-	../../../src/3rdparty/zlib/compress.c \
-	../../../src/3rdparty/zlib/crc32.c \
-	../../../src/3rdparty/zlib/deflate.c \
-	../../../src/3rdparty/zlib/gzio.c \
-	../../../src/3rdparty/zlib/infblock.c \
-	../../../src/3rdparty/zlib/infcodes.c \
-	../../../src/3rdparty/zlib/inffast.c \
-	../../../src/3rdparty/zlib/inflate.c \
-	../../../src/3rdparty/zlib/inftrees.c \
-	../../../src/3rdparty/zlib/infutil.c \
-	../../../src/3rdparty/zlib/trees.c \
-	../../../src/3rdparty/zlib/uncompr.c \
-	../../../src/3rdparty/zlib/zutil.c
diff --git a/util/install/win/archive.cpp b/util/install/win/archive.cpp
deleted file mode 100644
index 81f8e53..0000000
--- a/util/install/win/archive.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "archive.h"
-#include "resource.h"
-#include <qfile.h>
-#include <qmessagebox.h>
-#include <windows.h>
-
-bool addArchive( const QString& name )
-{
-    QByteArray ba ;
-
-    // Copy the install.exe first, since we can't update our own application
-    char aName[512];
-    if ( GetModuleFileNameA( 0, aName, 512 ) == 0 ) { // we don't need wide character versions
-	QMessageBox::critical( 0,
-		"Could not add archive",
-		QString( "Could not add archive %1.\n"
-		    "Could not get the name of the application.").arg(name)
-		);
-	return false;
-    }
-    QFile fromFile( aName );
-    if ( !fromFile.open( IO_ReadOnly ) ) {
-	QMessageBox::critical( 0,
-		"Could not add archive",
-		QString("Could not copy executable %1.\n").arg(aName)
-		);
-	return false;
-    }
-    QString destinationName = name;
-    if ( destinationName.right(4) == ".arq" ) {
-	destinationName =destinationName.left( destinationName.length()-4 );
-    }
-    destinationName += ".exe";
-    QFile toFile( destinationName );
-    if ( !toFile.open( IO_WriteOnly ) ) {
-	QMessageBox::critical( 0,
-		"Could not add archive",
-		QString("Could not copy executable %1 to %2.\n").arg(aName).arg(destinationName)
-		);
-	return false;
-    }
-    ba = fromFile.readAll();
-    toFile.writeBlock( ba );
-    toFile.close();
-
-    // load the .arq file
-    QFile fArq( name );
-    if ( !fArq.open( IO_ReadOnly ) ) {
-	QMessageBox::critical( 0,
-		"Could not add archive",
-		QString("Could not open archive %1.\n").arg(name)
-		);
-	return false;
-    }
-    ba = fArq.readAll();
-
-    // update the binary res
-    ResourceSaver res( destinationName );
-    QString errorMsg;
-    if ( !res.setData( "QT_ARQ", ba, &errorMsg ) ) {
-	QMessageBox::critical( 0,
-		"Could not add archive",
-		QString("Could not add archive %1.\n").arg(name) + errorMsg
-		);
-	return false;
-    }
-
-#if 0
-    QMessageBox::information( 0,
-	    "Archive added",
-	    QString("Added the archive %1.\n").arg(name) + errorMsg
-	    );
-#endif
-    return true;
-}
diff --git a/util/install/win/archive.h b/util/install/win/archive.h
deleted file mode 100644
index d470a27..0000000
--- a/util/install/win/archive.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef ARCHIVE_H
-#define ARCHIVE_H
-
-#include <qstring.h>
-#include "resource.h"
-
-bool addArchive( const QString &name );
-
-#endif
diff --git a/util/install/win/dialogs/folderdlg.ui b/util/install/win/dialogs/folderdlg.ui
deleted file mode 100644
index c5427e2..0000000
--- a/util/install/win/dialogs/folderdlg.ui
+++ /dev/null
@@ -1,184 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>FolderDlg</class>
-<widget class="QDialog">
-    <property name="name">
-        <cstring>FolderDlg</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>323</width>
-            <height>369</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Select installation folder</string>
-    </property>
-    <vbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QListView">
-            <column>
-                <property name="text">
-                    <string>Start menu folder tree</string>
-                </property>
-                <property name="clickable">
-                    <bool>true</bool>
-                </property>
-                <property name="resizeable">
-                    <bool>true</bool>
-                </property>
-            </column>
-            <property name="name">
-                <cstring>folderTree</cstring>
-            </property>
-        </widget>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>Layout2</cstring>
-            </property>
-            <hbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>0</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QLabel">
-                    <property name="name">
-                        <cstring>nameLabel</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Folder name</string>
-                    </property>
-                </widget>
-                <widget class="QLineEdit">
-                    <property name="name">
-                        <cstring>folderName</cstring>
-                    </property>
-                </widget>
-            </hbox>
-        </widget>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>Layout1</cstring>
-            </property>
-            <hbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>0</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <spacer>
-                    <property name="name" stdset="0">
-                        <cstring>Spacer1</cstring>
-                    </property>
-                    <property name="orientation">
-                        <enum>Horizontal</enum>
-                    </property>
-                    <property name="sizeType">
-                        <enum>Expanding</enum>
-                    </property>
-                    <property name="sizeHint">
-                        <size>
-                            <width>20</width>
-                            <height>20</height>
-                        </size>
-                    </property>
-                </spacer>
-                <widget class="QPushButton">
-                    <property name="name">
-                        <cstring>okButton</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Ok</string>
-                    </property>
-                </widget>
-                <widget class="QPushButton">
-                    <property name="name">
-                        <cstring>cancelButton</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Cancel</string>
-                    </property>
-                </widget>
-                <spacer>
-                    <property name="name" stdset="0">
-                        <cstring>Spacer2</cstring>
-                    </property>
-                    <property name="orientation">
-                        <enum>Horizontal</enum>
-                    </property>
-                    <property name="sizeType">
-                        <enum>Expanding</enum>
-                    </property>
-                    <property name="sizeHint">
-                        <size>
-                            <width>20</width>
-                            <height>20</height>
-                        </size>
-                    </property>
-                </spacer>
-            </hbox>
-        </widget>
-    </vbox>
-</widget>
-<connections>
-    <connection>
-        <sender>okButton</sender>
-        <signal>clicked()</signal>
-        <receiver>FolderDlg</receiver>
-        <slot>accept()</slot>
-    </connection>
-    <connection>
-        <sender>cancelButton</sender>
-        <signal>clicked()</signal>
-        <receiver>FolderDlg</receiver>
-        <slot>reject()</slot>
-    </connection>
-    <connection>
-        <sender>folderTree</sender>
-        <signal>expanded(QListViewItem*)</signal>
-        <receiver>FolderDlg</receiver>
-        <slot>expandedDir(QListViewItem*)</slot>
-    </connection>
-    <connection>
-        <sender>folderTree</sender>
-        <signal>collapsed(QListViewItem*)</signal>
-        <receiver>FolderDlg</receiver>
-        <slot>collapsedDir(QListViewItem*)</slot>
-    </connection>
-    <connection>
-        <sender>folderTree</sender>
-        <signal>selectionChanged(QListViewItem*)</signal>
-        <receiver>FolderDlg</receiver>
-        <slot>selectedDir(QListViewItem*)</slot>
-    </connection>
-    <slot access="public" language="C++">collapsedDir( QListViewItem* )</slot>
-    <slot access="protected" language="C++">destroy()</slot>
-    <slot access="public" language="C++">expandedDir( QListViewItem* )</slot>
-    <slot access="public" language="C++">selectedDir( QListViewItem* )</slot>
-    <slot access="protected" language="C++">init()</slot>
-</connections>
-<tabstops>
-    <tabstop>folderTree</tabstop>
-    <tabstop>folderName</tabstop>
-    <tabstop>okButton</tabstop>
-    <tabstop>cancelButton</tabstop>
-</tabstops>
-</UI>
diff --git a/util/install/win/dialogs/folderdlgimpl.cpp b/util/install/win/dialogs/folderdlgimpl.cpp
deleted file mode 100644
index 8c3c27f..0000000
--- a/util/install/win/dialogs/folderdlgimpl.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "folderdlgimpl.h"
-#include "../shell.h"
-#include <qlineedit.h>
-#include <qlistview.h>
-#include <qpixmap.h>
-#include <qdir.h>
-
-FolderDlgImpl::FolderDlgImpl( QWidget* parent, const char* name, bool modal, WindowFlags f ) :
-    FolderDlg( parent, name, modal, f )
-{
-}
-
-void FolderDlgImpl::setup( QString programsFolder, QString folder )
-{
-    folderName->setText( folder );
-    if( programsFolder.length() ) {
-	QString topLevel = programsFolder.mid( programsFolder.findRev( '\\' ) + 1 );
-	QListViewItem* topItem = new QListViewItem( folderTree, topLevel );
-	topItem->setOpen( true );
-	topItem->setPixmap( 0, *WinShell::getOpenFolderImage() );
-
-	ScanFolder( programsFolder, topItem );
-
-    }
-}
-
-void FolderDlgImpl::ScanFolder( QString folderPath, QListViewItem* parent )
-{
-    QDir folderDir( folderPath );
-    folderDir.setFilter( QDir::Dirs );
-    folderDir.setSorting( QDir::Name | QDir::IgnoreCase );
-    const QFileInfoList* fiList = folderDir.entryInfoList();
-    QFileInfoListIterator it( *fiList );
-    QFileInfo* fi;
-
-    while( ( fi = it.current() ) ) {
-	if( fi->fileName()[0] != '.' ) { // Exclude dot-dirs
-	    QListViewItem* item = new QListViewItem( parent, fi->fileName() );
-	    item->setOpen( false );
-	    item->setPixmap( 0, *WinShell::getClosedFolderImage() );
-	    ScanFolder( fi->absFilePath(), item );
-	}
-	++it;
-    }
-}
-
-void FolderDlgImpl::expandedDir( QListViewItem* item )
-{
-    item->setPixmap( 0, *WinShell::getOpenFolderImage() );
-}
-
-void FolderDlgImpl::collapsedDir( QListViewItem* item )
-{
-    item->setPixmap( 0, *WinShell::getClosedFolderImage() );
-}
-
-QString FolderDlgImpl::getFolderName()
-{
-    return folderName->text();
-}
-
-/*
-** This will replace the contents of the folderName lineedit widget.
-**
-** The algoritm will traverse the item tree until it gets to the toplevel
-** item, prepending each name to the folder name as it goes
-*/
-void FolderDlgImpl::selectedDir( QListViewItem* item )
-{
-    QListViewItem* currentItem = item;
-    QString newFolder;
-
-    while( currentItem->parent() ) {
-	newFolder = currentItem->text( 0 ) + QString( "\\" ) + newFolder;
-	currentItem = currentItem->parent();
-    }
-    newFolder.truncate( newFolder.length() - 1 );
-    folderName->setText( newFolder );
-}
diff --git a/util/install/win/dialogs/folderdlgimpl.h b/util/install/win/dialogs/folderdlgimpl.h
deleted file mode 100644
index 25e13b5..0000000
--- a/util/install/win/dialogs/folderdlgimpl.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef FOLDERDLGIMPL_H
-#define FOLDERDLGIMPL_H
-
-#include "folderdlg.h"
-
-class WinShell;
-
-class FolderDlgImpl : public FolderDlg
-{
-    Q_OBJECT
-public:
-    FolderDlgImpl( QWidget* parent = NULL, const char* name = NULL, bool modal = false, WindowFlags f = 0 );
-
-    void setup( QString, QString );
-
-    virtual void expandedDir( QListViewItem* );
-    virtual void collapsedDir( QListViewItem* );
-    virtual void selectedDir( QListViewItem* );
-
-    QString getFolderName();
-private:
-    void ScanFolder( QString folderPath, QListViewItem* parent );
-};
-
-#endif // FOLDERDLGIMPL_H
diff --git a/util/install/win/environment.cpp b/util/install/win/environment.cpp
deleted file mode 100644
index bbf5719..0000000
--- a/util/install/win/environment.cpp
+++ /dev/null
@@ -1,362 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "environment.h"
-#include <qnamespace.h>
-#include <qfile.h>
-#include <qtextstream.h>
-#include <qfileinfo.h>
-#include <qdir.h>
-#include <qsettings.h>
-#if defined(Q_OS_WIN32)
-#include <windows.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-QString QEnvironment::getEnv( const QString &varName, int envBlock )
-{
-#if defined(Q_OS_WIN32)
-    OSVERSIONINFOA osvi;
-    HKEY hkKey;
-    bool isWinMe = false;
-
-    if( envBlock & GlobalEnv )
-	hkKey = HKEY_LOCAL_MACHINE;
-    else
-	hkKey = HKEY_CURRENT_USER;
-
-    osvi.dwOSVersionInfoSize = sizeof( OSVERSIONINFOA );
-    GetVersionExA( &osvi );
-    if( int( qWinVersion() ) & int( Qt::WV_98 ) ) {
-	if( osvi.dwMinorVersion == 90 )
-	    isWinMe = true;
-    }
-
-    if( envBlock & PersistentEnv ) {
-	if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-	    HKEY env;
-	    QByteArray buffer;
-	    DWORD size( 0 );
-	    QString value;
-
-	    if( RegOpenKeyExW( hkKey, L"Environment", 0, KEY_READ, &env ) == ERROR_SUCCESS ) {
-		RegQueryValueExW( env, (const wchar_t*) varName.ucs2(), 0, NULL, NULL, &size );
-		buffer.resize( size );
-		RegQueryValueExW( env, (const wchar_t*) varName.ucs2(), 0, NULL, (unsigned char*)buffer.data(), &size );
-		for( int i = 0; i < ( int )buffer.size(); i += 2 ) {
-		    QChar c( buffer[ i ], buffer[ i + 1 ] );
-		    if( !c.isNull() )
-			value += c;
-		}
-		RegCloseKey( env );
-		return value;
-	    }
-	    else {
-		return QString();
-	    }
-	}
-	else { //  Win 9x
-	    // Persistent environment on Windows 9x is not fully supported yet.
-	    return QString( getenv( varName ) );
-	}
-    }
-    if( envBlock & LocalEnv ) {
-	if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-	    int size = GetEnvironmentVariableW( (TCHAR*)varName.ucs2(), 0, 0 );
-	    if ( size == 0 )
-		return QString();
-	    TCHAR *data = new TCHAR[ size ];
-	    GetEnvironmentVariableW( (TCHAR*)varName.ucs2(), data, size );
-	    QString ret = QString::fromUcs2( data );
-	    delete[] data;
-	    return ret;
-	} else {
-	    QCString varNameL = varName.local8Bit();
-	    int size = GetEnvironmentVariableA( varNameL.data(), 0, 0 );
-	    if ( size == 0 )
-		return QString();
-	    char *data = new char[ size ];
-	    GetEnvironmentVariableA( varNameL.data(), data, size );
-	    QString ret = QString::fromLocal8Bit( data );
-	    delete[] data;
-	    return ret;
-	}
-    }
-#elif defined(Q_OS_UNIX)
-// Persistent environment on Unix is not supported yet.
-    if( envBlock & LocalEnv ) {
-	return QString( getenv( varName ) );
-    }
-#endif
-    return QString();
-}
-
-void QEnvironment::putEnv( const QString &varName, const QString &varValue, int envBlock )
-{
-#if defined(Q_OS_WIN32)
-    OSVERSIONINFOA osvi;
-    HKEY hkKey;
-    bool isWinMe = false;
-
-    if( envBlock & GlobalEnv )
-	hkKey = HKEY_LOCAL_MACHINE;
-    else
-	hkKey = HKEY_CURRENT_USER;
-
-    osvi.dwOSVersionInfoSize = sizeof( OSVERSIONINFOA );
-    GetVersionExA( &osvi );
-    if( int( qWinVersion() ) & int( Qt::WV_98 ) ) {
-	if( osvi.dwMinorVersion == 90 )
-	    isWinMe = true;
-    }
-
-    if( envBlock & PersistentEnv ) {
-	if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-
-	    HKEY env;
-	    QByteArray buffer;
-
-	    buffer.resize( varValue.length() * 2 + 2 );
-	    const QChar *data = varValue.unicode();
-	    int i;
-	    for ( i = 0; i < (int)varValue.length(); ++i ) {
-		buffer[ 2*i ] = data[ i ].cell();
-		buffer[ (2*i)+1 ] = data[ i ].row();
-	    }
-	    buffer[ (2*i) ] = 0;
-	    buffer[ (2*i)+1 ] = 0;
-
-	    if( RegOpenKeyExW( hkKey, L"Environment", 0, KEY_WRITE, &env ) == ERROR_SUCCESS ) {
-		RegSetValueExW( env, (const wchar_t*) varName.ucs2(), 0, REG_EXPAND_SZ, (const unsigned char*)buffer.data(), buffer.size() );
-		RegCloseKey( env );
-	    }
-	    DWORD res;
-	    SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, LPARAM("Environment"), SMTO_ABORTIFHUNG | SMTO_BLOCK, 1, &res);
-	}
-	else { // Win 9x
-	    QFile autoexec( "c:\\autoexec.bat" );
-	    QTextStream ostream( &autoexec );
-	    ostream.setEncoding( QTextStream::Locale );
-
-	    if( autoexec.open( IO_Append | IO_ReadWrite | IO_Translate ) ) {
-		ostream << "set " << varName << "=" << varValue << endl;
-		autoexec.close();
-	    }
-	}
-    }
-    if( envBlock & LocalEnv ) {
-	if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-	    SetEnvironmentVariableW( (TCHAR*)varName.ucs2(), (const wchar_t*) varValue.ucs2() );
-	} else {
-	    SetEnvironmentVariableA( varName.local8Bit(), varValue.local8Bit() );
-	}
-    }
-#else
-    if( envBlock & LocalEnv )
-	setenv( varName, varValue, 1 );
-#endif
-}
-
-void QEnvironment::removeEnv( const QString &varName, int envBlock )
-{
-#if defined(Q_OS_WIN32)
-    HKEY hkKey;
-    if( envBlock & GlobalEnv )
-	hkKey = HKEY_LOCAL_MACHINE;
-    else
-	hkKey = HKEY_CURRENT_USER;
-
-    if( envBlock & PersistentEnv ) {
-	if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-	    HKEY env;
-	    if( RegOpenKeyExW( hkKey, L"Environment", 0, KEY_WRITE, &env ) == ERROR_SUCCESS ) {
-		RegDeleteValue( env, (const wchar_t*) varName.ucs2() );
-		RegCloseKey( env );
-	    }
-	}
-	else { // Win 9x
-	    QFile autoexec( "c:\\autoexec.bat" );
-	    QTextStream ostream( &autoexec );
-	    ostream.setEncoding( QTextStream::Locale );
-
-	    if( autoexec.open( IO_Append | IO_ReadWrite | IO_Translate ) ) {
-		ostream << "set " << varName << "=" << endl;
-		autoexec.close();
-	    }
-	}
-    }
-
-    if( envBlock & LocalEnv ) {
-	if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-	    SetEnvironmentVariableW( (TCHAR*)varName.ucs2(), 0 );
-	} else {
-	    SetEnvironmentVariableA( varName.local8Bit(), 0 );
-	}
-    }
-#endif
-}
-
-#if defined(Q_OS_WIN32)
-void QEnvironment::recordUninstall( const QString &displayName, const QString &cmdString )
-{
-    QSettings settings;
-    settings.insertSearchPath(QSettings::Windows, "/Microsoft/Windows/CurrentVersion/Uninstall");
-    settings.beginGroup("/" + displayName);
-    settings.writeEntry("/DisplayName", displayName);
-    settings.writeEntry("/Publisher", "Nokia Corporation and/or its subsidiary(-ies)");
-    settings.writeEntry("/URLInfoAbout", "http://qtsoftware.com");
-    settings.writeEntry("/HelpLink", "http://qtsoftware.com/support");
-    settings.writeEntry("/UninstallString", cmdString);
-    settings.endGroup();
-}
-
-void QEnvironment::removeUninstall( const QString &displayName )
-{
-    QSettings settings;
-    settings.insertSearchPath(QSettings::Windows, "/Microsoft/Windows/CurrentVersion/Uninstall");
-    settings.beginGroup("/" + displayName);
-    settings.removeEntry("/DisplayName");
-    settings.removeEntry("/Publisher");
-    settings.removeEntry("/URLInfoAbout");
-    settings.removeEntry("/DisplayVersion");
-    settings.removeEntry("/HelpLink");
-    settings.removeEntry("/UninstallString");
-    settings.removeEntry("/.");
-    settings.endGroup();
-}
-
-QString QEnvironment::getRegistryString( const QString &keyName, const QString &valueName, int scope )
-{
-    QString value;
-    HKEY scopeKeys[] = { HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE };
-    HKEY key;
-    DWORD valueSize( 0 );
-    QByteArray buffer, expBuffer;
-
-    if( int( qWinVersion() ) & int(Qt::WV_NT_based) ) {
-	if( RegOpenKeyExW( scopeKeys[ scope ], (const wchar_t*) keyName.ucs2(), 0, KEY_READ, &key ) == ERROR_SUCCESS ) {
-	    if( RegQueryValueExW( key, (const wchar_t*) valueName.ucs2(), NULL, NULL, NULL, &valueSize ) == ERROR_SUCCESS ) {
-		buffer.resize( valueSize );
-		if( RegQueryValueExW( key, (const wchar_t*) valueName.ucs2(), NULL, NULL, (unsigned char*)buffer.data(), &valueSize ) == ERROR_SUCCESS ) {
-		    valueSize = ExpandEnvironmentStringsW( (WCHAR*)buffer.data(), NULL, 0 );
-		    expBuffer.resize( valueSize * 2 );
-		    ExpandEnvironmentStringsW( (WCHAR*)buffer.data(), (WCHAR*)expBuffer.data(), valueSize );
-		    for( int i = 0; i < ( int )expBuffer.size(); i += 2 ) {
-			QChar c( expBuffer[ i ], expBuffer[ i + 1 ] );
-			if ( !c.isNull() )
-			    value += c;
-		    }
-		}
-	    }
-	    RegCloseKey( key );
-	}
-    }
-    else {
-	if( RegOpenKeyExA( scopeKeys[ scope ], keyName.local8Bit(), 0, KEY_READ, &key ) == ERROR_SUCCESS ) {
-	    if( RegQueryValueExA( key, valueName.local8Bit(), NULL, NULL, NULL, &valueSize ) == ERROR_SUCCESS ) {
-		buffer.resize( valueSize );
-		if( RegQueryValueExA( key, valueName.local8Bit(), NULL, NULL, (unsigned char*)buffer.data(), &valueSize ) == ERROR_SUCCESS ) {
-		    valueSize = ExpandEnvironmentStringsA( buffer.data(), NULL, 0 );
-		    expBuffer.resize( valueSize );
-		    ExpandEnvironmentStringsA( buffer.data(), expBuffer.data(), valueSize );
-		    value = expBuffer.data();
-		}
-	    }
-	    RegCloseKey( key );
-	}
-    }
-    return value;
-}
-#endif
-
-QString QEnvironment::getTempPath()
-{
-#if defined(Q_OS_WIN32)
-    DWORD tmpSize;
-    QByteArray tmp;
-    QString tmpPath;
-
-    if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-	tmpSize = GetTempPathW( 0, NULL );
-	tmp.resize( tmpSize * 2 );
-	GetTempPathW( tmpSize, (WCHAR*)tmp.data() );
-	for( int i = 0; i < ( int )tmp.size(); i += 2 ) {
-	    QChar c( tmp[ i ], tmp[ i + 1 ] );
-	    if( !c.isNull() )
-		tmpPath += c;
-	}
-    }
-    else {
-	tmpSize = GetTempPathA( 0, NULL );
-	tmp.resize( tmpSize * 2 );
-	GetTempPathA( tmpSize, tmp.data() );
-	tmpPath = tmp.data();
-    }
-#elif defined(Q_OS_UNIX)
-    QString tmpPath = "/tmp";
-#endif
-    return tmpPath;
-}
-
-QString QEnvironment::getLastError()
-{
-    return strerror( errno );
-}
-
-QString QEnvironment::getFSFileName( const QString& fileName )
-{
-#if defined(Q_OS_WIN32)
-    QByteArray buffer( MAX_PATH );
-    QString tmp( fileName );
-
-    GetVolumeInformationA( fileName.left( fileName.find( '\\' ) + 1 ).local8Bit(), NULL, NULL, NULL, NULL, NULL, buffer.data(), buffer.size() );
-    if( QString( buffer.data() ) != "NTFS" ) {
-	DWORD dw;
-	dw = GetShortPathNameA( fileName.local8Bit(), (char*)buffer.data(), buffer.size() );
-	if( dw > 0 )
-	    tmp = buffer.data();
-    }
-#elif defined(Q_OS_UNIX)
-    QString tmp( fileName );
-#endif
-    return tmp;
-}
diff --git a/util/install/win/environment.h b/util/install/win/environment.h
deleted file mode 100644
index d0f45e4..0000000
--- a/util/install/win/environment.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef ENVIRONMENT_H
-#define ENVIRONMENT_H
-
-#include <qstring.h>
-
-class QEnvironment
-{
-public:
-    static QString getEnv( const QString &varName, int envBlock = LocalEnv );
-    static void putEnv( const QString &varName, const QString &varValue, int envBlock = LocalEnv );
-    static void removeEnv( const QString &varName, int envBlock = LocalEnv );
-#if defined(Q_OS_WIN32)
-    static QString getRegistryString( const QString &keyName, const QString &valueName, int scope = CurrentUser );
-    static void recordUninstall( const QString &displayName, const QString &cmdString );
-    static void removeUninstall( const QString &displayName );
-#endif
-    static QString getTempPath();
-    static QString getLastError();
-    static QString getFSFileName( const QString& fileName );
-
-    enum {
-	LocalEnv = 1,
-	PersistentEnv = 2,
-	GlobalEnv = 4
-    };
-
-    enum {
-	CurrentUser = 0,
-	LocalMachine = 1
-    };
-};
-
-#endif
diff --git a/util/install/win/globalinformation.cpp b/util/install/win/globalinformation.cpp
deleted file mode 100644
index a05db1e..0000000
--- a/util/install/win/globalinformation.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "globalinformation.h"
-
-GlobalInformation::GlobalInformation() :
-    _qtVersionStr( QT_VERSION_STR ),
-    _reconfig( false )
-{
-#if defined(Q_OS_WIN32)
-    _sysId = Other;
-#elif defined(Q_OS_MACX)
-    _sysId = MACX;
-#else
-    _sysId = MingW32;
-#endif
-}
-
-GlobalInformation::~GlobalInformation()
-{
-}
-
-void GlobalInformation::setReconfig( bool r )
-{
-    _reconfig = r;
-}
-
-bool GlobalInformation::reconfig() const
-{
-    return _reconfig;
-}
-
-void GlobalInformation::setQtVersionStr( const QString& qvs )
-{
-    _qtVersionStr = qvs;
-}
-
-QString GlobalInformation::qtVersionStr() const
-{
-    return _qtVersionStr;
-}
-
-#if defined(QSA)
-void GlobalInformation::setQsaVersionStr( const QString& qvs )
-{
-    _qsaVersionStr = qvs;
-}
-
-QString GlobalInformation::qsaVersionStr() const
-{
-    return _qsaVersionStr;
-}
-#endif
-
-void GlobalInformation::setSysId( SysId s )
-{
-    _sysId = s;
-}
-
-GlobalInformation::SysId GlobalInformation::sysId() const
-{
-    return _sysId;
-}
-
-QString GlobalInformation::text(Text t) const
-{
-    QString str;
-
-    switch (_sysId) {
-    case MSVC:
-	if (t ==  IDE)
-	    str = "Microsoft Visual Studio 6.0";
-	else if (t == Mkspec)
-	    str = "win32-msvc";
-	else if (t == MakeTool)
-	    str = "nmake.exe";
-	break;
-    case MSVCNET:
-	if (t ==  IDE)
-	    str = "Microsoft Visual Studio .NET";
-	else if (t == Mkspec)
-	    str = "win32-msvc.net";
-	else if (t == MakeTool)
-	    str = "nmake.exe";
-	break;
-    case Watcom:
-	if (t == Mkspec)
-	    str = "win32-watcom";
-	else if (t == MakeTool)
-	    str = "wmake.exe";
-	break;
-    case Intel:
-	if (t == Mkspec)
-	    str = "win32-icc";
-	else if (t == MakeTool)
-	    str = "nmake.exe";
-	break;
-    case GCC:
-	if (t == Mkspec)
-	    str = "win32-g++";
-	else if (t == MakeTool)
-	    str = "gmake.exe";
-	break;
-    case MACX:
-	if (t == Mkspec)
-	    str = "mac-g++";
-	else if (t == MakeTool)
-	    str = "make";
-	break;
-    case MinGW:
-	if (t == Mkspec)
-	    str = "win32-g++";
-	else if (t == MakeTool)
-	    str = "mingw32-make.exe";
-	break;
-    case Borland:
-	if (t == Mkspec)
-	    str = "win32-borland";
-	else if (t == MakeTool)
-	    str = "make.exe";
-	break;
-    default:
-	if (t == Mkspec)
-	    str = "Custom";
-	else if (t == MakeTool)
-	    str = "make.exe";
-	break;
-    }
-
-    return str;
-}
diff --git a/util/install/win/globalinformation.h b/util/install/win/globalinformation.h
deleted file mode 100644
index 843dac6..0000000
--- a/util/install/win/globalinformation.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef GLOBALINFORMATION_H
-#define GLOBALINFORMATION_H
-#include <qstring.h>
-
-class GlobalInformation
-{
-public:
-    GlobalInformation();
-    ~GlobalInformation();
-
-    void setReconfig( bool );
-    bool reconfig() const;
-    void setQtVersionStr( const QString& );
-    QString qtVersionStr() const;
-#if defined(QSA)
-    void setQsaVersionStr( const QString& );
-    QString qsaVersionStr() const;
-#endif
-
-    enum SysId {
-	MSVCNET = 0,
-	MSVC	= 1,
-	Borland	= 2,
-	MinGW   = 3,
-	Other   = 4,
-	Watcom  = 5,
-	Intel	= 6,
-	GCC	= 7,
-	MACX	= 8
-    };
-    void setSysId( SysId );
-    SysId sysId() const;
-
-    enum Text {
-	MakeTool,
-	IDE,
-	Mkspec
-    };
-
-    QString text(Text t) const;
-
-private:
-    bool _reconfig;
-    QString _qtVersionStr;
-#if defined(QSA)
-    QString _qsaVersionStr;
-#endif
-    SysId _sysId;
-};
-
-extern GlobalInformation globalInformation;
-
-#endif // GLOBALINFORMATION_H
diff --git a/util/install/win/install-edu.rc b/util/install/win/install-edu.rc
deleted file mode 100644
index 3e50c1c..0000000
--- a/util/install/win/install-edu.rc
+++ /dev/null
@@ -1,3 +0,0 @@
-IDI_ICON1               ICON    DISCARDABLE     "install.ico"
-LICENSE			RCDATA	"../../../dist/edu/LICENSE"
-QT_ARQ			RCDATA	"qt.arq"
diff --git a/util/install/win/install-eval.rc b/util/install/win/install-eval.rc
deleted file mode 100644
index 78f0477..0000000
--- a/util/install/win/install-eval.rc
+++ /dev/null
@@ -1,3 +0,0 @@
-IDI_ICON1               ICON    DISCARDABLE     "install.ico"
-LICENSE			RCDATA	"../../../dist/trial/LICENSE"
-QT_ARQ			RCDATA	"qt.arq"
diff --git a/util/install/win/install-noncommercial.rc b/util/install/win/install-noncommercial.rc
deleted file mode 100644
index b7d5b7c..0000000
--- a/util/install/win/install-noncommercial.rc
+++ /dev/null
@@ -1,4 +0,0 @@
-IDI_ICON1               ICON    DISCARDABLE     "install.ico"
-LICENSE			RCDATA	"../../../dist/noncommercial/LICENSE"
-LICENSE-US		RCDATA	"../../../dist/noncommercial/LICENSE-US"
-QT_ARQ			RCDATA	"qt.arq"
diff --git a/util/install/win/install-qsa.rc b/util/install/win/install-qsa.rc
deleted file mode 100644
index f971c3f..0000000
--- a/util/install/win/install-qsa.rc
+++ /dev/null
@@ -1,5 +0,0 @@
-IDI_ICON1               ICON    DISCARDABLE     "install.ico"
-LICENSE			RCDATA	"../../../dist/trial/LICENSE"
-LICENSE_QSA		RCDATA	"../../../../qsa/dist/eval/LICENSE.EVAL"
-QT_ARQ			RCDATA	"qt.arq"
-QSA_ARQ			RCDATA	"qt.arq"
diff --git a/util/install/win/install.ico b/util/install/win/install.ico
deleted file mode 100644
index b996fb7..0000000
Binary files a/util/install/win/install.ico and /dev/null differ
diff --git a/util/install/win/install.rc b/util/install/win/install.rc
deleted file mode 100644
index 321c245..0000000
--- a/util/install/win/install.rc
+++ /dev/null
@@ -1,4 +0,0 @@
-IDI_ICON1               ICON    DISCARDABLE     "install.ico"
-LICENSE			RCDATA	"../../../dist/commercial/LICENSE"
-LICENSE-US		RCDATA	"../../../dist/commercial/LICENSE-US"
-QT_ARQ			RCDATA	"qt.arq"
diff --git a/util/install/win/main.cpp b/util/install/win/main.cpp
deleted file mode 100644
index 0c21523..0000000
--- a/util/install/win/main.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <qapplication.h>
-#include <qmessagebox.h>
-#include "setupwizardimpl.h"
-#include "resource.h"
-#include "globalinformation.h"
-#include "environment.h"
-
-#if defined Q_OS_WIN32
-#include "archive.h"
-#endif
-
-GlobalInformation globalInformation;
-SetupWizardImpl *wizard = 0;
-
-int main( int argc, char** argv )
-{
-    QApplication app( argc, argv );
-    int res( -1 );
-
-    for( int i = 0; i < app.argc(); i++ ) {
-	if( QString( app.argv()[i] ) == "-reconfig" ) {
-	    globalInformation.setReconfig( true );
-
-	    QString qmakespec = QEnvironment::getEnv( "QMAKESPEC" );
-	    for (int mks = 0; mks <= GlobalInformation::MACX; ++mks) {
-		if (globalInformation.text(GlobalInformation::Mkspec) == qmakespec) {
-		    globalInformation.setSysId((GlobalInformation::SysId)mks);
-		    break;
-		}
-	    }
-
-	    if ( ++i < app.argc() ) {
-		globalInformation.setQtVersionStr( app.argv()[i] );
-	    }
-	    break;
-#if defined(Q_OS_WIN32)
-	} else if ( QString( app.argv()[i] ) == "-add-archive" ) {
-	    // -add-archive is an internal option to add the
-	    // binary resource QT_ARQ
-	    if ( ++i < app.argc() ) {
-		if ( addArchive( app.argv()[i] ) )
-		    return 0;
-	    }
-	    return res;
-#endif
-	}
-    }
-
-    wizard = new SetupWizardImpl( 0, 0, false, Qt::WStyle_NormalBorder | Qt::WStyle_Customize | Qt::WStyle_MinMax | Qt::WStyle_SysMenu | Qt::WStyle_Title );
-    wizard->show();
-
-    app.setMainWidget( wizard );
-    res = app.exec();
-
-    wizard->stopProcesses();
-
-    //### memory leak
-
-    return res;
-}
diff --git a/util/install/win/pages/buildpage.ui b/util/install/win/pages/buildpage.ui
deleted file mode 100644
index 0ab4965..0000000
--- a/util/install/win/pages/buildpage.ui
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
-<class>BuildPage</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>BuildPage</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>462</width>
-            <height>276</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form11</string>
-    </property>
-    <hbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>layout13</cstring>
-            </property>
-            <vbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <widget class="QTextView">
-                    <property name="name">
-                        <cstring>outputDisplay</cstring>
-                    </property>
-                    <property name="font">
-                        <font>
-                            <family>Courier</family>
-                        </font>
-                    </property>
-                    <property name="vScrollBarMode">
-                        <enum>AlwaysOn</enum>
-                    </property>
-                    <property name="hScrollBarMode">
-                        <enum>AlwaysOn</enum>
-                    </property>
-                    <property name="textFormat">
-                        <enum>LogText</enum>
-                    </property>
-                    <property name="wordWrap">
-                        <enum>NoWrap</enum>
-                    </property>
-                    <property name="autoFormatting">
-                        <set>AutoNone</set>
-                    </property>
-                </widget>
-                <widget class="QLayoutWidget">
-                    <property name="name">
-                        <cstring>layout12</cstring>
-                    </property>
-                    <hbox>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <widget class="QProgressBar">
-                            <property name="name">
-                                <cstring>compileProgress</cstring>
-                            </property>
-                            <property name="percentageVisible">
-                                <bool>false</bool>
-                            </property>
-                        </widget>
-                        <widget class="QPushButton">
-                            <property name="name">
-                                <cstring>restartBuild</cstring>
-                            </property>
-                            <property name="text">
-                                <string>&lt;Replace&gt;</string>
-                            </property>
-                        </widget>
-                    </hbox>
-                </widget>
-            </vbox>
-        </widget>
-    </hbox>
-</widget>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/pages/configpage.ui b/util/install/win/pages/configpage.ui
deleted file mode 100644
index 8223d8e..0000000
--- a/util/install/win/pages/configpage.ui
+++ /dev/null
@@ -1,474 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>ConfigPage</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>ConfigPage</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>460</width>
-            <height>284</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form9</string>
-    </property>
-    <hbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>Layout3</cstring>
-            </property>
-            <grid>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>0</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QCheckBox" row="1" column="3">
-                    <property name="name">
-                        <cstring>rebuildInstallation</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Rebuild Qt after reconfiguration</string>
-                    </property>
-                    <property name="checked">
-                        <bool>true</bool>
-                    </property>
-                </widget>
-                <widget class="QTextView" row="0" column="2" rowspan="1" colspan="2">
-                    <property name="name">
-                        <cstring>explainOption</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>5</hsizetype>
-                            <vsizetype>5</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                    <property name="minimumSize">
-                        <size>
-                            <width>200</width>
-                            <height>0</height>
-                        </size>
-                    </property>
-                    <property name="palette">
-                        <palette>
-                            <active>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>212</red>
-                                    <green>208</green>
-                                    <blue>200</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>255</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>233</red>
-                                    <green>231</green>
-                                    <blue>227</blue>
-                                </color>
-                                <color>
-                                    <red>106</red>
-                                    <green>104</green>
-                                    <blue>100</blue>
-                                </color>
-                                <color>
-                                    <red>141</red>
-                                    <green>138</green>
-                                    <blue>133</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>255</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>212</red>
-                                    <green>208</green>
-                                    <blue>200</blue>
-                                </color>
-                                <color>
-                                    <red>212</red>
-                                    <green>208</green>
-                                    <blue>200</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>10</red>
-                                    <green>36</green>
-                                    <blue>106</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>255</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>0</green>
-                                    <blue>255</blue>
-                                </color>
-                            </active>
-                            <disabled>
-                                <color>
-                                    <red>128</red>
-                                    <green>128</green>
-                                    <blue>128</blue>
-                                </color>
-                                <color>
-                                    <red>212</red>
-                                    <green>208</green>
-                                    <blue>200</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>255</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>243</red>
-                                    <green>239</green>
-                                    <blue>230</blue>
-                                </color>
-                                <color>
-                                    <red>106</red>
-                                    <green>104</green>
-                                    <blue>100</blue>
-                                </color>
-                                <color>
-                                    <red>141</red>
-                                    <green>138</green>
-                                    <blue>133</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>255</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>128</red>
-                                    <green>128</green>
-                                    <blue>128</blue>
-                                </color>
-                                <color>
-                                    <red>212</red>
-                                    <green>208</green>
-                                    <blue>200</blue>
-                                </color>
-                                <color>
-                                    <red>212</red>
-                                    <green>208</green>
-                                    <blue>200</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>10</red>
-                                    <green>36</green>
-                                    <blue>106</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>255</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>0</green>
-                                    <blue>255</blue>
-                                </color>
-                            </disabled>
-                            <inactive>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>212</red>
-                                    <green>208</green>
-                                    <blue>200</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>255</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>243</red>
-                                    <green>239</green>
-                                    <blue>230</blue>
-                                </color>
-                                <color>
-                                    <red>106</red>
-                                    <green>104</green>
-                                    <blue>100</blue>
-                                </color>
-                                <color>
-                                    <red>141</red>
-                                    <green>138</green>
-                                    <blue>133</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>255</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>212</red>
-                                    <green>208</green>
-                                    <blue>200</blue>
-                                </color>
-                                <color>
-                                    <red>212</red>
-                                    <green>208</green>
-                                    <blue>200</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>0</blue>
-                                </color>
-                                <color>
-                                    <red>10</red>
-                                    <green>36</green>
-                                    <blue>106</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>255</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>0</red>
-                                    <green>0</green>
-                                    <blue>255</blue>
-                                </color>
-                                <color>
-                                    <red>255</red>
-                                    <green>0</green>
-                                    <blue>255</blue>
-                                </color>
-                            </inactive>
-                        </palette>
-                    </property>
-                </widget>
-                <widget class="QLabel" row="1" column="0">
-                    <property name="name">
-                        <cstring>currentInstLabel</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Active Qt installation</string>
-                    </property>
-                </widget>
-                <widget class="QLabel" row="1" column="1" rowspan="1" colspan="2">
-                    <property name="name">
-                        <cstring>currentInstallation</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>7</hsizetype>
-                            <vsizetype>1</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                    <property name="frameShape">
-                        <enum>StyledPanel</enum>
-                    </property>
-                    <property name="frameShadow">
-                        <enum>Sunken</enum>
-                    </property>
-                    <property name="text">
-                        <string></string>
-                    </property>
-                </widget>
-                <widget class="QTabWidget" row="0" column="0" rowspan="1" colspan="2">
-                    <property name="name">
-                        <cstring>configTabs</cstring>
-                    </property>
-                    <widget class="QWidget">
-                        <property name="name">
-                            <cstring>installTab</cstring>
-                        </property>
-                        <attribute name="title">
-                            <string>Install</string>
-                        </attribute>
-                        <vbox>
-                            <property name="name">
-                                <cstring>unnamed</cstring>
-                            </property>
-                            <property name="margin">
-                                <number>11</number>
-                            </property>
-                            <property name="spacing">
-                                <number>6</number>
-                            </property>
-                            <widget class="QListView">
-                                <column>
-                                    <property name="text">
-                                        <string>Installation options</string>
-                                    </property>
-                                    <property name="clickable">
-                                        <bool>true</bool>
-                                    </property>
-                                    <property name="resizeable">
-                                        <bool>false</bool>
-                                    </property>
-                                </column>
-                                <property name="name">
-                                    <cstring>installList</cstring>
-                                </property>
-                            </widget>
-                        </vbox>
-                    </widget>
-                    <widget class="QWidget">
-                        <property name="name">
-                            <cstring>generalTab</cstring>
-                        </property>
-                        <attribute name="title">
-                            <string>General</string>
-                        </attribute>
-                        <grid>
-                            <property name="name">
-                                <cstring>unnamed</cstring>
-                            </property>
-                            <property name="margin">
-                                <number>11</number>
-                            </property>
-                            <property name="spacing">
-                                <number>6</number>
-                            </property>
-                            <widget class="QListView" row="0" column="0">
-                                <column>
-                                    <property name="text">
-                                        <string>Qt Library configuration</string>
-                                    </property>
-                                    <property name="clickable">
-                                        <bool>true</bool>
-                                    </property>
-                                    <property name="resizeable">
-                                        <bool>false</bool>
-                                    </property>
-                                </column>
-                                <property name="name">
-                                    <cstring>configList</cstring>
-                                </property>
-                            </widget>
-                        </grid>
-                    </widget>
-                    <widget class="QWidget">
-                        <property name="name">
-                            <cstring>advancedTab</cstring>
-                        </property>
-                        <attribute name="title">
-                            <string>Advanced</string>
-                        </attribute>
-                        <hbox>
-                            <property name="name">
-                                <cstring>unnamed</cstring>
-                            </property>
-                            <property name="margin">
-                                <number>11</number>
-                            </property>
-                            <property name="spacing">
-                                <number>6</number>
-                            </property>
-                            <widget class="QListView">
-                                <column>
-                                    <property name="text">
-                                        <string>Advanced options</string>
-                                    </property>
-                                    <property name="clickable">
-                                        <bool>true</bool>
-                                    </property>
-                                    <property name="resizeable">
-                                        <bool>true</bool>
-                                    </property>
-                                </column>
-                                <property name="name">
-                                    <cstring>advancedList</cstring>
-                                </property>
-                            </widget>
-                        </hbox>
-                    </widget>
-                </widget>
-            </grid>
-        </widget>
-    </hbox>
-</widget>
-<tabstops>
-    <tabstop>configTabs</tabstop>
-    <tabstop>configList</tabstop>
-    <tabstop>explainOption</tabstop>
-    <tabstop>rebuildInstallation</tabstop>
-    <tabstop>advancedList</tabstop>
-</tabstops>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/pages/finishpage.ui b/util/install/win/pages/finishpage.ui
deleted file mode 100644
index de6b5f7..0000000
--- a/util/install/win/pages/finishpage.ui
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>FinishPage</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>FinishPage</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>444</width>
-            <height>284</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form12</string>
-    </property>
-    <hbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>Layout1</cstring>
-            </property>
-            <vbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>0</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QTextView">
-                    <property name="name">
-                        <cstring>finishText</cstring>
-                    </property>
-                </widget>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>showReadmeCheck</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Show README file</string>
-                    </property>
-                    <property name="checked">
-                        <bool>true</bool>
-                    </property>
-                </widget>
-            </vbox>
-        </widget>
-    </hbox>
-</widget>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/pages/folderspage.ui b/util/install/win/pages/folderspage.ui
deleted file mode 100644
index ada15f7..0000000
--- a/util/install/win/pages/folderspage.ui
+++ /dev/null
@@ -1,259 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>FoldersPage</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>FoldersPage</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>443</width>
-            <height>284</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form8</string>
-    </property>
-    <hbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>Layout15</cstring>
-            </property>
-            <grid>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>0</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QGroupBox" row="0" column="0">
-                    <property name="name">
-                        <cstring>folderBox</cstring>
-                    </property>
-                    <property name="title">
-                        <string>Folders and paths</string>
-                    </property>
-                    <grid>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <property name="margin">
-                            <number>11</number>
-                        </property>
-                        <property name="spacing">
-                            <number>6</number>
-                        </property>
-                        <widget class="QLabel" row="0" column="0">
-                            <property name="name">
-                                <cstring>folderLabel</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Program &amp;folder</string>
-                            </property>
-                            <property name="buddy" stdset="0">
-                                <cstring>folderPath</cstring>
-                            </property>
-                        </widget>
-                        <widget class="QLayoutWidget" row="0" column="1" rowspan="1" colspan="2">
-                            <property name="name">
-                                <cstring>Layout2</cstring>
-                            </property>
-                            <hbox>
-                                <property name="name">
-                                    <cstring>unnamed</cstring>
-                                </property>
-                                <property name="margin">
-                                    <number>0</number>
-                                </property>
-                                <property name="spacing">
-                                    <number>6</number>
-                                </property>
-                                <widget class="QLineEdit">
-                                    <property name="name">
-                                        <cstring>folderPath</cstring>
-                                    </property>
-                                    <property name="frameShape">
-                                        <enum>StyledPanel</enum>
-                                    </property>
-                                    <property name="frameShadow">
-                                        <enum>Sunken</enum>
-                                    </property>
-                                </widget>
-                                <widget class="QPushButton">
-                                    <property name="name">
-                                        <cstring>folderPathButton</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string></string>
-                                    </property>
-                                    <property name="pixmap">
-                                        <pixmap>image0</pixmap>
-                                    </property>
-                                </widget>
-                            </hbox>
-                        </widget>
-                        <widget class="QLabel" row="1" column="0">
-                            <property name="name">
-                                <cstring>qtDirLabel</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Set &amp;QTDIR</string>
-                            </property>
-                            <property name="buddy" stdset="0">
-                                <cstring>qtDirCheck</cstring>
-                            </property>
-                        </widget>
-                        <widget class="QLabel" row="2" column="0">
-                            <property name="name">
-                                <cstring>devSysLabel</cstring>
-                            </property>
-                            <property name="sizePolicy">
-                                <sizepolicy>
-                                    <hsizetype>5</hsizetype>
-                                    <vsizetype>1</vsizetype>
-                                    <horstretch>0</horstretch>
-                                    <verstretch>0</verstretch>
-                                </sizepolicy>
-                            </property>
-                            <property name="text">
-                                <string>&amp;Path</string>
-                            </property>
-                            <property name="buddy" stdset="0">
-                                <cstring>devSysPath</cstring>
-                            </property>
-                        </widget>
-                        <widget class="QLayoutWidget" row="2" column="1" rowspan="1" colspan="2">
-                            <property name="name">
-                                <cstring>Layout3</cstring>
-                            </property>
-                            <hbox>
-                                <property name="name">
-                                    <cstring>unnamed</cstring>
-                                </property>
-                                <property name="margin">
-                                    <number>0</number>
-                                </property>
-                                <property name="spacing">
-                                    <number>6</number>
-                                </property>
-                                <widget class="QLineEdit">
-                                    <property name="name">
-                                        <cstring>devSysPath</cstring>
-                                    </property>
-                                </widget>
-                                <widget class="QPushButton">
-                                    <property name="name">
-                                        <cstring>devSysPathButton</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string></string>
-                                    </property>
-                                    <property name="pixmap">
-                                        <pixmap>image0</pixmap>
-                                    </property>
-                                </widget>
-                            </hbox>
-                        </widget>
-                        <widget class="QLabel" row="3" column="0">
-                            <property name="name">
-                                <cstring>groupLabel</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Folder &amp;group</string>
-                            </property>
-                            <property name="buddy" stdset="0">
-                                <cstring>folderGroups</cstring>
-                            </property>
-                        </widget>
-                        <widget class="QComboBox" row="3" column="1" rowspan="1" colspan="2">
-                            <property name="name">
-                                <cstring>folderGroups</cstring>
-                            </property>
-                            <property name="sizePolicy">
-                                <sizepolicy>
-                                    <hsizetype>7</hsizetype>
-                                    <vsizetype>0</vsizetype>
-                                    <horstretch>0</horstretch>
-                                    <verstretch>0</verstretch>
-                                </sizepolicy>
-                            </property>
-                        </widget>
-                        <widget class="QCheckBox" row="1" column="1">
-                            <property name="name">
-                                <cstring>qtDirCheck</cstring>
-                            </property>
-                            <property name="text">
-                                <string></string>
-                            </property>
-                            <property name="checked">
-                                <bool>true</bool>
-                            </property>
-                        </widget>
-                        <spacer row="1" column="2">
-                            <property name="name" stdset="0">
-                                <cstring>Spacer8</cstring>
-                            </property>
-                            <property name="orientation">
-                                <enum>Horizontal</enum>
-                            </property>
-                            <property name="sizeType">
-                                <enum>Expanding</enum>
-                            </property>
-                            <property name="sizeHint">
-                                <size>
-                                    <width>20</width>
-                                    <height>20</height>
-                                </size>
-                            </property>
-                        </spacer>
-                    </grid>
-                </widget>
-                <spacer row="1" column="0">
-                    <property name="name" stdset="0">
-                        <cstring>Spacer2</cstring>
-                    </property>
-                    <property name="orientation">
-                        <enum>Vertical</enum>
-                    </property>
-                    <property name="sizeType">
-                        <enum>Expanding</enum>
-                    </property>
-                    <property name="sizeHint">
-                        <size>
-                            <width>20</width>
-                            <height>20</height>
-                        </size>
-                    </property>
-                </spacer>
-            </grid>
-        </widget>
-    </hbox>
-</widget>
-<images>
-    <image name="image0">
-        <data format="XPM.GZ" length="379">789c5d8ecb0a02310c45f7fd8ad0ec069907f531207e82e252101769b5388b51d07121e2bf6b1f195b6f28cd3d24b7ad0ad86dd75054e23ed0d0193067ba41717cf4fd737f58bd846ce6d028984123274296606073bd9c5c8fdf1eeba92b678db36dddaa60c959abec2258cdd62a9fc3424477a50cfdc18cc5d9c0e20eaffbbf90260c2a390f35c54a1823fa9bc39fc63cc3429e4b51cccb5060398a6c5478f7bd141fb90a5251</data>
-    </image>
-</images>
-<tabstops>
-    <tabstop>folderPath</tabstop>
-    <tabstop>folderPathButton</tabstop>
-    <tabstop>qtDirCheck</tabstop>
-    <tabstop>devSysPath</tabstop>
-    <tabstop>devSysPathButton</tabstop>
-    <tabstop>folderGroups</tabstop>
-</tabstops>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/pages/licenseagreementpage.ui b/util/install/win/pages/licenseagreementpage.ui
deleted file mode 100644
index 5349e1f..0000000
--- a/util/install/win/pages/licenseagreementpage.ui
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
-<class>LicenseAgreementPage</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>LicenseAgreementPage</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>440</width>
-            <height>284</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form3</string>
-    </property>
-    <hbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>layout4</cstring>
-            </property>
-            <vbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <widget class="QLayoutWidget">
-                    <property name="name">
-                        <cstring>countryLayout</cstring>
-                    </property>
-                    <hbox>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <spacer>
-                            <property name="name">
-                                <cstring>spacer4</cstring>
-                            </property>
-                            <property name="orientation">
-                                <enum>Horizontal</enum>
-                            </property>
-                            <property name="sizeType">
-                                <enum>Expanding</enum>
-                            </property>
-                            <property name="sizeHint">
-                                <size>
-                                    <width>31</width>
-                                    <height>21</height>
-                                </size>
-                            </property>
-                        </spacer>
-                        <widget class="QLabel">
-                            <property name="name">
-                                <cstring>countryLabel</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Please choose your region:</string>
-                            </property>
-                        </widget>
-                        <widget class="QComboBox">
-                            <item>
-                                <property name="text">
-                                    <string>North or South America</string>
-                                </property>
-                            </item>
-                            <item>
-                                <property name="text">
-                                    <string>Anywhere outside North and South America</string>
-                                </property>
-                            </item>
-                            <property name="name">
-                                <cstring>countryCombo</cstring>
-                            </property>
-                        </widget>
-                        <spacer>
-                            <property name="name">
-                                <cstring>spacer3</cstring>
-                            </property>
-                            <property name="orientation">
-                                <enum>Horizontal</enum>
-                            </property>
-                            <property name="sizeType">
-                                <enum>Expanding</enum>
-                            </property>
-                            <property name="sizeHint">
-                                <size>
-                                    <width>51</width>
-                                    <height>21</height>
-                                </size>
-                            </property>
-                        </spacer>
-                    </hbox>
-                </widget>
-                <widget class="QTextView">
-                    <property name="name">
-                        <cstring>introText</cstring>
-                    </property>
-                    <property name="text">
-                        <string>The license could not be found in the package. The package might be corrupted.

-Please contact support@trolltech.com to resolve the problem.</string>
-                    </property>
-                </widget>
-                <widget class="QLayoutWidget">
-                    <property name="name">
-                        <cstring>Layout3</cstring>
-                    </property>
-                    <hbox>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <property name="margin">
-                            <number>0</number>
-                        </property>
-                        <property name="spacing">
-                            <number>6</number>
-                        </property>
-                        <spacer>
-                            <property name="name">
-                                <cstring>Spacer1_3</cstring>
-                            </property>
-                            <property name="orientation">
-                                <enum>Horizontal</enum>
-                            </property>
-                            <property name="sizeType">
-                                <enum>Expanding</enum>
-                            </property>
-                            <property name="sizeHint">
-                                <size>
-                                    <width>156</width>
-                                    <height>20</height>
-                                </size>
-                            </property>
-                        </spacer>
-                        <widget class="QButtonGroup">
-                            <property name="name">
-                                <cstring>licenceButtons</cstring>
-                            </property>
-                            <property name="frameShape">
-                                <enum>NoFrame</enum>
-                            </property>
-                            <property name="title">
-                                <string></string>
-                            </property>
-                            <vbox>
-                                <property name="name">
-                                    <cstring>unnamed</cstring>
-                                </property>
-                                <widget class="QRadioButton">
-                                    <property name="name">
-                                        <cstring>acceptLicense</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string>I agree</string>
-                                    </property>
-                                </widget>
-                                <widget class="QRadioButton">
-                                    <property name="name">
-                                        <cstring>rejectLicense</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string>I disagree</string>
-                                    </property>
-                                    <property name="checked">
-                                        <bool>true</bool>
-                                    </property>
-                                </widget>
-                            </vbox>
-                        </widget>
-                        <spacer>
-                            <property name="name">
-                                <cstring>Spacer3</cstring>
-                            </property>
-                            <property name="orientation">
-                                <enum>Horizontal</enum>
-                            </property>
-                            <property name="sizeType">
-                                <enum>Expanding</enum>
-                            </property>
-                            <property name="sizeHint">
-                                <size>
-                                    <width>155</width>
-                                    <height>20</height>
-                                </size>
-                            </property>
-                        </spacer>
-                    </hbox>
-                </widget>
-            </vbox>
-        </widget>
-    </hbox>
-</widget>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/pages/licensepage.ui b/util/install/win/pages/licensepage.ui
deleted file mode 100644
index 9c7b98c..0000000
--- a/util/install/win/pages/licensepage.ui
+++ /dev/null
@@ -1,264 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>LicensePage</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>LicensePage</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>445</width>
-            <height>284</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form2</string>
-    </property>
-    <hbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>Layout6</cstring>
-            </property>
-            <grid>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>0</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QLabel" row="3" column="0">
-                    <property name="name">
-                        <cstring>licenseeLabel</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Licensee</string>
-                    </property>
-                </widget>
-                <widget class="QLabel" row="5" column="0">
-                    <property name="name">
-                        <cstring>expiryLabel</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Support and upgrade expiry</string>
-                    </property>
-                </widget>
-                <widget class="QLineEdit" row="5" column="1">
-                    <property name="name">
-                        <cstring>expiryDate</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>7</hsizetype>
-                            <vsizetype>0</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                </widget>
-                <widget class="QLineEdit" row="2" column="1">
-                    <property name="name">
-                        <cstring>licenseID</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>7</hsizetype>
-                            <vsizetype>0</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                </widget>
-                <widget class="QLabel" row="1" column="0">
-                    <property name="name">
-                        <cstring>customerIDLabel</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Customer ID</string>
-                    </property>
-                </widget>
-                <widget class="QLineEdit" row="6" column="1">
-                    <property name="name">
-                        <cstring>key</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>7</hsizetype>
-                            <vsizetype>0</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                </widget>
-                <widget class="QLabel" row="4" column="0">
-                    <property name="name">
-                        <cstring>productsLabel</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Products</string>
-                    </property>
-                    <property name="buddy" stdset="0">
-                        <cstring>productsString</cstring>
-                    </property>
-                </widget>
-                <widget class="QLineEdit" row="3" column="1">
-                    <property name="name">
-                        <cstring>licenseeName</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>7</hsizetype>
-                            <vsizetype>0</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                </widget>
-                <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
-                    <property name="name">
-                        <cstring>licenseInfoHeader</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>7</hsizetype>
-                            <vsizetype>1</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                    <property name="text">
-                        <string>Enter the supplied license information here, all fields except Licensee are mandatory.
-Alternatively, the installation wizard may read them from a license file.</string>
-                    </property>
-                    <property name="alignment">
-                        <set>WordBreak|AlignVCenter</set>
-                    </property>
-                </widget>
-                <widget class="QComboBox" row="4" column="1">
-                    <item>
-                        <property name="text">
-                            <string>qt-professional</string>
-                        </property>
-                    </item>
-                    <item>
-                        <property name="text">
-                            <string>qt-enterprise</string>
-                        </property>
-                    </item>
-                    <property name="name">
-                        <cstring>productsString</cstring>
-                    </property>
-                </widget>
-                <spacer row="8" column="1">
-                    <property name="name">
-                        <cstring>Spacer7</cstring>
-                    </property>
-                    <property name="orientation">
-                        <enum>Vertical</enum>
-                    </property>
-                    <property name="sizeType">
-                        <enum>Expanding</enum>
-                    </property>
-                </spacer>
-                <widget class="QLabel" row="2" column="0">
-                    <property name="name">
-                        <cstring>licenseIDLabel</cstring>
-                    </property>
-                    <property name="text">
-                        <string>License ID</string>
-                    </property>
-                </widget>
-                <widget class="QLayoutWidget" row="7" column="0" rowspan="1" colspan="2">
-                    <property name="name">
-                        <cstring>Layout5</cstring>
-                    </property>
-                    <hbox>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <property name="margin">
-                            <number>0</number>
-                        </property>
-                        <property name="spacing">
-                            <number>6</number>
-                        </property>
-                        <spacer>
-                            <property name="name">
-                                <cstring>Spacer5</cstring>
-                            </property>
-                            <property name="orientation">
-                                <enum>Horizontal</enum>
-                            </property>
-                            <property name="sizeType">
-                                <enum>Expanding</enum>
-                            </property>
-                        </spacer>
-                        <widget class="QPushButton">
-                            <property name="name">
-                                <cstring>readLicenseButton</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Read from file...</string>
-                            </property>
-                        </widget>
-                        <spacer>
-                            <property name="name">
-                                <cstring>Spacer6</cstring>
-                            </property>
-                            <property name="orientation">
-                                <enum>Horizontal</enum>
-                            </property>
-                            <property name="sizeType">
-                                <enum>Expanding</enum>
-                            </property>
-                        </spacer>
-                    </hbox>
-                </widget>
-                <widget class="QLineEdit" row="1" column="1">
-                    <property name="name">
-                        <cstring>customerID</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>7</hsizetype>
-                            <vsizetype>0</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                </widget>
-                <widget class="QLabel" row="6" column="0">
-                    <property name="name">
-                        <cstring>keyLabel</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Product key</string>
-                    </property>
-                </widget>
-            </grid>
-        </widget>
-    </hbox>
-</widget>
-<tabstops>
-    <tabstop>customerID</tabstop>
-    <tabstop>licenseID</tabstop>
-    <tabstop>licenseeName</tabstop>
-    <tabstop>productsString</tabstop>
-    <tabstop>expiryDate</tabstop>
-    <tabstop>key</tabstop>
-    <tabstop>readLicenseButton</tabstop>
-</tabstops>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/pages/optionspage.ui b/util/install/win/pages/optionspage.ui
deleted file mode 100644
index 01033d2..0000000
--- a/util/install/win/pages/optionspage.ui
+++ /dev/null
@@ -1,503 +0,0 @@
-<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
-<class>OptionsPage</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>OptionsPage</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>413</width>
-            <height>372</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form7</string>
-    </property>
-    <hbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>layout8</cstring>
-            </property>
-            <vbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <widget class="QGroupBox">
-                    <property name="name">
-                        <cstring>optionsGroup</cstring>
-                    </property>
-                    <property name="title">
-                        <string>Installation options</string>
-                    </property>
-                    <grid>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <property name="margin">
-                            <number>11</number>
-                        </property>
-                        <property name="spacing">
-                            <number>6</number>
-                        </property>
-                        <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
-                            <property name="name">
-                                <cstring>pathLabel</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Destination &amp;path (appr. 1Gb free space required)</string>
-                            </property>
-                            <property name="buddy" stdset="0">
-                                <cstring>installPath</cstring>
-                            </property>
-                        </widget>
-                        <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2">
-                            <property name="name">
-                                <cstring>pathLayout</cstring>
-                            </property>
-                            <hbox>
-                                <property name="name">
-                                    <cstring>unnamed</cstring>
-                                </property>
-                                <property name="margin">
-                                    <number>0</number>
-                                </property>
-                                <property name="spacing">
-                                    <number>6</number>
-                                </property>
-                                <widget class="QLineEdit">
-                                    <property name="name">
-                                        <cstring>installPath</cstring>
-                                    </property>
-                                    <property name="frameShape">
-                                        <enum>LineEditPanel</enum>
-                                    </property>
-                                    <property name="frameShadow">
-                                        <enum>Sunken</enum>
-                                    </property>
-                                </widget>
-                                <widget class="QPushButton">
-                                    <property name="name">
-                                        <cstring>installPathButton</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string></string>
-                                    </property>
-                                    <property name="pixmap">
-                                        <pixmap>image0</pixmap>
-                                    </property>
-                                </widget>
-                            </hbox>
-                        </widget>
-                        <widget class="QCheckBox" row="2" column="1">
-                            <property name="name">
-                                <cstring>installExamples</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Build &amp;Examples</string>
-                            </property>
-                            <property name="accel">
-                                <string>Alt+E</string>
-                            </property>
-                            <property name="checked">
-                                <bool>true</bool>
-                            </property>
-                        </widget>
-                        <widget class="QCheckBox" row="2" column="0">
-                            <property name="name">
-                                <cstring>installTools</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Build &amp;Tools</string>
-                            </property>
-                            <property name="checked">
-                                <bool>true</bool>
-                            </property>
-                        </widget>
-                        <widget class="QCheckBox" row="3" column="0">
-                            <property name="name">
-                                <cstring>installExtensions</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Build E&amp;xtensions</string>
-                            </property>
-                            <property name="checked">
-                                <bool>true</bool>
-                            </property>
-                        </widget>
-                        <widget class="QCheckBox" row="3" column="1">
-                            <property name="name">
-                                <cstring>installTutorials</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Build T&amp;utorials</string>
-                            </property>
-                            <property name="accel">
-                                <string>Alt+U</string>
-                            </property>
-                            <property name="checked">
-                                <bool>true</bool>
-                            </property>
-                        </widget>
-                        <widget class="QCheckBox" row="4" column="1">
-                            <property name="name">
-                                <cstring>skipBuild</cstring>
-                            </property>
-                            <property name="text">
-                                <string>&amp;Skip Build Step</string>
-                            </property>
-                            <property name="accel">
-                                <string>Alt+S</string>
-                            </property>
-                        </widget>
-                        <widget class="QCheckBox" row="4" column="0">
-                            <property name="name">
-                                <cstring>installDocs</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Install &amp;documentation</string>
-                            </property>
-                            <property name="accel">
-                                <string>Alt+D</string>
-                            </property>
-                            <property name="checked">
-                                <bool>true</bool>
-                            </property>
-                        </widget>
-                    </grid>
-                </widget>
-                <widget class="QButtonGroup">
-                    <property name="name">
-                        <cstring>sysGroup</cstring>
-                    </property>
-                    <property name="title">
-                        <string>Compiler options</string>
-                    </property>
-                    <grid>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <property name="margin">
-                            <number>11</number>
-                        </property>
-                        <property name="spacing">
-                            <number>6</number>
-                        </property>
-                        <widget class="QLayoutWidget" row="0" column="1">
-                            <property name="name">
-                                <cstring>layout13</cstring>
-                            </property>
-                            <vbox>
-                                <property name="name">
-                                    <cstring>unnamed</cstring>
-                                </property>
-                                <widget class="QCheckBox">
-                                    <property name="name">
-                                        <cstring>installIDEIntegration</cstring>
-                                    </property>
-                                    <property name="enabled">
-                                        <bool>false</bool>
-                                    </property>
-                                    <property name="text">
-                                        <string>&amp;Integrate with IDE</string>
-                                    </property>
-                                    <property name="accel">
-                                        <string></string>
-                                    </property>
-                                    <property name="checked">
-                                        <bool>true</bool>
-                                    </property>
-				    <property name="buttonGroupId">
-                                         <number>99</number>
-                                    </property>
-                                </widget>
-                                <spacer>
-                                    <property name="name">
-                                        <cstring>spacer7_2</cstring>
-                                    </property>
-                                    <property name="orientation">
-                                        <enum>Vertical</enum>
-                                    </property>
-                                    <property name="sizeType">
-                                        <enum>Expanding</enum>
-                                    </property>
-                                    <property name="sizeHint">
-                                        <size>
-                                            <width>40</width>
-                                            <height>40</height>
-                                        </size>
-                                    </property>
-                                </spacer>
-                            </vbox>
-                        </widget>
-                        <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2">
-                            <property name="name">
-                                <cstring>layout21</cstring>
-                            </property>
-                            <vbox>
-                                <property name="name">
-                                    <cstring>unnamed</cstring>
-                                </property>
-                                <widget class="QLayoutWidget">
-                                    <property name="name">
-                                        <cstring>layout20</cstring>
-                                    </property>
-                                    <hbox>
-                                        <property name="name">
-                                            <cstring>unnamed</cstring>
-                                        </property>
-                                        <widget class="QRadioButton">
-                                            <property name="name">
-                                                <cstring>sysOther</cstring>
-                                            </property>
-                                            <property name="sizePolicy">
-                                                <sizepolicy>
-                                                    <hsizetype>0</hsizetype>
-                                                    <vsizetype>0</vsizetype>
-                                                    <horstretch>0</horstretch>
-                                                    <verstretch>0</verstretch>
-                                                </sizepolicy>
-                                            </property>
-                                            <property name="text">
-                                                <string>Other</string>
-                                            </property>
-                                            <property name="buttonGroupId">
-                                                <number>4</number>
-                                            </property>
-                                        </widget>
-                                        <widget class="QComboBox">
-                                            <item>
-                                                <property name="text">
-                                                    <string>win32-watcom</string>
-                                                </property>
-                                            </item>
-                                            <property name="name">
-                                                <cstring>sysOtherCombo</cstring>
-                                            </property>
-                                            <property name="enabled">
-                                                <bool>false</bool>
-                                            </property>
-                                            <property name="sizePolicy">
-                                                <sizepolicy>
-                                                    <hsizetype>5</hsizetype>
-                                                    <vsizetype>0</vsizetype>
-                                                    <horstretch>0</horstretch>
-                                                    <verstretch>0</verstretch>
-                                                </sizepolicy>
-                                            </property>
-                                            <property name="duplicatesEnabled">
-                                                <bool>false</bool>
-                                            </property>
-                                        </widget>
-                                        <spacer>
-                                            <property name="name">
-                                                <cstring>spacer9</cstring>
-                                            </property>
-                                            <property name="orientation">
-                                                <enum>Horizontal</enum>
-                                            </property>
-                                            <property name="sizeType">
-                                                <enum>Expanding</enum>
-                                            </property>
-                                            <property name="sizeHint">
-                                                <size>
-                                                    <width>121</width>
-                                                    <height>21</height>
-                                                </size>
-                                            </property>
-                                        </spacer>
-                                    </hbox>
-                                </widget>
-                                <widget class="QLabel">
-                                    <property name="name">
-                                        <cstring>noteLabel</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string>Note: The compilers specified in the 'Other' section are not officially supported.</string>
-                                    </property>
-                                </widget>
-                            </vbox>
-                        </widget>
-                        <widget class="QLayoutWidget" row="0" column="0">
-                            <property name="name">
-                                <cstring>layout7</cstring>
-                            </property>
-                            <vbox>
-                                <property name="name">
-                                    <cstring>unnamed</cstring>
-                                </property>
-                                <widget class="QRadioButton">
-                                    <property name="name">
-                                        <cstring>sysMsvcNet</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string>Microsoft Visual C++ .&amp;NET</string>
-                                    </property>
-                                    <property name="accel">
-                                        <string>Alt+N</string>
-                                    </property>
-                                    <property name="buttonGroupId">
-                                        <number>0</number>
-                                    </property>
-                                </widget>
-                                <widget class="QRadioButton">
-                                    <property name="name">
-                                        <cstring>sysMsvc</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string>Microsoft &amp;Visual C++</string>
-                                    </property>
-                                    <property name="accel">
-                                        <string>Alt+V</string>
-                                    </property>
-                                    <property name="buttonGroupId">
-                                        <number>1</number>
-                                    </property>
-                                </widget>
-                                <widget class="QRadioButton">
-                                    <property name="name">
-                                        <cstring>sysBorland</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string>&amp;Borland C++</string>
-                                    </property>
-                                    <property name="accel">
-                                        <string>Alt+V</string>
-                                    </property>
-                                    <property name="buttonGroupId">
-                                        <number>2</number>
-                                    </property>
-                                </widget>
-                                <widget class="QRadioButton">
-                                    <property name="name">
-                                        <cstring>sysMinGW</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string>MinGW32</string>
-                                    </property>
-                                    <property name="buttonGroupId">
-                                        <number>3</number>
-                                    </property>
-                                </widget>
-                                <widget class="QRadioButton">
-                                    <property name="name">
-                                        <cstring>sysIntel</cstring>
-                                    </property>
-                                    <property name="text">
-                                        <string>Intel C++</string>
-                                    </property>
-                                    <property name="buttonGroupId">
-                                        <number>6</number>
-                                    </property>
-                                </widget>
-                            </vbox>
-                        </widget>
-
-                    </grid>
-                </widget>
-                <spacer>
-                    <property name="name">
-                        <cstring>spacer6</cstring>
-                    </property>
-                    <property name="orientation">
-                        <enum>Vertical</enum>
-                    </property>
-                    <property name="sizeType">
-                        <enum>Expanding</enum>
-                    </property>
-                    <property name="sizeHint">
-                        <size>
-                            <width>20</width>
-                            <height>64</height>
-                        </size>
-                    </property>
-                </spacer>
-            </vbox>
-        </widget>
-    </hbox>
-</widget>
-<images>
-    <image name="image0">
-        <data format="XPM.GZ" length="379">789c5d8ec10ac2300c86ef7d8ad0dc8a6cad4e3b101f41f1288887b43ae6610a3a0f22bebb766de6e65f4af27f247f9b2bd86dd7a072716fa93d7bf035dd401d1f4df3dc1f562f21cd02cc0ce660e444c80c3c6cae9753e8f1dba3d6bad03a581f6c5994d36829d8ca56365ac7b6b25d0e0b11431932ec2e8e589a8d2cedf07af71772845119e7a1a374068c11fdcde14f7d9e6721cf0d51ca1ba1c8c628b15ef1ddf7527c00b6995250</data>
-    </image>
-</images>
-<connections>
-    <connection>
-        <sender>sysOther</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>sysOtherCombo</receiver>
-        <slot>setEnabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>sysBorland</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installIDEIntegration</receiver>
-        <slot>setDisabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>sysMsvcNet</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installIDEIntegration</receiver>
-        <slot>setEnabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>sysMsvc</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installIDEIntegration</receiver>
-        <slot>setEnabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>sysOther</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installIDEIntegration</receiver>
-        <slot>setDisabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>sysMinGW</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installIDEIntegration</receiver>
-        <slot>setDisabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>sysIntel</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installIDEIntegration</receiver>
-        <slot>setEnabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>skipBuild</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installTools</receiver>
-        <slot>setDisabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>skipBuild</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installTutorials</receiver>
-        <slot>setDisabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>skipBuild</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installExtensions</receiver>
-        <slot>setDisabled(bool)</slot>
-    </connection>
-    <connection>
-        <sender>skipBuild</sender>
-        <signal>toggled(bool)</signal>
-        <receiver>installExamples</receiver>
-        <slot>setDisabled(bool)</slot>
-    </connection>
-</connections>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/pages/pages.cpp b/util/install/win/pages/pages.cpp
deleted file mode 100644
index 3ee4093..0000000
--- a/util/install/win/pages/pages.cpp
+++ /dev/null
@@ -1,349 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "pages.h"
-#include "resource.h"
-#include "../environment.h"
-#include <qcombobox.h>
-#include <qlineedit.h>
-#include <qcheckbox.h>
-#include <qlabel.h>
-#include <qvalidator.h>
-#include <qdir.h>
-#include <qbuttongroup.h>
-#include <qpushbutton.h>
-#include <qradiobutton.h>
-#include <qmultilineedit.h>
-#include <qfiledialog.h>
-#include <qtabwidget.h>
-#include <qmessagebox.h>
-#include <setupwizardimpl.h>
-#include <qtextbrowser.h>
-#include <qtextview.h>
-#include <qlayout.h>
-
-#if defined(Q_OS_WIN32)
-#include <windows.h>
-#endif
-
-extern SetupWizardImpl *wizard;
-
-BuildPageImpl::BuildPageImpl( QWidget* parent, const char* name, WindowFlags fl )
-    : BuildPage( parent, name, fl )
-{
-}
-
-ConfigPageImpl::ConfigPageImpl( QWidget* parent, const char* name, WindowFlags fl )
-    : ConfigPage( parent, name, fl )
-{
-    if( globalInformation.reconfig() ) {
-	currentInstLabel->show();
-	currentInstallation->show();
-#if defined(Q_OS_WIN32)
-	// Makes no sense to have the rebuild installation option on DOS based
-	// Windows
-	if ( qWinVersion() & WV_NT_based )
-#endif
-	    rebuildInstallation->show();
-#if defined(Q_OS_WIN32)
-	else {
-	    rebuildInstallation->setChecked( false );
-	    rebuildInstallation->hide();
-	}
-#endif
-    } else {
-	currentInstLabel->hide();
-	currentInstallation->hide();
-	rebuildInstallation->hide();
-    }
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-    // ### these pages should probably be included but all options should be
-    // disabled so that the evaluation customer can see how he can configure Qt
-    configTabs->removePage( generalTab );
-    configTabs->removePage( advancedTab );
-#else
-    configTabs->removePage( installTab );
-#endif
-}
-
-FinishPageImpl::FinishPageImpl( QWidget* parent, const char* name, WindowFlags fl )
-    : FinishPage( parent, name, fl )
-{
-#if !defined(Q_OS_WIN32)
-    showReadmeCheck->hide();
-#endif
-}
-
-FoldersPageImpl::FoldersPageImpl( QWidget* parent, const char* name, WindowFlags fl )
-    : FoldersPage( parent, name, fl )
-{
-#if defined(Q_OS_WIN32)
-    QByteArray buffer( 256 );
-    unsigned long buffSize( buffer.size() );
-    GetUserNameA( buffer.data(), &buffSize );
-    folderGroups->insertItem( "Anyone who uses this computer (all users)" );
-    folderGroups->insertItem( QString( "Only for me (" ) + QString( buffer.data() ) + ")" );
-#if defined(QSA)
-    folderPath->setText( QString( "QSA " ) + globalInformation.qsaVersionStr() );
-#else
-    folderPath->setText( QString( "Qt " ) + globalInformation.qtVersionStr() );
-#endif
-    if( qWinVersion() & Qt::WV_NT_based )   // On NT we also have a common folder
-	folderGroups->setEnabled( true );
-    else
-	folderGroups->setDisabled( true );
-#elif defined(Q_OS_UNIX)
-    folderGroups->setDisabled( true );
-#endif
-}
-
-LicenseAgreementPageImpl::LicenseAgreementPageImpl( QWidget* parent, const char* name, WindowFlags fl )
-    : LicenseAgreementPage( parent, name, fl ),
-      titleStr("License agreement")
-{
-#if !defined(NON_COMMERCIAL)
-    countryLabel->hide();
-    countryCombo->hide();
-    delete countryLayout;
-#else
-    connect( countryCombo, SIGNAL(activated(int)), SLOT(countryChanged(int)) );
-#endif
-    connect( licenceButtons, SIGNAL(clicked(int)), SLOT(licenseAction(int)));
-}
-
-void LicenseAgreementPageImpl::licenseAction(int act)
-{
-    if( act )
-	wizard->setNextEnabled( this, false );
-    else
-	wizard->setNextEnabled( this, true );
-}
-
-void LicenseAgreementPageImpl::countryChanged(int index)
-{
-    ResourceLoader *rcLoader;
-    if ( index == 0 )
-	rcLoader = new ResourceLoader( "LICENSE-US" );
-    else
-	rcLoader = new ResourceLoader( "LICENSE" );
-
-    if ( rcLoader->isValid() ) {
-	introText->setText( rcLoader->data() );
-    } else {
-	QMessageBox::critical( this, tr("Package corrupted"),
-		tr("Could not find the LICENSE file in the package.\nThe package might be corrupted.") );
-    }
-}
-
-LicensePageImpl::LicensePageImpl( QWidget* parent, const char* name, WindowFlags fl )
-    : LicensePage( parent, name, fl )
-{
-#if defined(Q_OS_MAC)
-    // StyledPanel style looks very windowsish
-    customerID->setFrameShape( QFrame::LineEditPanel );
-#endif
-    customerID->setFocus();
-#if defined(EVAL)
-    // ### improve text
-#  if defined(QSA)
-    licenseInfoHeader->setText( tr("Thank you for your interest in QSA.\n"
-		"Please enter the license information you got for this evaluation version of QSA.") );
-#  else
-    licenseInfoHeader->setText( tr("Thank you for your interest in Qt.\n"
-		"Please enter the license information you got for this evaluation version of Qt.") );
-#  endif
-
-    customerIDLabel->setText( tr("Name") );
-    licenseIDLabel->setText( tr("Company name") );
-    licenseeLabel->setText( tr("Serial number") );
-    evalName = customerID;
-    evalCompany = licenseID;
-    serialNumber = licenseeName;
-
-    expiryLabel->hide();
-    expiryDate->hide();
-    productsLabel->hide();
-    productsString->hide();
-    keyLabel->hide();
-    key->hide();
-    readLicenseButton->hide();
-#elif defined(EDU)
-    licenseInfoHeader->setText( tr("Please enter the license information for the educational edition of Qt.") );
-
-    customerIDLabel->setText( tr("Educational institution") );
-    licenseeLabel->setText( tr("Serial number") );
-    university = customerID;
-    serialNumber = licenseeName;
-
-    licenseIDLabel->hide();
-    licenseID->hide();
-    expiryLabel->hide();
-    expiryDate->hide();
-    productsLabel->hide();
-    productsString->hide();
-    keyLabel->hide();
-    key->hide();
-    readLicenseButton->hide();
-#else
-    licenseID->setValidator( new QIntValidator( -1, 9999999, licenseID ) );
-
-    // expiryDate and productsString comes from the license key
-    expiryDate->setEnabled( false );
-    productsString->setEnabled( false );
-    keyLabel->setText( tr("License key") );
-    licenseInfoHeader->setText( tr("Please enter your license information.\n"
-		"The License key is required to be able to proceed with the installation process.") );
-#endif
-}
-
-QValidator::State InstallPathValidator::validate( QString& input, int& ) const
-{
-    if ( ( globalInformation.sysId() == GlobalInformation::MSVC ||
-	   globalInformation.sysId() == GlobalInformation::MSVCNET )
-	   && input.contains( QRegExp("\\s") ) ) {
-	QMessageBox::warning( 0, "Invalid directory", "No whitespace is allowed in the directory name due to a limitation with MSVC" );
-	return Intermediate;
-    } else if ( globalInformation.sysId() == GlobalInformation::Borland && input.contains( "-" ) ) {
-	QMessageBox::warning( 0, "Invalid directory", "No '-' characters are allowed in the directory name due to a limitation in the "
-			      "Borland linker" );
-	return Intermediate;
-    }
-    return Acceptable;
-}
-
-OptionsPageImpl::OptionsPageImpl( QWidget* parent, const char* name, WindowFlags fl )
-    : OptionsPage( parent, name, fl ),
-      titleStr("Options"),
-      shortTitleStr("Choose options")
-{
-    connect( installPathButton, SIGNAL(clicked()), SLOT(choosePath()));
-    sysGroup->setButton(globalInformation.sysId());
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-    sysOther->hide();
-    sysOtherCombo->hide();
-    noteLabel->hide();
-#endif
-#if defined(Q_OS_WIN32)
-    installPath->setText(
-	    QString( "C:\\Qt\\" ) +
-	    QString( globalInformation.qtVersionStr() ).replace( QRegExp("\\s"), "" ).replace( QRegExp("-"), "" )
-	    );
-    installPath->setValidator( new InstallPathValidator( this ) );
-#elif defined(Q_OS_MAC)
-    // ### the replace for Windows is done because qmake has problems with
-    // spaces and Borland has problems with "-" in the filenames -- I don't
-    // think that there is a need for this on Mac (rms)
-    QString base("QtMac-");
-    base = QDir::homeDirPath() + QDir::separator() + base;
-#if defined(EVAL)
-    base += "Eval-";
-#elif defined(EDU)
-    base += "Edu-";
-#endif
-    installPath->setText(base + QString( globalInformation.qtVersionStr() ).replace( QRegExp("\\s"), "" ));
-    sysGroup->hide();
-#endif
-}
-
-void OptionsPageImpl::choosePath()
-{
-    QDir dir( installPath->text() );
-
-#if defined(Q_OS_WIN32)
-    if( !dir.exists() ) {
-#  if defined(QSA)
-	dir.setPath( "C:\\Qt_QSA" );
-#  else
-	dir.setPath( "C:\\Qt" );
-#endif
-    }
-
-    QString dest = QFileDialog::getExistingDirectory( installPath->text(), this, NULL, "Select installation directory" );
-    if ( dest.isNull() ) {
-#  if defined(QSA)
-	dest = "C:\\Qt_QSA";
-#  else
-	dest = "C:\\Qt";
-#  endif
-    }
-    if ( dest.right(1) == "\\" ) {
-#  if defined(QSA)
-	dest += "Qt_QSA";
-#  else
-	dest += "Qt";
-#  endif
-    }
-    if ( dest.contains( QRegExp( "\\s" ) ) && !sysBorland->isChecked() )
-	QMessageBox::warning( 0, "Invalid directory", "No whitespace is allowed in the directory name due to a limitation with MSVC" );
-    else if ( dest.contains( "-" ) && sysBorland->isChecked() )
-	QMessageBox::warning( 0, "Invalid directory", "No '-' characters are allowed in the directory name due to a limitation with the Borland linker" );
-    else {
-	dir.setPath( dest );
-	installPath->setText( QDir::toNativeSeparators(dir.absPath()) );
-    }
-#elif defined(Q_OS_MAC)
-    if( !dir.exists() )
-	dir.setPath( "/" );
-
-    QString dest = QFileDialog::getExistingDirectory( installPath->text(), this, NULL, "Select installation directory" );
-    if (!dest.isNull())
-	installPath->setText( dest );
-#endif
-}
-
-ProgressPageImpl::ProgressPageImpl( QWidget* parent, const char* name, WindowFlags fl )
-    : ProgressPage( parent, name, fl )
-{
-    // ######### At the moment, we show only one line when unpacking. So the
-    // horizontal scrollbar is never shown for now to avoid flickering.
-    filesDisplay->setHScrollBarMode( QScrollView::AlwaysOff );
-}
-
-#if defined(Q_OS_WIN32)
-WinIntroPageImpl::WinIntroPageImpl( QWidget* parent, const char* name, WindowFlags fl )
-    : WinIntroPage( parent, name, fl )
-{
-#if defined(QSA)
-    textBrowser->setText( "<p>This program installs Qt and QSA.</p>" + textBrowser->text() );
-#else
-    textBrowser->setText( "<p>This program installs Qt.</p>" + textBrowser->text() );
-#endif
-}
-#endif
diff --git a/util/install/win/pages/pages.h b/util/install/win/pages/pages.h
deleted file mode 100644
index 8108f42..0000000
--- a/util/install/win/pages/pages.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef PAGES_H
-#define PAGES_H
-
-#include <qvalidator.h>
-
-#include "buildpage.h"
-#include "configpage.h"
-#include "finishpage.h"
-#include "folderspage.h"
-#include "licenseagreementpage.h"
-#include "licensepage.h"
-#include "optionspage.h"
-#include "progresspage.h"
-#include "winintropage.h"
-#include "../globalinformation.h"
-
-class Page
-{
-public:
-    virtual QString title() const = 0;
-    virtual QString shortTitle() const = 0;
-};
-
-class BuildPageImpl : public BuildPage, public Page
-{
-    Q_OBJECT
-public:
-    BuildPageImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~BuildPageImpl() {}
-    QString title() const
-    {
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-	return "Building Qt Examples and Tutorial";
-#else
-	return "Building Qt";
-#endif
-    }
-    QString shortTitle() const
-    {
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-	return "Build Qt Examples";
-#else
-	return "Build Qt";
-#endif
-    }
-};
-
-class ConfigPageImpl : public ConfigPage, public Page
-{
-    Q_OBJECT
-public:
-    ConfigPageImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~ConfigPageImpl() {}
-    QString title() const
-    {
-	if( globalInformation.reconfig() )
-	    return "Reconfigure Qt";
-	else
-	    return "Configuration";
-    }
-    QString shortTitle() const
-    { return "Configure Qt"; }
-};
-
-class FinishPageImpl : public FinishPage, public Page
-{
-    Q_OBJECT
-public:
-    FinishPageImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~FinishPageImpl() {}
-    QString title() const
-    { return "Finished"; }
-    QString shortTitle() const
-    { return "Finish"; }
-};
-
-class FoldersPageImpl : public FoldersPage, public Page
-{
-    Q_OBJECT
-public:
-    FoldersPageImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~FoldersPageImpl() {}
-    QString title() const
-    { return "Folders"; }
-    QString shortTitle() const
-    { return "Choose folders"; }
-};
-
-class LicenseAgreementPageImpl : public LicenseAgreementPage, public Page
-{
-    Q_OBJECT
-public:
-    LicenseAgreementPageImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~LicenseAgreementPageImpl() {}
-    QString title() const
-    { return titleStr; }
-    QString shortTitle() const
-    { return titleStr; }
-
-private slots:
-    void licenseAction(int);
-    void countryChanged(int);
-
-public:
-    QString titleStr;
-};
-
-class LicensePageImpl : public LicensePage, public Page
-{
-    Q_OBJECT
-public:
-    LicensePageImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~LicensePageImpl() {}
-    QString title() const
-    {
-#if defined(QSA)
-	return QString("License Information to Install QSA %1").arg(globalInformation.qsaVersionStr());
-#else
-	return QString("License Information to Install Qt %1").arg(globalInformation.qtVersionStr());
-#endif
-    }
-    QString shortTitle() const
-    { return "License information"; }
-
-#if defined(EVAL)
-    QLineEdit* evalName;
-    QLineEdit* evalCompany;
-    QLineEdit* serialNumber;
-#elif defined(EDU)
-    QLineEdit* university;
-    QLineEdit* serialNumber;
-#endif
-};
-
-class InstallPathValidator : public QValidator
-{
-public:
-    InstallPathValidator( QObject* parent = 0, const char* name = 0 ) : QValidator( parent, name ) {}
-    ~InstallPathValidator() {}
-    QValidator::State validate( QString& input, int& ) const;
-};
-
-class OptionsPageImpl : public OptionsPage, public Page
-{
-    Q_OBJECT
-public:
-    OptionsPageImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~OptionsPageImpl() {}
-    QString title() const
-    { return titleStr; }
-    QString shortTitle() const
-    { return shortTitleStr; }
-
-private slots:
-    void choosePath();
-
-public:
-    QString titleStr;
-    QString shortTitleStr;
-};
-
-class ProgressPageImpl : public ProgressPage, public Page
-{
-    Q_OBJECT
-public:
-    ProgressPageImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~ProgressPageImpl() {}
-    QString title() const
-    { return "Installing"; }
-    QString shortTitle() const
-    { return "Install files"; }
-};
-
-class WinIntroPageImpl : public WinIntroPage, public Page
-{
-    Q_OBJECT
-public:
-    WinIntroPageImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~WinIntroPageImpl() {}
-    QString title() const
-    { return "Introduction"; }
-    QString shortTitle() const
-    { return "Introduction"; }
-};
-
-#endif // PAGES_H
diff --git a/util/install/win/pages/progresspage.ui b/util/install/win/pages/progresspage.ui
deleted file mode 100644
index 927d975..0000000
--- a/util/install/win/pages/progresspage.ui
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
-<class>ProgressPage</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>ProgressPage</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>440</width>
-            <height>286</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form10</string>
-    </property>
-    <hbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>layout2</cstring>
-            </property>
-            <vbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <widget class="QTextEdit">
-                    <property name="name">
-                        <cstring>filesDisplay</cstring>
-                    </property>
-                    <property name="vScrollBarMode">
-                        <enum>AlwaysOn</enum>
-                    </property>
-                    <property name="hScrollBarMode">
-                        <enum>AlwaysOff</enum>
-                    </property>
-                    <property name="textFormat">
-                        <enum>LogText</enum>
-                    </property>
-                    <property name="linkUnderline">
-                        <bool>false</bool>
-                    </property>
-                    <property name="wordWrap">
-                        <enum>NoWrap</enum>
-                    </property>
-                    <property name="undoDepth">
-                        <number>0</number>
-                    </property>
-                    <property name="autoFormatting">
-                        <set>AutoNone</set>
-                    </property>
-                </widget>
-                <widget class="QProgressBar">
-                    <property name="name">
-                        <cstring>operationProgress</cstring>
-                    </property>
-                    <property name="centerIndicator">
-                        <bool>false</bool>
-                    </property>
-                    <property name="percentageVisible">
-                        <bool>false</bool>
-                    </property>
-                </widget>
-            </vbox>
-        </widget>
-    </hbox>
-</widget>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/pages/sidedecoration.ui b/util/install/win/pages/sidedecoration.ui
deleted file mode 100644
index 1ea5761..0000000
--- a/util/install/win/pages/sidedecoration.ui
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>SideDecoration</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>SideDecoration</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>122</width>
-            <height>156</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form1</string>
-    </property>
-    <vbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLabel">
-            <property name="name">
-                <cstring>logoPixmap</cstring>
-            </property>
-            <property name="sizePolicy">
-                <sizepolicy>
-                    <hsizetype>0</hsizetype>
-                    <vsizetype>0</vsizetype>
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                </sizepolicy>
-            </property>
-            <property name="pixmap">
-                <pixmap>image0</pixmap>
-            </property>
-            <property name="scaledContents">
-                <bool>false</bool>
-            </property>
-            <property name="alignment">
-                <set>AlignTop</set>
-            </property>
-            <property name="vAlign" stdset="0">
-            </property>
-        </widget>
-        <widget class="QLayoutWidget">
-            <property name="name">
-                <cstring>Layout1</cstring>
-            </property>
-            <vbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>0</number>
-                </property>
-                <property name="spacing">
-                    <number>0</number>
-                </property>
-                <widget class="QLabel">
-                    <property name="name">
-                        <cstring>versionLabel</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>1</hsizetype>
-                            <vsizetype>0</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                    <property name="text">
-                        <string>Installing Qt</string>
-                    </property>
-                </widget>
-                <widget class="QLabel">
-                    <property name="name">
-                        <cstring>editionLabel</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>1</hsizetype>
-                            <vsizetype>0</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                    <property name="text">
-                        <string>(Clear me)</string>
-                    </property>
-                </widget>
-            </vbox>
-        </widget>
-    </vbox>
-</widget>
-<images>
-    <image name="image0">
-        <data format="XPM.GZ" length="55092">789cccbd47b7eb38b2ef397f9fa2d6e5ecae5e7cf266d0035266cb6da7ed77af1ed07b2f1aa9bf7c83883f704c56d5cd7c75bb5f95d6c9ca5f8a22114044202200f0fccffffcdbe7d3fddffef37ffe8fea625c02eb6f966f947ffb4fbb4e92ebfff57fff9fffcffff88fe160f0b7fecf68389bfe6df41fffc7fff80febf96fd6df9401ff5fcff64232ffde36244f7a762ac953fefd56f29cf35cf2a267f3072ff9f733c906e7836493f35eb2c59fd74ab6797b1f243bfcfb46b2cb7fef0a1e72799c5af2907f7f94cce5732cc963fefd483297cf3a8387d43f992999ffde0c25f3dfb79a64de5f662099dfcfe924cf386f24f3fe4a44ff0fd17e5b327f9e772799dfcfb8078fa87d662499cbebbb9249de6fc9bcbd9d2f99dab795ccc7b31a48e6e3b71a4ae6e315ed25f3f1b04f82a93f0dc1636a9ff32999daf32599f757a54ae6fde17e48e6fae23892b97e78a2bd63ea1f438cef849e97e892f9f7652b99b76f3d91cce53763f0947e6f08fd9c1137b664de5e43c83fc7f53bf0022cf475499c8be719c4f113d824de5cc01671fd0eb6895dbaff50d8ab174ae6f2ad3ac9a47f63c924df4832d73f732a99f777f324998fb73993ccfb5f7f96ccc7df3a49e6e3514592b9bd3aa664ae1fd6bd646eaf9a2b98f4ddf52573fdb58e60d89f6d49e6df9b13c97c3c1d45326fbf634826ffb2934cfee40086fdf88164de7ff65232d9eb9b646e1fa607867e9bbe641a8f816092cf14f2423f4d070c7d8b9f25f3e7bbaf60e89fb791ccfb3b15df43ffe22f30f42f13f240ffea1b18fab716bf877ee967b043dc92bf1f0ea16fdd9af3a8f740bc3dbe64f2f70bc9bcbfcd2fc9bcbfbd4432f90b4730f5cff55e3297bfc9c0187f732899f4772099c6e35b321f7f6b0fc6f8daa6649aff7692f9f3724d32d7f7cb4932ef6ffb4e32e9b302c6f86723c9dcdefc50326f9ff32e99f7975382a10fd75c32d7e795906742fdd3bd49e6df67a2bdd09ff20886beb89164fefcd54932ef9ffa2c98fca72bda0b7d6a9f25f3feb0c4f842bf9a07b0d02fd13fd0afe2090cffd6c660e85b24ae87be05a40f63e1df8277c9bc7debab643e5e575732efef6e2799cb1bfcf89ecbdbed2573fd5cfd781e1fcf952d98fa3b91cf277f74cd24f3fe0f3ec08807ba8d64ae9fc54232e98f27993faff9f13df787ae680ff4d57995cce57103c95c7fac3bc97c7c7c5f308d67b8028bf9f72299cbd3dc49e6f2981f92797fd69664de5f7e2499dbb33b92ccdb6f2dc1d067772099fca72e99b7ff6a49a6f946f437f4b9bd48267934b0d0ef77c9bc7dad68df9cee9fee25f3fe69447fcc31df88f1843eaf6e92f9f3da89649a0fee25f3f1cb85be41ff0331bed07f5f8ca7f0a7d43f13a1df9d2a99f777f32899dfffea80111faeae92b93cee41f090f7effa0c463ce77f48a6f9ee51321fafeb4930f547bb01433fecb164fe7cff5b321f2f2f92ccfb3f93d793bd745b30f421ae2593bfd94be6fd1b2692b93cde4e32b79fda164ced8ddec1d017e74332f9dbb564de5e772899e299140c7dcaa692b93db8df92797fe61d18fe3117e303fd59b792e979b164de3f8918ff05f5cf46f40ff4c715e301fdb9bd80e13f57f792797fad4a30fce906bf17f3f51ae331c4fc19a13d43f89780e693a9f0a7ed028cebfd4e321fafe6198c7cc00b2473f9bc77c95cdf4a4ff0908fc75a5c8f78bfb52553fcf02999ebbfdf08a6f10e5ec1c2bfdc49a6f97c2b99e6ff27c9642f3fbee7fab416f2407fc299643efe912f99ec692099cbd3b492b9bc9ab8ff94c63711fd0bfdb2a792c93e2ac9140f689229df5125f3feed5660e85ffd2a99fce34432efdfee00867e5e14c9941f8ec0d0bfcc904cf9572a99b7a76e25f3fe73c760a1afaa646ebf99e85fe86f2ec61bfaea0b79e11f0ba12f2eda8bfb4b7d267b98897c64dd81a1cfeb503297afbd934cf1d45e30fc93f81ef363b896ccefbf3a4a26793dc1149fae7d30f247ff2a99ea1d3fbee7fed68b05a31eb1924cf9c2083ca5f6076bc9542fd948e6fa900e2473fdbbbc09463d630246be1a6692f9f84481643edef95532b73f5df01cfd7993ccdb7be92453beb5924cf3c14432efbf5cfc7e01fffa2999e6bfb1646e5f9b022ce2cba364de3e37114cfec132c0d047f74d32f9e37b30f26b2f05431f5763c9bc7f42c1d04797e6cf99d0c71be41fc21fa52a18fe24207d9f0bfd5a1d04d3f8570fe009d573dca3642e7fbb054f697ca237c1246f3a944cf53a5b32c5a72f60f81bd796ccaf4f2bc994af2d2593be6f2453bea682e7345eed4e32d5ff14c9bcbf2f57c95cff7dd15ef8a35097ccdb93cd25537e2bfa6b3124fffd055ec2bfcc24537c548045fe518331decda7647ebd2eda6ba37fc478c01f6d44ffb8d43e1ded17e3af3960cc97f5022cf481e257a6dd149fd96bf08cc6ffe64aa6f92604c35eec4032b7efab2799e2375b30e94b2aae5f50ff58aa642e6fe148a67ce1065e927fb80d2553bd2494cc9fdf3e49a6fc45c863c07e1dc97cfcd3a3606a5f7d05633e887682497faf4bb08df8e2030cfb2bc9de17a2ff4bf49f886762f4cf10f666bd80618f3e8dff92f5177f5e914be6ed2f36e005c91b5f24533cf22598ecafeec04be467ae64f28757b041bfaf5f040f29fe68c0268d9726da63917e14a2bdd0c7f424998f5f44fdb314fd91bf83a18f8105467fdc4660e86783e789fee94a30e215e3118c78a3a0f9dc60fd45fa34072f491fc329d8a0f685a964aae7dfc0265d5f2f05537f568f60d86bb091ccfbe36248e6fad988dfbba85f8e24533e48f66f88fe892b30fa67634ba6f97508467f6d1cb0a827435ed11f35fa6388f9c9a7f8c814f157fd065e92fe5f6e6083e42f5cb0897ac417d8227dca3fc036f55fb305431fba77c1747f3b02bba4df3ad9ab29e42f669229df46fb647fe460d8d3aa0243fecd2758d4bbefc0a21eb403a33f2a8a772c263f6fff35055ba827d1f85aa2bf2f1a58f4f70a8cfb252a18febdf1c0f02701f58f2dda7f5d48a6fe9b8071fff21d2cfc83603caf51c1b87fb106433f4b1a1f87fd17eebf1b17ec903efbd43e46b0f71a0c79cb2d58c4e72d18cf2f1bb078be0dc6f3339abf5cd11f8906c6f5de1a8cf846e3f6c1cbe724df068cf6548964ae3f1b130c7f9096608c7f7603a3bde90e8ce7bb2f60b4d77e00c39f075c9f98f639e47fa34832d7e7f84c2c9eb7ba80216ffb08c6f3cc042cd64f1a30e42f9760d88fe382d19e1ced19c11e42aebf0cf17cd306435ecb04a33d610e16f20b16f1470a16ed3981457cf9443c82bdae2660e19f79bc341c8be7d70e18cfd71ec022df8ac178feaa05e379d72bf108e3df70ff369cc8fe1d8345bc9c81d1fe60452cfaeb7a03c3be74ba7e2adbd382f1fbcb3b18e3910dc1689f4df24e657fd4603cafb2c168bffb0cc6f32b1ebf0c67e2fe01e9d34cdcef1283e12faa6f30ee67f860e1ffe660a1efdc7f0ee7e2fed58c58b6e70cc6ef8d002cd6173db0a83f2dc0d0b78edbf77021e5bd078bf6aec1f87d41fabd14f2155bb0f8fd108cdfeb2330da93de83f1fc8ac6d310f2ac1a309ed772ff3734c5fdb48d64ee0fb72e58d4e75ec0f87d7202a33f0d713df4a5237bb7e4782a60b11ee681d15eed112cee1782a1cf158f4f86b6b8bf6581c5fa2af5a733823f762d30eed7d2efdd11f2efcd1d18d76bdc5e468311f2a3c007e379f5082cea75f760e8fbfa8d782cf49dfba3d150fcbebc030b7bdc83a17f099faf472371ffe64c2ceed73460e883cefb6b3416f7ab4fc463e10f2c30e46b8927e279b94b2cee6f6cc1d087ec092cec4930c6f342f24f85fc46442caef75660e8cf85fb93d18cfd9ec783f1162ceaa37cfe19cdc5fd3ceabfb990d79d80d13eeb152cd64fe9fa85f8de7c05a33df9188cf66cbec0d0c7f50d0c7df3b8ff1f2d85bcce002ce227078ceb1d0f2cfca54e3c41fb6f74bd21ef5780f17c5d058bf53beeaf46e618ebd77a2299c77f5bba9f25c6b7f4c1c2bfbd80d19eeb07f104fda1933cb678de2603e37eba01c6ef6f57b0a8ff71ff3d72c6a8b7e8d47faee88fb507c6effd188cdf3bdc1ec67d38c739e2e3c5a63393e21723269e60fde4f22c99d677b93e307577285eb7b8fd8f27ecfe9cf50e0c7d8a79ff8ca7ec7bfefb6b412cc627db81c57e823730ead9eb1158d43fb8bce399b8fe7a0716eb5d7330c663c3fb733c67eda1fa484d2cc6c39a83a11fed193ca57a651282b13e16f3f96ebc9860bdc8d880c5fe810c2cf21bae8fe3e544d4cb23c93c5ed30a30ea071b170cff92d0f81813d443d71730eaed9a07c6f53eb7b7b1c9bee7fa117c49a6f5024b30c5b3760cb6b19ec9e3adb13331e8face93ccfbaf3883f13c23013ba8a72e05d3fd0d1b8c7c734df23b53d8df86facf9da03e7e1b80f1fc82f7e76430813e6d63e229fa3be5e333194e4cd40b52b04ded31b8fe4e4653110ff2fa0a73a736f28d9a788afd67fa180cfd6a1db0588fe3fe7f32610accfb77c3f59721f2c77c493cc5fe0aaf00e37eb731788afa4e059ed1f8361f60d48f6dde1f93d914ebc7460a46bd2fe4fd37994fc7940f6cbec1e89f98cf5f93a578def5013c433d86da6f4c51bf09b9bd4dcce982f2b39cebcbc49a22fff6b83e4dec29ea15d95932adb704c433acffebf43c776ad1fd039d7886f5d315bf3f5356f09acf77d3d1d4a5fa65734f3cc3fe035d134cf7372c30ec355b824dc413dc3fb0e9906574dcdf79c4e2f74501c6fa5b74104cdfb73c3e9d4ea6d6887f7fdb10b3e791bef1f9940ddf1ceb078fe005f5b7c5e7e3e96c86f58f8d0246fd3a76c1f311f9b377b043e31bf07c693a9fa1de19df816dec07f804bb584fa3fe5accc47a86069e517b82002cd6f775b043f39bc6e3dde9923d8eeb7332035bd47f3705ec60ff824d3cc7fecf84ebefd498c19e2faf609bfa2be6f9f0d49c2d51cff5c016e5fb2b176c8f78fb8b15d8a5fa99c9e7d7a93543fdab1b831dfafde6287844f5d10e8cf1af49bfac39c63bff024f499e98ee6fb3fb937f7d023bd4fed407bb435aafb124d37e2d5d30b53f03cf87d43eeb0d8cf5dd7803c67cb7e1f63d75587f707df1e9fece7c30a2fd5d7b30f6b3469f9269fdc792cce5594dc1587fba52ffb84c1edebecd5e326f7f41faebceb19f2cda8271bfa6133ca2e727e0118d4fb2164cfa9c2892f978af4c30eca1f1c19321d7bf2bff7e3660e34ff5e53bb043cfaf5dc174bf6c0076a97fdb929805acfcfb6d0446bdbee4ed9f0d857eddd660f89b6e2298da5f05c4ac3f687e6bc0c311ad87e07a263f9f0fda77f094da537f8067245fc5f569369a1963d29f2b31eb5fdabfe20ba6e7a777e0d188ff3eb9815906c29fa78227d04f053ca3f6b65c3f6663260fd553a93d2cfca4fec91bc95cfeea041e517f5fb8fece2662fcdd023c86ff33c1d31167cd06cf21cf5c308d679d8017d41f0df72fb3e9cc1ef3ebab14ec8c69bfc05432ed47d38885fe5d4cc9b4fe37028fc8fecb37c9649f25784cf6ebbf82e7f47dbc042fe87e05f5cf4ce8936b82e7f4fb36113ca6f17a002fe8f986b8de80fe8bef4dd28fc292cce52fa68269fc4d1effb0db2f49decd0c0c7fdc92fe2ce6131a3f6d2d98fcb7bf02cf49bf370330d68fea5a30fdde38831dfabea3fe59b2fea178b0009bd41e4f03db23aeff37713decb5f00593fc2df5a7c1ee47eb6f2330eadd17156c8ea87ff7609bfc45590b267f78d5c02e714bfa6ab2f1207ff80136c87ef22918f34dfe06c67cd186c48b018dafcee3cd99c5ee47faa48217647f99609bf4c7a0f1b2160392afa3f6da6cfc68bcd69279ff949f6093daef4ec1f067f5817831a4e76de8f70ebb9ece177c806d6abfb3235ec0dfba2bc9b4df9bc6d7ed1376ae5f5c3fe703263f6f4f520a1e53fc99102f66d4be8cf7cf7cc8e4e3d7673e784c7cdd82a7d4de5a03c3fe751e9f3265c2fca09be009d94fc2e397394b87c99f186bf08cfa4fe3fd3b9fb0e7717dacc792e97c0b8f5f58f8bb20d6793d613e5f2cc7b49fc5005bd49e35b56fb1c4fcecf1fe9e2fd9f7743dfdde582ca83f8267b049ed59f3f9686eb2eb69fd782699d62fa83de67244f67de1fa3eb79643b237ef2698f4ab9e8347d4feb0008fc99e1c6a8fbd70d05f4762261e6f9f46e3e730a6f3160618fdbbe6f9c6dc5d0ea8bd0df5bf6b88f89aebdfa25f00a5f8ff4e32edd749c0636aff66019ee17939780e7de2f92a73f643e8bb031e537b7c133c237bf5dec073ba7f44f71f1a225ea3e78f447f79dfe011ddcfe3f22dc68c29feff06e379ba0e9ed2ef0b1effb1747d44f3b1fd0d5ed2f78d0236c65cdf367c7e5fb0009858bf07cfd15f7bf082f4a3492473f96f19d8257b6df8f82e66cb05f55fbe223630ff6f797cbc98b3f67079527afe82319d17e1f6b7581a03fafdc693ccc7d7a0fb194b97da7bbb111b63f2af1bae9f0bd31810eb7cbd61612d1dd2bf94da671943c8cfe7af856d8c69be6e0563be594f2573fdd7b8bd2c1c763ded0f53c01392c7bb4ae6fdd3717d5db8c684fa4bbb134cdfa767f094e28180fba3e5c080fff15fc0b309f5ef9764d24ff13dfc43cae7a3e5d0807d6cf8782d47acbdfcfeed0b783ea1fad50ebca0ef6f3ed82079a32f30f2c5644f6c627f5acce7df655fd0e1e3930460a662dc3f1cc14beaaf40133ca178a8069bf47cdf90ccc74ff3c10e8de78dfa676c8afd09b564daff5982b1ff36a6f64c58ffd2fed40b7836a1fac504bc9c50fd6101c6fc97abc426e2b3700fc67911f3018cf33ac99d643e1edd198cf3176e07463da4fa0063bf8826be47bd53e7fe773965e345fded806db217eb1d8c78f29612b3f6923ea9603cbffb0663bf4949d7b38083c663b3022f68fceb7bb043f6118682a9ff8c02ec92bfcbe9fe7dba49f5c30d18fb636c9e2f2ce7ecf7144f2a6097e4bbe5c4ecf7140fcdc0b0b734018bfde03a784af3c53504cfb15f47dc0ffb0bbb8160ecbffc002fa95e58edc1d8bf1a4dc1163d2f36c1a8575495609c5f1a4aa6f3a134febd83e2ed2f376093faafa3e72fcc01f1f50b3c217ddd5660ac37ad63f00cfe5407cf69beef5230ea35c6026c60bfe55532e55b39d8a4eb6f73b0d8df20ee6f637fe04a32cdff03b043fd757b904cf9d9168c7ae7ed2299ce7b3692697fc898d8c2f99ddb128cf3b317f49f85fa6348f75f1a06d9afb604c37ff817b04dfa1c0ec10ee9bb4ef22ecd015d7fdd8047345eb5079e907e598e60d2d7b40363ffe3762598e2d5750e16e703d692297ffc128cf35768af897afb36108cfaee5c32d56b0f9269fe2e24f3f61731d880ff5125d37ed80558ac974c25d37ec09d64de7fe64132f73fea27d8a2f15732c9b4bea008a6f655a23fb1dfb28c24d3fe470d8c7ae1ed5132e95b2099cf8fa6e82fd4e3c32fc9b4bee3125b38ef7723ff641816d99b7d03dbe48fc22bd8a1f9f95a825d9adf4af28706eb1ede5eaf060fe97aaf133ca1fc5605237e6d8ee009e5bbd5198cf58b4efc1efb6fb71730f67bae66e025c5df8a09c6fecae020998fafd248a6f3ba909fd93b6f4f71025bb0af52329ddf9849e6cf533fc036e993924ba6f96726993f2fcec00ef57ff12e99e2c34a32ed7f0cc1f017d5bb649aef7cc9bc3f22f13c97fa4fc3f859388f5a6d25f3f69443c1d86f3b06e37c4be54ae6edd354c9bc7dd791643aefdc4aa67acf2b18e7f134f13dced325a4ef26d3379affc95f9826e2cb952a99c6f7153ca57835fd0463ff691108267fb579028b78c2001b34dee14532bf7f62814df88b4832d52f2ab085f59d0118eba3752899ecff2699eae307c9b43fb405431f9454329d2fbb97ccdb938cc02ee95b2adaebd2f8b590dfc279e448974ce3f12998e67b4d30ce074713c934ff403e0be72d2dba9fc5e607defeca014fc85f5413f094e2313b954cfea0114cfe467901233fd41792a99e6a49a6f527c198afd71bc9549fb9822dea8fba944cf9502799dad782b17e6d7592c9be6782495fea42321fdff8c7f77cbcb477b043fa1deb9229ff4904e37cc697641a7f0decd27828aa647abfc45032ade7b982495f13b25fcbc2fb0c944032d9cb93606abf5949a6f314cf60bc4fc00a24f3f6b79960d29f5a914cf11dfa53d87bf82999d6df303e16ceb755a4cf369b3fc8ff7660ec3f57de04933ff0f760ac5f665bc114df2b67c1a44f57156c507f5f1cc9b49ff3198cfdc69bab60aac7ac4f601be7fd22c1781fc95132ddaf95ccdbabd492b93e794f60e883229e87fd9ef959326fbf3a964cf9e00318fe5d9d4be6fda192fed916ce83a92f92a93dbe64ca8fd11f229e4c6f92f9f3938164ca1f4f82b1fe994ae6df871f60acf79a6bc9bc7f62f49785f3b1b75230d95775914cf30bfacfc279b22df90f47c413a621995f9f7be011f99b6d2b98e2136d021e4f683d63059e4cb83e7ae2fa19dd4f3b83e734df943118f581f22099cba33c8397549f592dc026d69b8f9279fb6f9f60e453d6156c537f5a63c9644f8160aa47695330fc8dee0aa6e7c5b964f28791648a6fe692297e580aa6fa6628da8bf8c3bc974cf9642118fa38954cf58f89649acf1692e93c27e9936361ffbdd149e6df2b9e609c1f7d96ccf549ad24d37974e887d0676721998f8fba924cf1fa9364b247713df687754f92e9fc672399ea45a23d581f35af92f9f7b9f81eef13885ac1181f4b32d5dfa10f16f6a3044bc974dee9158cfd3f892399fcbb2d993fff26fa6786fd3ba23f711ef146d7bbcc7e283f7b944ce7995ec0639aafab25784af671db0a9e52feb200cfc9fe320f2cec650f5e52beae7d49a6f319e2fe4bd457766083f453bf80b11fa878154cf6b2adc1585f37c4fde0af235530f251717fc45b9e90d7c17ca848a67add5530ad1f74a160aa8f76e279c8e7c34630f97f3b174cf2379a645abf247fe35a781f90ff2818f3c1443297571d49a67cfd4930cd87da1b58e8ff5630ece74b32cd1fa564aaef7982697dc87900633f73694ae6faa0be4aa6fd789a648aa724637fd25a32ed3f79924ceb3d3330f6f325ad64de1fd98364927f2598facbd42553fd3594ccafcf311e16cecbdf22c95c5e652a99de7f267e8ff3c9e1bb641a6f4732bf3efb008bfd812f92297eb32473794b31bec87fa30a2ccea3ee0493ff30f79269bfe23718f53e6b2099ea0377609c7f34be2453fc7b914cf91c1f2f63c0e6478a0fb6e019d58be207c1538aff8fe039e503712b99e6eb5c3297a750c04b1afff22618fb1922c1347fc73bc9b47f4630f2f9eda360b2efab2e98fcd1ea158cfd83452598f47f6b48e6cf8feec1a8b7a40bc1f05f3bc9bcffb61918f596f85d32d5e3447fbaa48ff94030f6ffdc24737bf267c416f6a7ac3f2453fe580bc67e99122cceeb9c24533d6b2299f4ad108cfce30773fd500cc9341f7792a9fe6b0ba6f5da6b2399ce372ec1d85f1d9d25f3efd59b60f89f3bc9bc3fd4a364f22f6f60ec97543792797fa8a960d8c74d32f9932918f61ed49269ff832d99e44d24f3f61a23c1d43f96fc1ef1fe1c8cf763448e645a3f16cfc3fe3d632899e2955832cdafd01f0be7d5ad4a32ad9f3792b9fcc64030ced3d792b93e9723c9b41feb02c6fe67732b99f68b7c4aa6faa3180f9c17f6499ffa032dc46bf098ec5d8f24d3fe08133ca1f530ed049e527eb7f50593ffb83c48a6fd570a7846f7d36b30e6fff25b32d5ab73c1145f28ef82299ed1e660d473b64f92a9def92698fcdd5a3cdf46fd24914cfbcd74c9b43e21e445fda611f7437cb1fe124cf65edcc02edd3f7225d3fb001e05d3fc5ebd108b7879bb93ccfbc72f05937e66a9605abf538e92493f56e021d99f6249a6fa5b2b98fc9f72914cedc3785a789f52f12698e42943c964ef17c9e40fe792697e1849e6f2648e60ac470660bc9f243b4aa6fd3fa1647ebda20826f9d24c32ef0ff55e32d5d7447f60fe2f9f25933f5a4aa6f8e62c18f9502299f40ffa61e1fd4b4a2899f6279492495ed19e29e297028cf795048d64dedef05530e29137c9e47fe4efb19f740cc6fed152134ced0f55c9fcfb488c17dedf74b9934cf64dfa3c326754ffab0cc1643f510ac67a78ba04633e77466083ecb309c026cdffa921998f476582b19fa7ba0aa6f93e5e0ba6fca6188051bf4b447bb1bf4aff00237ff60f92e9fd41f792e9bc7d2599e6f717c1d8cf247e8f7a5d160ba6fecf23c1b4bf21a0f86264e13c72f82499f2fd57c1f06727c954bfcec098df755b30d9ef7a2e98ecdf78974cf54cb447d47b3d5330e2cb0fc9b4df47dc0ffbd12ea9647a9fec1e2cde07f92e99f60b1c05239e3e4ba6f9df974cf9d74932ed9ffff17b2e5f70014f90ef288261df8664b25f5332bd6f0ae36be1fc4ef92499f22d4b3297ff593c0fefb7525dc9e4df3c30de5fa53a9229feb12553bc2ec66f46f2565f92c97f37609ca7b4df25d37e825a32adff89fba39eaafb92293fea24f3ebb7627cb13ebbfd944cfbadbf2453fe37154cf287a664d257d15e715e80fa6fcce673f2af117846f94076075e503d2188c1d88f9a9b82c91f2457c954cf38832df2279ba9647adfe70a8cfaecf62098e2ef6e2699ce27ed04533cb2d5c0d8efaa3c09a6fa46f12199ec5d3c0feba51dcd9f63517f5dbd0886bd3f4be6d76f7f30d59b62c164afde5432d5271f2453bdf0118c7abd77124ced4f1ac914afae2553bd5edc0ff3b9f32498ec6d1308a6f66c55c9341fdd83313f9ba23da8ef46a564dabf664aa6fd21f27b8a37e291643abfe249a6f9ce174cfb13a2028cf78b25b9647a1fd4a364f20fdf92c97f0c25d37a512599d607a03f22bf375ac994ffa49229ff78944cf94a2618fe48fe1ef59e4632bd3f270163becf2ac994bf8beb71fe4b0d2453bd27964cf552d13fa807da2f9269ff612499e627d13ed40f424330b55f13d763bfc6ed4332c50f37c1f0f78a64daff3d964cfb43c578637daf7a138cfd39429f719e6745fa30314df21f590ec6fedd32134cfbb10c5d30f98bcb8b64da2f3c01dbd87fbc174cf5c92001e37c4d25eee760fff1b7605a0fc8b792e9fc81b8bf43f149740263ff68fe2a989eb722fb9c8878201849a6f75f9e25d3f37cc974fee15532bdaf752898ecdd0904d37a475080512faf7e30e9432e18e7f56e82914f5482c91e0bf13ce4ff7e2698c627fb924cebcfe2f7d8ff1b3e80719eaa934cfaee3992491e717ff80f6f2699f22ff13dcecfa753c9e4bf0e92293f394aa6fd139660b2cfc8904cf9df4230e68b4a32add78bf1c0feda740ec6fbebcab3648a8f2792c95fd492299e1848a67ccd164cf25b2d58f887ab64f2379d64de3fea4132bd6f4efc7e8e7827944cfb7f1e2553bd4f134cfa6c799269ffb6781eea8df14432b57f2718ebe591645a2f8b05231f15bfc77e0f652699e229f13cbc7faa9a4ba6f361427fb03f5013fa8cf5e2c495ccbfd73dc924af180fec0fd33e24737922f17c9c6f6cc91ea626f69b5e13f082fccfe64d32d547bfc0385f565ec0886fba1cecd07a663394ccfb237b05633d627b144cf6779949a6f75fd682c93f06349f4dc5fa433d154cfaace982697d721b4aa6f3c11918f585742299fce5bd64aa67958229be5ac560ac27ac12c178bfd79b64da0ff1e37b7adf95fc3dcef70592a95ebb174cfe3a10cf47fda01c08c67e1b5f32bdcfb0134cfde12a92493ed17f585fc81f25d378dc49a6f8e253308d57249e3f417c7a904cfbcd7e30c5d382b11e982592797f24df82b1de954ba67aa6907f4af69baec138af6c8d24533d692f99ea733bc1e4ff3c0b2cde37be944cfe712499f2b1b964b2675732c52bd0670bfb45d54832e58fba64da0fb301e3fd8d4a2499d67f857ee0fc72f82d99be5f81713e3e194aa6fd49e27e588fb89ec1884fae13c9d4ffa27fb0bff0229e67537fae481f66e612fb2d776083ec3debc026eaa53618f18a3b0323fe580f04d3f5c98b64da7f63825df217852e99ce77907c33113f6c4dc134df6f1f24d37c9982b17ee04f05537b9a77c9148f88dfa3deb07a92ccfb7f73168cf365778229be48bf25537d19f28bf501e55e309d4fc94f92c97fcec158cf2b12c1e41fbb4fc9b43e3d104cf3f7f6158cf87ebb170cffe448267942c1e47fba05187f1f455049a6f5614330f4ff0d8cf3b88ab83fde3770d94ba6fafc12bca0f6a557c1c80f6dc9644fb964aa7f1492a99eb1934cf3f718bc44fd632199f2ab67c914bfd782518f16e389f78346a23dd8bfa58c25d379ba4030c95b5f2453fc5c824deacfec2299f6eb6c25d37ae74630e2b94632ad170bf9b13fb87b964cf514713df61bd4aa643a9f0f7bb31cecbf10fa28f6e3f89269bd83e2adb9399f52bd33032fa6fcfef9086cd07e8d95f81eeb1b97a964b2bf0dd8a2f958ff02dbb41fbbbb825d9a3f2eb5608a3fe28560caafb6141fcd45fdb11a83b11e180f05d37e5c5f114cfe669d8051ef6f3dc1a40fab108cf3d9e55a30ce3b1a60d4d78bab649a5fe5f7645f978364dededbb360f247452899ea616730d6e7d6779269fdfb4330f9bbd4148cf8e7058cf5b8e44932bdffe25e30f6835c24d3f9d1b964b27f713decdd16ed9b937fd2f792a99ed2082679a247b0380f33964cf3ab18af05c52f57d1df381f5baf2453bcff0046fcacfe60daaf6a4aa6f9ed4b30ce7fce25d3fedd1918f65f8af1c37e6d4f954cf9cf5a32c927fa17fbede254326faf22aec77c1bd582a9fd971d58ecef3524d3fe5ea1bfd84f97d1f82ec47a83be124cf5c8ca07dba4efbab8de9df2dffba44f0b51afeb5cc1747d32154cf61eecc043ccf74f9269ffd3098cf7495c1e25d3f9c14a30ad9f281f92693de2001ee3bcf34430e94f71114cfe259883f17ef6b52599de2f36144cfaa23c4aa6fafd188cfa79d60a267de832c1345f1786649a3f7e30cd97a2bdc86ff55232c54fb9648a6fc4f367e44fbaa1649a5f669269ffb7f87e4ef6915f2453beaf4ba6f9443c1feb655a2c99e47b944cfb532493ff6bef25d3f86ec1e2bc532318ef1712fa82f3cdc55e32b5ff1b0c7b5acd25d3df9fa04ba67ac25e32bd0f44b4cfc0f95ad13f787f759c08c6fb8f34c9141f6e2453fee80b46fe22fac7c2fbafef24933f17fa8efdf9590dc6fb8d4a8a079626ceb3d513b04bfa5a527cb664f645eb65067848f359fd8369bfec063cc27ae45532d5e31f25f3f15c3d83315f5d12c9544f740553fe1e6592a93f3dc158bfb88127145ffb9560b2873a96cce5d75f25537ce90ba6fa62f283a95e2ae49bd2f82b0f82c93ef385645a6f17ed453d39984aa6fac04c32fdfd5607c1a42ff14a30cdb7b74232e5a76f60e483fe5132cdafb960c4fb5f60c4aba52218ebaf7b30d69fb6e27b9c1f0ceec1d82f962b92c95f1d24537da7148cf93d05239f534f92e9bc8bb81fcefb1547c9544fabc1383fe68af1c67e92f807d3fe43213ff6af7662fcb19fdaa37cc410f5ebfc5e30cd1f6b07ecd2f85a347e06332faa8f1cc0d0efdb17784cf6e91a82499ff44ff004eb318f92693fdebd649adf5f05937efa67c1347fe91618e7bb6e7782112faa60ac8736a1601a8fac00a31ee98c05e37d155bc1347ff8aa647a1fc009bca0f1f21682c99f9ae2fe0b6acf360763fd62bb168cfcb0148cf7790879f1be9ad4954cf53cd17fd8bfe49f24533db1164cfdbd7d07e33cd346fc1efb17b789643a4f300423bf303760bcdfec42f669b27885ee47f38169e1bc977e124cf18d3706e3fd11fa163c22fdda9482a7b43e7805c3ff058660ba9f2b9e87f364d14632d5fb4792e9ef37fe02e33cd926028bf364efe039c9b712f747fdd9ad24d3f58231fee58b601affdb9b648a6f7230dedfe12d25d3fa760a467d3817f218145fd99f9269bda1924cefdf93df23fe7e009b349f98623c2c1a5ffb2298ee97d8609c3f32e6609c3f8b2cc9646f0bc914cf3f4aa6786607c6fe958ee20f8bcdafb43f81e20b165e93fe5c3e25d37e30f13dea3ddd093cc27ede2d18f5983804e3fd1d9a25989ed7168269ff61fa089e223f9e8167d47f862699d6f39e25d3fe68152ce2b70318e7c9ec67c9f4fe12138cf70f252918f1932b9e67507caf08f9f1be9938069b648fc15e308dbf32108cf7df88e7637f627c150cff7a0163ff42f000c6f99c88ec9b4d37a867d1fc62b3f1a3fd3c743f5b8c5ff102463cb2da82117fb4df9269bde12498ec510f25d3fef01c8cfcb8b425d37eaa5232bd5f2506235ed85a9269bda4154ce31d89f6cef17ea8037841f76b447b17d84fb6012fa9fd6b211fea49978b608a4f0c156c423f3bc9b49f3602c31e6f7bc1d0bf4a32c50fe44f6c1bfb3be22918e7e93a6287d907adb70ec063eacfd51b784afdb3d1c0c85f8a5232cd97afe0398ddf652d99fcf75130e5879d09c67c961482c97eae7bb049f74b3ac9349e86649a4f2692b93cb978be8df749b88229be509660eca7f39f24d3f922713dd6afaedf8269bcd690c7c6f9d755001e52bc5b533ceb5a63d29fab2199ce63edc1139a9f82083c25f9f5068cf745dd2cf082c6238d25d3fb1d378229bf503ec178dfce6a0946fce9bd0aa6fe5ccf04e37d0af27aca77ac1bd8a2e747df9229fe2dc136f98ffc4530e9f34a934cf9f10fa6e78be739387f48fde9daa8f7273c3e310716f67b260f9269ffde1318efefb91e24537dcd06e3fd79f6156ca0deb1904cf6a080d1fe6a2199e67b5f303d4fbb801dd8fb0a8cf8f9a611db78ff5dac8211df745f60d413133e7e2c389be17ccc183c27ff97459279ffac4b30de27947e0826f94c4532bd7f5d032fa9fd6d2a784af58e21d8a0f9e1aa48a6f53f5b30d58ffd6730de5f94ad89ed01d9ef86eb2b0b2eb0feac6fc04b92af7525d3fbcd8f6093fccde64532d9cb4d30c57fe1128cfd33eb77c1a41feb028cf7355a1f82e9f9ee1cec62ffea9b60f227892918e785f0bd8dfdafe9b3601a4f270463fda81980f17ea59adbbf3966fd41ef472dc14bf2075b1b6c60fdec4132d50f0bc9944f1cc126c693dad7bf5e9ff2075c6f63bd6b45fd33b1e6549fb8adc0580fdc7682c97fdd5ab035a5f74309c67961e50bec523c1de2f736eaf7f11c3ca4feaba8bfa6d664467fffdc080c7f53b492a97e6f08a6f686776013fab4964cf69982717ed224ff30b5b15fe81608c6fbd3ce60c48b2d8dd78cdd8ff2eb5430c5839b5730f2dff60086be74a4af33d6ff148fdd8391ff6a74bf390b30693de808b6917f64c436ce8fdf1230f6bfb7345e0b6b3a27fbe9c0f319bdaf8bfcc782a5f7e43f0f60cc4705f99f256b3fedf71c826d92ef3625b627349f68dcdf9b2c9f9b927f237d3458ffd1fc5b8327f007241f530f1aaf6b00467cad51ffb2f8674efd41fed5b6711ed0e4fac192cf39b57733022fe97ecf977feda32abf7d8c9f3e26ffa7827fa74fcf0afb9da5daaac3fe58ff6a0be8f3df21cb2f72b9ecf3bb5c0afe9b90afff77f7df5116d62247f5d81ffad87ddba87590cbfd87bfb3f1f9779605f20899fa6be8cfffb79fff167b71e9f393743ffadc1663f4e33aa96fbdedf8eccf3f18b9ffff65e16dfbc90e6009240d1fa9bf2b3bc9439ee0df4d1661eb3f64f9313a3f24f3e4e717cbfa7791e5379fecfefa91d758f05a8e94457a8a7f2b590235542335561335553335570b364ea55aa917b5669f86e951ab76ec7365b2de544dd5d99f15ff9dc67eb1fe379365a3aed827652391a85bf6b963d2ecd43dfbec982c07464726dd91fdfb4e3da9f74cce7bf5817d0c76e53ff4daff5b6479e43dfdc446e699fddb597d515fb94ebda9efea87faa906ec9a9449f8c524f85607ea501da96375a24ed5993a67d2fc1bc9c25a7a5637ec9f91ba607f02d8fd92c9f2cafe6929aafaa4284cc7be15431d2ba662b18fad380af31a8aa7f8ff3d92fcf7cc954aa0844aa4c44aa2a44aa6e44ccf5ca63d2dfbf4b6622a059b45064aa954ca45a9954669954eb92a3745537465a5acffe8b5ff37cab251b6ca9db253cf8aa2ec95036bf1513929f7ca83f2a83c29cfca5979515e9537e55df9503e952ff6dfbf9581325446ca589928d37f23596c65a6cc9505d3b393b26413cd83f261288661b044c0b00dc7700dcff08dc0088dc8888dc4488dccc88dc2288dcab8a87746fddf23c99f9345b58ca6ff23a390df6677a3353ae36adc0ccdd08d95b13636c6d6b83376c69efd391847e364dcb3cf897d8e8c1fd8e7d178329e8db3f162bc1a6fc6bbf1c1b4b0cf02685e757f9b797f9aadfe999ff8af6561527c1a5feccfb7313086c6c818315fd4186363624c8d194b9916c6b2370ad3304dd3326de3683aa68b8fc73ebe19b04f684666c465eaa53a9a31936a6726666a66666e16666956e6c5accdc66ccdcebc9a375333757365aecdcd2f33b1f2eb1cfcd764311a736bde3169becd9db9e7b21ccc8379344fe6bdf9603e9a4fe6b379365fcc57f3cd7c373fcc4ff38b7dbecd8139c467648ed967c23e63736aceccb9b960992a3334e3de322cd3b22cdb722cd7f22cdf0aacd08aacd84aacd4caacdc2aac12b9dc2f91c5ffaa2c56655dac4b3f2e566d0cad5a3d5b8dd55a9d75b56e9666e9d6ca5a5b1bd6d3f7ccd96ead3bd6522689b5b3f61677bfd6019f2393666a9dac7beb817d1ead27ebd93ab351da592fd6abf566bd5b1fd6274b98bf5884b0601e3d61b3e9c0faeea3cf1fd1d1bfa2634cb31a8bfe82f001fff74a89aca135b2c6d6c49a5a336b6e2d7acdb196cc74fa4a9ed18f85b5b34d48f2439643bf4c614e6ddb766cd77ab03ddbb7033bb42326cfc178b4633bb1533bb37336abda766197ea935dd997de92fecce74fc932307756cdc6646055aa67d77663b776675fed9badd9ba71303fec95bdb6376c249ef9676fed9924625414662bcc5e602bf766681bf6d6beb377f6de3eb0cfde3eda27fb9e8debde7eb01fed27fbd93eb319d7b35fec57656fbfb1d1b07efffcafc9f27cb16a66274cb78cc6f8b4df992c1ff6a7fd657fdb037bc8faf3c47a7864bbe6dc1edb137b6a2db924bb7e64fab161ff9cb1f6ce85fd9b91bdb0972c485698ddcc1dc3311d662c8eed384cd2bde33a9ee33b8113b218f5dd89545df17fcdecfe155954d7183ab113333bb1edda499cd4c9ec2f27778a5e0ea7640ff0ed3d6b55653d3b17361acf4cc706cc6216dc6ed8ff3b356b6be3b44ca6b9d3998173756e8e66f7938feeac9cb5b3b1b7ecf78eb365d21c8d9d73e7ec9cbd73708ecec9b9771e7ec9107ecb7a7eb6a03f234b2f09f3c683fe7ecea3f3e43c3b67e7c58cadb33db1ced6b33d6656cc3ece2b6b5dc5dab5c0a7f765ec63cfe9e374f8bc39efbd24f6d20e9d0f66fd47e7d3f9ea7fe954ce379366dffff5f6cec8e9ff5acca933b3eb9fe4f8576599ab9db3b05f9c25fba1e21a6ce2b08c23f34accd3bab6ebb8aebd702a73e17ab66b1f5d9ff9a8931b981fccdacfaca5f76ec86c2ae673e6d18ddcd84d98bde0e3746e6a7acc73b02b594fbcd93336be67377373b7704bb7722f6e6d176e63356e6b358ae67656f3afe8987a70afaaeddeecd6d55cdd5db96b3626cfeec6dd9a43f7ceddb97b3622dbde86dd837bb4576e6031ed331df7e4debb0feea3fbe43e1b817b765fdc472195fbeabeb9efec5707f7c3f9703fdd2ff7db1db84377c474f1c0fe7dec4edca93b73e7eec25daabd2f6091b8a7aa81f70fbdda9f91c533d8f46d79b6e778ae937b9e71b2179eef055ec8e4601fdbf0222ff612e6030eb6d1eb8c977a99977b85577a9577f16aaff15aaff3aedecdd33cdd5b796b36e7c7c6c9db785befce7a70471ebb0b1b5d9dfd3ff36fde8e59cec1db7b07efe89dbc7bb5f01e58467af31ebcc71f5af5bb1ff853b23c79cfded97bf15ebd37a730637362dbde3bd32f2e099368cbe6f229b39ae7de76bd0fefd3fbf2bebd8137f446ded89b78536fe6cdbd85b76441d7a3aff8866ffa966ffb8e71f45ddfb31e7c9ff9e8ad6df8811ff663e547ee8069e4831ffb899ffa198bd6be51bffd523c9189fe75599e2f7eee177ee957fec5af0d6603e6d46f7a49fc967d3aff6acead27ffd6cf77bee6ebfeca5ffb1b7febdff93b7fef1ffca37f62f966a2bef8f78aea3ff88ffe93ffec9ffd17ffd57ff3df8da3bdf03ffc4fff8bf9f485bd30c74ee57ffb037fe88f8cbd3ff627fed49ff9737fa1382c27fd6679f70f597ea97dfc99d8d25f066aa004060b112da65f6aff97c0f7fae5b7811d38fe3570cd0fe31478811f04411844411c24411a64411e14411954c14509839a7d1afb3d68838ee59af3e06a3f07b7400bf460c5fc48ef0d9560ddeb99ad30d906f6c27a0e36ecaedbe02ed8057ba50e0e4a191c8353708f0af54f35ab3f2d8b1d3c048fc153f01c9ccdd829ad73f012bcf6da15bc05ef81137c049fccf38c83afe03b1804c360148c8309fb330d66c19c49b47016c1325443253442d3188416fbc39c71e8865ee88741188651c86cc73a8709f3cb4698f29881c50f61d6fbfc300f8bb00cabf012d661e32fd421d3b41fb2387f94e5e77af6cf63d25f1db661175ec39b19875aa8b3bbafac636f27e13a5c33795e8c7b2f0d37e136bc0b77e13e3c84c7f014de870fe163f8143e8767f52d7c095fc337ab08dfc38ff033fc62d2982c22f6d97ff90e07e1301c8563e3184ed82cb40dd6e1943d63e6ee99fd7c9b53f6dfe7e1225c466aa428456444e68fcacdaf5a46b288ff862c28f1d4c8525fd5d7c88e1c7f19b9e673e41987c8376751c02375a61351c8e2f7cf88e524511c25511a65c62dca8347ab65f369cafe3c4645f01895aa1255d125aaa3266a5910d345d7e8166966678ccc75d4467ab48ad6d126da4677c629da452c82f0039ef778d68ecdb40bf6bc7d74888ed129ba77d2e8217aecefcdabed866af4d1eeaff6f2932c068fb043b77516ca2e7a8a9ea373f4629ea357f6a437e6750d16a79ca37773c2e6e8aad7eae823fa8cbea2ef68a0ce153f1a2aea8f2a2c7f9e1b8da27134096d2b8ca6d1cc8aa379b48896b11a2b56111b319bac629b85166eccbc3d9f73962c7f93b29843e33ef6e3200ea3fb388ae3f081f554cadbcafc5a1f25fe2c0b7ff68f7131d4f8f9e22cd4f73889d3388bf3b888cbb86277bcb0f87111d7d6dedd5b4f7c2639b959dcc46ddcc557ff515dfdb4f662cb3bbaca5875e25bacc5ba3f8b57f13adec4dbf82edec57ba5890fea323ec6a7f83e7e881fe327e3143fb3d866c9bc7380b86e689de373fc120ce2d76011bfc5effd88736b3055a38fdeff992c0ad34726cb6b9cb8adba8a3f4c23fe649db7641ec6b09ee3da665ed3fc0c33f6dcaff83b1ec4c378a456eaca7e51ee94713c862c3c1eecff9dfdb7493c55f57816cfe345bc4c54e3c17e4894c448ccc44aecc449dcc44bfc24484263efde9b3e8bd8d887e7a42c3b65f3d6d17c4da2244e92244db2a84872b1baf07765b1c886f8155b36bbb2fe65914fa2b8499194e69b71f26fd69e8dc9d9b998dff6c13ad953e39054c925a99326d6d5f7beea9db4ccca52f40d55c1d97d95bb385332bb4abae49adc12cd38252ceb4956c93ad924dbe42eba26bb641f1c9243724cd82c657a8ec272014364d94c9b4b2f4dee9387e4d158264f09b34ab146d2e722ff4c96e499f5e198e50e2bf6efe7e4257935dfad3e3f3f276f56ff8afa7df26ece8dfb709c7c249fc957f29d0c143d192a8b64c4abe3bdc7b4fbac8dc9c264b2df93713231de9269324be6c63159d8c76469c6a99a2aa9919aa995daa9e3dfa76eeaa5bef1603a2cbfe1b2f45910cb54b769601cd3308dd2384dd294cbc2d76dfa7cc4180aaff6932c96b0fe3453466e6b97cc8e9d344f8bb4343fd22a4c98f75a5afdfe8687f4621becee75daa46ddaa5d7d451f4a04b6fa996ea91c9fd3f978549c3644957e93adda4dbf42eddb15fedd3837d4c8fe9c9d8a7f7e943fa18fae953642b7a344c9fd373fa92bed2c8902c2ca7db4681719fbea5efe947fa997ef5feb197a56f7f9f5bfd2acb8f91e17a78607dbb5412ff2139a7dfce9069eb673ae86da5f7c54ee5fa696f8f553a4ac7e9249da6b3a4b50b65c3f42c5177fe23ef31361a7d0edad724d379ba4897999a29c63163f971b4efb3e3ccecb3e2649559999d39ea57ea0475e6665ee66781e9fa81a3a06ab0eb675096e1c5599845599c25ce23b3172e8b6af5b9d52fb2889a9add3f99d14efd4a064ccf952c553eb2cc74cc2fe61b077dcecbf477613d982316e37efaeb2ccf8aaccc2a61e7e45b98b34db24b56678d5dc763f53b6bb32ebb662c62f343d6df6ff6c2fd66de9c652c99661ce3a74ccf56d93adb306bd3b36d76e74efa5999c53363a603cf76bfcd8445369691edb23d93e5901db313d31d85db7491ddff268bf28b2ca67a973d3032b24743c99eb82ccc37f67d642ebcc4661146f69c9db397ec357bcbde852c1855577d4bdaec23fb8c9e93419a655fd97736c8d8e866a36cec8eb24936355da7cc66d9bcf7ebacbf17d93257734509552b377233b7723b77d8377d3d6dc29edad74398b7cedddccbfdec900779a828ff4496be024a7dabf8bd36f63edacc23c330ee982cbd97efed70c024619219f7799c27fe364ff32c3c30597eac4172bf95e779919779a556f925aff3266f8d63dee5d75eb7dc613f1ef9cdfdeeb3e25cb316f153aee7ab7cad9eed32dfe4dbfcced67396c1b09879c8729a4bafd9feb7719f29f93e3fe4c73cc88e4c9b1392c52afe812cbd0f559209d332db2ed5263f1926f32baed05ca6678eed5877ecbfbce6f7fe5dfe104cf347a3fd690d92d97afe943f671725cecff94bfe9abfe5ef7dd4937ff49909af719cddaf6cca73628dcd8871fe997fe5dff9404d9cc833f3613ecac7f1579ff1997dbc4c51b4cfee30c9a7f92cc9988e1d59a699f47e377c0bdffe200bb75792259fab7b854d65ea77be302c63cfd2fb1dd5bc481673943bf9b2500b8545f5b3e8814547b6dcabc0575793b1fa919f0ba33059b7d9ac557d2cbfe8f312ebaeb7e4c2e96b1785cb62ad53e1157e111461112923d52ee22229d22233f67d5ec365611ac6aecdd98cb92f8aa22caa3c2459faf6b398f5f597f9e5375958c6b34f6fcc62be8b0b7be4ce74a97227646177ae8ba6688b2e288a6b714bf25f7684303d53fc645268855eac8ab5710835e7b597a5d8b06cabaf6a7ef4d5be60cd243916dbe2aed815fbe2a0d8c5317b284ec57df1503c16cc3efa1a279764614e0b268f7128cec54bf15abcfd248b1aaa7f57164fcab22bde59fe742a3ed894b5efa33c5420875c9645f1597c15dfc5a01806398ba2c90bffd8555114a3625c4c8a692f4931ebd72c989ea8c5bc8f467b5b6677e03163b12cd5ecbb544287c540d7d250c2d22cadd22e9dd2354ebc22c2ae36c7f6a1f498cdc6a55f06e1ae64290dd731f7efc822d654c40cf3adb665c472b053191b2ecbef852cfb5e16f3cb3a9749999659996749745f163f564a7824669465599597b22e9b5e92b2cd34661b565f3b6371dc985bb4e10ffaaca7ecca6b79b3be4acd0a4a9d8d67c4a45995eb72536e992cbabdeda326368e5bebbecf64cabb7257ee7b591425cd7a6d28b552fb45961fd13ef773ea8dcd103b75c56439183e1bebc81c5b7d3d2cb0674e63cfcb63792aefcb87f2b17c6271ce86e527a398c594ca9d5d97cfe5b97c295fcbb7f29d79d12eef32adafee9bb3bebec13f337b5f7eb079bc2c3fcbaff2bb1c985d392c47e5b89c94d3c42d67e5bc5c944be3c45c7d156a7c4c0f665f1939564a655466d06746a7e0d4ef2ab2aadf62fedefb3059d8b7663f36c8d834bbaa2c26cbbd19b2deec97483a264b6b06c6a1b22bc79bc5e3a00996e5c4dc562e538ba86236cfa29545e5574115329fca66bb3ea736471513d73a313946fd9a4515dbdb2aa9d22aabf2aaa84a2bacaaea52d55553b5556745c1b1ba062b362e5ba7a355b57ebda3aff254b74aabf42467b21c83a36ad9f51f641151a5cf6571d488e9e246bd315559556b264bc4662c268b193269f64c96a37bf65a6fae2e2387e9eb5bb5a9b6d55db5abf6cab53a54c7ea54f575e17be6c717d681c5d5233e26a3fe2ebd3d570f4c96c7eaa97af646d5b97ab1aaead5dc556fd57bf5517d565ff128afabef5e966ac07ac2e5f5cf678bddb11a56a36a9ce4ce23c6c5339adf627e4bca6270efba60d1ee539ac5a36a524db98e912c51af654c965335f33a8f656bca3c34ccae9a87af9eaac6ac3f17d5f2a26637f7f5a25cb81fb615f38349d17f26b406c3ee7570377d7e75312fd6c5be38e1cbc5bd78179f8d897f092e6134b8449798c9d2b91fccbadefb159cde673059946a7449823e47f6d9c7fea32ca859283c96225912f549bdbfa4ec9e593fc6fdfa9c6df523d4af3d18a774e75d2fb9925e8ad0c8eefbbcfd525eaacbe5525f9a4b6b9c2edde56a6fcdd1e5165f98bd93244764f10773e445d68e5da55df4cbeab2b6c2cbe6b2bddc5d7655a7b697fde57039ba2fbd2c173633b1d8cde27fd5d684fde2fef27079e4b2a0adfd5add3f95256071f24d29c2faf27479eeb585d61bfb95a07ecd81e9d8a377f35545b3df7975c88ca6feec72bebc5c5ecdc4383afae58daf136d8235f75dbd7e8db92c7c3d96f5f196c5dd5333bebc5f3e2e9f97afcb777cbcf06a13d388e16578195dc66c869ddb6c66cd466c967db5ee7adbbf4c2ed3cb8ccba2f0bcc2fe5d16392f4096545373b5cdcf97f9657159f6eb90bdcdb2d8b85fd50accc08d8c83a7298f8a1fb4c620fca8d55a49b6b5519bc98ac9f9565bb56def1cc38bfaf99ecd8d336ef74cc7b8341e9b3146e6dcdef82cdeac9ddaadbddaaf83484b46e9ad0eeba88eeb84e5ca9fcce3796c6e9db008f4c9dd32590e755a67756e325990875bfd0aeaeff9cbcfb2287eaa2b6e5dd4a5f25557c68149c0bc0fb3dfa8978569716cc69eee2b6aa9cc422bfc8caa9a4590ec7f0d6b5beb7eb84347cdaf2c63af9cd73063f67faa22f6ebdeaff7d27875c746f9cbfc626d5cd6d7fa566bb55eafea35d36ca77c8af27a536fcdd8b9b23cdceb6318d6239bdec2eabb7a57efcb3d932515759e3fe695d8112074cc55efd44370523ae5b13e184cb3597e7f6fdbbc12cfda581f599b4ff57dfde0b6a1556d13b77eac9fea67e3549feb17a65b8bfab59f159cd728b02d1691ceeb37bfb1b7fe376fd994b220ca89acbdfb5abfd71ff56738a8bfeaef7a500fcba01e992ed3c27db17077aec3f29881cb324b63578feb493de5b2507ef20f7264f6a797a59ffb13f6ff0d9bfda7f5ac9ed70b9657b2fc8bc52e5b7b592f9d779bcdc98dda288de13f5a35f3ca1f8dd958c64363db47f6d9374e3f438693be6ed3fbb2c665ff34a2d0def09a9af1cb1ae0d074eb5be3357e1334a1f3d4444ddc244dcafae291e54977eeaec9ac2dfb158b429bbc299ab2a9b8bdd09ca8f42b763fcb42732397c5e4b364aa8cd2cc99c77a7369eaa6316377c3eefb7039352d0b8359d6e186c6aee99a6b738badd0b48a466b74fbc18c9b557aecc7c57c6fd64cdfc76c2c3efa5cbdd9345bebdcdcb9dbbe8283d53fac9c9b5ebfb3a4d935fbe6604d9a63736aee9b0726c363f3d43c3799bbeb6be64c2fe3e6dcbc34afcd9b948559c51f65a1d95ecaa2f1959bb5faa138cd7bf3c1a22ac7ff609e89d973bfa6686f9b4fe3e0dbcd57f31dbae167ad3483669828d60b7bde283359ae356bc66c961b46611f41369366dacc9ab971b296eeb6e1e3815566167d9b9ed3354b63efad5bb5555aa3355bcbe8ebd581396efb15c45d9f2b87ba71689dd66dbdd6ef63181e7719aadfaf09ff365752a5cfa4bdc2fdfa937a8bc76de03dc65d1b1afd4afdb658703fbbed6dba8d8c531bb7499b865ef5de666d9e9fdaa22ddbcad8370fed85595585fce4beaddba66ddbaebd5e5876dfded8bcf3ddd70ee4eabfefed5aaddf1de36baddeaeda755bb35f6dda6df0dede056f5ec89eb7734a63d7eedb437b6c4f52163f38fd41161bd97abff39945bc2c951e313ddbe5b9a2b7f7ed43fbc8b4f7686ffa9d05b5d53ef55adf326fdf9edb97f6d518861f4e5c44ed5bb269df59ccb3cf3b7bc9645ef5f949fbd17eb65fed773b6887eda865b3068b697aed123b19f67e906bf6b69db0acf8d44edb593b6751cb397875ed76d12e3bb59fdbeace38754a67746667c571922779af472c8e39fe4116e75759d84c99a94967770e93e6dab99d67192cd770d89cb063be56ef7c7b5b9f7d3753baa00bbba8da767197746997b1b0b8e8ca7e6dc8db75157bfea5abbbc6df756dd775d7eed6699ddeadfaac8e723b5ec95b326b687b8fe2fb4e65dce75db7ee36eeaedb76776c02d875fbe6397aef0eddb13b75f7dd43f7f8ab2cbfc563b40fdae2fbb87b59fabdb76ef7d43de7cfddb97be95e6bc738b9ae7de8ff1a4166c38eb3eddeba77964f9cba8feeb3fbeabe9d85fad80dba6137eac6d19d195b0b33f6b56ed24dbb5937ef16ddf2aa5e95ab71358d9dfbca7763f9bd1ce6d00ffa99fd6ad97bc7bada4cbe73b7bb322bb18ee1cadd5d5deffdea3109dfaffe35b886d7280fa302b66ffe1d1d13eb0b72bf196a7fdcef5de36b52b2d65d53ebe19ab119ef6c9dddcf7eb5f79ab3ff5a5ccb6bc5e29897ebe55a5bfeb5b9b6d7ee7acd27d7db55bb321d5533b30bdf8da69c5c57d7f57573dde6937efe655aa8f4750ce623a2be06c6f7638dd87c74ecfd38d515ade7de5aaa8171bcde5d77d7bdda3847b5edab2c5993353c07367f9c07f8afd7f89ca7ebe17a8cd953afa7eb3d3dddbf998b6641d1eef5e1fa787dba3e5fcfd797eb6bad3069deaeefd78febe7f5ebfa5d75d74139bc0eafa3eb987d26d7e975769d7b6bd60b8bcccccceb92dba2f5f327f2dd7d73c7fc1c27ebcc52c3a79b7263f955348c4c36f3b9aa6dbf33591cbebef31764b99937eb66df1cd6379ecb66877edf8bad140b2fb9b139d0b8f7b51b0b346f8152ddc25b748bd5db2db9a5b7ec96df8a68d025e15755df4a7377ab6e97f0e3c626c65b5bac6e9db1ef772df0fd16d6af1f5eafb0d86cc4246aee7236b3dcaeb7db4d4bc6d133cb2d44fefb87ddf3ffb52ce6e34dbfad6eeb86c5860d1b0d663515f3f8ecff6d8fc5eecc9fe593dbe6b6bdddd5a5fa62d7cae2b65386b7fdeda0d4ea58dd869f55773bde4eb7fbcbddede1f6787bba3ddfce51623f180fb71733643e7af24759983454afa4fbbfdede54f7f67efb48068a226ac97f7d7d3f2a6e9fb7afdbf76dc02b565f2cb35c58776c86d89a73162f6d6e43e3741bddc6b7c96d9abab759eadce6f1241ef77bf56f8bc80a5fa2eab6d4d4a8d394a85202f5ac199aa9599aadb1b16e5acdedade4e78fbbef3396c82759cc58f3345f0bb4508bf242d1d20ce3f287d3597fc25e1eb5584bb454cbfad981dd7b617e7a119385f624cdedad96f733a75668a5566917ad564325615ed0b65fe289b25322add15aadd3aedacdf84c1dd573979aa6e9da4a5b6b1b7ba16da99af0ebc8b03f2a8bb1ad7667dada9db653bba0b9bddbef2c7f37642dcfa1f8f22fc8926a7beda01db59376af3db008efce9cfa1f2c3bda71eb6451633568f92e43ed517bd29eb5b3f6a2bd46b935d2de8c85f61e4fb40f36269f2c216e94246ccb2767e999da97f6ad0d3436a6edeeefd98bf5dcee2c35f2b59136d6260a8bd955d72eed525db37111f562ef2fcbf2a84db59936d716da52578d7da8318f79673d9993b86e6fecb363518056b6bac26c79a71bbad92a9dab5bc64db77527327457c97596ee844e7fe622ce597e32d4033dd4233dd6133dedc7e0d74f98f5b2447e2f95bbd7333dcfebb2d20bf6fbfe0c84266b797c86ff2b3a16157aa957fa45aff5466ff5aedf11c3f2de39af8f322fa45ffb798faffbfaa6ebbe66817ed3355dd757fa5adfe85bfdcef850bff59dbe77c6d5413fe847fda4dfeb0ffaa3fe14bd07aece722db28dde4ef86e0bf3e78fe9e8e764adbfe8af4aa36ead86cdca34abf4f6eff075c43fbd8724c9f537fdbdb8ea1ffaa7fea57febcc07588affed6ed3ca56a3f7beea637afd3a561f4733895c33d687fa888dd0589fe8537da6cff585be5ca92b6565accc95e5eddd3c7ded778d38d5ca5e39b6e1eec90f0b0ff68b2cae7170dc95bbf2567e3c535f56415f310a4e2cdeea57df6a5a7bfb73b2048fab701505b355bc4a56e92a5be5ed78555807166b6efa5ccb3afe248bc9b28265dee5ceed8565b4b755b9aa5697555dcd568d3e5ab5b1c7f7c23129dcddaaeb76abab395e752c5bbbe3f66e626ef955166f7533e3b261f9d270a5b1f178e335567efeafaf2afd9571311f57fa6ab55a6bb362b8daacb6abbbcbc76ad75767d2a05f79b0b67d0ecf64796372ec983c0adfc570cff7819ef85efea3d8cf6bdcbbdf76e87ff8cd6abf3aac8ead1d7cb84edffa7e9e679aa6b63b6627bfcae2af4eab7b9643ad570fcdfbea919fce727f3a052c4f69fca971795a3dafceab176db67ad5ebd5dbea7df5b1fa8cbff26ef595f615a31fbbddf98749f7c177bc0f9d57f6795b7daf06d17e35147b2cfbbdbccd9339ee7739b58bd5a8d72e173b9358e3acdf65b1ceab717d67ec5693d574355bcd51c3b7708ec1fdf3314c92af16abe55a5d2b6b439badcdb5b5b6d7ceda5d7bc69e45cffb1f7bdefb489eaffb32097a7b62b3105fc7e3fba9f9beea7e36627e6318266b7f1dacc3c0091cbecb91452c6431bd17f85d967e7473dbd8d7efeb681dab77e20c2d9745f9b16be9cff8b1f03198af933c5d5bc1789daeb375be2ed6e5ba5a5fd6b5b5b437741601fbf7fbd5b30fbe57a25f6bb15a16fc34ceba757416dfb3e83e9ce9d77ecd807df6ebceefd6cc62bc50c8d2eeb411f366bfd90bd7d26374b7beadb53573e4b2fee5fed5793f628aba5eaf37ebedfa6ebd5befd787f5717d5adfaf1fd68feba790c5fdd69eef5ac1b8b04fbf9ef76a7e704b3e584bbedb9f5950bffba8f7e2eb7e97fcb1df83b63eaf5f02d736cc28effa73246c8e1feb193f73d2e7373edfafe4b23c69bb7e5dbf35cafa7dfdc1e617c8f2f7f78ffdf38ff3283f69566595d196e7f5e7fa6bfdbd1eac87eb11d335bea38c568b980e4db0afbf8fa6c6acc7cffc04c6b2dfadd7cbe90f7a7bea77569a43967505d5e0a69a713e6171d79d36d1f3f5b8f776eb49bfa3b61f93cb389f38de7aba9eade7eabdd8d32b674be7afc8f2d3d9621ecf798f6a11dcaf179774bdcc5f36ea46d9181bb37faead164ebf368979c230a77db5439cb4602336661ab91436d3dc39174ba1fd0a2caa7f6511e4ae0f0b36569fdfacc6cce59f8ce3c6c9271b77e36dfc4d607da94f56f35b9bfed2b8fc7eb6381a2a9ee2da55972acd26dc449b78936cd24db6c9f9aa0bcb6eac27ffdbf68bbc782effdf76ae6549552488eee733a6f615fdba7dbb6356a899203e5a6db51f3b4444f0c14b1489987f9faa8202a4bd37b457331113b9d010943a661645669d93b6d9e37b5a6207f5ce54d90a7b630ee6244ed8f3c2d4532060d9afca32ad349d280e4d481246103617866ae8b10a11c3b2b36c86248e1fe983506f36cb7bd7f59cde1344592e9dd23decc91c0e90c0115250a0014d680104cf80a691efb672cf7c667bc1191af13a6a6c8d2ed758790ea8a041fba8a546ca6681e23a2c67047dffd9b4a1130fb9e20cbad0833e2ce34747a706bc2c0e85fef98baee722bfd4f4404187dc51957668dcd0c2d0b660004318c12b8c61025378f3347fb13bb0acbe5df0f8ab3a31cdd0e01d3ee0136ee036e9c2ddb1ed7437f7e95459c13d7169c0bcfd003fe0117eb2bb700a4ff08c94def1b9eef5e9337dca1557dfc052a8ea8aefae6ed98c216b9d45ef4ffa485524aebeeaa181333471eeaa5edbb7f71bff47100423b4421517519a70a1686ff7106f632dbe471b97ebe0a027b3a4874ec8a276354cdffc603e255ca59dee228325a4b8c2354b719e8d29bbca113774bcb961e319c8f15c1f6327bd3884873ca043ee1bdcda7dce35430f7d0c30740718e10e636fed2f7ddd7f0cc2861b3aa1161991827b3cecfa8d66ec6112bce2115354f693204dfadb96d559cd6ccab25f967cd21655d61b3627a2d61336b0892d72a03dc20e53978ef868d8fa229f5faee75a7fe935c07eb745b764495b08ec7d0311d5f514356ca3bffd70224ff774bfb3f1822818bb5ad8461d3bd8c5de6e837df6fe0507fb088787258ef015c7d68bd0fa1a7cc79ef3f0a8623d21573237714a0f6bb636061dba66de58d0211dac1b76bfe293ef6039b59ad281736c393795d713791dceebf80ee712f96e3009ddd07544a5d179e13613e6e4967d435ca3ec245389a0cad56bfd58aad7bf7aee9fc122ff178e852391e3f3ba9c7d9399eff23a234758aeb7d96b869def6fe7fb0f468e60216ac18678a2378b9890bd31a42ee18c42f1d27b720dcf09969c1fb0909d7904e76ec356026184f0baafc89d66956e3da5fecbf6f6f369d67545d6b5c5d924df135a7ec542cb5e26e49a7cbfc201afa191da8093df3604f79408ae9ab0ad576031ca9ca3caca1635c83935653d22cfb448ce3bcf6adc752c32e62a9eb9443352aa19aaaae7e288acea1ab4729f2cb50e052bf5d4871cf952b02732ae47d9db635ea9689b453c57bc2062244752ad5f5e84c592fcc3e1ee4c949995795bc152fdbea830d827ffc84c20e9088f91d2fb395e4b665b520152c3422492ebf27dce3a1163b10a2cc60916c11710bad85b6ed69a7320cdc09db863ceee0a1533e20c1ccef6c814cd995eb334f9fc9ecf4b7ebda988b5c23b67b1108e04dff03d63da7fc32f8b9a5f4caeec2fc7c9c7e6f5bc5e154b795ce2e596e3679fca7dd222b624e3bc58134fe3a1e0bbcd199677fcb81c4b3d6a7ea7d6aeb0fb7e71ceb9a3f5738b7cbeda2ba7de3ba79caf57e52fff15fb1fcbbfd3fefcfbaf3ffe0193cc32fd</data>
-    </image>
-</images>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/pages/sidedecorationimpl.cpp b/util/install/win/pages/sidedecorationimpl.cpp
deleted file mode 100644
index aa25825..0000000
--- a/util/install/win/pages/sidedecorationimpl.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "sidedecorationimpl.h"
-#include <qlabel.h>
-#include <qlayout.h>
-#include <qgrid.h>
-#include <qregexp.h>
-
-/* XPM */
-static char *check_data[] = {
-/* width height num_colors chars_per_pixel */
-"    11    12        4            1",
-/* colors */
-". c #939393",
-"# c #dcdcdc",
-"a c None",
-"b c #191919",
-/* pixels */
-"aaaaaaaaaa#",
-"aaaaaaaaabb",
-"aaaaaaaabba",
-"aaaaaaabbaa",
-"aaaaaabbaaa",
-"a#aaabbaaaa",
-"ab.a.b.aaaa",
-"a#bbbbaaaaa",
-"aabbbaaaaaa",
-"aa#b.aaaaaa",
-"aaa.aaaaaaa",
-"aaaaaaaaaaa"
-};
-
-/* XPM */
-static char *arrow_data[] = {
-/* width height num_colors chars_per_pixel */
-"    11    11        4            1",
-/* colors */
-". c None",
-"# c #b9b9b9",
-"a c #8a8a8a",
-"b c #0d0d0d",
-/* pixels */
-"...##......",
-"...ab#.....",
-"...abb#....",
-"...abbb#...",
-"...abbbb#..",
-"...abbbba..",
-"...abbba...",
-"...abba....",
-"...aba.....",
-"...aa......",
-"..........."
-};
-
-/* XPM */
-static char *cross_data[] = {
-/* width height num_colors chars_per_pixel */
-"    11    11        3            1",
-/* colors */
-". c #cc0000",
-"# c None",
-"a c #fc3464",
-/* pixels */
-"###########",
-"###########",
-"########a.#",
-"##a####a.##",
-"##a.###.###",
-"###a...a###",
-"####...####",
-"####...a###",
-"###.a##..##",
-"##a.####aa#",
-"##.########"
-};
-
-
-SideDecorationImpl::SideDecorationImpl( QWidget* parent, const char* name, WindowFlags fl ) :
-    SideDecoration( parent, name, fl ),
-    checkPix( ( const char** ) check_data ),
-    arrowPix( ( const char** ) arrow_data ),
-    crossPix( ( const char** ) cross_data ),
-    activeBullet( -1 )
-{
-    Q_ASSERT( layout() != 0 );
-    if ( layout()->inherits("QBoxLayout") ) {
-	((QBoxLayout*)layout())->setMargin( 0 );
-    }
-    setSizePolicy( QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding) );
-    if ( globalInformation.reconfig() ) {
-	versionLabel->setText( "Reconfigure Qt " + globalInformation.qtVersionStr() );
-    } else {
-#if defined(QSA)
-	QString versionStr = globalInformation.qsaVersionStr();
-	versionStr.replace( QRegExp(" Evaluation"), "" );
-	versionLabel->setText( versionLabel->text().replace( "Qt", "QSA" ) + " " + versionStr );
-#elif defined(EVAL)
-	QString versionStr = globalInformation.qtVersionStr();
-	versionStr.replace( QRegExp(" Evaluation"), "" );
-	versionLabel->setText( versionLabel->text() + " " + versionStr );
-#elif defined(NON_COMMERCIAL)
-	QString versionStr = globalInformation.qtVersionStr();
-	versionStr.replace( QRegExp(" Non-Commercial"), "" );
-	versionLabel->setText( versionLabel->text() + " " + versionStr );
-#elif defined(EDU)
-	QString versionStr = globalInformation.qtVersionStr();
-	versionStr.replace( QRegExp(" Educational"), "" );
-	versionLabel->setText( versionLabel->text() + " " + versionStr );
-#else
-	versionLabel->setText( versionLabel->text() + " " + globalInformation.qtVersionStr() );
-#endif
-    }
-#if defined(EVAL)
-    editionLabel->setText( "Evaluation Version" );
-#elif defined(NON_COMMERCIAL)
-    editionLabel->setText( "Non-Commercial Edition" );
-#elif defined(EDU)
-    editionLabel->setText( "Educational Edition" );
-#else
-    editionLabel->setText( "" );
-#endif
-}
-
-SideDecorationImpl::~SideDecorationImpl()
-{
-}
-
-void SideDecorationImpl::wizardPages( const QPtrList<Page>& li )
-{
-    QBoxLayout *lay = 0;
-    Q_ASSERT( layout() != 0 );
-    if ( layout()->inherits("QBoxLayout") ) {
-	lay = (QBoxLayout*)layout();
-    } else {
-	return;
-    }
-    QPtrList<Page> list = li;
-    Page *page;
-    QGrid *grid = new QGrid( 2, this );
-    grid->setSpacing( 2 );
-    for ( page=list.first(); page; page=list.next() ) {
-	QLabel *l = new QLabel( grid );
-	l->setSizePolicy( QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed) );
-	bullets.append( l );
-	l = new QLabel( page->shortTitle(), grid );
-    }
-    lay->insertWidget( -1, grid );
-    lay->insertStretch( -1 );
-}
-
-void SideDecorationImpl::wizardPageShowed( int a )
-{
-    if ( activeBullet>=0 && (uint)activeBullet<bullets.count() ) {
-	if ( a < activeBullet )
-	    bullets.at(activeBullet)->clear();
-	else
-	    bullets.at(activeBullet)->setPixmap( checkPix );
-    }
-    bullets.at(a)->setPixmap( arrowPix );
-    activeBullet = a;
-}
-
-void SideDecorationImpl::wizardPageFailed( int a )
-{
-    bullets.at(a)->setPixmap( crossPix );
-}
diff --git a/util/install/win/pages/sidedecorationimpl.h b/util/install/win/pages/sidedecorationimpl.h
deleted file mode 100644
index f39e204..0000000
--- a/util/install/win/pages/sidedecorationimpl.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef SIDEDECORATIONIMPL_H
-#define SIDEDECORATIONIMPL_H
-
-#include "sidedecoration.h"
-#include "pages.h"
-#include <qpixmap.h>
-#include <qlabel.h>
-
-class SideDecorationImpl : public SideDecoration
-{ 
-    Q_OBJECT
-
-public:
-    SideDecorationImpl( QWidget* parent = 0, const char* name = 0, WindowFlags fl = 0 );
-    ~SideDecorationImpl();
-
-public slots:
-    void wizardPages( const QPtrList<Page>& );
-    void wizardPageShowed( int );
-    void wizardPageFailed( int );
-
-private:
-    QPixmap checkPix;
-    QPixmap arrowPix;
-    QPixmap crossPix;
-    QPtrList<QLabel> bullets;
-    int activeBullet;
-};
-
-#endif // SIDEDECORATIONIMPL_H
diff --git a/util/install/win/pages/winintropage.ui b/util/install/win/pages/winintropage.ui
deleted file mode 100644
index ac2545b..0000000
--- a/util/install/win/pages/winintropage.ui
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>WinIntroPage</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>WinIntroPage</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>387</width>
-            <height>228</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Form1</string>
-    </property>
-    <hbox>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QTextBrowser">
-            <property name="name">
-                <cstring>textBrowser</cstring>
-            </property>
-            <property name="text">
-                <string>&lt;p&gt;It is strongly recommended that you exit all Windows programs before running this install program.&lt;/p&gt;&lt;p&gt;Click &lt;tt&gt;Cancel&lt;/tt&gt; to quit install and then close any programs you have running.&lt;/p&gt;&lt;p&gt;Click &lt;tt&gt;Next&lt;/tt&gt; to continue with the setup program.&lt;/p&gt;</string>
-            </property>
-        </widget>
-    </hbox>
-</widget>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/qt.arq b/util/install/win/qt.arq
deleted file mode 100644
index f3f1ccc..0000000
--- a/util/install/win/qt.arq
+++ /dev/null
@@ -1,3 +0,0 @@
-This is just a dummy file. Use the package program to add the real qt.arq
-file to the package.
-This file must be smaller than 500 bytes.
diff --git a/util/install/win/resource.cpp b/util/install/win/resource.cpp
deleted file mode 100644
index 4ea0ad8..0000000
--- a/util/install/win/resource.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "resource.h"
-#include <qfile.h>
-#include <qfileinfo.h>
-#include <qapplication.h>
-
-#ifdef Q_OS_WIN32
-#include <windows.h>
-#endif
-
-/*
-   Tries to load the binary resource \a resourceName. If the resource is
-   smaller than \a minimumSize, the resource is not loaded and isValid()
-   returns false. isValid() returns also false when the loading failed.
- */
-ResourceLoader::ResourceLoader( char *resourceName, int minimumSize )
-{
-#if defined(Q_OS_WIN32)
-    valid = true;
-
-    HMODULE hmodule = GetModuleHandle( 0 );
-    // we don't need wide character versions
-    HRSRC resource = FindResourceA( hmodule, resourceName, MAKEINTRESOURCEA( 10 ) );
-    HGLOBAL hglobal = LoadResource( hmodule, resource );
-    arSize = SizeofResource( hmodule, resource );
-    if ( arSize == 0 ) {
-	valid = false;
-	return;
-    }
-    if ( arSize < minimumSize ) {
-	valid = false;
-	return;
-    }
-    arData = (char*)LockResource( hglobal );
-    if ( arData == 0 ) {
-	valid = false;
-	return;
-    }
-    ba.setRawData( arData, arSize );
-#elif defined(Q_OS_MAC)
-    valid = false;
-    arSize = 0;
-    arData = 0;
-    QFile f;
-    QString appDir = qApp->argv()[0];
-    int truncpos = appDir.findRev( "/Contents/MacOS/" );
-    if (truncpos != -1)
-	appDir.truncate( truncpos );
-    QString path = appDir + "/Contents/Qt/";
-    path += resourceName;
-    f.setName( path );
-    if (!f.open( IO_ReadOnly ))
-	return;
-    QFileInfo fi(f);
-    arSize = fi.size();
-    arData = new char[arSize];
-    if (f.readBlock( arData, arSize ) != arSize)
-    {
-	delete[] arData;
-	return;
-    }
-    ba.setRawData( arData, arSize );
-    valid = true;
-    return;
-#endif
-}
-
-ResourceLoader::~ResourceLoader()
-{
-    if ( isValid() )
-	ba.resetRawData( arData, arSize );
-#if defined(Q_OS_MAC)
-    delete[] arData;
-#endif
-}
-
-bool ResourceLoader::isValid() const
-{
-    return valid;
-}
-
-QByteArray ResourceLoader::data()
-{
-    return ba;
-}
-
-
-#if defined(Q_OS_WIN32)
-ResourceSaver::ResourceSaver( const QString& appName )
-    : applicationName(appName)
-{
-}
-
-ResourceSaver::~ResourceSaver()
-{
-}
-
-bool ResourceSaver::setData( char *resourceName, const QByteArray &data, QString *errorMessage )
-{
-    // we don't need wide character versions
-    HANDLE hExe = BeginUpdateResourceA( applicationName.latin1(), false );
-    if ( hExe == 0 ) {
-	if ( errorMessage )
-	    *errorMessage = QString("Could not load the executable %1.").arg(applicationName);
-	return false;
-    }
-    if ( !UpdateResourceA(hExe,(char*)RT_RCDATA,resourceName,0,data.data(),data.count()) ) {
-	EndUpdateResource( hExe, true );
-	if ( errorMessage )
-	    *errorMessage = QString("Could not update the executable %1.").arg(applicationName);
-	return false;
-    }
-    if ( !EndUpdateResource(hExe,false) ) {
-	if ( errorMessage )
-	    *errorMessage = QString("Could not update the executable %1.").arg(applicationName);
-	return false;
-    }
-
-    if ( errorMessage )
-	*errorMessage = QString("Updated the executable %1.").arg(applicationName);
-    return true;
-}
-#endif
diff --git a/util/install/win/resource.h b/util/install/win/resource.h
deleted file mode 100644
index 791edfe..0000000
--- a/util/install/win/resource.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef RESOURCE_H
-#define RESOURCE_H
-
-#include <qcstring.h>
-#include <qstring.h>
-
-class ResourceLoader
-{
-public:
-    ResourceLoader( char *resourceName, int minimumSize=0 );
-    ~ResourceLoader();
-
-    bool isValid() const;
-    QByteArray data();
-
-private:
-    bool valid;
-    int arSize;
-    char *arData;
-    QByteArray ba;
-};
-
-#if defined(Q_OS_WIN32)
-class ResourceSaver
-{
-public:
-    ResourceSaver( const QString& appName );
-    ~ResourceSaver();
-
-    bool setData( char *resourceName, const QByteArray &data, QString *errorMessage=0 );
-
-private:
-    QString applicationName;
-};
-#endif
-
-#endif // RESOURCE_H
diff --git a/util/install/win/setupwizardimpl.cpp b/util/install/win/setupwizardimpl.cpp
deleted file mode 100644
index 909d986..0000000
--- a/util/install/win/setupwizardimpl.cpp
+++ /dev/null
@@ -1,2571 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "setupwizardimpl.h"
-#include "environment.h"
-#include <qfiledialog.h>
-#include <qlineedit.h>
-#include <qlabel.h>
-#include <qprogressbar.h>
-#include <qtextview.h>
-#include <qmultilineedit.h>
-#include <qbuttongroup.h>
-#include <qsettings.h>
-#include <qlistview.h>
-#include <qlistbox.h>
-#include <qapplication.h>
-#include <qcheckbox.h>
-#include <qtextstream.h>
-#include <qpushbutton.h>
-#include <qradiobutton.h>
-#include <qcombobox.h>
-#include <qmessagebox.h>
-#include <qregexp.h>
-#include <qtabwidget.h>
-#include <qarchive.h>
-#include <qvalidator.h>
-#include <qdatetime.h>
-#include <qlayout.h>
-
-#include <keyinfo.h>
-#if defined(Q_OS_WIN32)
-
-#include <process.h>
-#endif
-
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-#include <check-and-patch.h>
-#endif
-
-#if defined(EVAL)
-#  define LICENSE_DEST "LICENSE.EVAL"
-#elif defined(EDU)
-#  define LICENSE_DEST "LICENSE.EDU"
-#elif defined(NON_COMMERCIAL)
-#  define LICENSE_DEST "LICENSE.NON_COMMERCIAL"
-#else
-#  define LICENSE_DEST "LICENSE"
-#endif
-
-#include "resource.h"
-#include "pages/sidedecorationimpl.h"
-
-#define FILESTOCOPY 4582
-
-static const char* const logo_data[] = {
-"32 32 238 2",
-"Qt c None",
-"#u c #000000",
-".# c #020204",
-"a. c #102322",
-"af c #282500",
-"as c #292e26",
-"a8 c #2c686a",
-"ae c #307072",
-"#C c #322a0c",
-"#s c #36320c",
-"am c #3b3d3f",
-"#3 c #3c8082",
-"#f c #3e3a0c",
-"## c #423e0c",
-"#9 c #434341",
-"ad c #438888",
-"aU c #458d8e",
-"#g c #46420c",
-"aM c #46494a",
-"ay c #474948",
-"#D c #4a4328",
-".W c #4a4611",
-"az c #4a4641",
-"a1 c #4a4a49",
-"aH c #4b9e9e",
-"au c #4d9a9f",
-"aS c #4e9a9a",
-"an c #4f4e4a",
-".X c #504e0c",
-"a7 c #51a4a9",
-"#0 c #525250",
-"aT c #55a6a3",
-".Y c #56520c",
-"#a c #5a5604",
-".Z c #5e5a0c",
-".V c #5e5e5c",
-"a0 c #5e5e60",
-"a6 c #5ea0a6",
-".J c #625e0c",
-"bB c #64aaa9",
-"#m c #665e2c",
-"aL c #686867",
-"bw c #68acb2",
-"bo c #696928",
-"ba c #696967",
-"aE c #69aeb2",
-"#z c #6a5614",
-".K c #6a660c",
-"aZ c #6a6a65",
-"bG c #6db4b4",
-".9 c #6e5e24",
-"#. c #6e6a5c",
-"bv c #6fb6b9",
-"bC c #706d28",
-"br c #70bcc5",
-"aQ c #71b7ba",
-".I c #726234",
-".L c #726e0c",
-".0 c #72720c",
-"#w c #746d44",
-"be c #747028",
-"bH c #747428",
-".M c #76720a",
-"aR c #78c1c2",
-"#Z c #797977",
-"a2 c #7a5d3d",
-"#H c #7a6614",
-"#I c #7a760a",
-"#l c #7a7634",
-".1 c #7a7a0c",
-"#e c #7a7a5c",
-"bL c #7bc0c2",
-"b. c #7c7d82",
-"#d c #7e6e34",
-".N c #7e7a0a",
-"bP c #816c20",
-".8 c #82763c",
-"#h c #827a3c",
-".x c #827e0c",
-"#t c #827f4b",
-".O c #828204",
-"#v c #828384",
-".P c #868604",
-"bq c #87d4d9",
-"#k c #89864b",
-"#c c #8a8244",
-".y c #8a8604",
-"#j c #8d8652",
-"al c #8d8d8a",
-"#b c #8e8644",
-".z c #8e8e04",
-"aW c #8f9094",
-"#i c #908952",
-"#Q c #909021",
-"ag c #90d0d2",
-"bO c #916f34",
-"bQ c #91cdd3",
-".7 c #928a44",
-"#p c #928e6c",
-"#P c #947f2f",
-".A c #949204",
-"bh c #949495",
-".6 c #968e4c",
-"aC c #999721",
-".w c #9a8a44",
-"#M c #9a9a99",
-"ap c #9b9b21",
-".5 c #9c924c",
-"#R c #9c9a04",
-"#7 c #9d9d9b",
-"ao c #9e7641",
-".4 c #9e964c",
-"#J c #9e9b21",
-".B c #9e9e04",
-"ac c #9e9e9d",
-"#S c #a09e21",
-"ax c #a0a0a3",
-"aK c #a1a1a2",
-"aX c #a1a1a4",
-".r c #a2a204",
-"#1 c #a2a221",
-"aF c #a2e1dd",
-".3 c #a49a54",
-".2 c #a69e54",
-"bR c #a78446",
-"#6 c #a9a9a8",
-".T c #aaa254",
-".s c #aaaa04",
-"#W c #abaaa6",
-"aN c #ac8861",
-".S c #aea25c",
-".R c #aea65c",
-".t c #aeae04",
-"#L c #b0b0b0",
-"#o c #b2ae94",
-".u c #b2b204",
-"aI c #b2b2b4",
-"b# c #b3b3b2",
-"#X c #b4b4b6",
-"#V c #b5b4b4",
-".Q c #b6aa5c",
-".n c #b6b604",
-"aY c #b6b6b7",
-"bN c #b79658",
-"ah c #b7e5e3",
-"aG c #b7ebe9",
-"ar c #b9d9dc",
-"#8 c #bcbcbe",
-"ab c #bdbdbe",
-".m c #beae5c",
-".F c #beb264",
-"aq c #bef6f6",
-"aB c #c1a470",
-"#F c #c1c1c3",
-".E c #c2b664",
-"at c #c2e9eb",
-"bI c #c39c6a",
-"bs c #c3a366",
-"#U c #c3c3c0",
-"aw c #c3c3c1",
-"#G c #c3c3c7",
-"aD c #c3f1f2",
-"a# c #c6c6c3",
-"#2 c #c7edf3",
-".D c #c8ba6c",
-"bM c #c9a470",
-"#N c #c9c9c4",
-".C c #cabe6c",
-"ak c #cacaca",
-"bx c #cbb076",
-"aa c #cbcbc9",
-"a3 c #ccac7f",
-".H c #ceba54",
-"#E c #ceced0",
-"bi c #cfaf7e",
-"#Y c #cfcfcb",
-"bK c #d1ac80",
-"#5 c #d1d1cf",
-"bu c #d2ae83",
-"bm c #d3b180",
-"bD c #d3b384",
-"bF c #d4b589",
-"aJ c #d4d4d3",
-".j c #d6c664",
-".v c #d6c674",
-"#K c #d6d6d5",
-"bJ c #d7b588",
-"bd c #d8b289",
-"bz c #d8b78d",
-".q c #d8ca74",
-"aj c #d8d8d9",
-"bb c #dabd97",
-"a5 c #dcba91",
-"bE c #dcc097",
-"aA c #ddc292",
-"aP c #dec491",
-".p c #dece75",
-"bk c #dfc79c",
-"av c #e0e0e0",
-"#A c #e2dabc",
-"#O c #e2e2e4",
-"aO c #e3c898",
-"by c #e4c7a1",
-".l c #e6da84",
-"a4 c #e7c7a2",
-"bt c #eacaa5",
-".o c #eede84",
-".G c #eee284",
-".i c #eee294",
-"bn c #efd7b4",
-".k c #f2e69c",
-".e c #f2eaa4",
-"bc c #f3d8b8",
-"bj c #f5e2c8",
-"#r c #f6eea4",
-".f c #f6eeb8",
-".g c #f6f2cc",
-".c c #faf6d4",
-".d c #fafae4",
-".U c #feee95",
-"bA c #fef26c",
-"#q c #fef2ac",
-"#x c #fef2b8",
-"bp c #fef684",
-"bl c #fef690",
-"bg c #fef69c",
-"bf c #fef6a4",
-".a c #fef6b4",
-"#B c #fef6c4",
-"#y c #fef6ce",
-"a9 c #fefaac",
-"aV c #fefab7",
-"ai c #fefac4",
-"#4 c #fefad1",
-"#n c #fefadf",
-".h c #fefaec",
-"#T c #fefee6",
-".b c #fefefa",
-"QtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQt",
-"QtQtQtQtQtQtQtQtQtQt.#.#.a.#QtQtQtQt.#.b.#.#QtQtQtQtQtQtQtQtQtQt",
-"QtQtQtQtQtQtQtQt.#.#.a.a.a.a.#QtQt.#.c.d.b.b.#.#QtQtQtQtQtQtQtQt",
-"QtQtQtQtQtQt.#.#.e.e.e.e.e.e.e.#.#.f.f.g.g.c.h.b.#.#QtQtQtQtQtQt",
-"QtQtQtQt.#.#.i.i.i.i.i.i.i.i.j.j.b.b.k.e.f.f.g.g.c.d.#.#QtQtQtQt",
-"QtQt.#.#.l.l.l.l.l.l.l.l.m.m.n.n.o.o.b.b.k.k.e.f.f.g.g.c.#.#QtQt",
-"Qt.#.p.p.q.p.p.p.p.p.m.m.r.s.t.u.p.q.v.v.b.b.i.i.k.e.f.f.g.g.#Qt",
-"QtQt.#.j.j.j.j.j.w.w.x.y.z.A.B.r.C.C.D.E.E.F.b.b.o.G.k.k.e.#QtQt",
-"QtQtQt.#.H.H.I.I.J.K.L.M.N.O.P.z.Q.Q.Q.R.R.R.S.T.b.b.G.G.#QtQtQt",
-"Qt.#.#.U.V.W.W.W.X.Y.Z.J.K.L.0.1.2.3.3.4.5.5.6.6.7.8.9#..b.#.#Qt",
-"QtQtQt.#.U.U.U.W.W##.W.X.Y#a.J.K.7.7#b#b#b#c#c#d#d.h.h.b.#QtQtQt",
-"QtQtQtQt.##e.U.U.U.W.W#f#g.W.X.Y#h#i#j#k#l#m#m#n#n.h#g.#QtQtQtQt",
-"QtQtQtQt.##o#p#e#q#q#r#f#f#s#f#g#t#u#v#u#w#x#y#y#g#g#z.#QtQtQtQt",
-"QtQtQtQt.#.b#A#o#p#e#B#B#B#C#C#D#u#E#F#G#u#y#g#g#H#I#J#uQtQtQtQt",
-"QtQtQtQt.#.b.h.b#A#o#p#e.d.d.d#u#K#L#M#N#O#u#P#Q#R#S#u#u#uQtQtQt",
-"QtQtQtQt.#.b#T.h#T#n#A#o#p#e#u#U#V#W#X#Y#Z#0#u#1#S#u#2#3#uQtQtQt",
-"QtQtQtQt.##T.h#T#n#T#n#4#A#u#5#6#7#6#8#Z#0#9#u#S#u#2#3a.Qt#u#uQt",
-"QtQtQtQt.##T#n#T#4#4#4#4#u#Oa#aaabac#Z#9#9#u#S#u#2adaeaf#uagah#u",
-"QtQtQtQt.##n#n#4#4#4ai#u#Oajak#Yalamanao#u#Sap#uaqar#3asagatau#u",
-"QtQtQtQt.##T#4#4#4ai#uav#O#OawaxayazaAaB#uapaC#uaDaEaFaGataH#uQt",
-"QtQtQtQt.##4#4aiaiai#uaIaJ#OaKaLaMaNaOaPao#u#uaDaQaRaSaTaU#uQtQt",
-"QtQtQtQt.##4aiaV.aaV#uaWaXaYaZa0a1a2a3a4a5ao#ua6a7a8#u#u#uQtQtQt",
-"QtQtQtQt.#aiaiaiaV.aa9#ub.b#baa0#u#1#ubbbcbdao#ua8#ube.#.#.#.#Qt",
-"QtQtQtQt.#aV.aaVaVbfbfbg#ubhba#u#1.AaC#ubibjbkao#ube#a.#.#.#.#.#",
-"QtQtQtQt.#.aa9.abfa9bgbgbg#u#ubl.AaC#uaD#ubmbna5ao#ubo.#.#.#.#Qt",
-"QtQtQtQt.#.aa9a9bgbgblblblblbpbpaC#uaDbqbr#ubsbtbuao#u.#.#QtQtQt",
-"QtQtQtQtQt.#.#bgbgbgblblbpbpbpbp#uatbvbwa8#u#ubxbybzao#uQtQtQtQt",
-"QtQtQtQtQtQtQt.#.#blblbpbpbAbp#uaDbBbwa8#ubebC#ubDbEbFao#uQtQtQt",
-"QtQtQtQtQtQtQtQtQt.#.#bAbpbA#uaDbGbwa8#ubH.#.#Qt#ubIbJbKao#uQtQt",
-"QtQtQtQtQtQtQtQtQtQtQt.#.##uaDbLbwa8#u.#.#QtQtQtQt#ubMbNbObP#uQt",
-"QtQtQtQtQtQtQtQtQtQtQtQtQt#ubQbwa8#u.#QtQtQtQtQtQtQt#ubRbO#uQtQt",
-"QtQtQtQtQtQtQtQtQtQtQtQtQtQt#u#u#uQtQtQtQtQtQtQtQtQtQt#u#uQtQtQt"};
-
-static bool findFileInPaths( const QString &fileName, const QStringList &paths )
-{
-	QDir d;
-	for( QStringList::ConstIterator it = paths.begin(); it != paths.end(); ++it ) {
-	    // Remove any leading or trailing ", this is commonly used in the environment
-	    // variables
-	    QString path = (*it);
-	    if ( path.startsWith( "\"" ) )
-		path = path.right( path.length() - 1 );
-	    if ( path.endsWith( "\"" ) )
-		path = path.left( path.length() - 1 );
-	    if( d.exists( path + QDir::separator() + fileName ) )
-		return true;
-	}
-	return false;
-}
-
-bool findFile( const QString &fileName )
-{
-    QString file = fileName.lower();
-    QStringList paths;
-#if defined(Q_OS_WIN32)
-    QRegExp split( "[;,]" );
-#else
-    QRegExp split( "[:]" );
-#endif
-    if ( file.endsWith( ".h" ) ) {
-	if ( globalInformation.sysId() == GlobalInformation::Borland )
-	    return true;
-	paths = QStringList::split( split, QEnvironment::getEnv( "INCLUDE" ) );
-    } else if ( file.endsWith( ".lib" ) ) {
-	if ( globalInformation.sysId() == GlobalInformation::Borland )
-	    return true;
-	paths = QStringList::split( split, QEnvironment::getEnv( "LIB" ) );
-    } else {
-	paths = QStringList::split( split, QEnvironment::getEnv( "PATH" ) );
-    }
-    return findFileInPaths( file, paths );
-}
-
-static bool createDir( const QString& fullPath )
-{
-    QStringList hierarchy = QStringList::split( QDir::separator(), fullPath );
-    QString pathComponent, tmpPath;
-    QDir dirTmp;
-    bool success = true;
-
-    for( QStringList::Iterator it = hierarchy.begin(); it != hierarchy.end(); ++it ) {
-	pathComponent = *it + QDir::separator();
-	tmpPath += pathComponent;
-#if defined(Q_OS_WIN32)
-	success = dirTmp.mkdir( tmpPath );
-#else
-	success = dirTmp.mkdir( QDir::separator() + tmpPath );
-#endif
-    }
-    return success;
-}
-
-SetupWizardImpl::SetupWizardImpl( QWidget* parent, const char* name, bool modal, WindowFlags flag ) :
-    QWizard( parent, name, modal, flag ),
-    tmpPath( QEnvironment::getTempPath() ),
-    fixedPath(false),
-    filesCopied( false ),
-    filesToCompile( 0 ),
-    filesCompiled( 0 ),
-    licensePage( 0 ),
-    licenseAgreementPage( 0 ),
-    licenseAgreementPageQsa( 0 ),
-    optionsPage( 0 ),
-    optionsPageQsa( 0 ),
-    foldersPage( 0 ),
-    configPage( 0 ),
-    progressPage( 0 ),
-    buildPage( 0 ),
-    finishPage( 0 )
-{
-    // initialize
-    if ( !name )
-	setName( "SetupWizard" );
-    resize( 600, 390 );
-#if defined(QSA)
-    setCaption( trUtf8( "QSA Installation Wizard" ) );
-#else
-    setCaption( trUtf8( "Qt Installation Wizard" ) );
-#endif
-    QPixmap logo( ( const char** ) logo_data );
-    setIcon( logo );
-#if defined(QSA)
-    setIconText( trUtf8( "QSA Installation Wizard" ) );
-#else
-    setIconText( trUtf8( "Qt Installation Wizard" ) );
-#endif
-    QFont f( font() );
-    f.setFamily( "Arial" );
-    f.setPointSize( 12 );
-    f.setBold( true );
-    setTitleFont( f );
-
-    totalFiles = 0;
-
-    // try to read the archive header information and use them instead of
-    // QT_VERSION_STR if possible
-    QArchiveHeader *archiveHeader = 0;
-    ResourceLoader rcLoader( "QT_ARQ", 500 );
-    if ( rcLoader.isValid() ) {
-	// First, try to find qt.arq as a binary resource to the file.
-	QArchive ar;
-	QDataStream ds( rcLoader.data(), IO_ReadOnly );
-	archiveHeader = ar.readArchiveHeader( &ds );
-    } else {
-	// If the resource could not be loaded or is smaller than 500
-	// bytes, we have the dummy qt.arq: try to find and install
-	// from qt.arq in the current directory instead.
-	QArchive ar;
-	QString archiveName = "qt.arq";
-# if defined(Q_OS_MAC)
-	QString appDir = qApp->argv()[0];
-	int truncpos = appDir.findRev( "/Contents/MacOS/" );
-	if (truncpos != -1)
-	    appDir.truncate( truncpos );
-	archiveName  = appDir + "/Contents/Qt/qtmac.arq";
-# endif
-	ar.setPath( archiveName );
-	if( ar.open( IO_ReadOnly ) )  {
-	    archiveHeader = ar.readArchiveHeader();
-	}
-    }
-
-#if defined(QSA)
-    ResourceLoader rcLoaderQsa( "QSA_ARQ", 500 );
-    if ( rcLoaderQsa.isValid() ) {
-	// First, try to find qt.arq as a binary resource to the file.
-	QArchive ar;
-	QDataStream ds( rcLoaderQsa.data(), IO_ReadOnly );
-	QArchiveHeader *archiveHeaderQsa = ar.readArchiveHeader( &ds );
-	if ( archiveHeaderQsa ) {
-	    QString qsa_version_str = archiveHeaderQsa->description();
-	    if ( !qsa_version_str.isEmpty() )
-		globalInformation.setQsaVersionStr( qsa_version_str );
-	    delete archiveHeaderQsa;
-	}
-    }
-#endif
-
-#if defined(Q_OS_WIN32)
-    // First check for MSVC 6.0
-    QString regValue = QEnvironment::getRegistryString( "Software\\Microsoft\\VisualStudio\\6.0\\Setup\\Microsoft Visual C++", "ProductDir", QEnvironment::LocalMachine );
-    if (!regValue.isEmpty())
-	globalInformation.setSysId(GlobalInformation::MSVC);
-
-    // MSVC.NET 7.0 & 7.1 takes presedence over 6.0
-    regValue = QEnvironment::getRegistryString( "Software\\Microsoft\\VisualStudio\\7.0", "InstallDir", QEnvironment::LocalMachine );
-    if (regValue.isEmpty())
-	regValue = QEnvironment::getRegistryString( "Software\\Microsoft\\VisualStudio\\7.1", "InstallDir", QEnvironment::LocalMachine );
-    if (!regValue.isEmpty())
-	globalInformation.setSysId(GlobalInformation::MSVCNET);
-
-    while (globalInformation.sysId() == GlobalInformation::Other) {
- 	globalInformation.setSysId(GlobalInformation::Borland);
- 	if (findFile(globalInformation.text(GlobalInformation::MakeTool)))
- 	    break;
- 	globalInformation.setSysId(GlobalInformation::MSVCNET);
- 	if (findFile(globalInformation.text(GlobalInformation::MakeTool)))
- 	    break;
- 	globalInformation.setSysId(GlobalInformation::MinGW);
- 	if (findFile(globalInformation.text(GlobalInformation::MakeTool)))
- 	    break;
- 	globalInformation.setSysId(GlobalInformation::Watcom);
- 	if (findFile(globalInformation.text(GlobalInformation::MakeTool)))
- 	    break;
-     }
-#endif
-
-    if ( archiveHeader ) {
-	QString qt_version_str = archiveHeader->description();
-	if ( !qt_version_str.isEmpty() )
-	    globalInformation.setQtVersionStr( qt_version_str );
-
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-	if ( archiveHeader->findExtraData( "compiler" ) == "borland" )
-	    globalInformation.setSysId(GlobalInformation::Borland);
-#endif
-	delete archiveHeader;
-    }
-
-    initPages();
-    initConnections();
-
-    if (optionsPage) {
-#if defined(QSA)
-	optionsPage->installPath->setText(
-	    QString( "C:\\Qt_QSA\\Qt" ) +
-	    QString( globalInformation.qtVersionStr() ).replace( QRegExp("\\s"), "" ).replace( QRegExp("-"), "" )
-	    );
-#endif
-    }
-    if ( optionsPageQsa ) {
-#if defined(QSA)
-	optionsPageQsa->installPath->setText(
-	    QString( "C:\\Qt_QSA\\QSA" ) +
-	    QString( globalInformation.qsaVersionStr() ).replace( QRegExp("\\s"), "" ).replace( QRegExp("-"), "" )
-	    );
-#endif
-    }
-    readLicense( QDir::homeDirPath() + "/.qt-license" );
-}
-
-static bool copyFile( const QString& src, const QString& dest )
-{
-#ifdef Q_WS_WIN
-    QT_WA( {
-	return CopyFileW( (const wchar_t*)src.ucs2(), (const wchar_t*)dest.ucs2(), false );
-    }, {
-	return CopyFileA( src.local8Bit(), dest.local8Bit(), false );
-    } );
-#else
-    int len;
-    const int buflen = 4096;
-    char buf[buflen];
-    QFileInfo info( src );
-    QFile srcFile( src ), destFile( dest );
-    if (!srcFile.open( IO_ReadOnly ))
-	return false;
-    destFile.remove();
-    if (!destFile.open( IO_WriteOnly ))
-	return false;
-
-    while (!srcFile.atEnd()) {
-	len = srcFile.readBlock( buf, buflen );
-	if (len <= 0)
-	    break;
-	if (destFile.writeBlock( buf, len ) != len)
-	    return false;
-    }
-    destFile.flush();
-    return true;
-#endif
-}
-
-void SetupWizardImpl::initPages()
-{
-#define ADD_PAGE( var, Class ) \
-    { \
-    var = new Class( this, #var ); \
-    SideDecorationImpl *sideDeco = new SideDecorationImpl( var ); \
-    \
-    Q_ASSERT( var->layout() != 0 ); \
-    if ( var->layout()->inherits("QBoxLayout") ) { \
-	((QBoxLayout*)var->layout())->insertWidget( 0, sideDeco ); \
-	((QBoxLayout*)var->layout())->insertSpacing( 1, 10 ); \
-    } \
-    \
-    pages.append( var ); \
-    addPage( var, var->title() ); \
-    setHelpEnabled( var, false ); \
-    \
-    connect( this, SIGNAL(wizardPages(const QPtrList<Page>&)), \
-	    sideDeco, SLOT(wizardPages(const QPtrList<Page>&)) ); \
-    connect( this, SIGNAL(wizardPageShowed(int)), \
-	    sideDeco, SLOT(wizardPageShowed(int)) ); \
-    connect( this, SIGNAL(wizardPageFailed(int)), \
-	    sideDeco, SLOT(wizardPageFailed(int)) ); \
-    connect( this, SIGNAL(editionString(const QString&)), \
-	    sideDeco->editionLabel, SLOT(setText(const QString&)) ); \
-    }
-
-    QPtrList<Page> pages;
-    if( globalInformation.reconfig() ) {
-	ADD_PAGE( configPage,	ConfigPageImpl  )
-	ADD_PAGE( buildPage,	BuildPageImpl   )
-	ADD_PAGE( finishPage,	FinishPageImpl  )
-    } else {
-#if defined(Q_OS_WIN32)
-	ADD_PAGE( winIntroPage,		WinIntroPageImpl	)
-#endif
-#if !defined(EVAL_CD) && !defined(NON_COMMERCIAL)
-	ADD_PAGE( licensePage,		LicensePageImpl		)
-#endif
-	ADD_PAGE( licenseAgreementPage, LicenseAgreementPageImpl)
-#if defined(QSA)
-	ADD_PAGE( licenseAgreementPageQsa, LicenseAgreementPageImpl)
-#endif
-	ADD_PAGE( optionsPage,		OptionsPageImpl		)
-#if defined(QSA)
-	ADD_PAGE( optionsPageQsa,	OptionsPageImpl		)
-#endif
-#if !defined(Q_OS_UNIX)
-	ADD_PAGE( foldersPage,		FoldersPageImpl		)
-#endif
-	ADD_PAGE( configPage,		ConfigPageImpl		)
-	ADD_PAGE( progressPage,		ProgressPageImpl	)
-	ADD_PAGE( buildPage,		BuildPageImpl		)
-	ADD_PAGE( finishPage,		FinishPageImpl		)
-    }
-#undef ADD_PAGE
-
-    if ( licensePage ) {
-	setNextEnabled( licensePage, false );
-    }
-    if ( licenseAgreementPage ) {
-	setNextEnabled( licenseAgreementPage, false );
-    }
-    if ( licenseAgreementPageQsa ) {
-	setNextEnabled( licenseAgreementPageQsa, false );
-	licenseAgreementPage->titleStr = "License agreement Qt";
-	licenseAgreementPageQsa->titleStr = "License agreement QSA";
-    }
-    if ( optionsPage ) {
-	setBackEnabled( optionsPage, false );
-    }
-    if ( optionsPageQsa ) {
-	optionsPageQsa->installExamples->hide();
-	optionsPageQsa->installTools->hide();
-	optionsPageQsa->installExtensions->hide();
-	optionsPageQsa->installTutorials->hide();
-	optionsPageQsa->skipBuild->hide();
-	optionsPageQsa->installDocs->hide();
-	optionsPageQsa->sysGroup->hide();
-	optionsPageQsa->pathLabel->setText("QSA destination &path");
-
-	optionsPage->titleStr = "Options for Qt";
-	optionsPage->shortTitleStr = "Choose options for Qt";
-	optionsPageQsa->titleStr = "Options for QSA";
-	optionsPageQsa->shortTitleStr = "Choose options for QSA";
-    }
-    if ( configPage )
-	setBackEnabled( configPage, false );
-    if ( progressPage ) {
-	setBackEnabled( progressPage, false );
-	setNextEnabled( progressPage, false );
-    }
-    if ( buildPage ) {
-	setBackEnabled( buildPage, false );
-	setNextEnabled( buildPage, false );
-    }
-    if ( finishPage ) {
-	setBackEnabled( finishPage, false );
-	setFinishEnabled( finishPage, true );
-    }
-    emit wizardPages( pages );
-}
-
-void SetupWizardImpl::initConnections()
-{
-    connect( &autoContTimer, SIGNAL( timeout() ), this, SLOT( timerFired() ) );
-
-    if ( optionsPage ) {
-	connect( optionsPage->sysGroup, SIGNAL(clicked(int)), SLOT(clickedSystem(int)));
-	connect( optionsPage->sysOtherCombo, SIGNAL(activated(int)), SLOT(sysOtherComboChanged(int)));
-    }
-    if ( foldersPage ) {
-	connect( foldersPage->folderPathButton, SIGNAL(clicked()), SLOT(clickedFolderPath()));
-	connect( foldersPage->devSysPathButton, SIGNAL(clicked()), SLOT(clickedDevSysPath()));
-    }
-    if ( licensePage ) {
-	connect( licensePage->readLicenseButton, SIGNAL(clicked()), SLOT(clickedLicenseFile()));
-	connect( licensePage->customerID, SIGNAL(textChanged(const QString&)), SLOT(licenseChanged()));
-	connect( licensePage->licenseID, SIGNAL(textChanged(const QString&)), SLOT(licenseChanged()));
-	connect( licensePage->licenseeName, SIGNAL(textChanged(const QString&)), SLOT(licenseChanged()));
-	connect( licensePage->expiryDate, SIGNAL(textChanged(const QString&)), SLOT(licenseChanged()));
-	connect( licensePage->productsString, SIGNAL(activated(int)), SLOT(licenseChanged()));
-	connect( licensePage->key, SIGNAL(textChanged(const QString&)), SLOT(licenseChanged()));
-    }
-    if ( configPage ) {
-	connect( configPage->configTabs, SIGNAL(currentChanged(QWidget*)), SLOT(configPageChanged()));
-    }
-    if ( buildPage ) {
-	connect( &configure, SIGNAL( processExited() ), this, SLOT( configDone() ) );
-	connect( &configure, SIGNAL( readyReadStdout() ), this, SLOT( readConfigureOutput() ) );
-	connect( &configure, SIGNAL( readyReadStderr() ), this, SLOT( readConfigureError() ) );
-	connect( &make, SIGNAL( processExited() ), this, SLOT( makeDone() ) );
-	connect( &make, SIGNAL( readyReadStdout() ), this, SLOT( readMakeOutput() ) );
-	connect( &make, SIGNAL( readyReadStderr() ), this, SLOT( readMakeError() ) );
-	connect( buildPage->restartBuild, SIGNAL(clicked()), this, SLOT(restartBuild()) );
-    }
-}
-
-void SetupWizardImpl::stopProcesses()
-{
-    if( cleaner.isRunning() )
-	cleaner.kill();
-    if( configure.isRunning() )
-	configure.kill();
-    if( make.isRunning() )
-	make.kill();
-}
-
-void SetupWizardImpl::clickedFolderPath()
-{
-    foldersPage->folderPath->setText( shell.selectFolder( foldersPage->folderPath->text(), ( foldersPage->folderGroups->currentItem() == 0 ) ) );
-}
-
-void SetupWizardImpl::clickedDevSysPath()
-{
-    QDir dir( foldersPage->devSysPath->text() );
-    if( !dir.exists() )
-	dir.setPath( devSysFolder );
-
-    QString dest = QFileDialog::getExistingDirectory( dir.absPath(), this, 0, "Select the path to Microsoft Visual Studio" );
-    if (!dest.isNull())
-	foldersPage->devSysPath->setText( dest );
-}
-
-void SetupWizardImpl::sysOtherComboChanged(int)
-{
-    clickedSystem(GlobalInformation::Other);
-}
-
-static QString getDirectoryList(const char *envvar)
-{
-    QString environment;
-    const char *cpath = getenv(envvar);
-    if (cpath) {
-	environment = QString::fromLocal8Bit(cpath);
-	environment = QStringList::split(QRegExp("[;,]"), environment).join("\n");
-    } else {
-	environment = "<Environment variable empty>";
-    }
-    return environment;
-}
-
-void SetupWizardImpl::clickedSystem( int sys )
-{
-#ifndef Q_OS_MACX
-    if (sys == 99) // This is the Integrate with IDE checkbox
-	return;
-    globalInformation.setSysId( GlobalInformation::SysId(sys) );
-    if (sys == GlobalInformation::Other) {
-	if (optionsPage->sysOtherCombo->currentText() == "win32-watcom")
-	    globalInformation.setSysId(GlobalInformation::Watcom);
-    }
-    if (!isVisible())
-	return;
-    QString makeCmd = globalInformation.text(GlobalInformation::MakeTool);
-    QString environment;
-    fixedPath = false;
-    if ( !optionsPage->skipBuild->isChecked() && optionsPage->skipBuild->isEnabled() ) {
-        QString commandTool;
-	environment = getenv("COMSPEC");
-        if( qWinVersion() & WV_DOS_based )
-            commandTool = "command.com";
-        else
-            commandTool = "cmd.exe";
-        if (!environment.isEmpty() && !environment.endsWith(commandTool, false)) {
-	    if (QMessageBox::critical(this, "Environment problems",
-                                        "The 'COMSPEC' environment variable is not set to use\n"
-                                        "'" + commandTool + "'. This could cause some problems when building.\n"
-                                        "If you have difficulty then change it to use '" + commandTool + "'\n"
-                                        "and restart the installation\n\n"
-                                        "Please contact your local system administration if you have\n"
-                                        "difficulties finding the file, or if you don't know how to\n"
-                                        "modify the environment settings on your system.\n\n"
-					"Alternatively, by clicking yes, the installer will try to set\n"
-					"these for you.",
-					 QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
-		fixEnvironment("COMSPEC", commandTool);
-        }
-        if( !findFile( makeCmd ) ) {
-	    environment = getDirectoryList("PATH");
-	    // ### try to adjust environment
-	    if (QMessageBox::critical(this, "Environment problems",
-					 "The make tool '" + makeCmd + "' could not be located in any\n"
-					 "directory listed in the 'PATH' environment variable:"
-					 "\n\n" + environment + "\n\n"
-					 "Make sure the path to this file is present in the PATH environment\n"
-					 "variable and restart the installation.\n"
-					 "\n"
-					 "You can find the path to the tool using the 'Find' tool\n"
-					 "and add the location to the environment settings of your\n"
-					 "system. Please contact your local system administration if\n"
-					 "you have difficulties finding the files, or if you don't\n"
-					 "know how to modifiy the environment settings of your system.\n\n"
-					 "Alternatively, by clicking yes, the installer will try to set\n"
-					 "these for you.",
-					 QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
-		fixEnvironment("PATH", makeCmd);
-	}
-	if (globalInformation.sysId() != GlobalInformation::Borland && globalInformation.sysId() != GlobalInformation::MinGW) {
-	    if (!findFile( "string.h" ) ) {
-		environment = getDirectoryList("INCLUDE");
-		// ### try to adjust environment
-		if (QMessageBox::critical(this, "Environment problems",
-				      "The file 'string.h' could not be located in any directory\n"
-				      "listed in the 'INCLUDE' environment variable:\n\n" + environment + "\n\n"
-				      "You might have to install the platform headers, or adjust\n"
-				      "the environment variables of your system, and restart the\n"
-				      "installation.\n\n"
-				      "Please contact your local system administration if you have\n"
-				      "difficulties finding the file, or if you don't know how to\n"
-				      "modify the environment settings on your system.\n\n"
-				      "Alternatively, by clicking yes, the installer will try to set\n"
-				      "these for you.",
-    				      QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
-		fixEnvironment("INCLUDE", "string.h");
-
-	    }
-	    if (!findFile("ole32.lib")) {
-		environment = getDirectoryList("LIB");
-		// ### try to adjust environment
-		if (QMessageBox::critical(this, "Environment problems",
-				      "The file 'ole32.lib' could not be located in any directory\n"
-				      "listed in the 'LIB' environment variable:\n\n" + environment + "\n\n"
-				      "You might have to install the platform libraries, or adjust\n"
-				      "the environment variables of your system, and restart the\n"
-				      "installation.\n\n"
-				      "Please contact your local system administration if you have\n"
-				      "difficulties finding the file, or if you don't know how to\n"
-				      "modify the environment settings on your system.\n\n"
-				      "Alternatively, by clicking yes, the installer will try to set\n"
-				      "these for you.",
-  				      QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
-		fixEnvironment("LIB", "ole32.lib");
-
-	    }
-	    bool foundCommonDll = false;
-	    QString commonDll;
-	    QString commonDllText;
-	    QString presentFileText = "Make sure the path to this file is present in the PATH environment\n";
-	    if (globalInformation.sysId() == GlobalInformation::MSVC) {
-		commonDll = "mspdb60.dll";
-		foundCommonDll = findFile(commonDll);
-		commonDllText = "The file 'mspdb60.dll' ";
-	    } else if(globalInformation.sysId() == GlobalInformation::MSVCNET) {
-		commonDll = "mspdb70.dll";
-		foundCommonDll = findFile(commonDll);
-		if (!foundCommonDll) {
-		    commonDll = "mspdb71.dll";
-		    foundCommonDll = findFile(commonDll);
-		    commonDllText = "The files 'mspdb70.dll' and 'mspdb71.dll' "; // VC 7.0 or VC 7.1
-		    presentFileText = "Make sure the path to one of these files is present in the PATH environment\n";
-		}
-	    } else {
-		foundCommonDll = true;
-	    }
-	    if(!foundCommonDll && !fixedPath) {
-		environment = getDirectoryList("PATH");
-		// ### try to adjust environment
-		if (QMessageBox::critical(this, "Environment problems",
-				       commonDllText + "could not be located in any\n"
-				       "directory listed in the 'PATH' environment variable:"
-				       "\n\n" + environment + "\n\n"
-				       + presentFileText +
-				       "variable and restart the installation.\n"
-				       "\n"
-				       "You can find the path to the tool using the 'Find' tool\n"
-				       "and add the location to the environment settings of your\n"
-				       "system. Please contact your local system administration if\n"
-				       "you have difficulties finding the files, or if you don't\n"
-				       "know how to modifiy the environment settings of your system.\n\n"
-				       "Alternatively, by clicking yes, the installer will try to set\n"
-				       "these for you.",
-    				       QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
-		fixEnvironment("PATH", commonDllText);
-
-	    }
-	}
-	if (globalInformation.sysId() == GlobalInformation::Intel && !findFile("icl.exe")) {
-	    environment = getDirectoryList("PATH");
-	    if (QMessageBox::critical(this, "Environment problems",
-				  "The Intel C++ compiler (icl.exe) could not be found\n"
-				  "in your PATH:\n\n" + environment + "\n\n"
-				  "Make sure the path to this file is present in the PATH environment\n"
-				  "variable and restart the installation.\n"
-				  "\n"
-				  "You can find the path to the tool using the 'Find' tool\n"
-				  "and add the location to the environment settings of your\n"
-				  "system. Please contact your local system administration if\n"
-				  "you have difficulties finding the files, or if you don't\n"
-				  "know how to modifiy the environment settings of your system.\n\n"
-				  "Alternatively, by clicking yes, the installer will try to set\n"
-				  "these for you.",
- 				  QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
-		fixEnvironment("PATH", "icl.exe");
-
-	}
-    }
-#endif
-}
-
-void SetupWizardImpl::fixEnvironment(const QString &var, const QString &file)
-{
-    if (var == "COMSPEC" || !(globalInformation.sysId() == GlobalInformation::MSVC || 
-	globalInformation.sysId() == GlobalInformation::MSVCNET)) {
-	QString fn = QDir::toNativeSeparators(QFileDialog::getOpenFileName(QString(), QString(), this, 0,
-						  "Please find " + file));
-	QString envs = getenv(var);
-	if (var != "COMSPEC") {
-	    fn.truncate(fn.findRev("\\") - 1);
-	    fn += ";" + envs;
-	}
-	if (!fn.isEmpty())
-	    QEnvironment::putEnv(var, fn, QEnvironment::PersistentEnv | QEnvironment::LocalEnv);
-    } else if (globalInformation.sysId() == GlobalInformation::MSVC) {
-	QString visualStudio = 
-	    QEnvironment::getRegistryString("Software\\Microsoft\\VisualStudio\\6.0\\Setup\\Microsoft Visual Studio", 
-	 				    "ProductDir", QEnvironment::LocalMachine);
-	if (var == "PATH" && !fixedPath) {
-	    QString newPaths = visualStudio + "\\vc98\\bin;";
-	    newPaths += visualStudio + "\\Common\\MSDev98\\Bin;";
-	    if (qWinVersion() & Qt::WV_NT_based)
-		newPaths += visualStudio + "\\Common\\Tools\\WinNT;";
-	    else
-		newPaths += visualStudio + "\\Common\\Tools\\Win95;";
-	    QEnvironment::putEnv("PATH", newPaths + getenv("PATH"), 
-				 QEnvironment::PersistentEnv | QEnvironment::LocalEnv);
-	    fixedPath = true;
-	} else if (var == "LIB") {
-	    QString newPaths = visualStudio + "\\vc98\\lib;";
-	    newPaths += visualStudio + "\\vc98\\mfc\\lib;";
-	    QEnvironment::putEnv("LIB", newPaths + getenv("LIB"), 
-				 QEnvironment::PersistentEnv | QEnvironment::LocalEnv);
-	} else if (var == "INCLUDE") {
-	    QString newPaths = visualStudio + "\\vc98\\atl\\include;";
-	    newPaths += visualStudio + "\\vc98\\include;";
-	    newPaths += visualStudio + "\\vc98\\mfc\\include;";
-	    QEnvironment::putEnv("INCLUDE", newPaths + getenv("INCLUDE"), 
-				 QEnvironment::PersistentEnv | QEnvironment::LocalEnv);
-	}
-    } else if (globalInformation.sysId() == GlobalInformation::MSVCNET) {
-	QString visualStudio = QEnvironment::getRegistryString("Software\\Microsoft\\VisualStudio\\7.1\\Setup\\VS", 
-							       "ProductDir", QEnvironment::LocalMachine);
-	if (visualStudio.isEmpty())
-	    visualStudio = QEnvironment::getRegistryString("Software\\Microsoft\\VisualStudio\\7.0\\Setup\\VS", 
-							   "ProductDir", QEnvironment::LocalMachine);
-	// With .NET this isn't so easily done, we need to read in the vsvars32.bat file 
-	// to get this right
-	QFile f(visualStudio + "\\Common7\\Tools\\vsvars32.bat");
-	QString contents;
-	if (f.open(IO_ReadOnly)) {
-	    contents = QString(f.readAll());
-	}
-	int vsinstall = contents.find("VSINSTALLDIR=")+13;
-	QString VSINSTALLDIR = contents.mid(vsinstall, contents.find("\n", vsinstall) - vsinstall);
-	int vcinstall = contents.find("VCINSTALLDIR=")+13;
-	QString VCINSTALLDIR = contents.mid(vcinstall, contents.find("\n", vcinstall) - vcinstall);
-	int framework = contents.find("FrameworkDir=")+13;
-	QString FrameworkDir = contents.mid(framework, contents.find("\n", framework) - framework);
-	int frameworkVer = contents.find("FrameworkVersion=")+17;
-	QString FrameworkVer = contents.mid(frameworkVer, contents.find("\n", frameworkVer) - frameworkVer);
-	int frameworkSDK = contents.find("FrameworkSDKDir=")+16;
-	QString FrameworkSDK = contents.mid(frameworkSDK, contents.find("\n", frameworkSDK) - frameworkSDK);
-	if (var == "PATH" && !fixedPath) {
-	    QString newPaths = VSINSTALLDIR + ";";
-	    newPaths += VCINSTALLDIR + "\\Bin;";
-	    newPaths += VCINSTALLDIR + "\\Common7\\Tools;";
-	    newPaths += VCINSTALLDIR + "\\Common7\\Tools\\bin\\prerelease;";
-	    newPaths += VCINSTALLDIR + "\\Common7\\Tools\\bin;";
-	    newPaths += FrameworkSDK + "\\bin;";
-	    newPaths += FrameworkSDK + "\\" + FrameworkVer + ";";
-	    QEnvironment::putEnv("PATH", newPaths + getenv("PATH"), 
-				 QEnvironment::PersistentEnv | QEnvironment::LocalEnv);
-	    fixedPath = true;
-	} else if (var == "LIB") {
-	    QString newPaths = VCINSTALLDIR + "\\ATLMFC\\LIB;";
-	    newPaths += VCINSTALLDIR + "\\LIB;";
-	    newPaths += VCINSTALLDIR + "\\PlatformSDK\\lib\\prerelease;";
-	    newPaths += VCINSTALLDIR + "\\PlatformSDK\\lib;";
-	    newPaths += FrameworkSDK + "\\lib;";
-	    QEnvironment::putEnv("LIB", newPaths + getenv("LIB"), 
-				 QEnvironment::PersistentEnv | QEnvironment::LocalEnv);
-	} else if (var == "INCLUDE") {
-	    QString newPaths = VCINSTALLDIR + "\\ATLMFC\\INCLUDE;";
-	    newPaths += VCINSTALLDIR + "\\INCLUDE;";
-	    newPaths += VCINSTALLDIR + "\\PlatformSDK\\include\\prerelease;";
-	    newPaths += VCINSTALLDIR + "\\PlatformSDK\\include;";
-	    newPaths += FrameworkSDK + "\\include;";
-	    QEnvironment::putEnv("INCLUDE", newPaths + getenv("INCLUDE"), 
-				 QEnvironment::PersistentEnv | QEnvironment::LocalEnv);
-	}
-
-    }
-}
-
-void SetupWizardImpl::readCleanerOutput()
-{
-    updateDisplay( cleaner.readStdout(), currentOLine );
-}
-
-void SetupWizardImpl::readConfigureOutput()
-{
-    updateDisplay( configure.readStdout(), currentOLine );
-}
-
-void SetupWizardImpl::readMakeOutput()
-{
-    updateDisplay( make.readStdout(), currentOLine );
-}
-
-void SetupWizardImpl::readAssistantOutput()
-{
-#if defined(QSA)
-    updateDisplay( assistant.readStdout(), currentOLine );
-#endif
-}
-
-void SetupWizardImpl::readCleanerError()
-{
-    updateDisplay( cleaner.readStderr(), currentELine  );
-}
-
-void SetupWizardImpl::readConfigureError()
-{
-    updateDisplay( configure.readStderr(), currentELine );
-}
-
-void SetupWizardImpl::readMakeError()
-{
-    updateDisplay( make.readStderr(), currentELine  );
-}
-
-void SetupWizardImpl::readAssistantError()
-{
-#if defined(QSA)
-    updateDisplay( assistant.readStderr(), currentELine );
-#endif
-}
-
-void SetupWizardImpl::updateDisplay( const QString &input, QString &output)
-{
-    const QChar *c = input.unicode();
-    for( int i = 0; i < (int)input.length(); ++i, ++c ) {
-	switch( char( *c ) ) {
-	case '\r':
-	case 0x00:
-	    break;
-	case '\t':
-	    currentOLine += "    ";  // Simulate a TAB by using 4 spaces
-	    break;
-	case '\n':
-	    if( output.length() ) {
-		if ( !globalInformation.reconfig() ) {
-		    if ( output.right( 4 ) == ".cpp" ||
-			 output.right( 2 ) == ".c" ||
-			 output.right( 4 ) == ".pro" ||
-			 output.right( 3 ) == ".ui" ) {
-			buildPage->compileProgress->setProgress( ++filesCompiled );
-		    }
-		}
-		logOutput( output );
-		output = "";
-	    }
-	    break;
-	default:
-	    output += *c;
-	    break;
-	}
-    }
-}
-
-#if defined(Q_OS_WIN32)
-void SetupWizardImpl::installIcons( const QString& iconFolder, const QString& dirName, bool common )
-{
-    QDir dir( dirName );
-
-    dir.setSorting( QDir::Name | QDir::IgnoreCase );
-    const QFileInfoList* filist = dir.entryInfoList();
-    if ( !filist )
-	return;
-    QFileInfoListIterator it( *filist );
-    QFileInfo* fi;
-    while( ( fi = it.current() ) ) {
-	if( fi->fileName()[0] != '.' && // Exclude dot-dirs
-	    fi->fileName() != "sql" ) { // Exclude SQL-dir
-	    if( fi->isDir() ) {
-		installIcons( iconFolder, fi->absFilePath(), common );
-	    } else if( fi->fileName().right( 4 ) == ".exe" ) {
-		shell.createShortcut( iconFolder, common, fi->baseName(), fi->absFilePath() );
-	    }
-	}
-	++it;
-    }
-}
-#endif
-
-void SetupWizardImpl::assistantDone()
-{
-#if defined(QSA)
-    QString contentFile;
-    static int count = 0;
-    if ( count == 0 ) {
-	connect( &assistant, SIGNAL( processExited() ), this, SLOT( assistantDone() ) );
-	connect( &assistant, SIGNAL( readyReadStdout() ), this, SLOT( readAssistantOutput() ) );
-	connect( &assistant, SIGNAL( readyReadStderr() ), this, SLOT( readAssistantError() ) );
-	contentFile = "qsa.xml";
-    } else if ( count == 1 ) {
-	contentFile = "qt-script-for-applications.xml";
-    } else {
-	doIDEIntegration();
-	return;
-    }
-    ++count;
-
-    // install documentation
-    QDir html( optionsPageQsa->installPath->text() );
-    html.cd( "doc/html/" );
-
-    QStringList lst;
-    lst << "assistant";
-    lst << "-addContentFile";
-    lst << QDir::toNativeSeparators( html.filePath( contentFile ) );
-    assistant.setArguments( lst );
-    if( !assistant.start() ) {
-	logOutput( "Installing QSA documentation failed\n" );
-	assistantDone();
-    }
-#else
-    doIDEIntegration();
-#endif
-}
-
-void SetupWizardImpl::doIDEIntegration()
-{
-#if defined(Q_OS_WIN32)
-    QDir installDir( optionsPage->installPath->text() );
-    if ( optionsPage->installIDEIntegration->isChecked() && optionsPage->installIDEIntegration->isEnabled()
-	 && !foldersPage->devSysPath->text().isEmpty() ) {
-	// install the precompiled MS integration
-	if ( globalInformation.sysId() == GlobalInformation::MSVC ) {
-	    QDir addinsDir( foldersPage->devSysPath->text() );
-	    addinsDir.cd( "Common/MSDev98/Addins" );
-	    if ( copyFile( installDir.filePath("qmsdev.dll"), addinsDir.filePath("qmsdev.dll") ) ) {
-		installDir.remove( "qmsdev.dll" );
-	    }
-	} else if ( globalInformation.sysId() == GlobalInformation::MSVCNET 
-	            || globalInformation.sysId() == GlobalInformation::Intel){
-	    QString filepath = installDir.filePath("QMsNetSetup.msi");
-	    filepath = filepath.replace( '/', '\\' );
-
-	    int res = _spawnlp( _P_NOWAIT, "msiexec.exe", "msiexec.exe", "-i", filepath.latin1(), NULL );
-	    if ( res == -1 ) {
-		//MSIExec is not in path, look up in registry (only works for NT machines)
-		QString msiexec = QEnvironment::getRegistryString( "SYSTEM\\CurrentControlSet\\Services\\MSIServer",
-								   "ImagePath",
-								   QEnvironment::LocalMachine );
-		if ( !msiexec.isEmpty() )
-		    msiexec.remove( " /V" );
-		res = _spawnl( _P_NOWAIT, msiexec.latin1(), msiexec.latin1(), "-i", filepath.latin1(), NULL );
-	    }
-
-	    if ( res == -1 ) {
-		QMessageBox::warning( this, "Couldn't execute .NET addin installer script",
-				      "Microsoft Installer (MSI) was not found on your system.\n"
-				      "Please install MSI, then execute the .NET addin installer "
-				      "script,\nlocated at " + filepath );
-	    }
-	}
-
-	QFile *autoexp  = 0;
-	QFile *usertype = 0;
-	switch( globalInformation.sysId() ) {
-	    case GlobalInformation::MSVC:
-		autoexp = new QFile( foldersPage->devSysPath->text() + "\\Common\\MsDev98\\bin\\autoexp.dat" );
-		usertype = new QFile( foldersPage->devSysPath->text() + "\\Common\\MsDev98\\bin\\usertype.dat" );
-		break;
-	    case GlobalInformation::MSVCNET:
-		autoexp = new QFile( foldersPage->devSysPath->text() + "\\Common7\\Packages\\Debugger\\autoexp.dat" );
-		usertype = new QFile( foldersPage->devSysPath->text() + "\\Common7\\Packages\\Debugger\\usertype.dat" );
-		break;
-	}
-
-	if ( autoexp ) {
-	    QString autoExpContents;
-	    if ( !autoexp->exists() ) {
-		autoexp->open( IO_WriteOnly );
-	    } else {
-		// First try to open the file to search for existing installations
-		autoexp->open( IO_ReadOnly );
-		QByteArray bytes = autoexp->readAll();
-		autoExpContents = QString::fromLatin1(bytes.data(), bytes.size());
-		autoexp->close();
-		if ( autoExpContents.find( "; Trolltech Qt" ) == -1 )
-		    autoexp->open(IO_WriteOnly | IO_Translate);
-	    }
-	    if( autoexp->isOpen() ) {
-		bool written = false;
-		QTextStream outstream( autoexp );
-		QStringList entries = QStringList::split("\r\n", autoExpContents, true);
-		for (QStringList::Iterator entry = entries.begin(); entry != entries.end(); ++entry) {
-		    QString e(*entry);
-		    outstream << e << endl;
-		    if (!written && e.startsWith("[AutoExpand]")) {
-			outstream << endl;
-			outstream << "; Trolltech Qt" << endl;
-			outstream << "QString=<d->unicode,su> len=<d->len,u>" << endl;
-			outstream << "QCString =<shd->data, s>" << endl;
-			outstream << "QPoint =x=<xp> y=<yp>" << endl;
-			outstream << "QRect =x1=<x1> y1=<y1> x2=<x2> y2=<y2>" << endl;
-			outstream << "QSize =width=<wd> height=<ht>" << endl;
-			outstream << "QWMatrix =m11=<_m11> m12=<_m12> m21=<_m21> m22=<_m22> dx=<_dx> dy=<_dy>" << endl;
-			outstream << "QVariant =Type=<d->typ> value=<d->value>" << endl;
-			outstream << "QValueList<*> =Count=<sh->nodes>" << endl;
-			outstream << "QPtrList<*> =Count=<numNodes>" << endl;
-			outstream << "QGuardedPtr<*> =ptr=<priv->obj>" << endl;
-			outstream << "QEvent =type=<t>" << endl;
-			outstream << "QObject =class=<metaObj->classname,s> name=<objname,s>" << endl;
-			written = true;
-		    }
-		}
-		autoexp->close();
-	    }
-	    delete autoexp;
-	}
-
-	if ( usertype ) {
-	    if ( !usertype->exists() ) {
-		usertype->open( IO_WriteOnly | IO_Translate );
-	    } else {
-		usertype->open( IO_ReadOnly );
-		QString existingUserType = usertype->readAll();
-		usertype->close();
-		if ( existingUserType.find( "Q_OBJECT" ) == -1 )
-		    usertype->open(IO_WriteOnly | IO_Append | IO_Translate);
-	    }
-	    if ( usertype->isOpen() ) {
-		QTextStream outstream( usertype );
-		outstream << endl;
-		outstream << "Q_OBJECT" << endl;
-		outstream << "Q_PROPERTY" << endl;
-		outstream << "Q_ENUMS" << endl;
-		outstream << "Q_SETS" << endl;
-		outstream << "Q_CLASSINFO" << endl;
-		outstream << "emit" << endl;
-		outstream << "TRUE" << endl;
-		outstream << "FALSE" << endl;
-		outstream << "SIGNAL" << endl;
-		outstream << "SLOT" << endl;
-		outstream << "signals:" << endl;
-		outstream << "slots:" << endl;
-		usertype->close();
-	    }
-	    delete usertype;
-	}
-    }
-
-    if ( globalInformation.sysId() != GlobalInformation::MinGW )
-	installDir.remove( "Makefile.win32-g++" );
-    if (globalInformation.sysId() != GlobalInformation::MSVC)
-	installDir.remove( "qmsdev.dll" );
-    if (globalInformation.sysId() != GlobalInformation::MSVCNET)
-	installDir.remove( "QMsNetSetup.msi" );
-#endif
-
-    doStartMenuIntegration();
-}
-
-void SetupWizardImpl::doStartMenuIntegration()
-{
-#if defined(Q_OS_WIN32)
-    /*
-    ** Set up our icon folder and populate it with shortcuts.
-    ** Then move to the next page.
-    */
-    QString dirName, examplesName, tutorialsName;
-    bool common( foldersPage->folderGroups->currentItem() == 0 );
-    QString qtDir = QEnvironment::getEnv( "QTDIR" );
-
-    dirName = shell.createFolder( foldersPage->folderPath->text(), common );
-    shell.createShortcut( dirName, common, "Qt Designer", qtDir + "\\bin\\designer.exe", "GUI designer", "", qtDir );
-#if !defined(EVAL) && !defined(EDU) && !defined(NON_COMMERCIAL)
-    shell.createShortcut( dirName, common, "Reconfigure Qt",
-	    qtDir + "\\bin\\install.exe",
-	    "Reconfigure the Qt library",
-	    QString("-reconfig \"%1\"").arg(globalInformation.qtVersionStr()),
-	    qtDir );
-#endif
-#if defined(QSA)
-    shell.createShortcut( dirName, common, "License agreement for Qt", "notepad.exe", "Review the license agreement",
-	    "\"" + qtDir + "\\" LICENSE_DEST "\"" );
-    shell.createShortcut( dirName, common, "Readme for Qt", "notepad.exe", "Important information",
-	    "\"" + qtDir + "\\README\"" );
-    shell.createShortcut( dirName, common, "License agreement for QSA", "notepad.exe", "Review the license agreement",
-	    "\"" + optionsPageQsa->installPath->text() + "\\" LICENSE_DEST "\"" );
-    shell.createShortcut( dirName, common, "Readme for QSA", "notepad.exe", "Important information",
-	    "\"" + optionsPageQsa->installPath->text() + "\\README\"" );
-#else
-    shell.createShortcut( dirName, common, "License agreement", "notepad.exe", "Review the license agreement", "\"" + qtDir + "\\" LICENSE_DEST "\"" );
-    shell.createShortcut( dirName, common, "Readme", "notepad.exe", "Important information", QString( "\"" ) + qtDir + "\\README\"" );
-#endif
-    shell.createShortcut( dirName, common, "Qt Assistant", qtDir + "\\bin\\assistant.exe", "Browse the On-line documentation", "", qtDir );
-    shell.createShortcut( dirName, common, "Qt Linguist", qtDir + "\\bin\\linguist.exe", "Qt translation utility", "", qtDir );
-    shell.createInternetShortcut( dirName, common, "Trolltech.com", "http://qtsoftware.com/" );
-#if defined(EVAL_CD)
-    shell.createInternetShortcut( dirName, common, "Register for Support", "http://qtsoftware.com/products/qt/evaluate.html" );
-#endif
-
-    if ( ( ( !globalInformation.reconfig() && optionsPage->skipBuild->isChecked() )
-	 || ( globalInformation.reconfig() && !configPage->rebuildInstallation->isChecked() ) )
-	|| qWinVersion() & WV_DOS_based ) {
-	QString description;
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-	buildQtShortcutText = "Build Qt Examples and Tutorials";
-	description = "Build the Qt Examples and Tutorials";
-#else
-	buildQtShortcutText = "Build Qt " + globalInformation.qtVersionStr();
-	description = "Build the Qt library";
-#endif
-	shell.createShortcut( dirName, common,
-	    buildQtShortcutText,
-	    QEnvironment::getEnv( "QTDIR" ) + "\\build.bat",
-	    description );
-    }
-
-#if defined(QSA)
-    QString qsaExamplesName;
-    if( qWinVersion() & WV_DOS_based ) {
-	shell.createShortcut( dirName, common,
-		"QSA Examples",
-		optionsPageQsa->installPath->text() + "\\examples" );
-    } else {
-	qsaExamplesName = shell.createFolder( foldersPage->folderPath->text() + "\\QSA Examples", common );
-	installIcons( qsaExamplesName, optionsPageQsa->installPath->text() + "\\examples", common );
-    }
-#endif
-    if( optionsPage->installTutorials->isChecked() ) {
-	if( qWinVersion() & WV_DOS_based ) {
-	    shell.createShortcut( dirName, common,
-#if defined(QSA)
-		"Qt Tutorials",
-#else
-		"Tutorials",
-#endif
-		QEnvironment::getEnv( "QTDIR" ) + "\\tutorial" );
-	} else {
-#if defined(QSA)
-	    tutorialsName = shell.createFolder( foldersPage->folderPath->text() + "\\Qt Tutorials", common );
-#else
-	    tutorialsName = shell.createFolder( foldersPage->folderPath->text() + "\\Tutorials", common );
-#endif
-	    installIcons( tutorialsName, QEnvironment::getEnv( "QTDIR" ) + "\\tutorial", common );
-	}
-    }
-    if( optionsPage->installExamples->isChecked() ) {
-	if( qWinVersion() & WV_DOS_based ) {
-	    shell.createShortcut( dirName, common,
-#if defined(QSA)
-		"Qt Examples",
-#else
-		"Examples",
-#endif
-		QEnvironment::getEnv( "QTDIR" ) + "\\examples" );
-	} else {
-#if defined(QSA)
-	    examplesName = shell.createFolder( foldersPage->folderPath->text() + "\\Qt Examples", common );
-#else
-	    examplesName = shell.createFolder( foldersPage->folderPath->text() + "\\Examples", common );
-#endif
-	    installIcons( examplesName, QEnvironment::getEnv( "QTDIR" ) + "\\examples", common );
-	}
-    }
-#endif
-#if defined(QSA)
-#endif
-    buildPage->compileProgress->setProgress( buildPage->compileProgress->totalSteps() );
-    setNextEnabled( buildPage, true );
-    logOutput( "The build was successful", true );
-}
-
-void SetupWizardImpl::makeDone()
-{
-    makeDone( !make.normalExit() || make.exitStatus() );
-}
-
-void SetupWizardImpl::makeDone( bool error )
-{
-    if( error ) {
-	if (!backButton()->isEnabled()) {
-	    logOutput( "The build process failed!\n" );
-	    emit wizardPageFailed( indexOf(currentPage()) );
-	    QMessageBox::critical( this, "Error", "The build process failed!\nSee the log for details." );
-	    buildPage->restartBuild->setText( "Restart compile" );
-	    backButton()->setEnabled(true);
-	}
-	setAppropriate( progressPage, false );
-#if defined(QSA)
-    } else if ( make.workingDirectory() == QEnvironment::getEnv( "QTDIR" ) ) {
-	QStringList args;
-	args << globalInformation.text(GlobalInformation::MakeTool);
-	args << "sub-examples";
-
-	make.setWorkingDirectory( optionsPageQsa->installPath->text() );
-	make.setArguments( args );
-
-	if( !make.start() ) {
-	    logOutput( "Could not start make process.\n"
-		       "Make sure that your compiler tools are installed\n"
-		       "and registered correctly in your PATH environment." );
-	    emit wizardPageFailed( indexOf(currentPage()) );
-	    backButton()->setEnabled( true );
-	}
-#endif
-    } else {
-	// We still have some more items to do in order to finish all the
-	// integration stuff.
-	if ( !globalInformation.reconfig() ) {
-	    logOutput( "Doing the final integration steps..." );
-	    assistantDone();
-	} else {
-	    setNextEnabled( buildPage, true );
-	    logOutput( "The build was successful", true );
-	}
-	buildPage->restartBuild->setText( "Success" );
-	buildPage->restartBuild->setEnabled( false );
-    }
-}
-
-void SetupWizardImpl::configDone()
-{
-    QStringList args;
-
-    if( globalInformation.reconfig() && !configPage->rebuildInstallation->isChecked() )
-	showPage( finishPage );
-
-#if !defined(EVAL) && !defined(EDU) && !defined(NON_COMMERCIAL)
-    if( !configure.normalExit() || configure.exitStatus() ) {
-	logOutput( "The configure process failed.\n" );
-	emit wizardPageFailed( indexOf(currentPage()) );
-	buildPage->restartBuild->setText( "Restart configure" );
-	setAppropriate( progressPage, false );
-	backButton()->setEnabled(true);
-    } else
-#endif
-    {
-	args << globalInformation.text(GlobalInformation::MakeTool);
-#if !defined(EVAL) && !defined(EDU) && !defined(NON_COMMERCIAL)
-	args << "sub-src";
-	args << "sub-plugins";
-	if ( optionsPage ) {
-	    if ( optionsPage->installTools->isChecked() )
-		args << "sub-tools";
-	    if ( optionsPage->installTutorials->isChecked() )
-		args << "sub-tutorial";
-	    if ( optionsPage->installExamples->isChecked() )
-		args << "sub-examples";
-	    if ( optionsPage->installExtensions->isChecked() )
-		args << "sub-extensions";
-	} else if (globalInformation.reconfig()) {
-	    args << "sub-tools"; // We want to make sure it rebuilds uic etc
-	}
-#elif defined(Q_OS_WIN32)
-	if ( optionsPage ) {
-	    if ( optionsPage->installTutorials->isChecked() )
-		args << "sub-tutorial";
-	    if ( optionsPage->installExamples->isChecked() )
-		args << "sub-examples";
-#if !defined(NON_COMMERCIAL)
-	    if ( optionsPage->installExtensions->isChecked() )
-		args << "sub-extensions";
-#endif
-	}
-	if ( args.count() == 1 ) {
-	    make.setWorkingDirectory( QEnvironment::getEnv( "QTDIR" ) );
-	    makeDone( false );
-	    return;
-	}
-#endif
-	if ( globalInformation.sysId() == GlobalInformation::MinGW ) {
-	    args << "-fMakefile.win32-g++";
-	}
-
-	make.setWorkingDirectory( QEnvironment::getEnv( "QTDIR" ) );
-	make.setArguments( args );
-
-	if( !make.start() ) {
-	    logOutput( "Could not start make process.\n"
-		       "Make sure that your compiler tools are installed\n"
-		       "and registered correctly in your PATH environment." );
-	    emit wizardPageFailed( indexOf(currentPage()) );
-	    backButton()->setEnabled( true );
-	} else {
-	    buildPage->restartBuild->setText( "Stop compilation" );
-	}
-    }
-}
-
-void SetupWizardImpl::restartBuild()
-{
-    if ( configure.isRunning() ||
-       (!configure.isRunning() && (!configure.normalExit() || configure.exitStatus())) ) {
-	if ( configure.isRunning() ) {	// Stop configure
-	    configure.kill();
-	    buildPage->restartBuild->setText( "Restart configure" );
-	    logOutput( "\n*** Configure stopped by user...\n" );
-	    backButton()->setEnabled( true );
-	} else {			// Restart configure
-	    emit wizardPageShowed( indexOf(currentPage()) );
-	    backButton()->setEnabled( false );
-	    cleanDone();
-	    buildPage->restartBuild->setText( "Stop configure" );
-	    logOutput( "\n*** Configure restarted by user...\n" );
-	}
-    } else if ( make.isRunning() ||
-	      (!make.isRunning() && (!make.normalExit() || make.exitStatus())) ) {
-	if ( make.isRunning() ) {	// Stop compile
-	    buildPage->restartBuild->setText( "Restart compile" );
-	    logOutput( "\n*** Compilation stopped by user...\n" );
-	    backButton()->setEnabled( true );
-	    make.kill();
-	} else {			// Restart compile
-	    wizardPageShowed( indexOf(currentPage()) );
-	    backButton()->setEnabled( false );
-	    configDone();
-	    buildPage->restartBuild->setText( "Stop compile" );
-	    logOutput( "\n*** Compilation restarted by user...\n" );
-	}
-    }
-}
-
-void SetupWizardImpl::saveSettings()
-{
-#if !defined(EVAL) && !defined(EDU) && !defined(NON_COMMERCIAL)
-    QApplication::setOverrideCursor( Qt::waitCursor );
-    saveSet( configPage->configList );
-    saveSet( configPage->advancedList );
-    QApplication::restoreOverrideCursor();
-#endif
-}
-
-void SetupWizardImpl::saveSet( QListView* list )
-{
-    QSettings settings;
-    settings.writeEntry( "/Trolltech/Qt/ResetDefaults", "FALSE" );
-
-    QListViewItemIterator it( list );
-    while ( it.current() ) {
-	QListViewItem *itm = it.current();
-	++it;
-	if ( itm->rtti() != CheckListItem::RTTI )
-	    continue;
-	CheckListItem *item = (CheckListItem*)itm;
-	if ( item->type() == QCheckListItem::RadioButton ) {
-	    if ( item->isOn() ) {
-		QString folder;
-		QListViewItem *pItem = item;
-		while ( (pItem = pItem->parent() ) ) {
-		    if ( folder.isEmpty() )
-			folder = pItem->text( 0 );
-		    else
-			folder = pItem->text(0) + "/" + folder;
-		}
-
-		settings.writeEntry( "/Trolltech/Qt/" + folder, item->text() );
-	    }
-	} else if ( item->type() == QCheckListItem::CheckBox ) {
-	    QStringList lst;
-	    QListViewItem *p = item->parent();
-	    if ( p )
-		--it;
-	    QString c = p->text( 0 );
-	    while ( ( itm = it.current() ) &&
-		itm->rtti() == CheckListItem::RTTI &&
-		item->type() == CheckListItem::CheckBox ) {
-		item = (CheckListItem*)itm;
-		++it;
-		if ( item->isOn() )
-		    lst << item->text( 0 );
-	    }
-	    if ( lst.count() )
-		settings.writeEntry( "/Trolltech/Qt/" + p->text(0), lst, ',' );
-	    else
-		settings.writeEntry( "/Trolltech/Qt/" + p->text(0), "Nothing selected" );
-	}
-    }
-}
-
-void SetupWizardImpl::showPage( QWidget* newPage )
-{
-    if ( currentPage() == configPage && newPage == progressPage && !verifyConfig() ) {
-	if (QMessageBox::warning( this, "Configuration with Warnings",
-			      "One or more of the selected options could not be verified by the installer.\n"
-			      "Do you want to continue?", "Yes", "No" ))
-	    return;
-    }
-
-    QWizard::showPage( newPage );
-    setInstallStep( indexOf(newPage) + 1 );
-
-    if( newPage == licensePage ) {
-	showPageLicense();
-    } else if( newPage == licenseAgreementPage ) {
-	readLicenseAgreement();
-    } else if( newPage == licenseAgreementPageQsa ) {
-	readLicenseAgreement();
-    } else if( newPage == optionsPage ) {
-	showPageOptions();
-    } else if( newPage == foldersPage ) {
-	showPageFolders();
-    } else if( newPage == configPage ) {
-	showPageConfig();
-    } else if( newPage == progressPage ) {
-	showPageProgress();
-    } else if( newPage == buildPage ) {
-	showPageBuild();
-    } else if( newPage == finishPage ) {
-	showPageFinish();
-    }
-}
-
-void SetupWizardImpl::showPageLicense()
-{
-    licenseChanged();
-}
-
-void SetupWizardImpl::showPageOptions()
-{
-    static bool done = false;
-    if (done)
-	return;
-
-    done = true;
-
-    // First make sure that the current license information is saved
-    if( !globalInformation.reconfig() )
-	writeLicense( QDir::homeDirPath() + "/.qt-license" );
-
-    // ### unsupported
-    optionsPage->installDocs->hide();
-
-    bool enterprise = licenseInfo[ "PRODUCTS" ] == "qt-enterprise";
-    optionsPage->installExtensions->setChecked( enterprise );
-    optionsPage->installExtensions->setEnabled( enterprise );
-
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-    optionsPage->installDocs->setEnabled( false );
-    optionsPage->skipBuild->setEnabled( false );
-    if ( globalInformation.sysId()==GlobalInformation::Borland ) {
-	optionsPage->sysMsvcNet->setEnabled( false );
-	optionsPage->sysMsvc->setEnabled( false );
-	optionsPage->sysBorland->setEnabled( true );
-	optionsPage->sysMinGW->setEnabled( false );
-	optionsPage->sysIntel->setEnabled( false );
-	optionsPage->sysOther->setEnabled( false );
-    } else {
-	optionsPage->sysMsvcNet->setEnabled( true );
-	optionsPage->sysMsvc->setEnabled( true );
-	optionsPage->sysBorland->setEnabled( false );
-	optionsPage->sysOther->setEnabled( false );
-	optionsPage->sysIntel->setEnabled( false );
-	optionsPage->sysMinGW->setEnabled( false );
-    }
-#  if defined(Q_OS_WIN32)
-    optionsPage->installExamples->setEnabled( true );
-    optionsPage->installTutorials->setEnabled( true );
-    optionsPage->installTools->setEnabled( false );
-#    if defined(NON_COMMERCIAL)
-    optionsPage->installExtensions->hide();
-#    else
-    optionsPage->installExtensions->setChecked( true );
-    optionsPage->installExtensions->setEnabled( true );
-#    endif
-#  else
-    optionsPage->installExamples->setEnabled( false );
-    optionsPage->installTutorials->setEnabled( false );
-    optionsPage->installExtensions->setChecked( false );
-    optionsPage->installExtensions->setEnabled( false );
-#  endif
-#else
-#  if defined(Q_OS_WIN32)
-    // No need to offer the option of skipping the build on 9x, it's skipped anyway
-    if ( qWinVersion() & WV_DOS_based )
-	optionsPage->skipBuild->setEnabled( false );
-#  endif
-#endif
-
-    // trigger environment test
-    clickedSystem(globalInformation.sysId());
-}
-
-void SetupWizardImpl::showPageFolders()
-{
-    QString ideName = globalInformation.text(GlobalInformation::IDE);
-    foldersPage->devSysLabel->setText( ideName + " path");
-    foldersPage->devSysLabel->setShown(!ideName.isEmpty());
-    foldersPage->devSysPath->setShown(!ideName.isEmpty());
-    foldersPage->devSysPathButton->setShown(!ideName.isEmpty());
-#if defined(Q_OS_WIN32)
-    if( globalInformation.sysId() == GlobalInformation::MSVC ) {
-	QString devPath = QEnvironment::getRegistryString( "Software\\Microsoft\\VisualStudio\\6.0\\Setup\\Microsoft Visual Studio", "ProductDir", QEnvironment::LocalMachine );
-	if ( devPath.isEmpty() ) {
-	    // fallback for Windows 9x
-	    QDir msdevDir( QEnvironment::getEnv("MSDEVDIR") );
-	    msdevDir.cdUp();
-	    msdevDir.cdUp();
-	    devPath = QDir::toNativeSeparators( msdevDir.absPath() );
-	}
-	foldersPage->devSysPath->setText( devPath );
-    } else if ( globalInformation.sysId() == GlobalInformation::MSVCNET ) {
-	QString devPath = QEnvironment::getRegistryString( "Software\\Microsoft\\VisualStudio\\7.1\\Setup\\VS", "ProductDir", QEnvironment::LocalMachine );
-	if ( !devPath.length() )
-	    devPath = QEnvironment::getRegistryString( "Software\\Microsoft\\VisualStudio\\7.0\\Setup\\VS", "ProductDir", QEnvironment::LocalMachine );
-	foldersPage->devSysPath->setText( devPath );
-    }
-#endif
-}
-
-void SetupWizardImpl::showPageProgress()
-{
-    saveSettings();
-    int totalSize = 0;
-    QFileInfo fi;
-    totalRead = 0;
-    bool copySuccessful = true;
-
-    if( !filesCopied ) {
-	createDir( optionsPage->installPath->text() );
-	if (optionsPageQsa)
-	    createDir( optionsPageQsa->installPath->text() );
-	progressPage->filesDisplay->append( "Installing files...\n" );
-
-	// install the right LICENSE file
-	QDir installDir( optionsPage->installPath->text() );
-	QFile licenseFile( installDir.filePath( LICENSE_DEST ) );
-	if ( licenseFile.open( IO_WriteOnly ) ) {
-	    ResourceLoader *rcLoader;
-#if defined(EVAL) || defined(EDU)
-	    rcLoader = new ResourceLoader( "LICENSE" );
-#elif defined(NON_COMMERCIAL)
-	    if ( licenseAgreementPage->countryCombo->currentItem() == 0 )
-		rcLoader = new ResourceLoader( "LICENSE-US" );
-	    else
-		rcLoader = new ResourceLoader( "LICENSE" );
-#else
-	    if ( usLicense ) {
-		rcLoader = new ResourceLoader( "LICENSE-US" );
-	    } else {
-		rcLoader = new ResourceLoader( "LICENSE" );
-	    }
-#endif
-	    if ( rcLoader->isValid() ) {
-		licenseFile.writeBlock( rcLoader->data() );
-	    } else {
-		emit wizardPageFailed( indexOf(currentPage()) );
-		QMessageBox::critical( this, tr("Package corrupted"),
-			tr("Could not find the LICENSE file in the package.\nThe package might be corrupted.") );
-	    }
-	    delete rcLoader;
-	    licenseFile.close();
-	} else {
-	    // ### error handling -- we could not write the LICENSE file
-	}
-#if defined(QSA)
-	QDir installDirQsa( optionsPageQsa->installPath->text() );
-	QFile licenseFileQsa( installDirQsa.filePath( LICENSE_DEST ) );
-	if ( licenseFileQsa.open( IO_WriteOnly ) ) {
-	    ResourceLoader *rcLoader;
-	    rcLoader = new ResourceLoader( "LICENSE_QSA" );
-	    if ( rcLoader->isValid() ) {
-		licenseFileQsa.writeBlock( rcLoader->data() );
-	    } else {
-		emit wizardPageFailed( indexOf(currentPage()) );
-		QMessageBox::critical( this, tr("Package corrupted"),
-			tr("Could not find the LICENSE file in the package.\nThe package might be corrupted.") );
-	    }
-	    delete rcLoader;
-	    licenseFileQsa.close();
-	} else {
-	    // ### error handling -- we could not write the LICENSE file
-	}
-#endif
-
-	// Install the files -- use different fallbacks if one method failed.
-	QArchive ar;
-	QString licenseKey;
-#if !defined(EVAL_CD) && !defined(NON_COMMERCIAL)
-	licenseKey = licensePage->key->text();
-#endif
-	ar.setVerbosity( QArchive::Destination | QArchive::Verbose | QArchive::Progress );
-	connect( &ar, SIGNAL( operationFeedback( const QString& ) ), this, SLOT( archiveMsg( const QString& ) ) );
-	connect( &ar, SIGNAL( operationFeedback( int ) ), progressPage->operationProgress, SLOT( setProgress( int ) ) );
-	// First, try to find qt.arq as a binary resource to the file.
-	ResourceLoader rcLoader( "QT_ARQ", 500 );
-	if ( rcLoader.isValid() ) {
-	    progressPage->operationProgress->setTotalSteps( rcLoader.data().count() );
-	    QDataStream ds( rcLoader.data(), IO_ReadOnly );
-	    ar.readArchive( &ds, optionsPage->installPath->text(), licenseKey );
-	} else {
-	    // If the resource could not be loaded or is smaller than 500
-	    // bytes, we have the dummy qt.arq: try to find and install
-	    // from qt.arq in the current directory instead.
-	    QString archiveName = "qt.arq";
-#if defined(Q_OS_MAC)
-	    QString appDir = qApp->argv()[0];
-	    int truncpos = appDir.findRev( "/Contents/MacOS/" );
-	    if (truncpos != -1)
-	    appDir.truncate( truncpos );
-	    archiveName  = appDir + "/Contents/Qt/qtmac.arq";
-#endif
-	    fi.setFile( archiveName );
-	    if( fi.exists() )
-		totalSize = fi.size();
-	    progressPage->operationProgress->setTotalSteps( totalSize );
-
-	    ar.setPath( archiveName );
-	    if( ar.open( IO_ReadOnly ) )  {
-		ar.readArchive( optionsPage->installPath->text(), licenseKey );
-	    } else {
-		// We were not able to find any qt.arq -- so assume we have
-		// the old fashioned zip archive and simply copy the files
-		// instead.
-		progressPage->operationProgress->setTotalSteps( FILESTOCOPY );
-		copySuccessful = copyFiles( QDir::currentDirPath(), optionsPage->installPath->text(), true );
-
-		/*These lines are only to be used when changing the filecount estimate
-		  QString tmp( "%1" );
-		  tmp = tmp.arg( totalFiles );
-		  QMessageBox::information( this, tmp, tmp );
-		 */
-		progressPage->operationProgress->setProgress( FILESTOCOPY );
-	    }
-	}
-
-#if defined(QSA)
-	QArchive arQsa;
-	arQsa.setVerbosity( QArchive::Destination | QArchive::Verbose | QArchive::Progress );
-	connect( &arQsa, SIGNAL( operationFeedback( const QString& ) ), this, SLOT( archiveMsg( const QString& ) ) );
-	connect( &arQsa, SIGNAL( operationFeedback( int ) ), progressPage->operationProgress, SLOT( setProgress( int ) ) );
-	ResourceLoader rcLoaderQsa( "QSA_ARQ", 500 );
-	if ( rcLoaderQsa.isValid() ) {
-	    progressPage->operationProgress->setTotalSteps( rcLoaderQsa.data().count() );
-	    QDataStream ds( rcLoaderQsa.data(), IO_ReadOnly );
-	    arQsa.readArchive( &ds, optionsPageQsa->installPath->text(), licenseKey );
-	} else {
-	    // ### error handling
-	}
-#endif
-	filesCopied = copySuccessful;
-
-	timeCounter = 30;
-	if( copySuccessful ) {
-	    QDir installDir( optionsPage->installPath->text() );
-#if defined(Q_OS_WIN32)
-	    QDir windowsFolderDir( shell.windowsFolderName );
-#  if !defined(EVAL) && !defined(EDU) && !defined(NON_COMMERCIAL)
-	    {
-		// move $QTDIR/install.exe to $QTDIR/bin/install.exe
-		// This is done because install.exe is also used to reconfigure Qt
-		// (and this expects install.exe in bin). We can't move install.exe
-		// to bin in first place, since for the snapshots, we don't have
-		// the .arq archives.
-		QString inFile( installDir.filePath("install.exe") );
-		copyFile(inFile, installDir.filePath("bin/install.exe"));
-		QFile::remove(inFile);
-	    }
-#  endif
-	    {
-		// move the uninstaller to the Windows directory
-		// This is necessary since the uninstaller deletes all files in
-		// the installation directory (and therefore can't delete
-		// itself).
-		QString inFile( installDir.filePath("bin/quninstall.exe") );
-		copyFile(inFile, windowsFolderDir.filePath("quninstall.exe"));
-		QFile::remove(inFile);
-	    }
-#endif
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-	    QStringList::Iterator it;
-	    QDir lib( optionsPage->installPath->text() );
-	    lib.cd( "lib" );
-#  if !defined(EVAL_CD)
-	    // patch qt*.dll
-#	if !defined(Q_OS_MAC)
-	    QStringList qtDlls = lib.entryList( "qt*.dll" );
-#	else
-	    QStringList qtDlls = lib.entryList( "libqt-mt-eval.dylib" );
-#	endif
-	    if ( qtDlls.count() == 0 ) {
-		copySuccessful = false;
-		QMessageBox::critical( this,
-			tr( "Error patching Qt library" ),
-#    if defined(EVAL)
-			tr( "Could not patch the Qt library with the evaluation\n"
-			    "license information - no Qt DLL was found." )
-#    elif defined(EDU)
-			tr( "Could not patch the Qt library with the educational\n"
-			    "edition license information - no Qt DLL was found." )
-#    else
-			tr( "Could not patch the Qt library the installation\n"
-			    "path information - no Qt DLL was found." )
-#    endif
-			);
-	    }
-	    for ( it=qtDlls.begin(); it!=qtDlls.end(); ++it ) {
-		//### add serial number etc. to log
-		logFiles( tr("Patching the Qt library %1.").arg(*it) );
-		int ret = trDoIt( lib.absFilePath(*it),
-#    if defined(EVAL)
-			licensePage->evalName->text().latin1(),
-			licensePage->evalCompany->text().latin1(),
-			licensePage->serialNumber->text().latin1(),
-#    elif defined(EDU)
-			"",
-			licensePage->university->text().latin1(),
-			licensePage->serialNumber->text().latin1(),
-#    endif
-			installDir.absPath()
-			);
-		if ( ret != 0 ) {
-		    copySuccessful = false;
-		    QMessageBox::critical( this,
-			    tr( "Error patching Qt library" ),
-#    if defined(EVAL)
-			    tr( "Could not patch the Qt library with the evaluation\n"
-				"license information. You will not be able to execute\n"
-				"any program linked against %1. Error %2" ).arg( *it ).arg(ret)
-#    elif defined(EDU)
-			    tr( "Could not patch the Qt library with the educational\n"
-				"edition license information. You will not be able to\n"
-				"execute any program linked against %1." ).arg( *it )
-#    else
-			    tr( "Could not patch the Qt library with the installation\n"
-				"path information. You will not be able to execute\n"
-				"some programs linked against %1." ).arg( *it )
-#    endif
-			    );
-		}
-	    }
-#  endif
-#  if !defined(Q_OS_MAC)
-	    // copy lib/*.dll bin/
-	    QStringList dlls = lib.entryList( "*.dll" );
-	    for ( it=dlls.begin(); it!=dlls.end(); ++it ) {
-		copyFile( lib.absFilePath(*it), QDir::cleanDirPath(lib.absFilePath("../bin/"+*it)) );
-	    }
-	    // delete the non-wanted database drivers
-	    QDir plugins( optionsPage->installPath->text() );
-	    plugins.cd( "plugins" );
-	    plugins.cd( "sqldrivers" );
-	    QDir bin( optionsPage->installPath->text() );
-	    bin.cd( "bin" );
-#if defined(NON_COMMERCIAL)
-	    if ( sqlitePluginInstall && !sqlitePluginInstall->isOn() ) {
-		plugins.remove( "qsqlite.dll" );
-	    }
-#else
-	    if ( mysqlPluginInstall && !mysqlPluginInstall->isOn() ) {
-		plugins.remove( "qsqlmysql.dll" );
-		bin.remove( "libmySQL.dll" );
-	    }
-	    if ( ociPluginInstall && !ociPluginInstall->isOn() ) {
-		plugins.remove( "qsqloci.dll" );
-	    }
-	    if ( odbcPluginInstall && !odbcPluginInstall->isOn() ) {
-		plugins.remove( "qsqlodbc.dll" );
-	    }
-	    if ( psqlPluginInstall && !psqlPluginInstall->isOn() ) {
-		plugins.remove( "qsqlpsql.dll" );
-		bin.remove( "libpq.dll" );
-	    }
-	    if ( tdsPluginInstall && !tdsPluginInstall->isOn() ) {
-		plugins.remove( "qsqltds.dll" );
-	    }
-	    if ( db2PluginInstall && !db2PluginInstall->isOn() ) {
-		plugins.remove( "qsqldb2.dll" );
-	    }
-#endif
-	    // patch the .qmake.cache with the correct paths
-	    QFile cacheFile( installDir.filePath(".qmake.cache") );
-	    if ( cacheFile.open( IO_ReadOnly | IO_Translate ) ) {
-		QTextStream tsIn( &cacheFile );
-		QString cache = tsIn.read();
-		cacheFile.close();
-		if ( cacheFile.open( IO_WriteOnly | IO_Translate ) ) {
-		    QTextStream tsOut( &cacheFile );
-		    if ( globalInformation.sysId() == GlobalInformation::Borland )
-			tsOut << cache.replace( "C:/QtEvaluation/qtborland", installDir.absPath() );
-		    else
-			tsOut << cache.replace( "C:/QtEvaluation/qtmsvc", installDir.absPath() );
-		    cacheFile.close();
-		}
-	    }
-#  endif
-#endif
-	    logFiles( tr("All files have been installed.\n"
-			 "This log has been saved to the installation directory.\n"
-			 "The build will start automatically in 30 seconds."), true );
-	} else {
-	    logFiles( tr("One or more errors occurred during file installation.\n"
-			 "Please review the log and try to amend the situation.\n"), true );
-	}
-    }
-    if ( copySuccessful ) {
-#if defined(Q_OS_WIN32)
-	/*
-	** Then record the installation in the registry, and set up the uninstallation
-	*/
-	QStringList uninstaller;
-	uninstaller << ( QString("\"") + shell.windowsFolderName + "\\quninstall.exe" + QString("\"") );
-	uninstaller << optionsPage->installPath->text();
-
-	if( foldersPage->folderGroups->currentItem() == 0 )
-	    uninstaller << ( QString("\"") + shell.commonProgramsFolderName + QString("\\") + foldersPage->folderPath->text() + QString("\"") );
-	else
-	    uninstaller << ( QString("\"") + shell.localProgramsFolderName + QString("\\") + foldersPage->folderPath->text() + QString("\"") );
-
-	uninstaller << ( QString("\"") + globalInformation.qtVersionStr() + QString("\"") );
-
-	QEnvironment::recordUninstall( QString( "Qt " ) + globalInformation.qtVersionStr(), uninstaller.join( " " ) );
-#endif
-	autoContTimer.start( 1000 );
-    }
-    else
-	emit wizardPageFailed( indexOf(currentPage()) );
-    setNextEnabled( progressPage, copySuccessful );
-}
-
-void SetupWizardImpl::showPageFinish()
-{
-    autoContTimer.stop();
-    nextButton()->setText( "Next >" );
-    QString finishMsg;
-    if ( ( ( !globalInformation.reconfig() && !optionsPage->skipBuild->isChecked() )
-	    || ( globalInformation.reconfig() && configPage->rebuildInstallation->isChecked() ) )
-#if defined(Q_OS_WIN32)
-    && qWinVersion() & WV_NT_based ) {
-#else
-    ) {
-#endif
-	if( globalInformation.reconfig() ) {
-	    finishMsg = "Qt has been reconfigured and rebuilt, and is ready for use.";
-	} else {
-#if defined(Q_OS_MAC)
-            finishMsg = QString( "Qt has been installed to " ) + optionsPage->installPath->text() +
-                        " and is ready to use.\n\nPlease try out the developer tools in the bin folder and example "
-                        "programs in the examples folder.\n\nFor further information please consult the "
-			"README.txt file included in the installation folder.";
-#else
-	    finishMsg = QString( "Qt has been installed to %1 and is ready to use.\n"
-		        "You might have to logoff and logon for changes to the environment to have an effect.").
-			arg(optionsPage->installPath->text());
-#  if defined(QSA)
-	    finishMsg = QString( "\nQSA has been installed to " ) + optionsPageQsa->installPath->text() + " and is ready to use.";
-#  endif
-#endif
-	}
-    } else {
-	if( globalInformation.reconfig() ) {
-		finishMsg = "The new configuration has been written.\nThe library needs to be rebuilt to activate the ";
-		finishMsg += "new configuration.";
-#if defined(Q_OS_WIN32)
-                finishMsg += "To rebuild it, use the \"Build Qt ";
-		finishMsg += globalInformation.qtVersionStr();
-		finishMsg += "\" icon in the Qt program group in the start menu.";
-#endif
-	} else {
-	    finishMsg = QString( "The Qt files have been installed to " ) + optionsPage->installPath->text() + " and is ready to be compiled.\n";
-#if defined(Q_OS_WIN32)
-	    if( persistentEnv && qWinVersion() & WV_DOS_based ) {
-		finishMsg += "The environment variables needed to use Qt have been recorded into your AUTOEXEC.BAT file.\n";
-		finishMsg += "Please review this file, and take action as appropriate depending on your operating system to get them into the persistent environment. (Windows Me users, run MsConfig)\n\n";
-	    }
-#  if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-	    finishMsg += QString( "To build the examples and tutorials, use the "
-				  "\"Build the Qt Examples and Tutorials\""
-				  " icon which has been installed into your Start-Menu." );
-#  else
-	    finishMsg += QString( "To build Qt, use the "
-				  "\"Build Qt " ) + globalInformation.qtVersionStr() + "\""
-				  " icon which has been installed into your Start-Menu.";
-#  endif
-#endif
-	}
-    }
-#if defined(EVAL_CD)
-    finishMsg += "\n\n"
-		 "The Trolltech technical support service is available to "
-		 "Qt Professional and Enterprise Edition licensees. As an "
-		 "evaluation user, you can register for 30 days of evaluation "
-		 "support at\n"
-		 "http://qtsoftware.com/products/qt/evaluate.html";
-#endif
-    finishPage->finishText->setText( finishMsg );
-}
-
-void SetupWizardImpl::licenseChanged()
-{
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-    int ret = trCheckIt(
-#  if defined(EVAL)
-	    licensePage->evalName->text().latin1(),
-	    licensePage->evalCompany->text().latin1(),
-	    licensePage->serialNumber->text().latin1()
-#  elif defined(EDU)
-	    "",
-	    licensePage->university->text().latin1(),
-	    licensePage->serialNumber->text().latin1()
-#  else
-	    "",
-	    "",
-	    ""
-#  endif
-	    );
-
-    if ( ret == 0 )
-	setNextEnabled( licensePage, true );
-    else
-	setNextEnabled( licensePage, false );
-    return;
-#else
-    QDate date;
-    uint features;
-    uint testFeature;
-    QString platformString;
-    QString licenseKey = licensePage->key->text().stripWhiteSpace();
-    if ( licenseKey.length() != 14 ) {
-	goto rejectLicense;
-    }
-    features = featuresForKey( licenseKey.upper() );
-    date = decodedExpiryDate( licenseKey.mid(9) );
-    if ( !date.isValid() ) {
-	goto rejectLicense;
-    }
-#  if defined(Q_OS_MAC)
-    testFeature = Feature_Mac;
-    platformString = "Mac OS X";
-#  elif defined(Q_OS_WIN32)
-    testFeature = Feature_Windows;
-    platformString = "Windows";
-#  else
-    testFeature = Feature_Unix;
-    platformString = "UNIX";
-#    ifdef Q_CC_GNU
-#    warning "What about Qtopia Core?"
-#    endif
-#  endif
-    if ( !(features&testFeature) && currentPage() == licensePage ) {
-	if ( features & (Feature_Unix|Feature_Windows|Feature_Mac|Feature_Embedded) ) {
-	    int ret = QMessageBox::information( this,
-		    tr("No %1 license").arg(platformString),
-		    tr("You are not licensed for the %1 platform.\n"
-		       "Please contact sales@trolltech.com to upgrade\n"
-		       "your license to include the Windows platform.").arg(platformString),
-		    tr("Try again"),
-		    tr("Abort installation")
-		    );
-	    if ( ret == 1 ) {
-		QApplication::exit();
-	    } else {
-		licensePage->key->setText( "" );
-	    }
-	}
-	goto rejectLicense;
-    }
-    if ( date < QDate::currentDate() && currentPage() == licensePage ) {
-	static bool alreadyShown = false;
-	if ( !alreadyShown ) {
-	    QMessageBox::warning( this,
-		    tr("Support and upgrade period has expired"),
-		    tr("Your support and upgrade period has expired.\n"
-			"\n"
-			"You may continue to use your last licensed release\n"
-			"of Qt under the terms of your existing license\n"
-			"agreement. But you are not entitled to technical\n"
-			"support, nor are you entitled to use any more recent\n"
-			"Qt releases.\n"
-			"\n"
-			"Please contact sales@trolltech.com to renew your\n"
-			"support and upgrades for this license.")
-		    );
-	    alreadyShown = true;
-	}
-    }
-    if ( features & Feature_US )
-	usLicense = true;
-    else
-	usLicense = false;
-
-    licensePage->expiryDate->setText( date.toString( Qt::ISODate ) );
-    if( features & Feature_Enterprise ) {
-	licensePage->productsString->setCurrentItem( 1 );
-	emit editionString( "Enterprise Edition" );
-    } else {
-	licensePage->productsString->setCurrentItem( 0 );
-	emit editionString( "Professional Edition" );
-    }
-    setNextEnabled( licensePage, true );
-    return;
-
-rejectLicense:
-    licensePage->expiryDate->setText( "" );
-#  if defined(Q_OS_WIN32)
-    //TODO: Is this a bug? It bus errors on MACX, ask rms.
-    // it should work -- if it doesn't this seems to be a bug in the MACX code,
-    // I guess (rms)
-    licensePage->productsString->setCurrentItem( -1 );
-#  endif
-    emit editionString( "" );
-    setNextEnabled( licensePage, false );
-    return;
-#endif
-}
-
-void SetupWizardImpl::logFiles( const QString& entry, bool close )
-{
-    if( !fileLog.isOpen() ) {
-	fileLog.setName( optionsPage->installPath->text() + QDir::separator() + "install.log" );
-	if( !fileLog.open( IO_WriteOnly | IO_Translate ) )
-	    return;
-    }
-
-#if 1
-    progressPage->filesDisplay->append(entry);
-#else
-    progressPage->filesDisplay->setText( "Installing files...\n" + entry + "\n" );
-#endif
-
-    static QTextStream outstream;
-    outstream.setDevice( &fileLog );
-    outstream << ( entry + "\n" );
-
-    if( close )
-	fileLog.close();
-}
-
-void SetupWizardImpl::logOutput( const QString& entry, bool close )
-{
-    if( !outputLog.isOpen() ) {
-	QDir installDir;
-	if ( optionsPage )
-	    installDir.setPath( optionsPage->installPath->text() );
-	else
-	    installDir.setPath( QEnvironment::getEnv( "QTDIR" ) );
-	outputLog.setName( installDir.filePath("build.log") );
-	if( !outputLog.open( IO_WriteOnly | IO_Translate ) )
-	    return;
-    }
-
-    buildPage->outputDisplay->append(entry);
-
-    static QTextStream outstream;
-    outstream.setDevice( &outputLog );
-    outstream << ( entry + "\n" );
-
-    if( close )
-	outputLog.close();
-}
-
-void SetupWizardImpl::archiveMsg( const QString& msg )
-{
-    if( msg.right( 7 ) == ".cpp..." || msg.right( 5 ) == ".c..." || msg.right( 7 ) == ".pro..." || msg.right( 6 ) == ".ui..." )
-	filesToCompile++;
-    qApp->processEvents();
-    if ( msg.startsWith("Expanding") )
-	// only show the "Expanding" entries to avoid flickering
-	logFiles( msg );
-}
-
-#ifdef Q_WS_WIN
-static HANDLE createFile( const QString &entryName, DWORD attr1, DWORD attr2 )
-{
-    QT_WA({
-    	return ::CreateFileW( entryName.ucs2(), attr1, attr2, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
-    }, {
-	return ::CreateFileA( entryName.local8Bit(), attr1, attr2, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
-    })
-}
-#endif
-
-bool SetupWizardImpl::copyFiles( const QString& sourcePath, const QString& destPath, bool topLevel )
-{
-    QDir dir( sourcePath );
-    const QFileInfoList* list = dir.entryInfoList();
-    QFileInfoListIterator it( *list );
-    QFileInfo* fi;
-    bool doCopy;
-
-    while( ( fi = it.current() ) ) {
-	if( fi->fileName()[ 0 ] != '.' ) {
-	    QString entryName = sourcePath + QDir::separator() + fi->fileName();
-	    QString targetName = destPath + QDir::separator() + fi->fileName();
-	    doCopy = true;
-	    if( fi->isDir() ) {
-		if( !dir.exists( targetName ) )
-		    createDir( targetName );
-		if( topLevel ) {
-		    if ( fi->fileName() == "doc" )
-			doCopy = optionsPage->installDocs->isChecked();
-		    else if ( fi->fileName() == "tools" )
-			doCopy = optionsPage->installTools->isChecked();
-		    else if ( fi->fileName() == "tutorial" )
-			doCopy = optionsPage->installTutorials->isChecked();
-		    else if ( fi->fileName() == "examples" )
-			doCopy = optionsPage->installExamples->isChecked();
-		}
-		if( doCopy )
-		    if( !copyFiles( entryName, targetName, false ) )
-			return false;
-	    } else {
-		if( qApp && isShown() ) {
-		    qApp->processEvents();
-		    progressPage->operationProgress->setProgress( totalFiles );
-		    logFiles( targetName );
-		} else {
-		    return false;
-		}
-		if( entryName.right( 4 ) == ".cpp" ||
-		    entryName.right( 2 ) == ".c" ||
-		    entryName.right( 4 ) == ".pro" ||
-		    entryName.right( 3 ) == ".ui" )
-		    filesToCompile++;
-		bool res = true;
-		if ( !QFile::exists( targetName ) )
-		    res = copyFile( entryName, targetName );
-#if defined(Q_OS_WIN32)
-		if ( res ) {
-		    totalFiles++;
-		    HANDLE inFile, outFile;
-		    if( inFile = createFile( entryName, GENERIC_READ, FILE_SHARE_READ ) ){
-			if( outFile = createFile( targetName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE ) ){
-			    FILETIME createTime, accessTime, writeTime;
-			    ::GetFileTime( inFile, &createTime, &accessTime, &writeTime );
-			    ::SetFileTime( outFile, &createTime, &accessTime, &writeTime );
-			    ::CloseHandle( outFile );
-			}
-			::CloseHandle( inFile );
-		    }
-		} else {
-		    QString error = QEnvironment::getLastError();
-		    logFiles( QString( "   ERROR: " ) + error + "\n" );
-		    if( QMessageBox::warning( this, "File copy error", entryName + ": " + error, "Continue", "Cancel", QString(), 0 ) )
-			return false;
-		}
-#elif defined( Q_OS_UNIX )
-		// ### TODO: keep file date the same, handle errors
-#endif
-	    }
-	}
-	++it;
-    }
-    return true;
-}
-
-void SetupWizardImpl::setInstallStep( int step )
-{
-    QString captionTxt;
-#if defined(QSA)
-    captionTxt = tr("QSA Evaluation Version Installation Wizard");
-#elif defined(EVAL)
-    captionTxt = tr("Qt Evaluation Version Installation Wizard");
-#elif defined(EDU)
-    captionTxt = tr("Qt Educational Edition Installation Wizard");
-#elif defined(NON_COMMERCIAL)
-    captionTxt = tr("Qt Non-Commercial Edition Installation Wizard");
-#else
-    if( globalInformation.reconfig() )
-	captionTxt = tr("Qt Configuration Wizard");
-    else
-	captionTxt = tr("Qt Installation Wizard");
-#endif
-    setCaption( tr("%1 - Step %2 of %3").arg( captionTxt ).arg( step ).arg( pageCount() ) );
-    emit wizardPageShowed( step-1 );
-}
-
-void SetupWizardImpl::timerFired()
-{
-    QString tmp( "Next %1 >" );
-
-    timeCounter--;
-
-    if( timeCounter )
-	nextButton()->setText( tmp.arg( timeCounter ) );
-    else {
-	next();
-	autoContTimer.stop();
-    }
-}
-
-void SetupWizardImpl::readLicense( QString filePath)
-{
-#if !defined(EVAL) && !defined(EDU) && !defined(NON_COMMERCIAL)
-    QFile licenseFile( filePath );
-
-    if( licenseFile.open( IO_ReadOnly ) ) {
-	QString buffer;
-
-	while( licenseFile.readLine( buffer, 1024 ) != -1 ) {
-	    if( buffer[ 0 ] != '#' ) {
-		QStringList components = QStringList::split( '=', buffer );
-		QStringList::Iterator it = components.begin();
-		QString keyString = (*it++).stripWhiteSpace().replace( QRegExp( QString( "\"" ) ), QString() ).upper();
-		QString value = (*it++).stripWhiteSpace().replace( QRegExp( QString( "\"" ) ), QString() );
-
-		licenseInfo[ keyString ] = value;
-	    }
-	}
-	licenseFile.close();
-
-	if ( licensePage ) {
-	    licensePage->customerID->setText( licenseInfo[ "CUSTOMERID" ] );
-	    licensePage->licenseID->setText( licenseInfo[ "LICENSEID" ] );
-	    licensePage->licenseeName->setText( licenseInfo[ "LICENSEE" ] );
-	    if( licenseInfo[ "PRODUCTS" ] == "qt-enterprise" ) {
-		licensePage->productsString->setCurrentItem( 1 );
-		emit editionString( "Enterprise Edition" );
-	    } else {
-		licensePage->productsString->setCurrentItem( 0 );
-		emit editionString( "Professional Edition" );
-	    }
-	    licensePage->expiryDate->setText( licenseInfo[ "EXPIRYDATE" ] );
-	    licensePage->key->setText( licenseInfo[ "LICENSEKEY" ] );
-	}
-    }
-#endif
-}
-
-void SetupWizardImpl::writeLicense( QString filePath )
-{
-#if !defined(EVAL) && !defined(EDU) && !defined(NON_COMMERCIAL)
-    QFile licenseFile( filePath );
-
-    if( licenseFile.open( IO_WriteOnly | IO_Translate ) ) {
-	QTextStream licStream( &licenseFile );
-
-	licenseInfo[ "CUSTOMERID" ] = licensePage->customerID->text();
-	licenseInfo[ "LICENSEID" ] = licensePage->licenseID->text();
-	licenseInfo[ "LICENSEE" ] = licensePage->licenseeName->text();
-	if( licensePage->productsString->currentItem() == 0 ) {
-	    licenseInfo[ "PRODUCTS" ] = "qt-professional";
-	    emit editionString( "Professional Edition" );
-	} else {
-	    licenseInfo[ "PRODUCTS" ] = "qt-enterprise";
-	    emit editionString( "Enterprise Edition" );
-	}
-
-	licenseInfo[ "EXPIRYDATE" ] = licensePage->expiryDate->text();
-	licenseInfo[ "LICENSEKEY" ] = licensePage->key->text();
-
-	licStream << "# Toolkit license file" << endl;
-	licStream << "CustomerID=\"" << licenseInfo[ "CUSTOMERID" ].latin1() << "\"" << endl;
-	licStream << "LicenseID=\"" << licenseInfo[ "LICENSEID" ].latin1() << "\"" << endl;
-	licStream << "Licensee=\"" << licenseInfo[ "LICENSEE" ].latin1() << "\"" << endl;
-	licStream << "Products=\"" << licenseInfo[ "PRODUCTS" ].latin1() << "\"" << endl;
-	licStream << "ExpiryDate=" << licenseInfo[ "EXPIRYDATE" ].latin1() << endl;
-	licStream << "LicenseKey=" << licenseInfo[ "LICENSEKEY" ].latin1() << endl;
-
-	licenseFile.close();
-    }
-#endif
-}
-
-void SetupWizardImpl::clickedLicenseFile()
-{
-    QString licensePath = QFileDialog::getOpenFileName( optionsPage->installPath->text(), QString(), this, NULL, "Browse for license file" );
-
-    if( !licensePath.isEmpty() )
-	readLicense( licensePath );
-
-}
-
-void SetupWizardImpl::readLicenseAgreement()
-{
-    // Intropage
-    ResourceLoader *rcLoader;
-#if defined(QSA)
-    LicenseAgreementPageImpl *lap;
-    if ( currentPage() == licenseAgreementPageQsa ) {
-	lap = licenseAgreementPageQsa;
-	rcLoader = new ResourceLoader( "LICENSE_QSA" );
-    } else {
-	lap = licenseAgreementPage;
-	rcLoader = new ResourceLoader( "LICENSE" );
-    }
-#elif defined(EVAL) || defined(EDU)
-    LicenseAgreementPageImpl *lap = licenseAgreementPage;
-    rcLoader = new ResourceLoader( "LICENSE" );
-#elif defined(NON_COMMERCIAL)
-    LicenseAgreementPageImpl *lap = licenseAgreementPage;
-    if ( lap->countryCombo->currentItem() == 0 )
-	rcLoader = new ResourceLoader( "LICENSE-US" );
-    else
-	rcLoader = new ResourceLoader( "LICENSE" );
-#else
-    LicenseAgreementPageImpl *lap = licenseAgreementPage;
-    if ( usLicense ) {
-	rcLoader = new ResourceLoader( "LICENSE-US" );
-    } else {
-	rcLoader = new ResourceLoader( "LICENSE" );
-    }
-#endif
-    if ( rcLoader->isValid() ) {
-	lap->introText->setText( rcLoader->data() );
-	lap->acceptLicense->setEnabled( true );
-    } else {
-	emit wizardPageFailed( indexOf(currentPage()) );
-	QMessageBox::critical( this, tr("Package corrupted"),
-		tr("Could not find the LICENSE file in the package.\nThe package might be corrupted.") );
-	lap->acceptLicense->setEnabled( false );
-    }
-    delete rcLoader;
-}
-
-void SetupWizardImpl::accept()
-{
-#if defined(Q_OS_WIN32)
-    if ( finishPage->showReadmeCheck->isChecked() ) {
-	QProcess proc( QString("notepad.exe") );
-#if defined(QSA)
-	QString qsaDir = optionsPageQsa->installPath->text();
-	proc.addArgument( qsaDir + "\\README" );
-#else
-	QString qtDir = QEnvironment::getEnv( "QTDIR" );
-	proc.addArgument( qtDir + "\\README" );
-#endif
-	proc.start();
-    }
-#endif
-    QDialog::accept();
-}
diff --git a/util/install/win/setupwizardimpl.h b/util/install/win/setupwizardimpl.h
deleted file mode 100644
index 1c86f74..0000000
--- a/util/install/win/setupwizardimpl.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef SETUPWIZARDIMPL_H
-#define SETUPWIZARDIMPL_H
-
-#include "pages/pages.h"
-#include "shell.h"
-
-#include <qprocess.h>
-#include <qtimer.h>
-#include <qmap.h>
-#include <qptrdict.h>
-#include <qwizard.h>
-#include <qlistview.h>
-
-class QCheckListItem;
-class QListView;
-
-class CheckListItem : public QCheckListItem
-{
-public:
-    CheckListItem(QListView *listview, const QString &text, Type = RadioButtonController);
-    CheckListItem(QCheckListItem *parent, const QString &text, Type = RadioButtonController);
-
-    void setHelpText(const QString &help, QTextView *display);
-    void setWarningText(const QString &warning, CheckListItem *conflict = 0);
-    void addRequiredFiles(const QString &file);
-    void setRequiredFileLocation(const QString &location);
-
-    void setOpen(bool on);
-    void setOn(bool on);
-    void setCritical(bool on);
-
-    int rtti() const;
-    static int RTTI;
-
-    void displayHelp();
-    bool verify() const;
-
-    void paintCell( QPainter *, const QColorGroup & cg, int column, int width, int alignment );
-
-protected:
-    bool testAndWarn();
-    void activate();
-
-private:
-    QString help_text;
-    QString warning_text;
-    QTextView *help_display;
-    QStringList required_files;    
-    QString file_location;
-    CheckListItem *conflict_with;
-    bool critical;
-};
-
-class SetupWizardImpl : public QWizard
-{
-    Q_OBJECT
-public:
-    SetupWizardImpl( QWidget* parent = 0, const char* name = NULL, bool modal = false, WindowFlags f = 0 );
-
-    void showPage( QWidget* );
-    void stopProcesses();
-
-    void optionClicked( CheckListItem * );
-
-signals:
-    void wizardPages( const QPtrList<Page>& );
-    void wizardPageShowed( int );
-    void wizardPageFailed( int );
-    void editionString( const QString& );
-
-private:
-    int totalFiles;
-    QProcess configure;
-    QProcess make;
-    QProcess cleaner;
-#if defined(QSA)
-    QProcess assistant;
-#endif
-
-    QString programsFolder;
-    QString devSysFolder;
-    QString tmpPath;
-
-    WinShell shell;
-
-    void saveSettings();
-    void saveSet( QListView* list );
-
-protected slots:
-    void accept(); // reimplemented from QDialog
-
-private slots:
-    void clickedSystem( int );
-    void sysOtherComboChanged( int ); 
-    void clickedFolderPath();
-    void clickedDevSysPath();
-    void clickedLicenseFile();
-    void cleanDone();
-    void configDone();
-    void makeDone();
-    void assistantDone();
-    void restartBuild();
-    void readConfigureOutput();
-    void readConfigureError();
-    void readCleanerOutput();
-    void readCleanerError();
-    void readMakeOutput();
-    void readMakeError();
-    void readAssistantOutput();
-    void readAssistantError();
-    void timerFired();
-    void configPageChanged();
-    void archiveMsg(const QString &);
-    void licenseChanged();
-    bool verifyConfig();
-
-private:
-    void showPageLicense();
-    void showPageOptions();
-    void showPageFolders();
-    void showPageConfig();
-    void showPageProgress();
-    void showPageBuild();
-    void showPageFinish();
-
-    void initPages();
-    void initConnections();
-
-    void fixEnvironment(const QString &var, const QString &file = QString());
-    void prepareEnvironment();
-
-    void makeDone( bool error );
-
-    void setStaticEnabled( bool se );
-    void setJpegDirect( bool jd );
-    void readLicenseAgreement();
-
-    bool copyFiles( const QString& sourcePath, const QString& destPath, bool topLevel );
-    int totalRead;
-
-    QString buildQtShortcutText;
-    bool fixedPath;
-    bool filesCopied;
-    bool persistentEnv;
-    int filesToCompile;
-    int filesCompiled;
-#if !defined(EVAL) && !defined(EDU) && !defined(NON_COMMERCIAL)
-    bool usLicense;
-#endif
-
-    QString currentOLine;
-    QString currentELine;
-
-    void updateDisplay(const QString &input, QString &output);
-#if defined(Q_OS_WIN32)
-    void installIcons( const QString& iconFolder, const QString& dirName, bool common );
-#endif
-    void doIDEIntegration();
-    void doStartMenuIntegration();
-    void logFiles( const QString& entry, bool close = false );
-    void logOutput( const QString& entry, bool close = false );
-
-    void setInstallStep( int step );
-    void readLicense( QString filePath );
-    void writeLicense( QString filePath );
-
-    QFile fileLog;
-    QFile outputLog;
-    QMap<QString,QString> licenseInfo;
-    QTimer autoContTimer;
-    int timeCounter;
-    QStringList allModules;
-
-    CheckListItem *accOn, *accOff;
-    CheckListItem *bigCodecsOn, *bigCodecsOff;
-    CheckListItem *tabletOn, *tabletOff;
-    CheckListItem *advancedSTL, *advancedExceptions, *advancedRTTI;
-
-    CheckListItem /* *mngPresent, */ *mngDirect, *mngPlugin, *mngOff;
-    CheckListItem /* *jpegPresent, */ *jpegDirect, *jpegPlugin, *jpegOff;
-    CheckListItem /* *pngPresent, */ *pngDirect, *pngPlugin, *pngOff;
-    CheckListItem *gifDirect, *gifOff;
-
-    CheckListItem *sgiDirect, *sgiPlugin, *sgiOff;
-    CheckListItem *cdeDirect, *cdePlugin, *cdeOff;
-    CheckListItem *motifplusDirect, *motifplusPlugin, *motifplusOff;
-    CheckListItem *platinumDirect, *platinumPlugin, *platinumOff;
-    CheckListItem *motifDirect, *motifPlugin, *motifOff;
-    CheckListItem *xpDirect, *xpPlugin, *xpOff;
-
-    CheckListItem *mysqlDirect, *mysqlPlugin, *mysqlOff;
-    CheckListItem *ociDirect, *ociPlugin, *ociOff;
-    CheckListItem *odbcDirect, *odbcPlugin, *odbcOff;
-    CheckListItem *psqlDirect, *psqlPlugin, *psqlOff;
-    CheckListItem *tdsDirect, *tdsPlugin, *tdsOff;
-    CheckListItem *db2Direct, *db2Plugin, *db2Off;
-    CheckListItem *sqliteDirect, *sqlitePlugin, *sqliteOff;
-    CheckListItem *ibaseDirect, *ibasePlugin, *ibaseOff;
-    
-    CheckListItem *zlibDirect, *zlibSystem, *zlibOff;
-
-    CheckListItem *dspOff, *dspOn;
-    CheckListItem *vcprojOff, *vcprojOn;
-
-    CheckListItem *staticItem;
-
-#if defined(EVAL) || defined(EDU)
-    CheckListItem *mysqlPluginInstall;
-    CheckListItem *ociPluginInstall;
-    CheckListItem *odbcPluginInstall;
-    CheckListItem *psqlPluginInstall;
-    CheckListItem *tdsPluginInstall;
-    CheckListItem *db2PluginInstall;
-    CheckListItem *sqlitePluginInstall;
-    CheckListItem *ibasePluginInstall;
-#elif defined(NON_COMMERCIAL)
-    CheckListItem *sqlitePluginInstall;
-#endif
-
-    // wizard pages
-    LicenseAgreementPageImpl	*licenseAgreementPage;
-    LicenseAgreementPageImpl	*licenseAgreementPageQsa;
-    LicensePageImpl		*licensePage;
-    OptionsPageImpl		*optionsPage;
-    OptionsPageImpl		*optionsPageQsa;
-    FoldersPageImpl		*foldersPage;
-    ConfigPageImpl		*configPage;
-    ProgressPageImpl		*progressPage;
-    BuildPageImpl		*buildPage;
-    FinishPageImpl		*finishPage;
-#if defined(Q_OS_WIN32)
-    WinIntroPageImpl		*winIntroPage;
-#endif
-};
-
-#endif
diff --git a/util/install/win/setupwizardimpl_config.cpp b/util/install/win/setupwizardimpl_config.cpp
deleted file mode 100644
index a5959fb..0000000
--- a/util/install/win/setupwizardimpl_config.cpp
+++ /dev/null
@@ -1,1564 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "setupwizardimpl.h"
-#include "environment.h"
-#include <qfiledialog.h>
-#include <qlineedit.h>
-#include <qlabel.h>
-#include <qprogressbar.h>
-#include <qtextview.h>
-#include <qmultilineedit.h>
-#include <qbuttongroup.h>
-#include <qsettings.h>
-#include <qlistview.h>
-#include <qlistbox.h>
-#include <qapplication.h>
-#include <qcheckbox.h>
-#include <qtextstream.h>
-#include <qpushbutton.h>
-#include <qcombobox.h>
-#include <qmessagebox.h>
-#include <qregexp.h>
-#include <qtabwidget.h>
-#include <qarchive.h>
-#include <qvalidator.h>
-#include <qdatetime.h>
-#include <qpainter.h>
-
-bool findFile(const QString &);
-
-CheckListItem::CheckListItem(QListView *listview, const QString &text, Type type)
-: QCheckListItem(listview, text, type), help_display(0), conflict_with(0), critical(false)
-{
-    if (type == RadioButtonController || type == CheckBoxController)
-	setOpen(true);
-}
-
-CheckListItem::CheckListItem(QCheckListItem *parent, const QString &text, Type type)
-: QCheckListItem(parent, text, type), help_display(0), conflict_with(0), critical(false)
-{
-    if (type == RadioButtonController || type == CheckBoxController)
-	setOpen(true);
-}
-
-int CheckListItem::RTTI = 666;
-
-int CheckListItem::rtti() const
-{
-    return RTTI;
-}
-
-void CheckListItem::setHelpText(const QString &help, QTextView *display)
-{
-    help_text = help;
-    help_display = display;
-}
-
-void CheckListItem::setWarningText(const QString &warning, CheckListItem *conflict)
-{
-    conflict_with = conflict;
-    warning_text = warning;
-}
-
-void CheckListItem::addRequiredFiles(const QString &file)
-{
-    QStringList files = QStringList::split(",", file);
-    for (QStringList::ConstIterator it = files.begin(); it != files.end(); ++it) {
-	QString f(*it);
-	required_files << f;
-	if (!findFile(f)) {
-	    if (type() == QCheckListItem::RadioButtonController
-		|| type() == QCheckListItem::CheckBoxController) {
-		setOpen(false);
-	    } else {
-		setOn(false);
-		setEnabled(false);
-	    }
-	}
-    }
-}
-
-void CheckListItem::setRequiredFileLocation(const QString &location)
-{
-    file_location = location;
-}
-
-bool CheckListItem::verify() const
-{
-    if (text(0) == "Off")
-	return true;
-
-    if (!required_files.count()) {
-	if (parent() && parent()->rtti() == RTTI)
-	    return ((CheckListItem*)parent())->verify();
-	return true;
-    }
-
-    QStringList::ConstIterator it;
-    for (it = required_files.begin(); it != required_files.end(); ++it) {
-	QString file(*it);
-	if (!findFile(file))
-	    return false;
-    }
-    return true;
-}
-
-bool CheckListItem::testAndWarn()
-{
-    if (!warning_text.isEmpty()) {
-	if (!conflict_with || conflict_with->isOn()) {
-	    int r = QMessageBox::warning(listView()->window(), "Warning",
-			warning_text + "<br>Select anyway?", "Yes", "No" );
-	    return r == 0;
-	} else {
-	    return true;
-	}
-    }
-
-    QStringList files(required_files);
-    if (!required_files.count() && text(0) != "Off") {
-	if (parent() && parent()->rtti() == RTTI)
-	    return ((CheckListItem*)parent())->testAndWarn();
-	return true;
-    }
-
-    if (!verify()) {
-	QString message = QString("<p>The option '%1' is <b>not verified</b> by the installer. One or more of the following "
-		    "files could not be located on the system:"
-		    "<p>%2"
-		    "<p>Continuing with this option selected might <b>break the installation</b> process.")
-		    .arg(text(0)).arg(required_files.join(", "));
-	if (!file_location.isEmpty()) {
-	    message += QString("<p>The requested files are %1 and need to be installed "
-		               "in the INCLUDE, PATH and LIBS environment as appropriate.").arg(file_location);
-	}
-
-	int r = QMessageBox::warning(listView()->window(), "Option not Verified",
-		    message + "<p>Select anyway?", "Yes", "No" );
-	return r == 0;
-    }
-    return true;
-}
-
-void CheckListItem::displayHelp()
-{
-    if (help_display) {
-	help_display->setText(help_text);
-	return;
-    }
-    QListViewItem *p = parent();
-    if (p && p->rtti() == RTTI)
-	((CheckListItem*)p)->displayHelp();
-}
-
-void CheckListItem::setOn(bool on)
-{
-    if (on && (type() == RadioButton || type() == CheckBox) && !testAndWarn())
-	return;
-    QCheckListItem::setOn(on);
-
-    SetupWizardImpl* wizard = qobject_cast<SetupWizardImpl*>(listView()->window());
-    if (wizard && listView()->isVisible() && listView()->updatesEnabled())
-	wizard->optionClicked(this);
-}
-
-void CheckListItem::activate()
-{
-    displayHelp();
-    QCheckListItem::activate();
-}
-
-void CheckListItem::setOpen(bool on)
-{
-    if (on && listView()->isVisible()) {
-	if (!testAndWarn())
-	    return;
-	displayHelp();
-    }
-    QCheckListItem::setOpen(on);
-}
-
-void CheckListItem::setCritical(bool on)
-{
-    if (critical == on)
-	return;
-
-    critical = on;
-    repaint();
-}
-
-void CheckListItem::paintCell( QPainter *p, const QColorGroup & cg, int column, int width, int alignment )
-{
-    QColorGroup group(cg);
-    if (critical)
-	group.setColor(QColorGroup::Text, red);
-    QCheckListItem::paintCell(p, group, column, width, alignment);
-}
-
-
-
-void SetupWizardImpl::setStaticEnabled( bool se )
-{
-    bool enterprise = licenseInfo[ "PRODUCTS" ] == "qt-enterprise";
-    if ( se ) {
-	if ( accOn->isOn() ) {
-	    accOn->setOn( false );
-	    accOff->setOn( true );
-	}
-	if ( bigCodecsOff->isOn() ) {
-	    bigCodecsOn->setOn( true );
-	    bigCodecsOff->setOn( false );
-	}
-	if ( mngPlugin->isOn() ) {
-	    mngDirect->setOn( true );
-	    mngPlugin->setOn( false );
-	    mngOff->setOn( false );
-	}
-	if ( pngPlugin->isOn() ) {
-	    pngDirect->setOn( true );
-	    pngPlugin->setOn( false );
-	    pngOff->setOn( false );
-	}
-	if ( jpegPlugin->isOn() ) {
-	    jpegDirect->setOn( true );
-	    jpegPlugin->setOn( false );
-	    jpegOff->setOn( false );
-	}
-	if ( sgiPlugin->isOn() ) {
-	    sgiPlugin->setOn( false );
-	    sgiDirect->setOn( true );
-	}
-	if ( cdePlugin->isOn() ) {
-	    cdePlugin->setOn( false );
-	    cdeDirect->setOn( true );
-	}
-	if ( motifplusPlugin->isOn() ) {
-	    motifplusPlugin->setOn( false );
-	    motifplusDirect->setOn( true );
-	}
-	if ( motifPlugin->isOn() ) {
-	    motifPlugin->setOn( false );
-	    motifDirect->setOn( true );
-	}
-	if ( platinumPlugin->isOn() ) {
-	    platinumPlugin->setOn( false );
-	    platinumDirect->setOn( true );
-	}
-	if ( xpPlugin->isOn() ) {
-	    xpPlugin->setOn( false );
-	    xpOff->setOn( true );
-	}
-	if ( enterprise ) {
-	    if ( mysqlPlugin->isOn() ) {
-		mysqlPlugin->setOn( false );
-		mysqlDirect->setOn( true );
-	    }
-	    if ( ociPlugin->isOn() ) {
-		ociPlugin->setOn( false );
-		ociDirect->setOn( true );
-	    }
-	    if ( odbcPlugin->isOn() ) {
-		odbcPlugin->setOn( false );
-		odbcDirect->setOn( true );
-	    }
-	    if ( psqlPlugin->isOn() ) {
-		psqlPlugin->setOn( false );
-		psqlDirect->setOn( true );
-	    }
-	    if ( tdsPlugin->isOn() ) {
-		tdsPlugin->setOn( false );
-		tdsDirect->setOn( true );
-	    }
-	    if ( db2Plugin->isOn() ) {
-		db2Plugin->setOn( false );
-		db2Direct->setOn( true );
-	    }
-	    if ( sqlitePlugin->isOn() ) {
-		sqlitePlugin->setOn( false );
-		sqliteDirect->setOn( true );
-	    }
-	    if ( ibasePlugin->isOn() ) {
-		ibasePlugin->setOn( false );
-		ibaseDirect->setOn( true );
-	    }
-	}
-	accOn->setEnabled( false );
-	bigCodecsOff->setEnabled( false );
-	mngPlugin->setEnabled( false );
-	pngPlugin->setEnabled( false );
-	jpegPlugin->setEnabled( false );
-	sgiPlugin->setEnabled( false );
-	cdePlugin->setEnabled( false );
-	motifPlugin->setEnabled( false );
-	motifplusPlugin->setEnabled( false );
-	motifPlugin->setEnabled( false );
-	platinumPlugin->setEnabled( false );
-	xpPlugin->setEnabled( false );
-	if ( enterprise ) {
-	    mysqlPlugin->setEnabled( false );
-	    ociPlugin->setEnabled( false );
-	    odbcPlugin->setEnabled( false );
-	    psqlPlugin->setEnabled( false );
-	    tdsPlugin->setEnabled( false );
-	    db2Plugin->setEnabled( false );
-	    sqlitePlugin->setEnabled( false );
-	    ibasePlugin->setEnabled( false );
-	}
-    } else {
-	accOn->setEnabled( true );
-	bigCodecsOff->setEnabled( true );
-	mngPlugin->setEnabled( true );
-	pngPlugin->setEnabled( true );
-	jpegPlugin->setEnabled( true );
-	sgiPlugin->setEnabled( true );
-	cdePlugin->setEnabled( true );
-	motifplusPlugin->setEnabled( true );
-	motifPlugin->setEnabled( true );
-	platinumPlugin->setEnabled( true );
-	xpPlugin->setEnabled( true );
-	if ( enterprise ) {
-	    mysqlPlugin->setEnabled( true );
-	    ociPlugin->setEnabled( true );
-	    odbcPlugin->setEnabled( true );
-	    psqlPlugin->setEnabled( true );
-	    tdsPlugin->setEnabled( true );
-	    db2Plugin->setEnabled( true );
-	    sqlitePlugin->setEnabled( true );
-	    ibasePlugin->setEnabled( true );
-	}
-    }
-    setJpegDirect( mngDirect->isOn() );
-}
-
-void SetupWizardImpl::setJpegDirect( bool jd )
-{
-    // direct MNG support requires also direct JPEG support
-    if ( jd ) {
-	jpegOff->setOn( false );
-	jpegPlugin->setOn( false );
-	jpegDirect->setOn( true );
-
-	jpegOff->setEnabled( false );
-	jpegPlugin->setEnabled( false );
-	jpegDirect->setEnabled( true );
-    } else {
-	jpegOff->setEnabled( true );
-	if ( !staticItem->isOn() )
-	    jpegPlugin->setEnabled( true );
-	jpegDirect->setEnabled( true );
-    }
-}
-
-void SetupWizardImpl::optionClicked( CheckListItem *item )
-{
-    if ( !item || item->type() != CheckListItem::RadioButton )
-	return;
-
-    if ( item->text(0) == "Static" && item->isOn() ) {
-	setStaticEnabled( true );
-	return;
-    } else if ( item->text( 0 ) == "Shared" && item->isOn() ) {
-	setStaticEnabled( false );
-	return;
-    } else if ( item==mngDirect || item==mngPlugin || item==mngOff ) {
-	setJpegDirect( mngDirect->isOn() );
-    } else if ( item==db2Direct && odbcDirect->isOn() ) {
-	if ( odbcPlugin->isEnabled() )
-	    odbcPlugin->QCheckListItem::setOn(true);
-	else
-	    odbcOff->QCheckListItem::setOn(true);
-    } else if ( item==odbcDirect && db2Direct->isOn() ) {
-	if ( db2Plugin->isEnabled() )
-	    db2Plugin->QCheckListItem::setOn(true);
-	else
-	    db2Off->QCheckListItem::setOn(true);
-    }
-}
-
-
-void SetupWizardImpl::configPageChanged()
-{
-    if ( configPage->configList->isVisible() ) {
-	configPage->configList->setSelected( configPage->configList->currentItem(), true );
-    } else if ( configPage->advancedList->isVisible() ) {
-	configPage->advancedList->setSelected( configPage->advancedList->currentItem(), true );
-    }
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-    else if ( configPage->installList->isVisible() ) {
-	configPage->installList->setSelected( configPage->installList->currentItem(), true );
-    }
-#endif
-}
-
-void SetupWizardImpl::cleanDone()
-{
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-    prepareEnvironment();
-#  if defined(Q_OS_WIN32)
-    QString qtdir = QEnvironment::getEnv( "QTDIR" );
-
-    // adjust the .qmake.cache
-    QFile qmakeCache( qtdir + "/.qmake.cache" );
-    if ( qmakeCache.open( IO_ReadOnly ) ) {
-	QString content = qmakeCache.readAll();
-	qmakeCache.close();
-	if ( globalInformation.sysId() == GlobalInformation::Borland )
-	    content.replace( "C:\\QtEvaluation\\qtborland", qtdir );
-	else
-	    content.replace( "C:\\QtEvaluation\\qtmsvc", qtdir );
-
-	if ( qmakeCache.open( IO_WriteOnly ) ) {
-	    QTextStream ts( &qmakeCache );
-	    ts << content;
-	    qmakeCache.close();
-	} else {
-	    logOutput( QString("Warning: can't open the .qmake.cache file for writing: %1\n").arg( qmakeCache.errorString() ) );
-	}
-    } else {
-	logOutput( QString("Warning: can't open the .qmake.cache file for reading: %1\n").arg( qmakeCache.errorString() ) );
-    }
-
-    QStringList args;
-    args << ( qtdir + "\\bin\\configure.exe" );
-    args << "-spec";
-    args << globalInformation.text(GlobalInformation::Mkspec);
-    if ( globalInformation.sysId() == GlobalInformation::MSVC )
-	args << "-dsp";
-    else if ( globalInformation.sysId() == GlobalInformation::MSVCNET )
-	args << "-vcproj";
-
-    if( qWinVersion() & WV_NT_based ) {
-	logOutput( "Execute configure...\n" );
-	logOutput( args.join( " " ) + "\n" );
-
-	configure.setWorkingDirectory( qtdir );
-	configure.setArguments( args );
-	// Start the configure process
-	buildPage->compileProgress->setTotalSteps( int(double(filesToCompile) * 2.6) );
-	buildPage->restartBuild->setText( "Stop configure" );
-	buildPage->restartBuild->setEnabled( true );
-	buildPage->restartBuild->show();
-	buildPage->compileProgress->show();
-	if( !configure.start() ) {
-	    logOutput( "Could not start configure process" );
-	    emit wizardPageFailed( indexOf(currentPage()) );
-	}
-    } else { // no proper process handling on DOS based systems - create a batch file instead
-	logOutput( "Generating batch file...\n" );
-	QDir installDir;
-	if ( optionsPage )
-	    installDir.setPath( optionsPage->installPath->text() );
-	else
-	    installDir.setPath( qtdir );
-	QFile outFile( installDir.filePath("build.bat") );
-	QTextStream outStream( &outFile );
-
-	if( outFile.open( IO_WriteOnly | IO_Translate ) ) {
-	    if ( installDir.absPath()[1] == ':' )
-		outStream << installDir.absPath().left(2) << endl;
-	    outStream << "cd %QTDIR%" << endl;
-	    outStream << args.join( " " ) << endl;
-	    if( !globalInformation.reconfig() ) {
-		outStream << globalInformation.text(GlobalInformation::MakeTool) << endl;
-	    }
-	    outFile.close();
-	}
-	logOutput( "Doing the final integration steps..." );
-	doIDEIntegration();
-	buildPage->compileProgress->setTotalSteps( buildPage->compileProgress->totalSteps() );
-	showPage( finishPage );
-    }
-#  elif defined(Q_OS_UNIX)
-    buildPage->compileProgress->show();
-    buildPage->restartBuild->show();
-
-    buildPage->compileProgress->setProgress( 0 );
-    buildPage->compileProgress->setTotalSteps( int(double(filesToCompile) * 1.8) );
-    configDone();
-#  endif
-#else
-    QStringList args;
-    QStringList entries;
-    QSettings settings;
-    QString entry;
-    QStringList::Iterator it;
-    QFile tmpFile;
-    QTextStream tmpStream;
-    bool settingsOK;
-
-#  if defined(Q_OS_WIN32)
-    args << ( QEnvironment::getEnv( "QTDIR" ) + "\\bin\\configure.exe" );
-#  elif defined(Q_OS_UNIX)
-    args << ( QEnvironment::getEnv( "QTDIR" ) + QDir::separator() + "configure" );
-#  endif
-
-    entry = settings.readEntry( "/Trolltech/Qt/Build", "Debug", &settingsOK );
-    if ( entry == "Debug" )
-	args += "-debug";
-    else
-	args += "-release";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Library", "Shared", &settingsOK );
-    if ( entry == "Static" )
-	args += "-static";
-    else
-	args += "-shared";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Threading", QString(), &settingsOK );
-    if ( entry == "Threaded" )
-	args += "-thread";
-    else
-	args += "-no-thread";
-
-    entries = settings.readListEntry( "/Trolltech/Qt/Modules", ',', &settingsOK );
-    for( it = allModules.begin(); it != allModules.end(); ++it ) {
-	entry = *it;
-	if ( entries.find( entry ) != entries.end() )
-	    args += QString( "-enable-" ) + entry;
-	else
-	    args += QString( "-disable-") + entry;
-    }
-
-    entry = settings.readEntry( "/Trolltech/Qt/SQL Drivers/MySQL", "Off", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-sql-mysql";
-    else if ( entry == "Plugin" )
-	args += "-plugin-sql-mysql";
-    else if ( entry == "Off" )
-	args += "-no-sql-mysql";
-
-    entry = settings.readEntry( "/Trolltech/Qt/SQL Drivers/OCI", "Off", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-sql-oci";
-    else if ( entry == "Plugin" )
-	args += "-plugin-sql-oci";
-    else if ( entry == "Off" )
-	args += "-no-sql-oci";
-
-    entry = settings.readEntry( "/Trolltech/Qt/SQL Drivers/ODBC", "Off", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-sql-odbc";
-    else if ( entry == "Plugin" )
-	args += "-plugin-sql-odbc";
-    else if ( entry == "Off" )
-	args += "-no-sql-odbc";
-
-    entry = settings.readEntry( "/Trolltech/Qt/SQL Drivers/PostgreSQL", "Off", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-sql-psql";
-    else if ( entry == "Plugin" )
-	args += "-plugin-sql-psql";
-    else if ( entry == "Off" )
-	args += "-no-sql-psql";
-
-    entry = settings.readEntry( "/Trolltech/Qt/SQL Drivers/TDS", "Off", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-sql-tds";
-    else if ( entry == "Plugin" )
-	args += "-plugin-sql-tds";
-    else if ( entry == "Off" )
-	args += "-no-sql-tds";
-
-    entry = settings.readEntry( "/Trolltech/Qt/SQL Drivers/DB2", "Off", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-sql-db2";
-    else if ( entry == "Plugin" )
-	args += "-plugin-sql-db2";
-    else if ( entry == "Off" )
-	args += "-no-sql-db2";
-
-    entry = settings.readEntry( "/Trolltech/Qt/SQL Drivers/SQLite", "Off", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-sql-sqlite";
-    else if ( entry == "Plugin" )
-	args += "-plugin-sql-sqlite";
-    else if ( entry == "Off" )
-	args += "-no-sql-sqlite";
-
-    entry = settings.readEntry( "/Trolltech/Qt/SQL Drivers/iBase", "Off", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-sql-ibase";
-    else if ( entry == "Plugin" )
-	args += "-plugin-sql-ibase";
-    else if ( entry == "Off" )
-	args += "-no-sql-ibase";
-
-#  if defined(Q_OS_WIN32)
-//TODO: Win only, remove these options from wizard on mac?
-    entry = settings.readEntry( "/Trolltech/Qt/Accessibility", "On", &settingsOK );
-    if ( entry == "On" )
-	args += "-accessibility";
-    else
-	args += "-no-accessibility";
-#  endif
-
-    entry = settings.readEntry( "/Trolltech/Qt/Big Textcodecs", "On", &settingsOK );
-    if ( entry == "On" )
-	args += "-big-codecs";
-    else
-	args += "-no-big-codecs";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Tablet Support", "Off", &settingsOK );
-    if ( entry == "On" )
-	args += "-tablet";
-    else
-	args += "-no-tablet";
-
-    entries = settings.readListEntry( "/Trolltech/Qt/Advanced C++", ',', &settingsOK );
-    if ( entries.contains( "STL" ) )
-	args += "-stl";
-    else
-	args += "-no-stl";
-    if ( entries.contains( "Exceptions" ) )
-	args += "-exceptions";
-    else
-	args += "-no-exceptions";
-    if ( entries.contains( "RTTI" ) )
-	args += "-rtti";
-    else
-	args += "-no-rtti";
-
-#  if defined(Q_OS_WIN32)
-//TODO: Win only, remove these options from wizard on mac?
-    entry = settings.readEntry( "/Trolltech/Qt/Image Formats/PNG", "Direct", &settingsOK );
-    if ( entry == "Plugin" )
-	args += "-plugin-imgfmt-png";
-    else if ( entry == "Direct" )
-	args += "-qt-imgfmt-png";
-    else if ( entry == "Off" )
-	args += "-no-imgfmt-png";
-    args += "-qt-png";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Image Formats/JPEG", "Direct", &settingsOK );
-    if ( entry == "Plugin" )
-	args += "-plugin-imgfmt-jpeg";
-    else if ( entry == "Direct" )
-	args += "-qt-imgfmt-jpeg";
-    else if ( entry == "Off" )
-	args += "-no-imgfmt-jpeg";
-    args += "-qt-jpeg";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Image Formats/MNG", "Direct", &settingsOK );
-    if ( entry == "Plugin" )
-	args += "-plugin-imgfmt-mng";
-    else if ( entry == "Direct" )
-	args += "-qt-imgfmt-mng";
-    else if ( entry == "Off" )
-	args += "-no-imgfmt-mng";
-    args += "-qt-mng";
-#  endif
-
-    entry = settings.readEntry( "/Trolltech/Qt/Image Formats/GIF", "Direct", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-gif";
-    else if ( entry == "Off" )
-	args += "-no-gif";
-
-#  if defined(Q_OS_WIN32)
-//TODO: Win only, remove these options from wizard on mac?
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/Windows", "Direct", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-style-windows";
-    else if ( entry == "Plugin" )
-	args += "-plugin-style-windows";
-    else if ( entry == "Off" )
-	args += "-no-style-windows";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/Windows XP", "Off", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-style-windowsxp";
-    else if ( entry == "Plugin" )
-	args += "-plugin-style-windowsxp";
-    else if ( entry == "Off" )
-	args += "-no-style-windowsxp";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/Motif", "Plugin", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-style-motif";
-    else if ( entry == "Plugin" )
-	args += "-plugin-style-motif";
-    else if ( entry == "Off" )
-	args += "-no-style-motif";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/Platinum", "Plugin", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-style-platinum";
-    else if ( entry == "Plugin" )
-	args += "-plugin-style-platinum";
-    else if ( entry == "Off" )
-	args += "-no-style-platinum";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/MotifPlus", "Plugin", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-style-motifplus";
-    else if ( entry == "Plugin" )
-	args += "-plugin-style-motifplus";
-    else if ( entry == "Off" )
-	args += "-no-style-motifplus";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/CDE", "Plugin", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-style-cde";
-    else if ( entry == "Plugin" )
-	args += "-plugin-style-cde";
-    else if ( entry == "Off" )
-	args += "-no-style-cde";
-
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/SGI", "Plugin", &settingsOK );
-    if ( entry == "Direct" )
-	args += "-qt-style-sgi";
-    else if ( entry == "Plugin" )
-	args += "-plugin-style-sgi";
-    else if ( entry == "Off" )
-	args += "-no-style-sgi";
-#  endif
-
-    if ( globalInformation.sysId() == GlobalInformation::MSVC ) {
-	entry = settings.readEntry( "/Trolltech/Qt/DSP Generation", "On", &settingsOK );
-	if ( entry == "On" )
-	    args += "-dsp";
-	else if ( entry == "Off" )
-	    args += "-no-dsp";
-    } else if ( globalInformation.sysId() == GlobalInformation::MSVCNET ) {
-	entry = settings.readEntry( "/Trolltech/Qt/VCPROJ Generation", "On", &settingsOK );
-	if ( entry == "On" )
-	    args += "-vcproj";
-	else if ( entry == "Off" )
-	    args += "-no-vcproj";
-    } else if ( globalInformation.sysId() != GlobalInformation::MSVC && globalInformation.sysId() == GlobalInformation::MSVCNET ) {
-	args += "-no-dsp";
-	args += "-no-vcproj";
-    }
-
-    if ( ( ( !globalInformation.reconfig() && !optionsPage->skipBuild->isChecked() )
-	    || ( globalInformation.reconfig() && configPage->rebuildInstallation->isChecked() ) )
-#  if defined(Q_OS_WIN32)
-    && qWinVersion() & WV_NT_based ) {
-#  else
-    ) {
-#  endif
-	logOutput( "Execute configure...\n" );
-	logOutput( args.join( " " ) + "\n" );
-
-	configure.setWorkingDirectory( QEnvironment::getEnv( "QTDIR" ) );
-	configure.setArguments( args );
-	// Start the configure process
-	buildPage->compileProgress->setTotalSteps( int(double(filesToCompile) * 2.6) );
-	buildPage->restartBuild->setText( "Stop configure" );
-	buildPage->restartBuild->setEnabled( true );
-	buildPage->restartBuild->show();
-	buildPage->compileProgress->show();
-	if( !configure.start() ) {
-	    logOutput( "Could not start configure process" );
-	    emit wizardPageFailed( indexOf(currentPage()) );
-	}
-    } else { // no proper process handling on DOS based systems - create a batch file instead
-	logOutput( "Generating batch file...\n" );
-	QDir installDir;
-	if ( optionsPage )
-	    installDir.setPath( optionsPage->installPath->text() );
-	else
-	    installDir.setPath( QEnvironment::getEnv( "QTDIR" ) );
-	QFile outFile( installDir.filePath("build.bat") );
-	QTextStream outStream( &outFile );
-
-	if( outFile.open( IO_WriteOnly | IO_Translate ) ) {
-	    if ( installDir.absPath()[1] == ':' )
-		outStream << installDir.absPath().left(2) << endl;
-	    outStream << "cd %QTDIR%" << endl;
-
-	    if ( globalInformation.reconfig() )
-		outStream << globalInformation.text(GlobalInformation::MakeTool) << " clean" << endl;
-
-	    // There is a limitation on Windows 9x regarding the length of the
-	    // command line. So rather use the configure.cache than specifying
-	    // all configure options on the command line.
-	    QFile configureCache( installDir.filePath("configure.cache") );
-	    if( configureCache.open( IO_WriteOnly | IO_Translate ) ) {
-		QTextStream confCacheStream( &configureCache );
-		QStringList::Iterator it = args.begin();
-		++it; // skip args[0] (configure)
-		while ( it != args.end() ) {
-		    confCacheStream << *it << endl;
-		    ++it;
-		}
-		configureCache.close();
-		outStream << args[0] << " -redo" << endl;
-	    } else {
-		outStream << args.join( " " ) << endl;
-	    }
-
-	    outStream << globalInformation.text(GlobalInformation::MakeTool) << endl;
-	    outFile.close();
-	}
-	logOutput( "Doing the final integration steps..." );
-	// No need to redo the integration step
-	if ( !globalInformation.reconfig() )
-	    doIDEIntegration();
-	buildPage->compileProgress->setTotalSteps( buildPage->compileProgress->totalSteps() );
-	showPage( finishPage );
-    }
-#endif
-}
-
-void SetupWizardImpl::prepareEnvironment()
-{
-    QByteArray pathBuffer;
-    QStringList path;
-    QString qtDir;
-    int envSpec = QEnvironment::LocalEnv;
-
-    if( globalInformation.reconfig() ) {
-	qtDir = QEnvironment::getEnv( "QTDIR" );
-	if ( configPage ) {
-	    configPage->currentInstallation->setText( qtDir );
-	}
-    }
-    else {
-	qtDir = QDir::toNativeSeparators( QEnvironment::getFSFileName( optionsPage->installPath->text() ) );
-    }
-
-#if defined(Q_OS_WIN32)
-    if( qWinVersion() & Qt::WV_NT_based ) {
-	// under Windows 9x, we don't compile from the installer -- so there is
-	// no need to set the local environment; and doing so, results in not
-	// setting the persistent since qtDir\bin is already in the PATH
-	path = QStringList::split( QRegExp("[;,]"), QEnvironment::getEnv( "PATH" ) );
-	if( path.findIndex( qtDir + "\\bin" ) == -1 ) {
-	    path.prepend( qtDir + "\\bin" );
-	    QEnvironment::putEnv( "PATH", path.join( ";" ) );
-	}
-    }
-#elif defined(Q_OS_UNIX)
-    path = QStringList::split( QRegExp("[:]"), QEnvironment::getEnv( "PATH" ) );
-    if( path.findIndex( qtDir + "/bin" ) == -1 ) {
-	path.prepend( qtDir + "/bin" );
-	QEnvironment::putEnv( "PATH", path.join( ":" ) );
-    }
-    QStringList dyld = QStringList::split( QRegExp("[:]"), QEnvironment::getEnv( "DYLD_LIBRARY_PATH" ) );
-    if( dyld.findIndex( qtDir + "/lib" ) == -1 ) {
-	dyld.prepend( qtDir + "/lib" );
-	QEnvironment::putEnv( "DYLD_LIBRARY_PATH", dyld.join( ":" ) );
-    }
-#endif
-
-#if defined(Q_OS_WIN32)
-    if( foldersPage && foldersPage->qtDirCheck->isChecked() ) {
-	envSpec |= QEnvironment::PersistentEnv;
-/*
-	if( folderGroups->currentItem() == 0 )
-	    envSpec |= QEnvironment::GlobalEnv;
-*/
-	path.clear();
-
-	if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-	    path = QStringList::split( ';', QEnvironment::getEnv( "PATH", QEnvironment::PersistentEnv ) );
-	    if( path.findIndex( qtDir + "\\bin" ) == -1 ) {
-		path.prepend( qtDir + "\\bin" );
-		QEnvironment::putEnv( "PATH", path.join( ";" ), QEnvironment::PersistentEnv );
-	    }
-	} else {
-	    if( path.findIndex( qtDir + "\\bin" ) == -1 ) {
-		QEnvironment::putEnv( "PATH", qtDir + "\\bin;%PATH%", QEnvironment::PersistentEnv );
-	    }
-	}
-    }
-#elif defined(Q_OS_UNIX)
-//Persistent environment not supported
-#endif
-
-    QEnvironment::putEnv( "QTDIR", qtDir, envSpec );
-    if ( globalInformation.sysId() != GlobalInformation::Other )
-	QEnvironment::putEnv( "QMAKESPEC", globalInformation.text(GlobalInformation::Mkspec), envSpec );
-    else
-	QEnvironment::putEnv( "QMAKESPEC", optionsPage->sysOtherCombo->currentText(), envSpec );
-#if defined(Q_OS_WIN32)
-    if( qWinVersion() & WV_NT_based ) {
-	SendNotifyMessageA( HWND_BROADCAST, WM_WININICHANGE, 0, (LPARAM)"Environment" );
-	SendNotifyMessageA( HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0 );
-    }
-#endif
-}
-
-void SetupWizardImpl::showPageConfig()
-{
-    if (autoContTimer.isActive()) {
-	autoContTimer.stop();
-	timeCounter = 30;
-	nextButton()->setText("Next >");
-    }
-#if defined(EVAL) || defined(EDU) || defined(NON_COMMERCIAL)
-    setBackEnabled( buildPage, false );
-
-    static bool alreadyInitialized = false;
-    if ( !alreadyInitialized ) {
-	configPage->installList->setSorting( -1 );
-	configPage->installList->setUpdatesEnabled(false);
-
-	CheckListItem *item;
-	CheckListItem *folder;
-
-	folder = new CheckListItem( configPage->installList, "Database drivers" );
-
-#if !defined(NON_COMMERCIAL)
-#if !defined(Q_OS_MACX)
-	item = new CheckListItem( folder, "DB2", QCheckListItem::CheckBox );
-	item->addRequiredFiles("db2cli.dll");
-	db2PluginInstall = item;
-	db2PluginInstall->setHelpText( tr(
-		    "Installs the DB2 driver. This driver can "
-		    "be used to access DB2 databases."
-		    "<p><font color=\"red\">Choosing this option requires "
-		    "that the DB2 Client is installed and set up. "
-		    "The driver depends on the db2cli.dll.</font></p>"
-		    ), configPage->explainOption );
-
-	item = new CheckListItem( folder, "TDS", QCheckListItem::CheckBox );
-	item->addRequiredFiles("ntwdblib.dll");
-	tdsPluginInstall = item;
-	tdsPluginInstall->setHelpText( tr(
-		    "Installs the TDS driver to access Sybase Adaptive "
-		    "Server and Microsoft SQL Server (it is recommended "
-		    "to rather use ODBC instead of TDS where applicable). "
-		    "<p><font color=\"red\">Choosing this option requires "
-		    "that the ntwdblib.dll is available.</font></p>"
-		    ), configPage->explainOption );
-
-	item = new CheckListItem( folder, "Oracle (OCI)", QCheckListItem::CheckBox );
-	item->addRequiredFiles( "oci.dll" );
-	ociPluginInstall = item;
-	ociPluginInstall->setHelpText( tr(
-		    "<p>Installs the Oracale Call Interface (OCI) driver.</p> "
-		    "<p><font color=\"red\">Choosing this option requires "
-		    "that the Oracle Client is installed and set up. "
-		    "The driver depends on the oci.dll.</font></p>"
-		    ), configPage->explainOption );
-#endif
-
-	if ( globalInformation.sysId() != GlobalInformation::Borland ) {
-	    // I was not able to make Postgres work with Borland
-	    item = new CheckListItem( folder, "PostgreSQL", QCheckListItem::CheckBox );
-#ifndef Q_OS_MACX
-	    item->addRequiredFiles( "libpq.dll" );
-#endif
-	    item->setOn( item->verify() );
-	    psqlPluginInstall = item;
-	    psqlPluginInstall->setHelpText( tr(
-			"Installs the PostgreSQL 7.x driver. This driver can "
-			"be used to access PostgreSQL 6 databases as well "
-			"as PostgreSQL 7 databases."
-#ifdef Q_OS_MACX
-                        "\n\nRequires a proper PostgreSQL installation."
-#endif
-			), configPage->explainOption );
-	} else {
-	    psqlPluginInstall = 0;
-	}
-
-	item = new CheckListItem( folder, "MySQL", QCheckListItem::CheckBox );
-#ifndef Q_OS_MACX
-	item->addRequiredFiles( "libmySQL.dll" );
-#endif
-	item->setOn( item->verify() );
-	mysqlPluginInstall = item;
-	mysqlPluginInstall->setHelpText( tr(
-		    "Installs the MySQL 3.x database driver."
-#ifdef Q_OS_MACX
-                        "\n\nRequires a proper MySQL installation."
-#endif
-		    ), configPage->explainOption );
-
-#if !defined(Q_OS_MAC)
-	item = new CheckListItem( folder, "ODBC", QCheckListItem::CheckBox );
-	item->setOn( findFile( "odbc32.dll" ) );
-	odbcPluginInstall = item;
-	odbcPluginInstall->setHelpText( tr(
-		    "Installs the Open Database Connectivity (ODBC) driver. "
-		    "This driver depends on the odbc32.dll which should be "
-		    "available on all modern Windows installations."
-		    ), configPage->explainOption );
-#endif
-#else
-	item = new CheckListItem( folder, "SQLite", QCheckListItem::CheckBox );
-	item->setOn( true );
-	sqlitePluginInstall = item;
-    	sqlitePluginInstall->setHelpText( tr(
-		    "Installs the SQLite driver.\n"
-		    "This driver is an in-process SQL database "
-		    "driver. It is needed for some of the "
-		    "examples used in the book."
-		    ), configPage->explainOption );
-#endif
-
-	configPage->installList->setUpdatesEnabled(true);
-	alreadyInitialized = true;
-    }
-#else
-
-    prepareEnvironment();
-
-    bool enterprise = licenseInfo[ "PRODUCTS" ] == "qt-enterprise";
-    configPage->configList->setUpdatesEnabled(false);
-    configPage->advancedList->setUpdatesEnabled(false);
-
-    if( configPage->configList->childCount() ) {
-	QListViewItem* current = configPage->configList->firstChild();
-
-	while( current ) {
-	    QListViewItem* next = current->nextSibling();
-	    delete current;
-	    current = next;
-	}
-
-	current = configPage->advancedList->firstChild();
-	while( current ) {
-	    QListViewItem* next = current->nextSibling();
-	    delete current;
-	    current = next;
-	}
-    }
-    QSettings settings;
-    configPage->configList->setSorting( -1 );
-    configPage->advancedList->setSorting( -1 );
-    CheckListItem *item;
-    CheckListItem *folder;
-    QStringList::Iterator it;
-
-    // general
-    folder = new CheckListItem ( configPage->configList, "Modules" );
-    folder->setHelpText(tr("<p>Some of these modules are optional."
-			   "<p>You can deselect the modules that you "
-			   "don't require for your development."
-			   "<p>By default, all modules are selected."), configPage->explainOption);
-    bool settingsOK;
-    QStringList entries = settings.readListEntry( "/Trolltech/Qt/Modules", ',', &settingsOK );
-    QStringList licensedModules = QStringList::split( " ", "network canvas table xml opengl sql" );
-    for( it = licensedModules.begin(); it != licensedModules.end(); ++it ) {
-	item = new CheckListItem( folder, (*it), QCheckListItem::CheckBox );
-	bool on = entries.isEmpty() || entries.find( *it ) != entries.end();
-	item->setOn( enterprise && on );
-	item->setEnabled( enterprise );
-	if ( enterprise )
-	    allModules << *it;
-    }
-
-    licensedModules = QStringList::split( " ", "iconview workspace" );
-    for( it = licensedModules.begin(); it != licensedModules.end(); ++it ) {
-	item = new CheckListItem( folder, (*it), QCheckListItem::CheckBox );
-	bool on = entries.isEmpty() || entries.find( *it ) != entries.end();
-	item->setOn( on );
-	allModules << *it;
-    }
-
-    QStringList requiredModules = QStringList::split( " ", "styles dialogs widgets tools kernel" );
-    for( it = requiredModules.begin(); it != requiredModules.end(); ++it ) {
-	item = new CheckListItem( folder, (*it), QCheckListItem::CheckBox );
-	bool on = entries.isEmpty() || entries.find( *it ) != entries.end();
-	item->setOn( on );
-	item->setEnabled( false );
-	allModules << *it;
-    }
-
-    folder = new CheckListItem ( configPage->configList, "Threading" );
-    folder->setHelpText(tr("<p>Build the Qt library with or without thread support."
-			   "<p>By default, threading is supported. Some classes will "
-			   "not be available without thread support."), configPage->explainOption);
-    QString entry = settings.readEntry( "/Trolltech/Qt/Threading", "Threaded", &settingsOK );
-    item = new CheckListItem( folder, "Threaded", QCheckListItem::RadioButton );
-    item->setOn( entry == "Threaded" );
-    item = new CheckListItem( folder, "Non-threaded", QCheckListItem::RadioButton );
-    item->setOn( entry == "Non-threaded" );
-    CheckListItem *singleThreaded = item;
-
-    folder = new CheckListItem ( configPage->configList, "Library" );
-    folder->setHelpText(tr("<p>Build a shared or a static Qt library."
-			   "<p>A shared Qt library makes it necessary to "
-			   "distribute the Qt DLL together with your software. "
-			   "Applications and libraries linked against a shared Qt library "
-			   "are small and can make use of components and plugins."
-			   "<p>All applications created with a static "
-			   "library will be at least 1.5MB big. "
-			   "<font color=\"red\">It is not possible to "
-			   "build or use any components or plugins with a "
-			   "static Qt library!</font>"), configPage->explainOption);
-    entry = settings.readEntry( "/Trolltech/Qt/Library", "Shared", &settingsOK );
-    staticItem = new CheckListItem( folder, "Static", QCheckListItem::RadioButton );
-    staticItem->setOn( entry == "Static" );
-    staticItem->setWarningText("<p>It will not be possible to build components "
-			       "or plugins if you select the static build of the Qt library."
-			       "<p>New features, e.g souce code editing in Qt Designer, will not "
-			       "be available, and you or users of your software might not be able "
-			       "to use all or new features, e.g. new styles.");
-
-    item = new CheckListItem( folder, "Shared", QCheckListItem::RadioButton );
-    item->setOn( entry == "Shared" );
-    item->setWarningText("<p>Single-threaded, shared configurations "
-			 "may cause instabilities because of runtime "
-			 "library conflicts.", singleThreaded);
-    singleThreaded->setWarningText("<p>Single-threaded, shared configurations "
-			 "may cause instabilities because of runtime "
-			 "library conflicts.", item);
-
-    folder = new CheckListItem ( configPage->configList, "Build" );
-    folder->setHelpText(tr("<p>Build a Qt library with or without debug symbols."
-			   "<p>Use the debug build of the Qt library to enhance "
-			   "debugging of your application. The release build "
-			   "is both smaller and faster."), configPage->explainOption);
-    entry = settings.readEntry( "/Trolltech/Qt/Build", "Release", &settingsOK );
-    item = new CheckListItem( folder, "Debug", QCheckListItem::RadioButton );
-    item->setOn( entry == "Debug" );
-    item = new CheckListItem( folder, "Release", QCheckListItem::RadioButton );
-    item->setOn( entry == "Release" );
-
-    // Advanced options
-    if ( globalInformation.sysId() == GlobalInformation::MSVC ) {
-	entry = settings.readEntry( "/Trolltech/Qt/DSP Generation", "On", &settingsOK );
-	folder = new CheckListItem( configPage->advancedList, "DSP Generation" );
-	folder->setHelpText(tr("qmake can generate the Visual Studio 6 project files (dsp) as well "
-			       "as makefiles when Qt is being configured."),
-			       configPage->explainOption);
-	dspOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-	dspOff->setOn( entry == "Off" );
-	dspOn = new CheckListItem( folder, "On", QCheckListItem::RadioButton );
-	dspOn->setOn( entry == "On" );
-    } else if ( globalInformation.sysId() == GlobalInformation::MSVCNET ) {
-	entry = settings.readEntry( "/Trolltech/Qt/VCPROJ Generation", "On", &settingsOK );
-	folder = new CheckListItem( configPage->advancedList, "VCPROJ Generation" );
-	folder->setHelpText(tr("qmake can generate the Visual Studio.NET project files (vcproj) as well "
-			       "as makefiles when Qt is being configured."),
-			       configPage->explainOption);
-	vcprojOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-	vcprojOff->setOn( entry == "Off" );
-	vcprojOn = new CheckListItem( folder, "On", QCheckListItem::RadioButton );
-	vcprojOn->setOn( entry == "On" );
-    }
-
-    CheckListItem *imfolder = new CheckListItem( configPage->advancedList, "Image Formats" );
-    imfolder->setHelpText(tr("<p>Qt ships with support for a wide range of common image formats. "
-			     "<p>Standard formats are always included in Qt, and some more special formats "
-			     "can be left out from the Qt library itself and provided by a plugin instead."),
-			     configPage->explainOption);
-
-    folder = new CheckListItem( imfolder, "GIF" );
-    folder->setHelpText(tr("<p>Support for GIF images in Qt."
-			   "<p><font color=\"red\">If you are in a country "
-			   "which recognizes software patents and in which "
-			   "Unisys holds a patent on LZW compression and/or "
-			   "decompression and you want to use GIF, Unisys "
-			   "may require you to license the technology. Such "
-			   "countries include Canada, Japan, the USA, "
-			   "France, Germany, Italy and the UK.</font>"),
-			   configPage->explainOption);
-    entry = settings.readEntry( "/Trolltech/Qt/Image Formats/GIF", "Off", &settingsOK );
-    gifOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    gifOff->setOn( entry == "Off" );
-    gifDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    gifDirect->setOn( entry == "Direct" );
-
-    folder = new CheckListItem( imfolder, "MNG" );
-    folder->setHelpText(tr("<p>Qt can support the \"Multiple-Image Network Graphics\" format."
-			   "<p>MNG support can be compiled into Qt, provided by a plugin ",
-			   "or turned off completely."),
-			   configPage->explainOption);
-    entry = settings.readEntry( "/Trolltech/Qt/Image Formats/MNG", "Plugin", &settingsOK );
-#if 0
-    // ### disable using system MNG for now -- please someone take a closer look
-    entryPresent = settings.readEntry( "/Trolltech/Qt/Image Formats/MNG Present", "No", &settingsOK );
-    mngPresent = new CheckListItem( folder, "Present", QCheckListItem::CheckBox );
-    mngPresent->setOn( entry == "Yes" );
-#endif
-    mngOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    mngOff->setOn( entry == "Off" );
-    mngPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    mngPlugin->setOn( entry == "Plugin" );
-    mngDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    mngDirect->setOn( entry == "Direct" );
-
-    folder = new CheckListItem( imfolder, "JPEG" );
-    folder->setHelpText(tr("<p>Qt can support the \"Joint Photographic Experts Group\" format."
-			   "<p>JPEG support can be compiled into Qt, provided by a plugin ",
-			   "or turned off completely."),
-			   configPage->explainOption);
-    entry = settings.readEntry( "/Trolltech/Qt/Image Formats/JPEG", "Direct", &settingsOK );
-#if 0
-    // ### disable using system JPEG for now -- please someone take a closer look
-    entryPresent = settings.readEntry( "/Trolltech/Qt/Image Formats/JPEG Present", "No", &settingsOK );
-    jpegPresent = new CheckListItem( folder, "Present", QCheckListItem::CheckBox );
-    jpegPresent->setOn( entry == "Yes" );
-#endif
-    jpegOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    jpegOff->setOn( entry == "Off" );
-    jpegPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    jpegPlugin->setOn( entry == "Plugin" );
-    jpegDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    jpegDirect->setOn( entry == "Direct" );
-
-    folder = new CheckListItem( imfolder, "PNG" );
-    folder->setHelpText(tr("<p>Qt can support the \"Portable Network Graphics\" format."
-			   "<p>PNG support can be compiled into Qt, provided by a plugin ",
-			   "or turned off completely."),
-			   configPage->explainOption);
-    entry = settings.readEntry( "/Trolltech/Qt/Image Formats/PNG", "Direct", &settingsOK );
-#if 0
-    // ### disable using system PNG for now -- please someone take a closer look
-    entryPresent = settings.readEntry( "/Trolltech/Qt/Image Formats/PNG Present", "No", &settingsOK );
-    pngPresent = new CheckListItem( folder, "Present", QCheckListItem::CheckBox );
-    pngPresent->setOn( entry == "Yes" );
-#endif
-    pngOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    pngOff->setOn( entry == "Off" );
-    // PNG is required by the build system (ie. we use PNG), so don't allow it to be turned off
-    pngOff->setEnabled( false );
-    pngPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    pngPlugin->setOn( entry == "Plugin" );
-    pngDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    pngDirect->setOn( entry == "Direct" );
-
-    CheckListItem *sqlfolder = new CheckListItem( configPage->advancedList, "Sql Drivers" );
-    sqlfolder->setHelpText(tr("<p>Select the SQL Drivers you want to support."
-			      "<p>SQL Drivers can be built into Qt or built as plugins to be more flexible "
-			      "for later extensions."
-			      "<p><font color=#FF0000>You must have the appropriate client libraries "
-			      "and header files installed correctly before you can build the Qt SQL drivers.</font>"),
-			   configPage->explainOption);
-
-    folder = new CheckListItem( sqlfolder, "iBase" );
-    folder->addRequiredFiles("ibase.h");
-    entry = settings.readEntry( "/Trolltech/Qt/Sql Drivers/iBase", "Off", &settingsOK );
-    ibaseOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    ibaseOff->setOn( true );
-    ibaseOff->setEnabled( enterprise );
-    ibasePlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    ibasePlugin->setOn( entry == "Plugin" && folder->verify() && enterprise );
-    ibasePlugin->setEnabled( enterprise );
-    ibaseDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    ibaseDirect->setOn( entry == "Direct" && folder->verify() && enterprise );
-    ibaseDirect->setEnabled( enterprise );
-    if (globalInformation.sysId() == GlobalInformation::Borland)
-	folder->addRequiredFiles("gds32.lib");
-    else
-	folder->addRequiredFiles("gds32_ms.lib");
-
-    folder = new CheckListItem( sqlfolder, "DB2" );
-    folder->addRequiredFiles("db2cli.lib,sqlcli1.h");
-    entry = settings.readEntry( "/Trolltech/Qt/Sql Drivers/DB2", "Off", &settingsOK );
-    db2Off = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    db2Off->setOn( true );
-    db2Off->setEnabled( enterprise );
-    db2Plugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    db2Plugin->setOn( entry == "Plugin" && folder->verify() && enterprise );
-    db2Plugin->setEnabled( enterprise );
-    db2Direct = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    db2Direct->setOn( entry == "Direct" && folder->verify() && enterprise );
-    db2Direct->setEnabled( enterprise );
-
-    folder = new CheckListItem( sqlfolder, "TDS" );
-    folder->addRequiredFiles("ntwdblib.lib,sqldb.h");
-    entry = settings.readEntry( "/Trolltech/Qt/Sql Drivers/TDS", "Off", &settingsOK );
-    tdsOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    tdsOff->setOn( true );
-    tdsOff->setEnabled( enterprise );
-    tdsPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    tdsPlugin->setOn( entry == "Plugin" && folder->verify() && enterprise );
-    tdsPlugin->setEnabled( enterprise );
-    tdsDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    tdsDirect->setOn( entry == "Direct" && folder->verify() && enterprise );
-    tdsDirect->setEnabled( enterprise );
-
-    folder = new CheckListItem( sqlfolder, "PostgreSQL" );
-    folder->addRequiredFiles("libpqdll.lib,libpq-fe.h");
-    entry = settings.readEntry( "/Trolltech/Qt/Sql Drivers/PostgreSQL", "Off", &settingsOK );
-    psqlOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    psqlOff->setOn( true );
-    psqlOff->setEnabled( enterprise );
-    psqlPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    psqlPlugin->setOn( entry == "Plugin" && folder->verify() && enterprise );
-    psqlPlugin->setEnabled( enterprise );
-    psqlDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    psqlDirect->setOn( entry == "Direct" && folder->verify() && enterprise );
-    psqlDirect->setEnabled( enterprise );
-
-    folder = new CheckListItem( sqlfolder, "OCI" );
-    folder->addRequiredFiles("oci.lib,oci.h");
-    entry = settings.readEntry( "/Trolltech/Qt/Sql Drivers/OCI", "Off", &settingsOK );
-    ociOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    ociOff->setOn( true );
-    ociOff->setEnabled( enterprise );
-    ociPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    ociPlugin->setOn( entry == "Plugin" && folder->verify() && enterprise );
-    ociPlugin->setEnabled( enterprise );
-    ociDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    ociDirect->setOn( entry == "Direct" && folder->verify() && enterprise );
-    ociDirect->setEnabled( enterprise );
-
-    folder = new CheckListItem( sqlfolder, "MySQL" );
-    folder->addRequiredFiles("libmysql.lib,mysql.h");
-    entry = settings.readEntry( "/Trolltech/Qt/Sql Drivers/MySQL", "Off", &settingsOK );
-    mysqlOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    mysqlOff->setOn( true );
-    mysqlOff->setEnabled( enterprise );
-    mysqlPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    mysqlPlugin->setOn( entry == "Plugin" && folder->verify() && enterprise );
-    mysqlPlugin->setEnabled( enterprise );
-    mysqlDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    mysqlDirect->setOn( entry == "Direct" && folder->verify() && enterprise );
-    mysqlDirect->setEnabled( enterprise );
-
-    folder = new CheckListItem( sqlfolder, "SQLite" );
-    entry = settings.readEntry( "/Trolltech/Qt/Sql Drivers/SQLite", "Off", &settingsOK );
-    sqliteOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    sqliteOff->setOn( true );
-    sqliteOff->setEnabled( enterprise );
-    sqlitePlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    sqlitePlugin->setOn( entry == "Plugin" && folder->verify() && enterprise );
-    sqlitePlugin->setEnabled( enterprise );
-    sqliteDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    sqliteDirect->setOn( entry == "Direct" && folder->verify() && enterprise );
-    sqliteDirect->setEnabled( enterprise );
-
-    folder = new CheckListItem( sqlfolder, "ODBC" );
-    folder->addRequiredFiles("odbc32.lib,sql.h");
-    entry = settings.readEntry( "/Trolltech/Qt/Sql Drivers/ODBC", "Off", &settingsOK );
-    odbcOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    odbcOff->setOn( true );
-    odbcOff->setEnabled( enterprise );
-    odbcPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    odbcPlugin->setOn( entry == "Plugin" && folder->verify() && enterprise );
-    odbcPlugin->setEnabled( enterprise );
-    odbcDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    odbcDirect->setOn( entry == "Direct" && folder->verify() && enterprise );
-    odbcDirect->setEnabled( enterprise );
-
-    CheckListItem *stfolder = new CheckListItem( configPage->advancedList, "Styles" );
-    stfolder->setHelpText(tr("Select support for the various GUI styles that Qt supports." ),configPage->explainOption);
-
-    folder = new CheckListItem( stfolder, "SGI" );
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/SGI", "Plugin", &settingsOK );
-    sgiOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    sgiOff->setOn( entry == "Off" );
-    sgiPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    sgiPlugin->setOn( entry == "Plugin" );
-    sgiDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    sgiDirect->setOn( entry == "Direct" );
-
-    folder = new CheckListItem( stfolder, "CDE" );
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/CDE", "Plugin", &settingsOK );
-    cdeOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    cdeOff->setOn( entry == "Off" );
-    cdePlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    cdePlugin->setOn( entry == "Plugin" );
-    cdeDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    cdeDirect->setOn( entry == "Direct" );
-
-    folder = new CheckListItem( stfolder, "MotifPlus" );
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/MotifPlus", "Plugin", &settingsOK );
-    motifplusOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    motifplusOff->setOn( entry == "Off" );
-    motifplusPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    motifplusPlugin->setOn( entry == "Plugin" );
-    motifplusDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    motifplusDirect->setOn( entry == "Direct" );
-
-    folder = new CheckListItem( stfolder, "Platinum" );
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/Platinum", "Plugin", &settingsOK );
-    platinumOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    platinumOff->setOn( entry == "Off" );
-    platinumPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    platinumPlugin->setOn( entry == "Plugin" );
-    platinumDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    platinumDirect->setOn( entry == "Direct" );
-
-    folder = new CheckListItem( stfolder, "Motif" );
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/Motif", "Plugin", &settingsOK );
-    motifOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    motifOff->setOn( entry == "Off" );
-    motifPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    motifPlugin->setOn( entry == "Plugin" );
-    motifDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    motifDirect->setOn( entry == "Direct" );
-
-    folder = new CheckListItem( stfolder, "Windows XP" );
-    folder->addRequiredFiles("uxtheme.h");
-    folder->setRequiredFileLocation("part of the Microsoft Platform SDK, which is usually available for "
-				    "download from the following location:"
-				    "<p>http://www.microsoft.com/msdownload/platformsdk/sdkupdate/<p>");
-
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/Windows XP", "Direct", &settingsOK );
-    xpOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    xpOff->setOn( true );
-    xpPlugin = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    xpPlugin->setOn( entry == "Plugin" && folder->verify() );
-    xpPlugin->setEnabled( folder->verify() );
-    xpDirect = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    xpDirect->setOn( entry == "Direct" && folder->verify() );
-    xpDirect->setEnabled( folder->verify() );
-
-    folder = new CheckListItem( stfolder, "Windows" );
-    entry = settings.readEntry( "/Trolltech/Qt/Styles/Windows", "Direct", &settingsOK );
-    item = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    item->setEnabled( false );
-    item->setOn( entry == "Off" );
-    item = new CheckListItem( folder, "Plugin", QCheckListItem::RadioButton );
-    item->setEnabled( false );
-    item->setOn( entry == "Plugin" );
-    item = new CheckListItem( folder, "Direct", QCheckListItem::RadioButton );
-    item->setOn( entry == "Direct" );
-
-    entries = settings.readListEntry( "/Trolltech/Qt/Advanced C++", ',', &settingsOK );
-    folder = new CheckListItem( configPage->advancedList, "Advanced C++" );
-    folder->setHelpText(tr("Qt can be built with exception handling, STL support and RTTI support "
-			   "enabled or disabled. Qt itself doesn't use any of those features."
-			   "The default is to disable all advanced C++ features."),
-			   configPage->explainOption);
-    advancedRTTI = new CheckListItem( folder, "RTTI", QCheckListItem::CheckBox );
-    advancedRTTI->setOn( entries.contains( "RTTI" ) );
-    advancedExceptions = new CheckListItem( folder, "Exceptions", QCheckListItem::CheckBox );
-    advancedExceptions->setOn( entries.contains( "Exceptions" ) );
-    advancedSTL = new CheckListItem( folder, "STL", QCheckListItem::CheckBox );
-    advancedSTL->setOn( entries.contains( "STL" ) );
-
-    folder = new CheckListItem( configPage->advancedList, "Tablet Support" );
-    folder->addRequiredFiles("wintab.h,wintab.lib");
-    folder->setRequiredFileLocation("available at http://www.pointing.com/FTP.HTM");
-    folder->setHelpText(tr("Qt can support the Wacom brand tablet device."), configPage->explainOption);
-    entry = settings.readEntry( "/Trolltech/Qt/Tablet Support", "Off", &settingsOK );
-    tabletOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    tabletOff->setOn( true );
-    tabletOn = new CheckListItem( folder, "On", QCheckListItem::RadioButton );
-    tabletOn->setOn( entry == "On" && folder->verify() );
-
-    folder = new CheckListItem( configPage->advancedList, "Accessibility" );
-    folder->setHelpText(tr("<p>Accessibility means making software usable and accessible to a wide "
-			   "range of users, including those with disabilities."
-			   "This feature is only available with a shared Qt library."),
-			   configPage->explainOption);
-    entry = settings.readEntry( "/Trolltech/Qt/Accessibility", "On", &settingsOK );
-    accOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    accOff->setOn( entry == "Off" );
-    accOn = new CheckListItem( folder, "On", QCheckListItem::RadioButton );
-    accOn->setOn( entry == "On" );
-
-    entry = settings.readEntry( "/Trolltech/Qt/Big Textcodecs", "On", &settingsOK );
-    folder = new CheckListItem( configPage->advancedList, "Big Textcodecs" );
-    folder->setHelpText(tr("Textcodecs provide translations between text encodings. For "
-			   "languages and script systems with many characters it is necessary "
-			   "to have big data tables that provide the translation. Those codecs "
-			   "can be left out of the Qt library and will be loaded on demand.\n"
-			   "Having the codecs in a plugin is not available with a static Qt "
-			   "library."), configPage->explainOption);
-    bigCodecsOff = new CheckListItem( folder, "Off", QCheckListItem::RadioButton );
-    bigCodecsOff->setOn( entry == "Off" );
-    bigCodecsOn = new CheckListItem( folder, "On", QCheckListItem::RadioButton );
-    bigCodecsOn->setOn( entry == "On" );
-
-    setStaticEnabled( staticItem->isOn() );
-    setJpegDirect( mngDirect->isOn() );
-
-    configPage->configList->setUpdatesEnabled(true);
-    configPage->advancedList->setUpdatesEnabled(true);
-
-    // Needed to force the scrollbars to appear on Windows 9x...
-    QListViewItem *dummy = new QListViewItem(configPage->configList, "Dummy Item");
-    delete dummy;
-
-    setBackEnabled( buildPage, false );
-#endif
-}
-
-void SetupWizardImpl::showPageBuild()
-{
-    autoContTimer.stop();
-    nextButton()->setText( "Next >" );
-    saveSettings();
-
-#if defined(Q_OS_WIN32)
-    if( globalInformation.reconfig() && configPage->rebuildInstallation->isChecked() && qWinVersion() & WV_NT_based ) {
-	QStringList args;
-
-	buildPage->compileProgress->hide();
-	buildPage->restartBuild->hide();
-
-    	args << globalInformation.text(GlobalInformation::MakeTool) << "clean";
-	logOutput( "Starting cleaning process" );
-	connect( &cleaner, SIGNAL( processExited() ), this, SLOT( cleanDone() ) );
-	connect( &cleaner, SIGNAL( readyReadStdout() ), this, SLOT( readCleanerOutput() ) );
-	connect( &cleaner, SIGNAL( readyReadStderr() ), this, SLOT( readCleanerError() ) );
-	cleaner.setWorkingDirectory( QEnvironment::getEnv( "QTDIR" ) );
-	cleaner.setArguments( args );
-	if( !cleaner.start() ) {
-	    logOutput( "Could not start cleaning process" );
-	    emit wizardPageFailed( indexOf(currentPage()) );
-	}
-    } else
-#endif
-	cleanDone();	// We're not doing a reconfig, so skip the clean step
-
-}
-
-static bool verifyHelper(QListView *listview, bool result)
-{
-    QListViewItemIterator it(listview);
-    while (it.current()) {
-	QListViewItem *item = it.current();
-	++it;
-	if (item->rtti() != CheckListItem::RTTI)
-	    continue;
-
-	CheckListItem *checkItem = (CheckListItem*)item;
-	if (!checkItem->isOn())
-	    continue;
-
-	bool r = checkItem->verify();
-	checkItem->setCritical(!r);
-	if (result) result = r;
-    }
-    return result;
-}
-
-bool SetupWizardImpl::verifyConfig()
-{
-    bool result = true;
-#if !defined(EVAL) && !defined(EDU) && !defined(NON_COMMERCIAL)
-    result = verifyHelper(configPage->configList, result);
-    result = verifyHelper(configPage->advancedList, result);
-#endif
-    return result;
-}
diff --git a/util/install/win/shell.cpp b/util/install/win/shell.cpp
deleted file mode 100644
index b1303a7..0000000
--- a/util/install/win/shell.cpp
+++ /dev/null
@@ -1,472 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "shell.h"
-#include "environment.h"
-#include "dialogs/folderdlgimpl.h"
-#include <qnamespace.h>
-#include <qdir.h>
-#include <qlibrary.h>
-#if defined(Q_OS_WIN32)
-#include <windows.h>
-#include <shlobj.h>
-#else
-#include <sys/param.h>
-#include <sys/mount.h>
-#endif
-
-static const char* folder_closed_xpm[]={
-    "16 16 9 1",
-    "g c #808080",
-    "b c #c0c000",
-    "e c #c0c0c0",
-    "# c #000000",
-    "c c #ffff00",
-    ". c None",
-    "a c #585858",
-    "f c #a0a0a4",
-    "d c #ffffff",
-    "..###...........",
-    ".#abc##.........",
-    ".#daabc#####....",
-    ".#ddeaabbccc#...",
-    ".#dedeeabbbba...",
-    ".#edeeeeaaaab#..",
-    ".#deeeeeeefe#ba.",
-    ".#eeeeeeefef#ba.",
-    ".#eeeeeefeff#ba.",
-    ".#eeeeefefff#ba.",
-    ".##geefeffff#ba.",
-    "...##gefffff#ba.",
-    ".....##fffff#ba.",
-    ".......##fff#b##",
-    ".........##f#b##",
-    "...........####."
-};
-
-static const char* folder_open_xpm[]={
-    "16 16 11 1",
-    "# c #000000",
-    "g c #c0c0c0",
-    "e c #303030",
-    "a c #ffa858",
-    "b c #808080",
-    "d c #a0a0a4",
-    "f c #585858",
-    "c c #ffdca8",
-    "h c #dcdcdc",
-    "i c #ffffff",
-    ". c None",
-    "....#ab##.......",
-    "....###.........",
-    "....#acab####...",
-    "###.#acccccca#..",
-    "#ddefaaaccccca#.",
-    "#bdddbaaaacccab#",
-    ".eddddbbaaaacab#",
-    ".#bddggdbbaaaab#",
-    "..edgdggggbbaab#",
-    "..#bgggghghdaab#",
-    "...ebhggghicfab#",
-    "....#edhhiiidab#",
-    "......#egiiicfb#",
-    "........#egiibb#",
-    "..........#egib#",
-    "............#ee#"
-};
-
-static const char* file_xpm []={
-    "16 16 7 1",
-    "# c #000000",
-    "b c #ffffff",
-    "e c #000000",
-    "d c #404000",
-    "c c #c0c000",
-    "a c #ffffc0",
-    ". c None",
-    "................",
-    ".........#......",
-    "......#.#a##....",
-    ".....#b#bbba##..",
-    "....#b#bbbabbb#.",
-    "...#b#bba##bb#..",
-    "..#b#abb#bb##...",
-    ".#a#aab#bbbab##.",
-    "#a#aaa#bcbbbbbb#",
-    "#ccdc#bcbbcbbb#.",
-    ".##c#bcbbcabb#..",
-    "...#acbacbbbe...",
-    "..#aaaacaba#....",
-    "...##aaaaa#.....",
-    ".....##aa#......",
-    ".......##......."
-};
-
-static const char* info_xpm[] = {
-    "16 16 6 1",
-    "# c #0000ff",
-    "a c #6868ff",
-    "b c #d0d0ff",
-    "c c #ffffff",
-    "- c #000000",
-    ". c none",
-    ".....------.....",
-    "...--######--...",
-    "..-###acca###-..",
-    ".-####cccc####-.",
-    ".-####acca####-.",
-    "-##############-",
-    "-######bcc#####-",
-    "-####ccccc#####-",
-    "-#####cccc#####-",
-    "-#####cccc#####-",
-    "-#####cccc#####-",
-    ".-####cccc####-.",
-    ".-###cccccc###-.",
-    "..-##########-..",
-    "...--#######-...",
-    ".....------....."
-};
-
-static QPixmap* closedImage = NULL;
-static QPixmap* openImage = NULL;
-static QPixmap* fileImage = NULL;
-static QPixmap* infoImage = NULL;
-
-#if defined(Q_OS_WIN32)
-typedef BOOL (WINAPI *PtrSHGetPathFromIDListW)(LPITEMIDLIST,LPWSTR);
-static PtrSHGetPathFromIDListW ptrSHGetPathFromIDListW = 0;
-
-static void resolveLibs()
-{
-    static bool triedResolve = false;
-
-    if ( !triedResolve ) {
-	triedResolve = true;
-	if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-	    QLibrary lib("shell32");
-	    lib.setAutoUnload( false );
-	    ptrSHGetPathFromIDListW = (PtrSHGetPathFromIDListW) lib.resolve( "SHGetPathFromIDListW" );
-	}
-    }
-}
-#endif
-
-WinShell::WinShell()
-{
-#if defined(Q_OS_WIN32)
-    HRESULT hr;
-    LPITEMIDLIST item;
-#endif
-
-    localProgramsFolderName.clear();
-    commonProgramsFolderName.clear();
-    windowsFolderName.clear();
-
-#if defined(Q_OS_WIN32)
-    resolveLibs();
-    if( ptrSHGetPathFromIDListW && int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-	ushort buffer[MAX_PATH];
-	if( SUCCEEDED( hr = SHGetSpecialFolderLocation( NULL, CSIDL_PROGRAMS, &item ) ) ) {
-	    if( ptrSHGetPathFromIDListW( item, (wchar_t*) buffer ) ) {
-		localProgramsFolderName = QString::fromUcs2( buffer );
-		if( SUCCEEDED( hr = SHGetSpecialFolderLocation( NULL, CSIDL_COMMON_PROGRAMS, &item ) ) ) {
-		    if( ptrSHGetPathFromIDListW( item, (wchar_t*) buffer ) )
-			commonProgramsFolderName = QString::fromUcs2( buffer );
-		    else
-			qDebug( "Could not get name of common programs folder" );
-		}
-		else
-		    qDebug( "Could not get common programs folder location" );
-
-		if( GetWindowsDirectoryW( (wchar_t*) buffer, MAX_PATH ) )
-		    windowsFolderName = QString::fromUcs2( buffer );
-		else
-		    qDebug( "Could not get Windows directory" );
-	    }
-	    else
-		qDebug( "Could not get name of programs folder" );
-	}
-	else
-	    qDebug( "Could not get programs folder location" );
-    }
-    else {
-	QByteArray buffer( MAX_PATH );
-	if( SUCCEEDED( hr = SHGetSpecialFolderLocation( NULL, CSIDL_PROGRAMS, &item ) ) ) {
-	    if( SHGetPathFromIDListA( item, buffer.data() ) ) {
-		localProgramsFolderName = buffer.data();
-		commonProgramsFolderName = buffer.data();
-	    }
-	    else
-		qDebug( "Could not get name of programs folder" );
-	}
-	else
-	    qDebug( "Could not get programs folder location" );
-    }
-#endif
-
-    closedImage = new QPixmap( folder_closed_xpm );
-    openImage = new QPixmap( folder_open_xpm );
-    fileImage = new QPixmap( file_xpm );
-    infoImage = new QPixmap( info_xpm );
-}
-
-WinShell::~WinShell()
-{
-}
-
-QString WinShell::selectFolder( QString folderName, bool common )
-{
-    QStringList folders;
-    FolderDlgImpl dlg;
-
-    if( common )
-	dlg.setup( commonProgramsFolderName, folderName );
-    else
-	dlg.setup( localProgramsFolderName, folderName );
-
-    if( dlg.exec() ) {
-	return dlg.getFolderName();
-    }
-    else
-	return folderName;
-}
-
-QString WinShell::createFolder( QString folderName, bool common )
-{
-    QDir folderDir;
-    QString folderPath;
-
-    if( common )
-	folderPath = commonProgramsFolderName + QString( "\\" ) + folderName;
-    else
-	folderPath = localProgramsFolderName + QString( "\\" ) + folderName;
-
-    folderDir.setPath( folderPath );
-
-    if( !folderDir.exists( folderPath ) )
-	if( !createDir( folderPath ) )
-	    return QString();
-
-    return folderPath;
-}
-
-
-#if defined(Q_OS_WIN32)
-HRESULT WinShell::createShortcut( QString folderName, bool, QString shortcutName, QString target, QString description, QString arguments, QString wrkDir )
-{
-    IPersistFile* linkFile;
-    HRESULT hr;
-
-    // Add .lnk to shortcut name if needed
-    if( shortcutName.right( 4 ) != ".lnk" )
-	shortcutName += ".lnk";
-
-    folderName = QEnvironment::getFSFileName( folderName );
-    if( int( qWinVersion() ) & int( Qt::WV_NT_based ) ) {
-        IShellLinkW* link;
-	if( SUCCEEDED( hr = CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (void**)&link ) ) ) {
-	    if( SUCCEEDED( hr = link->QueryInterface( IID_IPersistFile, (void**)&linkFile ) ) ) {
-		link->SetPath( (const wchar_t*) target.ucs2() );
-		QString _wrkDir = wrkDir;
-		if( !_wrkDir.length() ) {
-		    _wrkDir = QDir::toNativeSeparators( target );
-		    // remove the filename
-		    int pos = _wrkDir.findRev( '\\' );
-		    if ( pos > 0 )
-			_wrkDir = _wrkDir.left( pos );
-		    else
-			_wrkDir = "";
-		}
-
-		link->SetWorkingDirectory( (const wchar_t*) _wrkDir.ucs2() );
-		if( description.length() )
-		    link->SetDescription( (const wchar_t*) description.ucs2() );
-		if( arguments.length() )
-		    link->SetArguments( (const wchar_t*)  arguments.ucs2() );
-
-		hr = linkFile->Save( (const wchar_t*)  QString( folderName + QString( "\\" ) + shortcutName ).ucs2(), false );
-
-		linkFile->Release();
-	    }
-	    else
-		qDebug( "Could not get link file interface" );
-
-	    link->Release();
-	}
-	else
-	    qDebug( "Could not instantiate link object" );
-    }
-    else {
-        IShellLinkA* link;
-	if( SUCCEEDED( hr = CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkA, (void**)&link ) ) ) {
-	    if( SUCCEEDED( hr = link->QueryInterface( IID_IPersistFile, (void**)&linkFile ) ) ) {
-		link->SetPath( target.local8Bit().data() );
-		QString wrkDir = QDir::toNativeSeparators( target );
-
-		// remove the filename
-		int pos = wrkDir.findRev( '\\' );
-		if ( pos > 0 )
-		    wrkDir = wrkDir.left( pos );
-		else
-		    wrkDir = "";
-
-		link->SetWorkingDirectory( wrkDir );
-		if( description.length() )
-		    link->SetDescription( description.local8Bit() );
-		if( arguments.length() )
-		    link->SetArguments( arguments.local8Bit() );
-
-		hr = linkFile->Save( (const wchar_t*)  QString( folderName + QString( "\\" ) + shortcutName ).ucs2(), false );
-
-		linkFile->Release();
-	    }
-	    else
-		qDebug( "Could not get link file interface" );
-
-	    link->Release();
-	}
-	else
-	    qDebug( "Could not instantiate link object" );
-    }
-
-    return hr;
-}
-#endif
-
-#if defined(Q_OS_WIN32)
-void WinShell::createInternetShortcut( QString folderName, bool, QString shortcutName, QString url )
-{
-    // Add .url to shortcut name if needed
-    if( shortcutName.right( 4 ) != ".url" )
-	shortcutName += ".url";
-
-    // ### maybe we should use some Microsoft API instead (IShellLink, e.g.)?
-    QDir dir( folderName );
-    QFile f( dir.filePath( shortcutName ) );
-    if ( f.open( IO_WriteOnly | IO_Translate ) ) {
-	QTextStream ts( &f );
-	ts  << "[InternetShortcut]" << endl
-	    << "URL=" << url;
-    }
-}
-#endif
-
-bool WinShell::createDir( QString fullPath )
-{
-    QStringList hierarchy = QStringList::split( QString( "\\" ), fullPath );
-    QString pathComponent, tmpPath;
-    QDir dirTmp;
-    bool success;
-
-    for( QStringList::Iterator it = hierarchy.begin(); it != hierarchy.end(); ++it ) {
-	pathComponent = *it + "\\";
-	tmpPath += pathComponent;
-	success = dirTmp.mkdir( tmpPath );
-    }
-    return success;
-}
-
-QPixmap* WinShell::getClosedFolderImage()
-{
-    return closedImage;
-}
-
-QPixmap* WinShell::getOpenFolderImage()
-{
-    return openImage;
-}
-
-QPixmap* WinShell::getFileImage()
-{
-    return fileImage;
-}
-
-QPixmap* WinShell::getInfoImage()
-{
-    return infoImage;
-}
-
-#if defined(Q_OS_WIN32)
-QString WinShell::OLESTR2QString( LPOLESTR str )
-{
-    QString tmp;
-
-    for( int i = 0; str[ i ]; i++ )
-	tmp += QChar( str[ i ] );
-
-    return tmp;
-}
-#endif
-
-/*!
-  Returns the free space for the directory.  The space is returned in bytes,
-  and should only be considered valid for this particular directory.
-*/
-#if defined(Q_OS_WIN32)
-ULARGE_INTEGER WinShell::dirFreeSpace( QString dirPath )
-{
-    QString drive = dirPath.left( dirPath.find( '\\' ) );
-    ULARGE_INTEGER freeSpace;
-
-    freeSpace.QuadPart = 0;
-
-    if( GetProcAddress( GetModuleHandleA( "kernel32.dll" ), "GetDiskFreeSpaceExA" ) ) {
-	ULARGE_INTEGER ulBytesAvailable, ulBytesTotal;
-	if( GetDiskFreeSpaceExA( drive.local8Bit(), &ulBytesAvailable, &ulBytesTotal, NULL ) )
-	    freeSpace = ulBytesAvailable;
-    }
-    else if( GetProcAddress( GetModuleHandleA( "kernel32.dll" ), "GetDiskFreeSpaceA" ) ) {
-	DWORD dwSPC, dwBPS, dwClusters, dwTotalClusters;
-	if( GetDiskFreeSpaceA( drive.local8Bit(), &dwSPC, &dwBPS, &dwClusters, &dwTotalClusters ) )
-	    freeSpace.QuadPart = dwSPC * dwBPS * dwClusters;
-    }
-    return freeSpace;
-}
-#elif defined(Q_OS_MAC)
-long  WinShell::dirFreeSpace( QString dirPath )
-{
-    struct statfs buf;
-    if (statfs( dirPath.local8Bit(), &buf ) != -1)
-	return buf.f_bavail * buf.f_bsize;
-    return 0;
-}
-#endif
-
diff --git a/util/install/win/shell.h b/util/install/win/shell.h
deleted file mode 100644
index 4d5f9af..0000000
--- a/util/install/win/shell.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef SHELL_H
-#define SHELL_H
-
-#include <qstring.h>
-#include <qstringlist.h>
-#include <qpixmap.h>
-#if defined(Q_OS_WIN32)
-#include <windows.h>
-#include <shlobj.h>
-#endif
-
-class WinShell
-{
-public:
-    WinShell();
-    ~WinShell();
-
-private:
-    bool createDir( QString fullPath );
-#if defined(Q_OS_WIN32)
-    QString OLESTR2QString( LPOLESTR str );
-#endif
-public:
-    QString localProgramsFolderName;
-    QString commonProgramsFolderName;
-    QString windowsFolderName;
-    QString selectFolder( QString folderName, bool common );
-
-    QString createFolder( QString folderName, bool common );
-
-#if defined(Q_OS_WIN32)
-    HRESULT createShortcut( QString folderName, bool common, QString shortcutName, QString target, QString description = QString(), QString arguments = QString(), QString wrkDir = QString() );
-    void createInternetShortcut( QString folderName, bool common, QString shortcutName, QString url );
-#endif
-
-    static QPixmap* getOpenFolderImage();
-    static QPixmap* getClosedFolderImage();
-    static QPixmap* getFileImage();
-    static QPixmap* getInfoImage();
-#if defined(Q_OS_WIN32)
-    static ULARGE_INTEGER dirFreeSpace( QString dirPath );
-#elif defined(Q_OS_MAC)
-    static long dirFreeSpace( QString dirPath );
-#endif
-};
-
-#endif
diff --git a/util/install/win/uninstaller/quninstall.pro b/util/install/win/uninstaller/quninstall.pro
deleted file mode 100644
index c64e8d2..0000000
--- a/util/install/win/uninstaller/quninstall.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-TEMPLATE = app
-CONFIG += qt
-HEADERS = ../environment.h uninstallimpl.h
-SOURCES = uninstaller.cpp ../environment.cpp uninstallimpl.cpp
-INTERFACES = uninstall.ui
-TARGET  = quninstall
-DESTDIR = ../../../../dist/win/bin
diff --git a/util/install/win/uninstaller/uninstall.ui b/util/install/win/uninstaller/uninstall.ui
deleted file mode 100644
index 88f27a7..0000000
--- a/util/install/win/uninstaller/uninstall.ui
+++ /dev/null
@@ -1,167 +0,0 @@
-<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
-<class>UninstallDlg</class>
-<widget class="QDialog">
-    <property name="name">
-        <cstring>UninstallDlg</cstring>
-    </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>527</width>
-            <height>365</height>
-        </rect>
-    </property>
-    <property name="caption">
-        <string>Uninstalling Qt</string>
-    </property>
-    <grid>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>11</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QLabel" row="0" column="0" rowspan="2" colspan="1">
-            <property name="name">
-                <cstring>sideBar</cstring>
-            </property>
-            <property name="pixmap">
-                <pixmap>image0</pixmap>
-            </property>
-            <property name="scaledContents">
-                <bool>false</bool>
-            </property>
-            <property name="alignment">
-                <set>AlignTop</set>
-            </property>
-        </widget>
-        <widget class="QGroupBox" row="0" column="1">
-            <property name="name">
-                <cstring>progressBox</cstring>
-            </property>
-            <property name="title">
-                <string>Uninstallation progress</string>
-            </property>
-            <vbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>11</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QTextView">
-                    <property name="name">
-                        <cstring>filesDisplay</cstring>
-                    </property>
-                    <property name="font">
-                        <font>
-                            <family>Courier</family>
-                        </font>
-                    </property>
-                    <property name="wordWrap">
-                        <enum>NoWrap</enum>
-                    </property>
-                </widget>
-            </vbox>
-        </widget>
-        <widget class="QLayoutWidget" row="1" column="1">
-            <property name="name">
-                <cstring>layout2</cstring>
-            </property>
-            <hbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <spacer>
-                    <property name="name">
-                        <cstring>Spacer1</cstring>
-                    </property>
-                    <property name="orientation">
-                        <enum>Horizontal</enum>
-                    </property>
-                    <property name="sizeType">
-                        <enum>Expanding</enum>
-                    </property>
-                    <property name="sizeHint">
-                        <size>
-                            <width>90</width>
-                            <height>20</height>
-                        </size>
-                    </property>
-                </spacer>
-                <widget class="QPushButton">
-                    <property name="name">
-                        <cstring>cleanRegButton</cstring>
-                    </property>
-                    <property name="enabled">
-                        <bool>false</bool>
-                    </property>
-                    <property name="text">
-                        <string>Clean Registry</string>
-                    </property>
-                </widget>
-                <widget class="QPushButton">
-                    <property name="name">
-                        <cstring>okButton</cstring>
-                    </property>
-                    <property name="enabled">
-                        <bool>false</bool>
-                    </property>
-                    <property name="text">
-                        <string>OK</string>
-                    </property>
-                </widget>
-                <spacer>
-                    <property name="name">
-                        <cstring>Spacer2</cstring>
-                    </property>
-                    <property name="orientation">
-                        <enum>Horizontal</enum>
-                    </property>
-                    <property name="sizeType">
-                        <enum>Expanding</enum>
-                    </property>
-                    <property name="sizeHint">
-                        <size>
-                            <width>100</width>
-                            <height>20</height>
-                        </size>
-                    </property>
-                </spacer>
-            </hbox>
-        </widget>
-    </grid>
-</widget>
-<images>
-    <image name="image0">
-        <data format="XPM.GZ" length="26835">789ced5c595323bb927e3fbfa2e3e8edc6842ed8982526e601b0318bd97726e62125956df0868d59cc8df9ef93ca452e6f34f4e1ccf4c37405747fae2a293fe5a24c49ee7ffee3c7cdc9e18f7ffcf38fa7210ceffd0fdf84c18f7f84e74e67f49ffff51ffffae3cfe5a5a51ff1a7b8b1f1a3f0e7bffdf1a7811ffe8759a23f842b09af13be51bcccf78de015797e27617efe5ab13c6f05afcbf3eb09d3f3f0a0989ff7cd84f9fea360cfef879030dfef335e16f9bd172cf2c125e1f524ef6dc22cef9a62e9ff30616eff4ab0ca5f4d98efaf2a96f7af13e6fb15c122bfbf4f98fbbf532ce355669cf81c27cced9d28e6f68d132cfcec86609117b6044bff8efac7d6a43f7fc358fb0be78af9beeb09d6f1eb0bd6f1180896f6cd2ae382b467af04cbfb595bb0bcef6b84d7f579680896e7c32061e26b2f056bffbb82d53e2e222e2cebfbb02158c7635bb03c6faf1917d5febd6079df497b45ed8fdfdfd0e7c36dc2ac9f4cb0eae342b0f67f2c58ede18d319a1ff747fe541cf7772258f5779430f75767acefdb9b84d93eae0497e4fd52c2743ff4148bbedf046fc8f3649fc5241f5c0bd6f61e12e6fe1e15737b765db0b4679e12e6e797040791ff3c61baef8b8ab9bdb0c1b824fd7b8a072b056dcfef0a96f6fc4ac2ccf75531b707cf8c4bcacf254ccfbb8162f14fe92ff55f4a989fbf51cccf674dc1c2dfde26cccf9f12067d1e7604ebfd57c5c27f59b0f07119e35591cf913d940aa5c0f1213c292e6c90bc7b8c57d53e8e158bbece048b3ce12061eeef50716199da7b16acfadd502cf25c0ad6f1e7f651de22bdefac60b59f9262894f2058ed654bb1c8e7046bfb7a5ff4ebd37d89c79b8a597e77ce784dc7634fb1c8ff9e30bf7fa498df0f6b82d51eb61366794031bfefc9de578bab1b45d6c750b0c8e7cf14cbf8de2ae6f10a59c2f47e28325679a19530b7b7af58f8ae254cefc3bd60912f5414f3f3504a98fb6b286679b28e60d1bfdf51ccedd953c5dc5ea6f2a93ec85f565deaff5eb18c6f2b61eebfad58fad7e7c51e7c3b61e67fa958c6f324616acf6482351e0c1266f9de15cbfbdd84599e3ae3f582f0bd532ccfaf27ccfd51bc5d2beafb6e55b1e8b7c038bd6f13e6f79705aff27dbb9630cb73ad98db83a66090fb778aa5bf15c199d8073fefd2f325c5d25e59b03c6f2e13667b0a8ac5bf1f196fc8f86446b1f02b24ccef8f14f3fbf644b0f009f23e1464fe23fb5a5f49efbf28e6e7fd51c274df2e0996f18243c5624f8d84d93fdf05cb78002816796cc23c5ebb82753cf719abbc7ea458f8937daffbf4fe9260194fbbaa58ee737b1e94af572c7cb384f9f9a160b58fae62d1e75bc26c8f34be1b2bda7e962996f1a80b96f7dd71c22ccfabe215aa2fc263c240f6a2efeb78d6144bff4131bfef5612a6f7dd48b08ecfb26296c79c26ccf755be4cda1b32760589572f8a25de541366be65c5a2ef31e6f6453eb72af9d046c2acef55c532de5630c87c799830c7bf9162997f760567d2de9d62c947683edbf03a7efe5cb1f07d4a98c60f2e04cbf89815c5fc7cc6e3ef95af394a989fef2a16fd5e264cedfb8660198ff09230cb7fa058e66f9f30c707ab58e2db96628907db09b33cfb8a459ee384499e50535ce27af741b08eff5bc21cbf1f154b3e344c98e5bf502cfedb4f98ed6153b1f8632f61bedf129c493ed84b98fbd7f115fdda4ec29c9f14154b7c394898fd27bd2fe3c5f6e57d51fa6b24ccfdd5154b7fed8439dfeb2816ffd84e98f948ff7e4dc6f33e6196f755b1d86b53b093f84df90d94923ddd24ccf6baa698f517fa82355e9d29e6f7cd30618e17d78af97d58162cfa74a058f479a558f455562cfeb49930dbfb4031b7ef2a82459f50502cfeec12e6feb57dd127ec25ccf1f149b1e8f33d6196afa498e5f3a97fe19ffa17f99e19277b6826ccf610148b3db884f9fe9362f1cfd784599e37c5226f2161e673a098e5b535c1623f1612a6fe4e878a451e9330cbd3572ce3b79f30dbc78b62f1c76ac23c1fea7838e97f9030b7ef154bff59c27c5ffb73e28f7b09733c5e532cfdeb78d5a5bfe784d95f54debad8cb56c21c7f78fc83eadf9f2ae6f1846ac26c9f5b8a59ff9eed37a8fe602961d6cf9d6289ffe709b37e2b8ac5df2e12667b2b2a167b6b0b16fd413161f68f8e62c927d3f3228ff62ffab3a384f9be512cfc571266fe0f8a85bff627fa75278a45bff709b37e5f14cb78f512e6f1d8532cf2ed26ccf3d3b362b1f79d8479bcd6154b7cea0a16fbf08f09b37db4148bbc0f09f3fd9a62f1cfa384595e1dffbae46fd58459de03c5920fb0ff8720f1c12d2996f8b5ad58e687a384d9ff68be7125d58f3709f3fcbcaa58f4b3ac78d5d1fd75c132deaea558f2b1f78459fe8e62b18776c23cde5eb1cc27cd84e97e0682653c61a858f4aff2c8f89946c2dcff9962d17735616ebfae58fadf4b98e5bb659cc6b7af58eabf9162d15f2d611e9f65c5325f5d25cce3fd2658fc2bec2816f90b8ae579b22f17923e3a8ad78a844f05bb35ba0fbb8295df49c2cc9fc73fa83c70a658f4bf9130f77f2558ec276c26ccf70f154b7e47f6e05715670f8245dfa7c3bfefb226ff6fbe1206bdbea7afbf9bcb873c7f3b2e6389f2d7d7defbbdb94c4a19fffe2e89ff4e2e3f67b7f0b9e83d2eef51bf1f9769361f3c67be8fc9ff0e97cf58e1efcbe56bec7e372ed6d3ef803f99cdf0771d2f379e51d49a6cc0cf3dfe3408d51167bf1717dbb40dbc82c857174ef77865c22590dc863ee57f33e7f05d4cbe878b7dd091c6bf513fc42b5a4f64d8b22d7a263047d154db76f0a74bd7b7b1f9361b6b3213e2a29ed0144ebda83389c01dfb88bf9dede365488b8ddf870bca1a251e208f28355eb97b461844cf89d23f219721fe76a88ff86c7ceff9b79af7077479b224635f50d627fb6adfec08af77bb89d796ddc6ab6c2b76c756f1d35dbb67f7f1598fef1dfc665c6af610ff756f8f50c6114a7c6c4feca93db3e7f6c25eda2bba2eedb5bdc14f6eed9d5db2cbb6608bf87cb02bdfc3e4735c16cd03b939a28136f3842c4a76d5aed975947a038dcbd08f31902e439f59e38c37c164a66e47a64136e7c62dfe7d5c62eba6893ff78464c6c088da340f76605af8bb6bdaa663baa6671e4ddfe4ffc082cb08ab8179b2a766689e519f6df49f8179c17189712e4687f849dd3e7c3717bceecdab796526e60d6de3017b5ab1c18cccbbd9345b66db9449fa8a5cf359e8dd1d53256c91fdaed933fbe600a5c788877d64e44b6deca7763a34877f0797a9cf7b18938aa88f23736c4e8407a08c1f311973613e207ca2cded99537386fa79b45d8aef4d9a6f8d7dfc3e2e910deae45e6c2c5a345a16feab63cecd85b93457288bdacdce420e7936d7e6062f66738bfab9a3b79d5932cb76db144c112d4bfd9074f37d5c50cfaf631de175883a79428dac989259257d5c9bb54ff198af9fc86c9dc66260363006eedabef4e52503fa543efa152ed44acd0258fb82e200b8e4213acef33d7e9ed5ed4c71b9a127908dbd006f0b6684f6d520368dcfe6d65f995f948b7d4261026424355bd6acacd3e39e8f0855bc7684d10ebd0de91e4637a8e30cf46e62bed68833d7dfc605305a8eec1d348409cbcd32cdf298c479a620acc6ade4e23564d0b465d3c63ebf990bc5e1a8e926c6e2275b817b7b99fa372411244b1beb607a36512daec3c384eceb53fae4c8368016b4a1631ea01b638048d28b59c25fe3821cc0b46c0f7ad8cd9d30614de4b513795ce335b69647bcfa6695b31894af9f63b54eefb39759c910d48bf0137b0d037882a191b99233f158612c92f3937a0914f19d39473f6924bb998cb3636d187844b93378c6b17d81579c81f6f1eac21b8ce01d368d872d923d8ec7383aabff2832b00d65d3414b88594686b3f3540d3a6d6f9fe2d2c339be8133e3ae5d128fbf9e60b233c1a38223ba831caab08b71fb1cf630677e857d9c0563de398203a8c1211cc13132c6c7e184343a393215eac5e233a77046f99ae64e58d1fd152e1883bbd6c1395cc0738ac131285fc2a530d9812bd6075cc30ddcda77b8832558b68f508022e6cf5c6dc68aa58bd21c9906acc02b94306fde9016d76035c727d91db6b786d583c36ca013ab37bcee7f9d0be5f42bb06e2eec19ce27b9a8434c40626a1cc50d4c778d1d3970b1fa8a36d1c46b1c7d6a78c54a07301b2dda5de75d7099ccb69022a17a21406cb7ecea186d7a54c3f5a9aa7b99643266f3192e3163710dd7a45e351ae5628fbb8f4cdc03bcd88a6bd9e0dae38b183562fea31534e7429841765cc7beb9ae3d866bd74b3151a322a47efaeed1ee219b2155a59db4a2b390cbfc3827cfb65c1fedab2e79faa45d9304f0e806ee09da76e886f4fc336924c895f25264508fb646ccf8efccbd9815f74abe63a83dcea04dcab98d7b7358e5a0263be437d98c7c135ca62d0f7b7aa0d5141fad020a98d51f4b5fe319f136f61475027df7ee36cd798c38d33dc41acbdcdb81dbc2485427ddc4567beac7b6e1b63132acb8776403e4339319048fd6b1adbab2abd07a889f9275ca5fe6cda6d4a7c759b78995d6a6db99885e791b2b9b3d3772558c545df6ef311f696980ad34a256dc2e3eb3eff6dcbe3b7035db41dbddc2cfeaf6d59cba43f2c6e90c957a7447ee18ce5dc53dbb13f5405d3f9cf5fd692e512bf89eb72ddb8536565a65b2e44a9a1d53ede14edd1946eb23b29eb13ef2baf1d1e7b0b55e8c86b6e4cedd85bbb4658c4f435a8b69d8babb72d7ee862cd8cce1d2335bb612e389bb8dda1119a7d6d5e771a19991b8c4bf016739ac19c7d589915c9066007707afb680d6554f2b4b7e0e97815bc2df1db7ec0af694d6020670e48a587be13c8e36e863beea565c89e65998b90c4ab082e3e030be371745a9b95ceae358807adc75ab512b3c83249fa7fc1e67e65317d71e7aa293c3b4129bcf0407a8dd1eb5b4e9d6900979b6dd4036eb68391bf8ce3356db43388391e44733191d3ce22099983b2f8eb8f3b990a7504687b1b0e41e482bf9e842f334b60f18abcb927946af68e98aea049798eb764cc315bdc3ead1c4bc05f34be33d66a965f782b3cd7dacefb0af0a3e61139bc405c7d1f86086381a1bd15a66ed6b968be822482dd7b37d38f71945ff9d892c728dc6aaeeebb0ee1b1421984b8357c3a7b99c4629cedc1aadd2ecf8267259f5f7d842c39efa07f49b3aaf7aba1abcd98b592e64dd03dfc2ececf1e75cf29a49b27471a40ad09c8ac540d930c62fdf76719db8e63bc2a541ab0d7569ad46751bb588ba2bfb2ee52beb390b224bf3ce791be71d6cc3d47ccfdba499299f895606058d6193f178924bce4732f1e410ab15bb4e5cf2b912fd1b33c85b8cf96d9c1761721c38eff18fc40545432b2f430b7532ae4fc6d50fd271efb6644698f51d5aeffb7e60af932de73583f5266671059a63781eceb15ac8c5c4bc23fe1b73dc636a79ba468cd9d78e7f722ecf25f95b13a53ac08b2201ce1d177e680624dd0d6998ffac4b1566ec957ff62ff625b680b35419b3ecc789fc42ac0c2539c248f6352e7564136533c8e5842c23af15cecf0798d5df59e432e1191ab70efc2b45af3aeaa4847e32c8555a9c3bdae47b7189fccd8f6c912478c1faeb0533bf692ed827dae3bbdf642e7979177121a61db432e2825e799a7a555fb9a178bcedb76029e691b35cd0ba0e69a6e9da2266ffef34cf82bfcf79b4b6c9bc56fdb62fbb3249807a749b5825cdd10b0ef000e798e698cb22dfcf718933127319619e6f66b8c4569f6117eb93c8a539473387942f9cfb8adfc11a723a1bd55c987e63cdf38e1e5fb5d1b6c13cd8bef37e773a17e7c8e9b19a438f69ce9f2fe772c17a876cdda0e79fcfd14b9c59f6a1ed0f629b5098994f6256d2715564e290c958aaea4c9c35bee687b68439fd3e56270fb427d8c76a744ff492bcd41f92069750a238677c854b866dc6d5a37789f6d35c2afe08abdf3842017f4fed38e2db9477d9d3c8c41f27265593d750b4bb9a3f3117d08bb500e76d3886680de831e5296f21cbb617fef4ab5cf087b8f85e6ef548b950b58715ee1356bf8099deccde2946f2375b82f71835fcf18cb568348eda3d33170e682dbc213b7ed163defc39653aa9c214ebc49c09e7a90baa5703658d33be9f8f07c42748ad14b95c4d8d0f676203d3c5f9ed9eaca919eb13ca7a0632c7efa1846b98ade8cad8e42a66bcee62eeeb2ffd55f439aa64d016503b9e6a9b27bb8d3d68ed92e30f0dcc1eca24a7a3e83c91dde7b950d536ced963fbdb73b850e431fb36f65c8bbb326419547fc69d3e57f6a738330ee4f97c362a6bad1eb3067fe36f3d4525df31affe8e6cac473553166d1b7b48fa1b5fbef6552eb46ad2a4597f5b56c326ed1c6737b38fde4a5a20ff68989669d17acd9e3b8396afcd5421f919ea9a3c6ec92f9b4e8c1f51bba4939e39a4117cb225e132a5196c17ed81463a71996f63b19e652e34ef13177b39870b604f2835ad5c7baec089bfc3aa7c1fbd39669096e693d93a91dbd8211bdb47de7bf63166c9a8df17b2af9e6dc7b97f3e171cd92e2c7dc425f98ae694bc9a15b9948d9fcba58ff9ec1ef6cb5c62dd1e57be767d45ea135d1f9a8c5dd3ad386841d58e5027713e8a7b95b1e73eec432dd9e824976d64cf5ccc4fe6fddc7d64e2ec93b9b03773a290813ec4bdfb5eb4b1681d58b33bb71ce713ca5676644556198ded6b1cd3382b1bf87d8c137bb4e3daa295278c0438c716a03f6399f1ed13cc09f6347e7d860bb61bada66b3b381f1693f7e6e3a9c1883bc2e706317b4349ea581f16a12459fde4eaf26495388eb13b340bf7fd99ddc2da621f47a6c5f9821df91dcad8c66fc93abc5f714517a3f657b8dca3e520175bf5a539352b5601b00907685903b4f506feecdb12fac94098e47763e654bc546d4b4484b8dbb9ec57fd9a6d4bef31db38a33a769a0be6e638ba179c214f3359646314f3a3778dfc3a6513158e3e867328e482f9f729f468ed0be328f41ccf6ed7fe7ac2c6c5c66095b2b87ced32b12b00f77e036b65ac196d0b3a18d3b74d7eb7ad223fb430825e1ce631c9d7c853fe1253f1981d16bc97fa85d7c36505db6e046b77a586ac07e32ec862388baeca1ca9bab9a3dfb713316d3ce3c4bd968d0058b79cd3999f57ff2e33a572d9911f0760474ea3ed4fb8089b40d598b1bd1851a816d35d09b59db84f74845e5b8e953ace8f0781bdfe5ab8b2eda4f8eb6f40a59a7792816a65cc272fcc79f080d970b285c425ae5ea02438ba792e9355ff78dd32c7a54e3b3731bfecdb8209c976930c013f83637835cfe85371a5aee62bc8cda177de8b4759d105c5de90858c6ae4f1a84c44465ac7d8827b3374de0cc9c2c69625f6859f05da594a6b563c23cece95e2757a263272f174f66837d48d31d3e729e2483d864668ba0e9d5979c47cf001eb80be548cb9fac494c3bdbb0e0fa145eb49f35625a4d2c416dba1e34f2447ce5b24a9ce64a6813d8dcf4cb80fb938e16288cb01d6dfbdd095550765531564422f3cba17591b1cba65b70ef7b4bf9cab1931ab3f0b7dcce2dbee0ce792c1148bf1dc110712c2203c996d33b32f12239faf852156076fb2a6c435e34fb968c61c9e914dd756cc13594c75c263aea3ffbbcc75e94cc1033ef74875e4258dbe445168f813a8622edc0c2fb0075564d39f5b01ac139f9b5c9c9bcaf671705f6dc5391b7ce7335c267dc9367ccc2d56dc55e0f520e5c2b6738dd189727fd80f6f9855229f30827358c15af2912d8deb139ea7d1f71ec3bb2be227d367cad4ce62a45ccb696aacb5e87565bf1f36dd068e5a3355b1661197e90897f83d61deb04d5e2d71992c425794eb66c5be9957136b9903f49d57f41b17d751ec15d6f157710e42e1b12e88b5a35f3347762db706336b6bf36dd0982b8ca87b719e10d9682551e3d5ec5c39ffc24cab1178cfe246b9a0fd5634db75a7e6226cdb36fa57b4c93ad6352577e9dfdca5dd76555a9fad637dd2c0bf0fd11ef7423954c6b5b3c4bdc96b5a6fd17de3690f8763a52bbcc265d1fad8222e582776692ffc36ed5d731c208b404b7250735718bf57ec8169d910764235ecfa327a7cdc5fea51ce1635d742a6fbbe1af6bca319787ef59ce724cce038ecbb3e8d869fb49a4539cc022ec139ac998654f3e6aac3fcbc1d0e420d87af432bb787e60df3b322f2883ba571353766f21e3350debb6863b65272716eb733ab60f3195918d85d6ca386d1a8c12bf7f9959fcf7389b52b2c99158c66d32710d9ce622470eec6ad844388b514d52274923c9e637c88a7e87844cd4bccdeb0bdb82fbc82f19b56fd930fceea43d1921b8523db0acf188d7a93fb3b5fd40bf80e143063b6a93e9aae2beea2a59927ac692a389bbd9ceaf96bde278b3bfa8714e978cd08fbc7d8fa168e431b6b5e909c75f6d2334c58f741f4fa1a5d1336f62b5c5cc5b542df94d25afdf45e2fcd8bf612fd20b3dbd833ed286335f0403a1aa41d70a0b5aa26ce1217e1249c86b3dcf8cf6a07d984f370112e319e681696fd35bd60ff4d28842bb34911c08ca5cff9afe159c55e846b33c40a64944eb1c4d3ee9eeacf8c90818e7d05136e3063b99dcbc44cfcee873b5ba27dda8c2cb79ee7b2a8de5f74b9b6bd376f387b8fc29239c9d51ff99ec7d114f9986338c4f93e9e5a3ea7d32c2656f1a68d33c42e3e7401876119f80c703aef30e327a94dac6f8efc168e0e674b8df1ac32c9e753beefa018d78da1034fa1202795389b3126bff39776bba00f0d7b01cfa1c867aeecb6efd9edd00d2b98d91fc3b6ecc6c4eb26c76591ad617e019b7e60ce62a4744bb23ae67e89cb13edb3c4b5e3755b0e258aa6e3b596492e12a5f942bb73e863ab66151a98750e481379b9179f63ce5f96779d7d05e75e23fb152ebf2bfa697f09d089395ddc298022d67e9819718501bca6397bce72d2eea7adb06ac6275fa76bb2ea825c2d66775b7ec716ec4bfefb32bf30bf38bfc967745c0596e13cacc23bd0770fa0924e5c4df63d89afa7e49ec7587fcf5d4fa33d3fccf0c29a1dcaded02fc5319adb5e502385b8328b6c8a61dd3f41597633ccbc3a51fc293fa74eea6c71f6b2e0f31825b156dbc8ec787dff97b8c4dd2f172300fe8df39579806178cf0c5c93fd7f7c823f56fe553927fa310bba1bce17446964622fdc23c6423e3bf4933df1455706e60173ac389ff7dcb3ad650e671c97f970e9ea0b6aab8f477ad2fb75a5c9d05c7221df3a99e0819eff68af83b5551cd37a9ecb97e3d8cc7e646ccb95e10973c447f7f65336d30ca6b954e47b3f4bf0162ec3ddc4c95f5af18d7316bc99675a1b7b9895ead7b9d02ec50b7d93ad688b59b067eec8f5a4ef49df9d97edec4c31a281876318b811d6d17b31878ef50dd612c774d7114b0f712fa39b4e5dc3f770a1959718581eed10f6b12e6e6759d8c25830fe0e0c9d8d356bfe70e6b42eafcfc673b3fcc7e25b57c1857dbb8bb9705c2d7d7345d8a49569cb1e1fbfad8039f879acf778de9f94ec2bfe32c988a3017d5faf4f15ca10f38173730e711ff50933dfc9aa645e54d075166b2fc36bace4ecc8c56f89b4688770689efd80d858ca20b63d3a2c32c17e4deb23097fe57b7c5895189a6f0cd999336ff19c3f46b6badbcce2ca4b3d7df76dba7634921338c8b266768fdaa8640f98a539ac0562a555a34c7868776d296b656dd2c921f9499b7aa66f917c2b178e8a3dfd0eae3b89fbc958e33ca17e3ad0861573e4df61e0f7cc12cab20d0d5ff335cc62b6cd895f811d2c63c09d61e6d9809e8ba7a84dace0a8d2e2d34021ee15da42d6c99a188523932e8d6083f2ca6fb0b1f185759527dddcd3faa6c1eae6c4dde22721bc8417db45569829a0558cc0f8535b7667eecc744d17e5afbaa2f358b19ddb5757768ecf06d82e65f371573ceebcd6716c1ae891fd80c510f42876d573f2f7266dfe6bbe3f473319ed686696ce50b35e62ce879c4e520f58f3a0b50cfd054a5dc62abb0d4bc4009ce373e52a91ec30f08e7da073be4b74a2f881b4dfa3bff99bdb916ff6bd5c26753ca969cb67a29ae3d3d6136fcc7c92eecc9cd4fbf9b746ffba8d7dc4843e6f4e5ed3cfce709f7edf8cbf053bf1e94ffe6f8cefe52265cbc4c8d32e2e5f33e7f0e5d23548c5462bad31afefe2323b72935c663e5fc065fe08d87432339757b8f1897065f01d5ce6dbd124978fff97a485d625dafac8fabe32ce5fe1f2c1fab9997dfe6326b2b7bb405f133afa80d157e3d867b87cae8585f7276a11f120c8e3c5ed86e7f0fc9d5ce6c42133fdd4873d4c7d5f624a83dfc8e5e7e3faddd767fb9b1ec9ffcbff7fecbbafffe7f27b5e7ffef7bffff13fdcf4c93e</data>
-    </image>
-</images>
-<connections>
-    <connection>
-        <sender>okButton</sender>
-        <signal>clicked()</signal>
-        <receiver>UninstallDlg</receiver>
-        <slot>accept()</slot>
-    </connection>
-    <connection>
-        <sender>cleanRegButton</sender>
-        <signal>clicked()</signal>
-        <receiver>UninstallDlg</receiver>
-        <slot>cleanRegistry()</slot>
-    </connection>
-</connections>
-<slots>
-    <slot access="protected">init()</slot>
-    <slot access="protected">destroy()</slot>
-    <slot>cleanRegistry()</slot>
-</slots>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/util/install/win/uninstaller/uninstaller.cpp b/util/install/win/uninstaller/uninstaller.cpp
deleted file mode 100644
index 9a7c529..0000000
--- a/util/install/win/uninstaller/uninstaller.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <qapplication.h>
-#include <qlabel.h>
-#include <qdir.h>
-#include <qtextview.h>
-#include <qpushbutton.h>
-#include <qmessagebox.h>
-#include "uninstallimpl.h"
-#include "../environment.h"
-
-#ifdef Q_OS_WIN32
-#include <windows.h>
-#endif
-
-QApplication* app;
-UninstallDlg* progress;
-
-void rmDirRecursive( const QDir &dir )
-{
-    const QFileInfoList* list = dir.entryInfoList( QDir::All | QDir::System | QDir::Hidden );
-    if ( list ) {
-	QFileInfoListIterator it( *list );
-	QFileInfo* fi;
-
-	while( ( fi = it.current() ) ) {
-	    if( ( fi->fileName() != "." ) && ( fi->fileName() != ".." ) ){
-		progress->filesDisplay->append( fi->absFilePath() + "\n" );
-		progress->filesDisplay->scrollToBottom();
-		app->processEvents();
-		if( fi->isDir() )
-		    rmDirRecursive( QDir(fi->absFilePath()) );
-		else
-		    QFile::remove( fi->absFilePath() );
-	    }
-	    ++it;
-	}
-    }
-    // Remove this dir as well
-    dir.rmdir( dir.absPath() );
-}
-
-int main( int argc, char** argv )
-{
-    app = new QApplication( argc, argv );
-    progress = new UninstallDlgImpl( 0, 0, 0, Qt::WStyle_Customize|Qt::WStyle_NormalBorder|Qt::WStyle_Title);
-    
-    if( argc != 4 )
-	qFatal( "Incorrect parameters" );
-
-    if( !QMessageBox::information( 0,
-		QString( "Uninstalling Qt %1" ).arg(argv[3]),
-		QString("Are you sure you want to uninstall Qt %1?\n"
-		"This will remove the directory this version\n"
-		"of Qt was installed to, along with ALL its contents.").arg(argv[3]),
-		"Yes", "No" ) )
-    {
-	progress->setCaption( QString( "Uninstalling Qt " ) + argv[ 3 ] );
-	progress->show();
-    
-	app->setMainWidget( progress );
-
-	// Delete the two directories we have written files to during the installation.
-	// The OK button is disabled at this point.
-	// Messages will be processed during the delete process.
-	
-	// Check if moc.exe exists, if not this could potentially be a 
-	// corrupted registry setting
-	
-	if ( QFile::exists( QString( argv[1] ) + QString( "\\bin\\moc.exe" ) ) )
-	    rmDirRecursive( QDir(argv[1]) );
-	else 
-	    QMessageBox::warning( 0, "Uninstalling failed", "Qt could not be uninstalled, you will "
-				  "need to remove Qt manually" );
-
-	rmDirRecursive( QDir(argv[2]) );
-    
-	progress->okButton->setEnabled( true );
-	progress->cleanRegButton->setEnabled( true );
-	/*
-	** Just hang around until someone clicks the "OK" button
-	*/
-	app->exec();
-#if defined(Q_OS_WIN32)
-	QEnvironment::removeUninstall( QString( "Qt " ) + argv[ 3 ] );
-	QString qtEnv = QEnvironment::getEnv( "QTDIR", QEnvironment::LocalEnv );
-	QString pathEnv = QEnvironment::getEnv( "PATH", QEnvironment::PersistentEnv );
-	if ( qtEnv == QString(argv[1]) )
-	    QEnvironment::removeEnv( "QTDIR", QEnvironment::LocalEnv | QEnvironment::PersistentEnv );
-	else
-	    qtEnv = argv[1];
-	
-	qtEnv.append("\\bin;");
-	pathEnv.replace( qtEnv, "" );
-	QEnvironment::putEnv( "PATH", pathEnv, QEnvironment::PersistentEnv );
-	if( qWinVersion() & Qt::WV_NT_based ) {
-	    SendNotifyMessageA( HWND_BROADCAST, WM_WININICHANGE, 0, (LPARAM)"Environment" );
-	    SendNotifyMessageA( HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0 );
-	}
-#endif
-    }
-
-    return 0;
-}
diff --git a/util/install/win/uninstaller/uninstallimpl.cpp b/util/install/win/uninstaller/uninstallimpl.cpp
deleted file mode 100644
index d30358b..0000000
--- a/util/install/win/uninstaller/uninstallimpl.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "uninstallimpl.h"
-#include <qsettings.h>
-#include <qmessagebox.h>
-
-UninstallDlgImpl::UninstallDlgImpl( QWidget* parent, const char* name, bool modal, WindowFlags f )
-    : UninstallDlg( parent, name, modal, f )
-{
-}
-
-UninstallDlgImpl::~UninstallDlgImpl()
-{
-}
-
-void UninstallDlgImpl::cleanRegistry()
-{
-    cleanRegistryHelper( "/Trolltech/Qt" );
-    cleanRegistryHelper( "/Trolltech/Qt Designer" );
-    cleanRegistryHelper( "/Trolltech/Qt Assistant" );
-    cleanRegistryHelper( "/Trolltech/Qt Linguist" );
-}
-
-void UninstallDlgImpl::cleanRegistryHelper( const QString& key )
-{
-    QSettings settings;
-    QStringList::Iterator it;
-    QStringList keys = settings.subkeyList( key );
-    for ( it = keys.begin(); it != keys.end(); ++it ) {
-        cleanRegistryHelper( key + "/" + *it );
-    }
-    QStringList entries = settings.entryList( key );
-    for ( it = entries.begin(); it != entries.end(); ++it ) {
-        settings.removeEntry( key + "/" + *it );
-    }
-    settings.removeEntry( key + "/." );
-}
diff --git a/util/install/win/uninstaller/uninstallimpl.h b/util/install/win/uninstaller/uninstallimpl.h
deleted file mode 100644
index b3bff36..0000000
--- a/util/install/win/uninstaller/uninstallimpl.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the utils of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "uninstall.h"
-
-class UninstallDlgImpl : public UninstallDlg
-{
-    Q_OBJECT
-public:
-    UninstallDlgImpl( QWidget* parent = 0, const char* name = 0, bool modal = false, WindowFlags fl = 0 );
-    ~UninstallDlgImpl();
-public slots:
-    void cleanRegistry();
-private:
-    void cleanRegistryHelper( const QString& key );
-    
-};
diff --git a/util/install/win/win.pro b/util/install/win/win.pro
deleted file mode 100644
index 470fa03..0000000
--- a/util/install/win/win.pro
+++ /dev/null
@@ -1,136 +0,0 @@
-TEMPLATE	= app
-CONFIG		+= windows qt
-
-HEADERS		= globalinformation.h \
-		  setupwizardimpl.h \
-		  environment.h \
-		  shell.h \
-		  resource.h \
-		  dialogs/folderdlgimpl.h \
-		  pages/pages.h \
-		  pages/sidedecorationimpl.h
-
-SOURCES		= main.cpp \
-		  globalinformation.cpp \
-		  setupwizardimpl.cpp \
-		  setupwizardimpl_config.cpp \
-		  environment.cpp \
-		  shell.cpp \
-		  resource.cpp \
-		  dialogs/folderdlgimpl.cpp \
-		  pages/pages.cpp \
-		  pages/sidedecorationimpl.cpp
-
-INTERFACES	= dialogs/folderdlg.ui \
-		  pages/buildpage.ui \
-		  pages/configpage.ui \
-		  pages/finishpage.ui \
-		  pages/folderspage.ui \
-		  pages/licenseagreementpage.ui \
-		  pages/licensepage.ui \
-		  pages/optionspage.ui \
-		  pages/progresspage.ui \
-		  pages/sidedecoration.ui \
-		  pages/winintropage.ui
-
-win32 {
-    SOURCES += archive.cpp
-    HEADERS += archive.h
-}
-
-TARGET		= install
-DESTDIR		= ../../../dist/win
-INCLUDEPATH	+= $$QT_SOURCE_TREE/src/3rdparty $$QT_SOURCE_TREE/util/install/archive
-
-win32:RC_FILE	= install.rc
-
-# Comment out one of the following lines to build the installer for:
-#
-#  - a Qt/Windows evaluation version (eval),
-#  - a Qt/Windows evaluation version that can be burned on CD and
-#    distributed on tradeshows (eval-cd)
-#  - the QSA evaluation version (qsa)
-#  - educational version (edu)
-#  - non-commercial version (noncommercial)
-#
-#CONFIG += eval
-#CONFIG += eval-cd
-#CONFIG += qsa
-#CONFIG += edu
-#CONFIG += noncommercial
-
-
-unix:LIBS		+= -L$$QT_BUILD_TREE/util/install/archive -larq
-win32:LIBS		+= ../archive/arq.lib
-INCLUDEPATH		+= ../keygen
-
-# We have the following dependencies on config:
-#
-#  qsa           -> eval
-#  eval-cd       -> eval
-#  eval          -> (none)
-#  edu           -> (none)
-#  noncommercial -> (none)
-#
-# For the code this means that the following defines are defined:
-#
-# eval         : EVAL
-# eval-cd      : EVAL, EVAL_CD
-# qsa          : EVAL, QSA
-# edu          : EDU
-# noncommercial: NON_COMMERCIAL
-#
-
-qsa {
-    CONFIG += eval
-    DEFINES		+= QSA
-}
-
-eval-cd {
-    CONFIG += eval
-    DEFINES		+= EVAL_CD
-}
-
-eval {
-    !exists($(QTEVAL)/src) {
-	error(You must set the QTEVAL environment variable to the directory where you checked out //depot/qteval/main in order to be able to build the evaluation version of install.)
-    }
-    DEFINES		+= EVAL
-    qsa {
-	win32:RC_FILE	= install-qsa.rc
-    } else {
-	win32:RC_FILE	= install-eval.rc
-    }
-    mac:RC_FILE = ../../../tools/designer/app/designer.icns
-    SOURCES		+= $(QTEVAL)/src/check-and-patch.cpp
-    INCLUDEPATH		+= $(QTEVAL)/src
-    DESTDIR		= ../../../bin
-}
-
-edu {
-    !exists($(QTEVAL)/src) {
-	error(You must set the QTEVAL environment variable to the directory where you checked out //depot/qteval/main in order to be able to build the evaluation version of install.)
-    }
-    DEFINES		+= EDU
-    win32:RC_FILE	= install-edu.rc
-    SOURCES		+= $(QTEVAL)/src/check-and-patch.cpp
-    INCLUDEPATH		+= $(QTEVAL)/src
-    DESTDIR		= ../../../bin
-}
-
-noncommercial {
-    !exists($(QTEVAL)/src) {
-	error(You must set the QTEVAL environment variable to the directory where you checked out //depot/qteval/main in order to be able to build the evaluation version of install.)
-    }
-    DEFINES		+= NON_COMMERCIAL
-    win32:RC_FILE	= install-noncommercial.rc
-    SOURCES		+= $(QTEVAL)/src/check-and-patch.cpp
-    INCLUDEPATH		+= $(QTEVAL)/src
-    DESTDIR		= ../../../bin
-}
-
-mystaticconfig {
-    QMAKE_LIBS_QT =
-    QMAKE_LIBS_QT_THREAD =
-    LIBS += ../../../lib/libqt-mt.a -lz -framework Carbon
-}
-- 
cgit v0.12


From 90cf2f668136f32832405a17f355ab405882a99d Mon Sep 17 00:00:00 2001
From: Andy Shaw <qt-info@nokia.com>
Date: Mon, 11 May 2009 13:27:43 +0200
Subject: Fixes a code snippet for QPainter::xFormDev()

Reviewed-by: TrustMe
---
 src/gui/painting/qpainter.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index baa9ce3..cc48d24 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -7159,14 +7159,14 @@ QPoint QPainter::xFormDev(const QPoint &p) const
     \fn QRect QPainter::xFormDev(const QRect &rectangle) const
     \overload
 
-    Use  combineMatrix() combined with QMatrix::inverted() instead.
+    Use mapRect() combined with QMatrix::inverted() instead.
 
     \oldcode
         QPainter painter(this);
         QRect transformed = painter.xFormDev(rectangle);
     \newcode
         QPainter painter(this);
-        QRect transformed = rectangle * painter.combinedMatrix().inverted();
+        QRect transformed = painter.combinedMatrix().inverted(rectangle);
     \endcode
 */
 
-- 
cgit v0.12


From 60ff41273a58835466022f91d4f6eb195953c739 Mon Sep 17 00:00:00 2001
From: Kent Hansen <khansen@trolltech.com>
Date: Mon, 11 May 2009 13:25:21 +0200
Subject: Don't leak memory when assigning scriptvalue to iterator

The d-pointer was not deleted as it should be.

Reviewed-by: Harald Fernengel
---
 src/script/qscriptvalueiterator.cpp                |  4 +--
 .../tst_qscriptvalueiterator.cpp                   | 33 ++++++++++++++++++++++
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/src/script/qscriptvalueiterator.cpp b/src/script/qscriptvalueiterator.cpp
index fe5ef9f..1a60632 100644
--- a/src/script/qscriptvalueiterator.cpp
+++ b/src/script/qscriptvalueiterator.cpp
@@ -106,6 +106,7 @@ QScriptValueIteratorPrivate::QScriptValueIteratorPrivate()
 */
 QScriptValueIteratorPrivate::~QScriptValueIteratorPrivate()
 {
+    delete it;
 }
 
 /*!
@@ -130,7 +131,6 @@ QScriptValueIterator::QScriptValueIterator(const QScriptValue &object)
 QScriptValueIterator::~QScriptValueIterator()
 {
     if (d_ptr) {
-        delete d_ptr->it;
         delete d_ptr;
         d_ptr = 0;
     }
@@ -312,7 +312,7 @@ void QScriptValueIterator::remove()
 QScriptValueIterator& QScriptValueIterator::operator=(QScriptValue &object)
 {
     if (d_ptr) {
-        delete d_ptr->it;
+        delete d_ptr;
         d_ptr = 0;
     }
     QScriptValueImpl val = QScriptValuePrivate::valueOf(object);
diff --git a/tests/auto/qscriptvalueiterator/tst_qscriptvalueiterator.cpp b/tests/auto/qscriptvalueiterator/tst_qscriptvalueiterator.cpp
index 1413b0d..257ec0b 100644
--- a/tests/auto/qscriptvalueiterator/tst_qscriptvalueiterator.cpp
+++ b/tests/auto/qscriptvalueiterator/tst_qscriptvalueiterator.cpp
@@ -68,6 +68,7 @@ private slots:
     void iterateString();
     void iterateGetterSetter();
     void iterateArgumentsObject();
+    void assignObjectToIterator();
     void undefinedBehavior();
 };
 
@@ -562,5 +563,37 @@ void tst_QScriptValueIterator::undefinedBehavior()
     QVERIFY(it.value().isNumber());
 }
 
+void tst_QScriptValueIterator::assignObjectToIterator()
+{
+    QScriptEngine eng;
+    QScriptValue obj1 = eng.newObject();
+    obj1.setProperty("foo", 123);
+    QScriptValue obj2 = eng.newObject();
+    obj2.setProperty("bar", 456);
+
+    QScriptValueIterator it(obj1);
+    QVERIFY(it.hasNext());
+    it.next();
+    it = obj2;
+    QVERIFY(it.hasNext());
+    it.next();
+    QCOMPARE(it.name(), QString::fromLatin1("bar"));
+
+    it = obj1;
+    QVERIFY(it.hasNext());
+    it.next();
+    QCOMPARE(it.name(), QString::fromLatin1("foo"));
+
+    it = obj2;
+    QVERIFY(it.hasNext());
+    it.next();
+    QCOMPARE(it.name(), QString::fromLatin1("bar"));
+
+    it = obj2;
+    QVERIFY(it.hasNext());
+    it.next();
+    QCOMPARE(it.name(), QString::fromLatin1("bar"));
+}
+
 QTEST_MAIN(tst_QScriptValueIterator)
 #include "tst_qscriptvalueiterator.moc"
-- 
cgit v0.12


From 61ba9b2a920fd561b292886b3b75bfde4847e26f Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Fri, 7 Nov 2008 22:50:31 +0100
Subject: Add a test for UTF-8 conditions

---
 tests/auto/utf8/tst_utf8.cpp | 309 +++++++++++++++++++++++++++++++++++++++++++
 tests/auto/utf8/utf8.pro     |   3 +
 2 files changed, 312 insertions(+)
 create mode 100644 tests/auto/utf8/tst_utf8.cpp
 create mode 100644 tests/auto/utf8/utf8.pro

diff --git a/tests/auto/utf8/tst_utf8.cpp b/tests/auto/utf8/tst_utf8.cpp
new file mode 100644
index 0000000..3aef69f
--- /dev/null
+++ b/tests/auto/utf8/tst_utf8.cpp
@@ -0,0 +1,309 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtTest/QtTest>
+
+#include <qtextcodec.h>
+#include <qsharedpointer.h>
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+static const char utf8bom[] = "\xEF\xBB\xBF";
+
+class tst_Utf8 : public QObject
+{
+    Q_OBJECT
+
+public:
+    // test data:
+    QTextCodec *codec;
+    QString (*from8BitPtr)(const char *, int);
+    QByteArray (QString:: *to8Bit)() const;
+
+    inline QString from8Bit(const QByteArray &ba)
+    { return from8BitPtr(ba.constData(), ba.length()); }
+public slots:
+    void initTestCase();
+    void init();
+
+private slots:
+    void roundTrip_data();
+    void roundTrip();
+
+    void charByChar_data();
+    void charByChar();
+
+    void invalidUtf8_data();
+    void invalidUtf8();
+};
+
+void tst_Utf8::initTestCase()
+{
+    QTest::addColumn<bool>("useLocale");
+    QTest::newRow("utf8codec") << false;
+
+    // is the locale UTF-8?
+    if (QString(QChar(QChar::ReplacementCharacter)).toLocal8Bit() == "\xEF\xBF\xBD") {
+        QTest::newRow("localecodec") << true;
+        qDebug() << "locale is utf8";
+    }
+}
+
+void tst_Utf8::init()
+{
+    QFETCH_GLOBAL(bool, useLocale);
+    if (useLocale) {
+        codec = QTextCodec::codecForLocale();
+        from8BitPtr = &QString::fromLocal8Bit;
+        to8Bit = &QString::toLocal8Bit;
+    } else {
+        codec = QTextCodec::codecForMib(106);
+        from8BitPtr = &QString::fromUtf8;
+        to8Bit = &QString::toUtf8;
+    }
+}
+
+void tst_Utf8::roundTrip_data()
+{
+    QTest::addColumn<QByteArray>("utf8");
+    QTest::addColumn<QString>("utf16");
+
+    QTest::newRow("empty") << QByteArray() << QString();
+    QTest::newRow("nul") << QByteArray("", 1) << QString(QChar(QChar::Null));
+
+    static const char ascii[] = "This is a standard US-ASCII message";
+    QTest::newRow("ascii") << QByteArray(ascii) << ascii;
+
+    static const char ascii2[] = "\1This\2is\3an\4US-ASCII\020 message interspersed with control chars";
+    QTest::newRow("ascii2") << QByteArray(ascii2) << ascii2;
+
+    static const char utf8_1[] = "\302\240"; // NBSP
+    QTest::newRow("utf8_1") << QByteArray(utf8_1) << QString(QChar(QChar::Nbsp));
+
+    static const char utf8_2[] = "\342\202\254"; // Euro symbol
+    QTest::newRow("utf8_2") << QByteArray(utf8_2) << QString(QChar(0x20AC));
+
+#if 0
+    // Can't test this because QString::fromUtf8 consumes it
+    static const char utf8_3[] = "\357\273\277"; // byte order mark
+    QTest::newRow("utf8_3") << QByteArray(utf8_3) << QString(QChar(QChar::ByteOrderMark));
+#endif
+
+    static const char utf8_4[] = "\357\277\275"; // replacement char
+    QTest::newRow("utf8_4") << QByteArray(utf8_4) << QString(QChar(QChar::ReplacementCharacter));
+
+    static const char utf8_5[] = "\360\220\210\203"; // U+010203
+    static const uint utf32_5[] = { 0x010203 };
+    QTest::newRow("utf8_5") << QByteArray(utf8_5) << QString::fromUcs4(utf32_5, 1);
+
+    static const char utf8_6[] = "\364\217\277\277"; // U+10FFFF
+    static const uint utf32_6[] = { 0x10FFFF };
+    QTest::newRow("utf8_6") << QByteArray(utf8_6) << QString::fromUcs4(utf32_6, 1);
+
+    static const char utf8_7[] = "abc\302\240\303\241\303\251\307\275 \342\202\254def";
+    static const ushort utf16_7[] = { 'a', 'b', 'c', 0x00A0,
+                                      0x00E1, 0x00E9, 0x01FD,
+                                      ' ', 0x20AC, 'd', 'e', 'f', 0 };
+    QTest::newRow("utf8_7") << QByteArray(utf8_7) << QString::fromUtf16(utf16_7);
+
+    static const char utf8_8[] = "abc\302\240\303\241\303\251\307\275 \364\217\277\277 \342\202\254def";
+    static const uint utf32_8[] = { 'a', 'b', 'c', 0x00A0,
+                                    0x00E1, 0x00E9, 0x01FD,
+                                    ' ', 0x10FFFF, ' ',
+                                    0x20AC, 'd', 'e', 'f', 0 };
+    QTest::newRow("utf8_8") << QByteArray(utf8_8) << QString::fromUcs4(utf32_8);
+}
+
+void tst_Utf8::roundTrip()
+{
+    QFETCH(QByteArray, utf8);
+    QFETCH(QString, utf16);
+
+    QCOMPARE((utf16.*to8Bit)(), utf8);
+    QCOMPARE(from8Bit(utf8), utf16);
+
+    QCOMPARE((from8Bit(utf8).*to8Bit)(), utf8);
+    QCOMPARE(from8Bit((utf16.*to8Bit)()), utf16);
+}
+
+void tst_Utf8::charByChar_data()
+{
+    roundTrip_data();
+}
+
+void tst_Utf8::charByChar()
+{
+    QFETCH(QByteArray, utf8);
+    QFETCH(QString, utf16);
+
+    {
+        // from utf16 to utf8 char by char:
+        QSharedPointer<QTextEncoder> encoder = QSharedPointer<QTextEncoder>(codec->makeEncoder());
+        QByteArray encoded;
+
+        for (int i = 0; i < utf16.length(); ++i) {
+            encoded += encoder->fromUnicode(utf16.constData() + i, 1);
+            QVERIFY(!encoder->hasFailure());
+        }
+
+        if (encoded.startsWith(utf8bom))
+            encoded = encoded.mid(strlen(utf8bom));
+        QCOMPARE(encoded, utf8);
+    }
+    {
+        // from utf8 to utf16 char by char:
+        QSharedPointer<QTextDecoder> decoder = QSharedPointer<QTextDecoder>(codec->makeDecoder());
+        QString decoded;
+
+        for (int i = 0; i < utf8.length(); ++i) {
+            decoded += decoder->toUnicode(utf8.constData() + i, 1);
+            QVERIFY(!decoder->hasFailure());
+        }
+
+        QCOMPARE(decoded, utf16);
+    }
+}
+
+void tst_Utf8::invalidUtf8_data()
+{
+    QTest::addColumn<QByteArray>("utf8");
+
+    QTest::newRow("1char") << QByteArray("\x80");
+    QTest::newRow("2chars") << QByteArray("\xC2\xC0");
+    QTest::newRow("3chars-1") << QByteArray("\xE0\xA0\xC0");
+    QTest::newRow("3chars-2") << QByteArray("\xE0\xC0\xA0");
+    QTest::newRow("4chars-1") << QByteArray("\xF0\x90\x80\xC0");
+    QTest::newRow("4chars-2") << QByteArray("\xF0\x90\xC0\x80");
+    QTest::newRow("4chars-3") << QByteArray("\xF0\xC0\x80\x80");
+
+    // U+FFFE and U+FFFF are non-characters and must not be present
+    // U+FFFE:        1111   11 1111   11 1110
+    // encoding: xxxz:1111 xz11:1111 xz11:1110
+    QTest::newRow("fffe") << QByteArray("\xEF\xBF\xBE");
+    // U+FFFF:        1111   11 1111   11 1111
+    // encoding: xxxz:1111 xz11:1111 xz11:1111
+    QTest::newRow("ffff") << QByteArray("\xEF\xBF\xBF");
+
+    // Surrogate pairs must now be present either
+    // U+D800:        1101   10 0000   00 0000
+    // encoding: xxxz:1101 xz10:0000 xz00:0000
+    QTest::newRow("hi-surrogate") << QByteArray("\xED\xA0\x80");
+    // U+DC00:        1101   11 0000   00 0000
+    // encoding: xxxz:1101 xz11:0000 xz00:0000
+    QTest::newRow("lo-surrogate") << QByteArray("\xED\xB0\x80");
+
+    // not even in pair:
+    QTest::newRow("surrogate-pair") << QByteArray("\xED\xA0\x80\xED\xB0\x80");
+
+    // Characters outside the Unicode range:
+    // 0x110000:   00 0100   01 0000   00 0000   00 0000
+    // encoding: xxxx:z100 xz01:0000 xz00:0000 xz00:0000
+    QTest::newRow("non-unicode-1") << QByteArray("\xF4\x90\x80\x80");
+    // 0x200000:             00 1000   00 0000   00 0000   00 0000
+    // encoding: xxxx:xz00 xz00:1000 xz00:0000 xz00:0000 xz00:0000
+    QTest::newRow("non-unicode-2") << QByteArray("\xF8\x88\x80\x80\x80");
+    // 0x04000000:              0100   00 0000   00 0000   00 0000   00 0000
+    // encoding: xxxx:xxz0 xz00:0100 xz00:0000 xz00:0000 xz00:0001 xz00:0001
+    QTest::newRow("non-unicode-3") << QByteArray("\xFC\x84\x80\x80\x80\x80");
+    // 0x7fffffff:       1   11 1111   11 1111   11 1111   11 1111   11 1111
+    // encoding: xxxx:xxz0 xz00:0100 xz00:0000 xz00:0000 xz00:0001 xz00:0001
+    QTest::newRow("non-unicode-3") << QByteArray("\xFD\xBF\xBF\xBF\xBF\xBF");
+
+    // As seen above, 0xFE and 0xFF never appear:
+    QTest::newRow("fe") << QByteArray("\xFE");
+    QTest::newRow("fe-bis") << QByteArray("\xFE\xBF\xBF\xBF\xBF\xBF\xBF");
+    QTest::newRow("ff") << QByteArray("\xFF");
+    QTest::newRow("ff-bis") << QByteArray("\xFF\xBF\xBF\xBF\xBF\xBF\xBF\xBF");
+
+    // some combinations in UTF-8 are invalid even though they have the proper bits set
+    // these are known as overlong sequences
+
+    // "A": U+0041:                                               01   00 0001
+    // overlong 2:                                         xxz0:0001 xz00:0001
+    QTest::newRow("overlong-1-2") << QByteArray("\xC1\x81");
+    // overlong 3:                               xxxz:0000 xz00:0001 xz00:0001
+    QTest::newRow("overlong-1-3") << QByteArray("\xE0\x81\x81");
+    // overlong 4:                     xxxx:z000 xz00:0000 xz00:0001 xz00:0001
+    QTest::newRow("overlong-1-4") << QByteArray("\xF0\x80\x81\x81");
+    // overlong 5:           xxxx:xz00 xz00:0000 xz00:0000 xz00:0001 xz00:0001
+    QTest::newRow("overlong-1-5") << QByteArray("\xF8\x80\x80\x81\x81");
+    // overlong 6: xxxx:xxz0 xz00:0000 xz00:0000 xz00:0000 xz00:0001 xz00:0001
+    QTest::newRow("overlong-1-6") << QByteArray("\xFC\x80\x80\x80\x81\x81");
+
+    // NBSP: U+00A0:                                             10    00 0000
+    // proper encoding:                                    xxz0:0010 xz00:0000
+    // overlong 3:                               xxxz:0000 xz00:0010 xz00:0000
+    QTest::newRow("overlong-2-3") << QByteArray("\xC0\x82\x80");
+    // overlong 4:                     xxxx:z000 xz00:0000 xz00:0010 xz00:0000
+    QTest::newRow("overlong-2-4") << QByteArray("\xF0\x80\x82\x80");
+    // overlong 5:           xxxx:xz00 xz00:0000 xz00:0000 xz00:0010 xz00:0000
+    QTest::newRow("overlong-2-4") << QByteArray("\xF8\x80\x80\x82\x80");
+    // overlong 6: xxxx:xxz0 xz00:0000 xz00:0000 xz00:0000 xz00:0010 xz00:0000
+    QTest::newRow("overlong-2-4") << QByteArray("\xFC\x80\x80\x80\x82\x80");
+
+    // U+0800:                                               10 0000   00 0000
+    // proper encoding:                          xxxz:0000 xz10:0000 xz00:0000
+    // overlong 4:                     xxxx:z000 xz00:0000 xz10:0000 xz00:0000
+    QTest::newRow("overlong-3-4") << QByteArray("\xF0\x80\xA0\x80");
+    // overlong 5:           xxxx:xz00 xz00:0000 xz00:0000 xz10:0000 xz00:0000
+    QTest::newRow("overlong-3-5") << QByteArray("\xF8\x80\x80\xA0\x80");
+    // overlong 6: xxxx:xxz0 xz00:0000 xz00:0000 xz00:0000 xz10:0000 xz00:0000
+    QTest::newRow("overlong-3-6") << QByteArray("\xFC\x80\x80\x80\xA0\x80");
+
+    // U+010000:                                   00 0100   00 0000   00 0000
+    // proper encoding:                xxxx:z000 xz00:0100 xz00:0000 xz00:0000
+    // overlong 5:           xxxx:xz00 xz00:0000 xz00:0100 xz00:0000 xz00:0000
+    QTest::newRow("overlong-4-5") << QByteArray("\xF8\x80\x84\x80\x80");
+    // overlong 6: xxxx:xxz0 xz00:0000 xz00:0000 xz00:0100 xz00:0000 xz00:0000
+    QTest::newRow("overlong-4-6") << QByteArray("\xFC\x80\x80\x84\x80\x80");
+}
+
+void tst_Utf8::invalidUtf8()
+{
+    QFETCH(QByteArray, utf8);
+
+    QSharedPointer<QTextDecoder> decoder = QSharedPointer<QTextDecoder>(codec->makeDecoder());
+    QString decoded = decoder->toUnicode(utf8);
+    QVERIFY(decoder->hasFailure());
+}
+
+QTEST_MAIN(tst_Utf8)
+#include "tst_utf8.moc"
diff --git a/tests/auto/utf8/utf8.pro b/tests/auto/utf8/utf8.pro
new file mode 100644
index 0000000..4ec6851
--- /dev/null
+++ b/tests/auto/utf8/utf8.pro
@@ -0,0 +1,3 @@
+load(qttest_p4)
+QT -= gui
+SOURCES  += tst_utf8.cpp
-- 
cgit v0.12


From cbfe3be00f123f3e9c4a4463f255f596cfb41ef1 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Mon, 11 May 2009 13:34:48 +0200
Subject: Document that we don't support NTLM version 2.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Task-number: 236925
Reviewed-by: Tor Arne Vestbø
---
 src/network/kernel/qauthenticator.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp
index c9161f8..33795aa 100644
--- a/src/network/kernel/qauthenticator.cpp
+++ b/src/network/kernel/qauthenticator.cpp
@@ -73,6 +73,15 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas
   authentication information to the socket when accessing services that
   require authentication.
 
+  QAuthenticator supports the following authentication methods:
+  \list
+    \o Basic
+    \o NTLM version 1
+    \o Digest-MD5
+  \endlist
+
+  Note that, in particular, NTLM version 2 is not supported.
+
   \sa QSslSocket
 */
 
-- 
cgit v0.12


From 12a1662a8cf79ff6fd7bd16ef66f7f1e77edc9e8 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Mon, 11 May 2009 13:40:17 +0200
Subject: Don't crash at runtime with when relaying a signal.

We have this function called qDBusInterfaceFromMetaObject that
calculates the interface name from a given meta object. There's no
need to duplicate the code here (and not do it right).

All tests still pss.

Task-number: 236955
Reviewed-by: Trust Me
---
 src/dbus/qdbusintegrator.cpp | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index 2c27381..f40a45f 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -1125,12 +1125,7 @@ void QDBusConnectionPrivate::objectDestroyed(QObject *obj)
 void QDBusConnectionPrivate::relaySignal(QObject *obj, const QMetaObject *mo, int signalId,
                                          const QVariantList &args)
 {
-    int mciid = mo->indexOfClassInfo(QCLASSINFO_DBUS_INTERFACE);
-    Q_ASSERT(mciid != -1);
-
-    QMetaClassInfo mci = mo->classInfo(mciid);
-    Q_ASSERT(mci.value());
-    const char *interface = mci.value();
+    QString interface = qDBusInterfaceFromMetaObject(mo);
 
     QMetaMethod mm = mo->method(signalId);
     QByteArray memberName = mm.signature();
@@ -1146,12 +1141,12 @@ void QDBusConnectionPrivate::relaySignal(QObject *obj, const QMetaObject *mo, in
         }
 
     QDBusReadLocker locker(RelaySignalAction, this);
-    QDBusMessage message = QDBusMessage::createSignal(QLatin1String("/"), QLatin1String(interface),
+    QDBusMessage message = QDBusMessage::createSignal(QLatin1String("/"), interface,
                                                       QLatin1String(memberName));
     message.setArguments(args);
     DBusMessage *msg = QDBusMessagePrivate::toDBusMessage(message);
     if (!msg) {
-        qWarning("QDBusConnection: Could not emit signal %s.%s", interface, memberName.constData());
+        qWarning("QDBusConnection: Could not emit signal %s.%s", qPrintable(interface), memberName.constData());
         return;
     }
 
-- 
cgit v0.12


From 0f3a48850529e84c51e6ae0c23544f9cf8fca846 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Mon, 11 May 2009 13:43:39 +0200
Subject: Update the --help output of qdbusxml2cpp.

Don't say we produce output when no options are passed if we don't.

Task-number: 222778
Reviewed-by: Trust Me
---
 tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp b/tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp
index a871fe4..d7dab0b 100644
--- a/tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp
+++ b/tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp
@@ -82,7 +82,6 @@ static QStringList wantedInterfaces;
 static const char help[] =
     "Usage: " PROGRAMNAME " [options...] [xml-or-xml-file] [interfaces...]\n"
     "Produces the C++ code to implement the interfaces defined in the input file.\n"
-    "If no options are given, the code is written to the standard output.\n"
     "\n"
     "Options:\n"
     "  -a <filename>    Write the adaptor code to <filename>\n"
@@ -99,7 +98,10 @@ static const char help[] =
     "If the file name given to the options -a and -p does not end in .cpp or .h, the\n"
     "program will automatically append the suffixes and produce both files.\n"
     "You can also use a colon (:) to separate the header name from the source file\n"
-    "name, as in '-a filename_p.h:filename.cpp'.\n";
+    "name, as in '-a filename_p.h:filename.cpp'.\n"
+    "\n"
+    "If you pass a dash (-) as the argument to either -p or -a, the output is written\n"
+    "to the standard output\n";
 
 static const char includeList[] =
     "#include <QtCore/QByteArray>\n"
-- 
cgit v0.12


From 92c5c75a9840853fad4f30235f9bf86dc7133fc4 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Mon, 11 May 2009 13:44:44 +0200
Subject: Clarifying docs for QTextTable::splitCell()

Clarifying details about QTextTable::splitCell() regarding
splitting and merging over several rows and columns

Task-number:193732
Rev-by: Geir Vattekar
---
 src/gui/text/qtexttable.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp
index ba1c04f..48708c9 100644
--- a/src/gui/text/qtexttable.cpp
+++ b/src/gui/text/qtexttable.cpp
@@ -525,7 +525,12 @@ void QTextTablePrivate::update() const
     Rows and columns within a QTextTable can be merged and split using
     the mergeCells() and splitCell() functions. However, only cells that span multiple
     rows or columns can be split. (Merging or splitting does not increase or decrease
-    the number of rows and columns.)
+    the number of rows and columns.) 
+
+    Note that if you have merged multiple columns and rows into one cell, you will not
+    be able to split the merged cell into new cells spanning over more than one row 
+    or column. To be able to split cells spanning over several rows and columns you 
+    need to do this over several iterations.
 
     \table 80%
     \row
-- 
cgit v0.12


From aeea8fd5a940787600002dda39a10dff4d19d090 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <sroedal@trolltech.com>
Date: Mon, 11 May 2009 13:37:59 +0200
Subject: Made QFontEngineFT compile on 64-bit platforms with legacy headers.

In older Freetype headers FT_LCD_FILTER_DEFAULT is apparently defined to
be ((const FT_Byte*)(void*)(ft_ptrdiff_t)1), which leads to a compile
error due to precision loss when casting to int.

Task-number: 253186
Reviewed-by: Trond
---
 src/gui/text/qfontengine_ft.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index 7a236fd..6f5ee1f 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -613,7 +613,7 @@ QFontEngineFT::QFontEngineFT(const QFontDef &fd)
     subpixelType = Subpixel_None;
     lcdFilterType = 0;
 #if defined(FT_LCD_FILTER_H)
-    lcdFilterType = (int) FT_LCD_FILTER_DEFAULT;
+    lcdFilterType = (int)((quintptr) FT_LCD_FILTER_DEFAULT);
 #endif
     defaultFormat = Format_None;
     canUploadGlyphsToServer = false;
-- 
cgit v0.12


From e51c865ceb47dddfedb83ca4554ead21bd24ce7c Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Mon, 11 May 2009 14:19:17 +0200
Subject: Explaining details in QKeyEvent consruktor signature

Explained the role of the key attribute.

Task-number:246839
Rev-by: Richard Moe Gustavsen
---
 src/gui/kernel/qevent.cpp | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp
index 8c7e47d..2aed287 100644
--- a/src/gui/kernel/qevent.cpp
+++ b/src/gui/kernel/qevent.cpp
@@ -675,12 +675,13 @@ QWheelEvent::QWheelEvent(const QPoint &pos, const QPoint& globalPos, int delta,
     The \a type parameter must be QEvent::KeyPress, QEvent::KeyRelease,
     or QEvent::ShortcutOverride.
 
-    If \a key is 0, the event is not a result of
-    a known key; for example, it may be the result of a compose
-    sequence or keyboard macro. The \a modifiers holds the keyboard
-    modifiers, and the given \a text is the Unicode text that the
-    key generated. If \a autorep is true, isAutoRepeat() will be
-    true. \a count is the number of keys involved in the event.
+    Int \a key is the code for the Qt::Key that the event loop should listen 
+    for. If \a key is 0, the event is not a result of a known key; for 
+    example, it may be the result of a compose sequence or keyboard macro.
+    The \a modifiers holds the keyboard modifiers, and the given \a text 
+    is the Unicode text that the key generated. If \a autorep is true, 
+    isAutoRepeat() will be true. \a count is the number of keys involved 
+    in the event.
 */
 QKeyEvent::QKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers, const QString& text,
                      bool autorep, ushort count)
-- 
cgit v0.12


From 1d09e9cfd77d398788b6a31eb8c07ca2ac6fa9a8 Mon Sep 17 00:00:00 2001
From: "Bradley T. Hughes" <bradley.hughes@nokia.com>
Date: Mon, 11 May 2009 14:52:00 +0200
Subject: Set the instruction set when building on Debian's Linux/MIPS port

We use MIPS2 instructions in the inline assembler, so we need to make
sure that the assembler is informed of this.

Task-number: 253275
Reviewed-by: thiago
---
 src/corelib/arch/qatomic_mips.h | 106 ++++++++++++++++++++++++++++++++--------
 1 file changed, 86 insertions(+), 20 deletions(-)

diff --git a/src/corelib/arch/qatomic_mips.h b/src/corelib/arch/qatomic_mips.h
index b263aab..ea9954b 100644
--- a/src/corelib/arch/qatomic_mips.h
+++ b/src/corelib/arch/qatomic_mips.h
@@ -103,16 +103,25 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree()
 
 #if defined(Q_CC_GNU) && !defined(Q_OS_IRIX)
 
+#if _MIPS_SIM == _ABIO32
+#define SET_MIPS2 ".set mips2\n\t"
+#else
+#define SET_MIPS2
+#endif
+
 inline bool QBasicAtomicInt::ref()
 {
     register int originalValue;
     register int newValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  "ll %[originalValue], %[_q_value]\n"
                  "addiu %[newValue], %[originalValue], %[one]\n"
                  "sc %[newValue], %[_q_value]\n"
                  "beqz %[newValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [_q_value] "+m" (_q_value),
                    [newValue] "=&r" (newValue)
@@ -125,12 +134,15 @@ inline bool QBasicAtomicInt::deref()
 {
     register int originalValue;
     register int newValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  "ll %[originalValue], %[_q_value]\n"
                  "addiu %[newValue], %[originalValue], %[minusOne]\n"
                  "sc %[newValue], %[_q_value]\n"
                  "beqz %[newValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [_q_value] "+m" (_q_value),
                    [newValue] "=&r" (newValue)
@@ -143,7 +155,9 @@ inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
 {
     register int result;
     register int tempValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  "ll %[result], %[_q_value]\n"
                  "xor %[result], %[result], %[expectedValue]\n"
                  "bnez %[result], 0f\n"
@@ -153,6 +167,7 @@ inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
                  "0:\n"
+                 ".set pop\n"
                  : [result] "=&r" (result),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -166,7 +181,9 @@ inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue)
 {
     register int result;
     register int tempValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  "ll %[result], %[_q_value]\n"
                  "xor %[result], %[result], %[expectedValue]\n"
                  "bnez %[result], 0f\n"
@@ -177,6 +194,7 @@ inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue)
                  "nop\n"
                  "sync\n"
                  "0:\n"
+                 ".set pop\n"
                  : [result] "=&r" (result),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -190,7 +208,9 @@ inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue)
 {
     register int result;
     register int tempValue;
-    asm volatile("sync\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "sync\n"
                  "0:\n"
                  "ll %[result], %[_q_value]\n"
                  "xor %[result], %[result], %[expectedValue]\n"
@@ -201,6 +221,7 @@ inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue)
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
                  "0:\n"
+                 ".set pop\n"
                  : [result] "=&r" (result),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -219,12 +240,15 @@ inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue)
 {
     register int originalValue;
     register int tempValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  "ll %[originalValue], %[_q_value]\n"
                  "move %[tempValue], %[newValue]\n"
                  "sc %[tempValue], %[_q_value]\n"
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -237,13 +261,16 @@ inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue)
 {
     register int originalValue;
     register int tempValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  "ll %[originalValue], %[_q_value]\n"
                  "move %[tempValue], %[newValue]\n"
                  "sc %[tempValue], %[_q_value]\n"
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
                  "sync\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -256,13 +283,16 @@ inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue)
 {
     register int originalValue;
     register int tempValue;
-    asm volatile("sync\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "sync\n"
                  "0:\n"
                  "ll %[originalValue], %[_q_value]\n"
                  "move %[tempValue], %[newValue]\n"
                  "sc %[tempValue], %[_q_value]\n"
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -280,12 +310,15 @@ inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd)
 {
     register int originalValue;
     register int newValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  "ll %[originalValue], %[_q_value]\n"
                  "addu %[newValue], %[originalValue], %[valueToAdd]\n"
                  "sc %[newValue], %[_q_value]\n"
                  "beqz %[newValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [_q_value] "+m" (_q_value),
                    [newValue] "=&r" (newValue)
@@ -298,13 +331,16 @@ inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd)
 {
     register int originalValue;
     register int newValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  "ll %[originalValue], %[_q_value]\n"
                  "addu %[newValue], %[originalValue], %[valueToAdd]\n"
                  "sc %[newValue], %[_q_value]\n"
                  "beqz %[newValue], 0b\n"
                  "nop\n"
                  "sync\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [_q_value] "+m" (_q_value),
                    [newValue] "=&r" (newValue)
@@ -317,13 +353,16 @@ inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd)
 {
     register int originalValue;
     register int newValue;
-    asm volatile("sync\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "sync\n"
                  "0:\n"
                  "ll %[originalValue], %[_q_value]\n"
                  "addu %[newValue], %[originalValue], %[valueToAdd]\n"
                  "sc %[newValue], %[_q_value]\n"
                  "beqz %[newValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [_q_value] "+m" (_q_value),
                    [newValue] "=&r" (newValue)
@@ -350,7 +389,9 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValu
 {
     register T *result;
     register T *tempValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  LLP" %[result], %[_q_value]\n"
                  "xor %[result], %[result], %[expectedValue]\n"
                  "bnez %[result], 0f\n"
@@ -360,6 +401,7 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValu
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
                  "0:\n"
+                 ".set pop\n"
                  : [result] "=&r" (result),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -374,7 +416,9 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValu
 {
     register T *result;
     register T *tempValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  LLP" %[result], %[_q_value]\n"
                  "xor %[result], %[result], %[expectedValue]\n"
                  "bnez %[result], 0f\n"
@@ -385,6 +429,7 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValu
                  "nop\n"
                  "sync\n"
                  "0:\n"
+                 ".set pop\n"
                  : [result] "=&r" (result),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -399,7 +444,9 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValu
 {
     register T *result;
     register T *tempValue;
-    asm volatile("sync\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "sync\n"
                  "0:\n"
                  LLP" %[result], %[_q_value]\n"
                  "xor %[result], %[result], %[expectedValue]\n"
@@ -410,6 +457,7 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValu
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
                  "0:\n"
+                 ".set pop\n"
                  : [result] "=&r" (result),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -430,12 +478,15 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
 {
     register T *originalValue;
     register T *tempValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  LLP" %[originalValue], %[_q_value]\n"
                  "move %[tempValue], %[newValue]\n"
                  SCP" %[tempValue], %[_q_value]\n"
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -449,13 +500,16 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue)
 {
     register T *originalValue;
     register T *tempValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  LLP" %[originalValue], %[_q_value]\n"
                  "move %[tempValue], %[newValue]\n"
                  SCP" %[tempValue], %[_q_value]\n"
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
                  "sync\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -469,13 +523,16 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue)
 {
     register T *originalValue;
     register T *tempValue;
-    asm volatile("sync\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "sync\n"
                  "0:\n"
                  LLP" %[originalValue], %[_q_value]\n"
                  "move %[tempValue], %[newValue]\n"
                  SCP" %[tempValue], %[_q_value]\n"
                  "beqz %[tempValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [tempValue] "=&r" (tempValue),
                    [_q_value] "+m" (_q_value)
@@ -495,12 +552,15 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueTo
 {
     register T *originalValue;
     register T *newValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  LLP" %[originalValue], %[_q_value]\n"
                  "addu %[newValue], %[originalValue], %[valueToAdd]\n"
                  SCP" %[newValue], %[_q_value]\n"
                  "beqz %[newValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [_q_value] "+m" (_q_value),
                    [newValue] "=&r" (newValue)
@@ -514,13 +574,16 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueTo
 {
     register T *originalValue;
     register T *newValue;
-    asm volatile("0:\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "0:\n"
                  LLP" %[originalValue], %[_q_value]\n"
                  "addu %[newValue], %[originalValue], %[valueToAdd]\n"
                  SCP" %[newValue], %[_q_value]\n"
                  "beqz %[newValue], 0b\n"
                  "nop\n"
                  "sync\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [_q_value] "+m" (_q_value),
                    [newValue] "=&r" (newValue)
@@ -534,13 +597,16 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueTo
 {
     register T *originalValue;
     register T *newValue;
-    asm volatile("sync\n"
+    asm volatile(".set push\n"
+                 SET_MIPS2
+                 "sync\n"
                  "0:\n"
                  LLP" %[originalValue], %[_q_value]\n"
                  "addu %[newValue], %[originalValue], %[valueToAdd]\n"
                  SCP" %[newValue], %[_q_value]\n"
                  "beqz %[newValue], 0b\n"
                  "nop\n"
+                 ".set pop\n"
                  : [originalValue] "=&r" (originalValue),
                    [_q_value] "+m" (_q_value),
                    [newValue] "=&r" (newValue)
-- 
cgit v0.12


From 27d2f348792be0e08e204896dad8f3d80f51d80b Mon Sep 17 00:00:00 2001
From: Martin Smith <msmith@trolltech.com>
Date: Mon, 11 May 2009 15:35:49 +0200
Subject: qdoc: Fixed qdoc errors, or tried to.

---
 src/corelib/tools/qhash.cpp | 219 +++++++++++++++++++++-----------------------
 1 file changed, 102 insertions(+), 117 deletions(-)

diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp
index 21d98b5..b2512e1 100644
--- a/src/corelib/tools/qhash.cpp
+++ b/src/corelib/tools/qhash.cpp
@@ -379,6 +379,107 @@ void QHashData::checkSanity()
 #endif
 
 /*!
+    \fn uint qHash(const QPair<T1, T2> &key)
+    \relates QHash
+    \since 4.3
+
+    Returns the hash value for the \a key.
+
+    Types \c T1 and \c T2 must be supported by qHash().
+*/
+
+/*! \fn uint qHash(char key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(uchar key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(signed char key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(ushort key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(short key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(uint key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(int key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(ulong key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(long key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(quint64 key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(qint64 key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(QChar key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(const QByteArray &key)
+    \fn uint qHash(const QBitArray &key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(const QString &key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*! \fn uint qHash(const T *key)
+    \relates QHash
+
+    Returns the hash value for the \a key.
+*/
+
+/*!
     \class QHash
     \brief The QHash class is a template class that provides a hash-table-based dictionary.
 
@@ -401,7 +502,7 @@ void QHashData::checkSanity()
        key. With QHash, the items are arbitrarily ordered.
     \i The key type of a QMap must provide operator<(). The key
        type of a QHash must provide operator==() and a global
-       \l{qHash()}{qHash}(Key) function.
+       \l{qHash()} {hash} function.
     \endlist
 
     Here's an example QHash with QString keys and \c int values:
@@ -732,7 +833,6 @@ void QHashData::checkSanity()
 */
 
 /*! \fn const T QHash::value(const Key &key, const T &defaultValue) const
-
     \overload
 
     If the hash contains no item with the given \a key, the function returns
@@ -1490,121 +1590,6 @@ void QHashData::checkSanity()
     \sa operator+=(), operator-()
 */
 
-/*! \fn uint qHash(char key)
-    \relates QHash
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(uchar key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(signed char key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(ushort key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(short key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(uint key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(int key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(ulong key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(long key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(quint64 key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(qint64 key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(QChar key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(const QByteArray &key)
-    \fn uint qHash(const QBitArray &key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(const QString &key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*! \fn uint qHash(const T *key)
-    \relates QHash
-    \overload
-
-    Returns the hash value for the \a key.
-*/
-
-/*!
-    \fn uint qHash(const QPair<T1, T2> &key)
-    \relates QHash
-    \since 4.3
-
-    Returns the hash value for the \a key.
-
-    Types \c T1 and \c T2 must be supported by qHash().
-*/
-
 /*! \fn QDataStream &operator<<(QDataStream &out, const QHash<Key, T>& hash)
     \relates QHash
 
-- 
cgit v0.12


From 0ce24108aa20a38e53a7f307231a6752f89ef65a Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Mon, 11 May 2009 15:41:26 +0200
Subject: Correcting bug in custom Database Driver code snipptet

Adding const to call. Changing QSqlRecord record() { return QSqlRecord(); } to QSqlRecord record() const { return QSqlRecord(); } This is needed since record() is a virtual function.

Task-number:204557
Rev-by: Geir Vattekar
---
 doc/src/snippets/sqldatabase/sqldatabase.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/src/snippets/sqldatabase/sqldatabase.cpp b/doc/src/snippets/sqldatabase/sqldatabase.cpp
index ae176ac..06afa0c 100644
--- a/doc/src/snippets/sqldatabase/sqldatabase.cpp
+++ b/doc/src/snippets/sqldatabase/sqldatabase.cpp
@@ -524,7 +524,7 @@ protected:
     bool fetchLast() { return false; }
     int size() { return 0; }
     int numRowsAffected() { return 0; }
-    QSqlRecord record() { return QSqlRecord(); }
+    QSqlRecord record() const { return QSqlRecord(); }
 };
 //! [47]
 
-- 
cgit v0.12


From fecfc325bbd4decc0d61e10dc6536575c305f812 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao@abecasis.name>
Date: Mon, 11 May 2009 13:32:46 +0200
Subject: QFSFileEngine: Fix access to uninitialized memory

Reviewed-by: Peter Hartmann
---
 src/corelib/io/qfsfileengine_unix.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 0d88b06..18b92e2 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -780,7 +780,7 @@ QString QFSFileEngine::fileName(FileName file) const
 #endif
             if (len > 0) {
                 QString ret;
-                if (S_ISDIR(d->st.st_mode) && s[0] != '/') {
+                if (d->doStat() && S_ISDIR(d->st.st_mode) && s[0] != '/') {
                     QDir parent(d->filePath);
                     parent.cdUp();
                     ret = parent.path();
-- 
cgit v0.12


From 6200d413487517eadb8f4696d92a38fc73ba737c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= <trond@trolltech.com>
Date: Mon, 11 May 2009 16:40:33 +0200
Subject: Improved caching of QSvgIconEngine::actualSize() calls.

If an application calls QIcon::actualSize() for SVG based icons, before
the icon is drawn for the first time, the actualSize() call will
result in the SVG file being loaded and parsed for each call.
Instead of doing that, just render a pixmap of the queried size and
then the resulting actualSize() calls will used the size of the
cached pixmap.

Task-number: related to 251106
Reviewed-by: Kim
---
 src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp b/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp
index c7249d3..3273513 100644
--- a/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp
+++ b/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp
@@ -122,16 +122,10 @@ QSize QSvgIconEngine::actualSize(const QSize &size, QIcon::Mode mode,
             return size;
     }
 
-    QSvgRenderer renderer;
-    d->loadDataForModeAndState(&renderer, mode, state);
-    if (renderer.isValid()) {
-        QSize defaultSize = renderer.defaultSize();
-        if (!defaultSize.isNull())
-            defaultSize.scale(size, Qt::KeepAspectRatio);
-        return defaultSize;
-    } else {
+    QPixmap pm = pixmap(size, mode, state);
+    if (pm.isNull())
         return QSize();
-    }
+    return pm.size();
 }
 
 void QSvgIconEnginePrivate::loadDataForModeAndState(QSvgRenderer *renderer, QIcon::Mode mode, QIcon::State state)
-- 
cgit v0.12


From 5f135bd9ba053c0ef41df9fe5450c78460ad89d3 Mon Sep 17 00:00:00 2001
From: Anders Bakken <anders.bakken@nokia.com>
Date: Mon, 11 May 2009 10:16:44 -0700
Subject: Fix a type in warning

QDirecttFBPixmapData => QDirectFBPixmapData

Reviewed-by: TrustMe
---
 src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
index 7297a99..c9b676a 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
@@ -271,7 +271,7 @@ void QDirectFBPixmapData::fill(const QColor &color)
         forceRaster = false;
         setSerialNumber(++global_ser_no);
         if (!dfbSurface) {
-            qWarning("QDirecttFBPixmapData::fill()");
+            qWarning("QDirectFBPixmapData::fill()");
             invalidate();
             return;
         }
-- 
cgit v0.12


From 15e5a770635ca891bb3e0297fab130f7c1538655 Mon Sep 17 00:00:00 2001
From: Anders Bakken <anders.bakken@nokia.com>
Date: Mon, 11 May 2009 14:01:54 -0700
Subject: Remove unused variable

Reviewed-by: TrustMe
---
 src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
index 91a60e7..989a37a 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
@@ -275,7 +275,6 @@ private:
     int lastLockedHeight;
 
     IDirectFB *fb;
-    DFBSurfaceDescription fbDescription;
     int fbWidth;
     int fbHeight;
 
-- 
cgit v0.12


From e16c235ecdb0b13ece15722b69e180a53cff431a Mon Sep 17 00:00:00 2001
From: Anders Bakken <anders.bakken@nokia.com>
Date: Mon, 11 May 2009 14:07:39 -0700
Subject: initialize all DFBSurfaceDescriptions to 0

Since this is C there are no constructors.

Reviewed-by: Donald <qt-info@nokia.com>
---
 src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
index f571d1b..65fddbf 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
@@ -205,6 +205,7 @@ IDirectFBSurface *QDirectFBScreen::createDFBSurface(const QSize &size,
                                                     SurfaceCreationOptions options)
 {
     DFBSurfaceDescription desc;
+    memset(&desc, 0, sizeof(DFBSurfaceDescription));
     desc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH|DSDESC_HEIGHT);
     if (!QDirectFBScreen::initSurfaceDescriptionPixelFormat(&desc, format))
         return 0;
@@ -213,7 +214,6 @@ IDirectFBSurface *QDirectFBScreen::createDFBSurface(const QSize &size,
     return createDFBSurface(desc, options);
 }
 
-
 IDirectFBSurface *QDirectFBScreen::createDFBSurface(DFBSurfaceDescription desc, SurfaceCreationOptions options)
 {
     DFBResult result = DFB_OK;
@@ -247,6 +247,7 @@ IDirectFBSurface *QDirectFBScreen::createDFBSurface(DFBSurfaceDescription desc,
         }
         desc.caps = DFBSurfaceCapabilities(desc.caps & ~DSCAPS_VIDEOONLY);
     }
+
     if (d_ptr->directFBFlags & SystemOnly)
         desc.caps = DFBSurfaceCapabilities(desc.caps | DSCAPS_SYSTEMONLY);
 
@@ -445,6 +446,7 @@ QImage::Format QDirectFBScreen::getImageFormat(IDirectFBSurface *surface)
 DFBSurfaceDescription QDirectFBScreen::getSurfaceDescription(const QImage &image)
 {
     DFBSurfaceDescription description;
+    memset(&description, 0, sizeof(DFBSurfaceDescription));
 
     const DFBSurfacePixelFormat format = getSurfacePixelFormat(image.format());
 
@@ -479,6 +481,7 @@ DFBSurfaceDescription QDirectFBScreen::getSurfaceDescription(const uint *buffer,
                                                              int length)
 {
     DFBSurfaceDescription description;
+    memset(&description, 0, sizeof(DFBSurfaceDescription));
 
     description.flags = DFBSurfaceDescriptionFlags(DSDESC_CAPS
                                                    | DSDESC_WIDTH
@@ -917,6 +920,8 @@ bool QDirectFBScreen::connect(const QString &displaySpec)
         d_ptr->dfb->SetCooperativeLevel(d_ptr->dfb, DFSCL_FULLSCREEN);
 
     DFBSurfaceDescription description;
+    memset(&description, 0, sizeof(DFBSurfaceDescription));
+
     description.flags = DFBSurfaceDescriptionFlags(DSDESC_CAPS);
     if (::setIntOption(displayArgs, QLatin1String("width"), &description.width))
         description.flags = DFBSurfaceDescriptionFlags(description.flags | DSDESC_WIDTH);
-- 
cgit v0.12


From 7f0ffec90467c12d41566bb20fc02e09cfe3afa1 Mon Sep 17 00:00:00 2001
From: kh <qtc-committer@nokia.com>
Date: Tue, 12 May 2009 09:09:33 +0200
Subject: Version update.

---
 tools/assistant/tools/assistant/assistant.qch | Bin 368640 -> 368640 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/tools/assistant/tools/assistant/assistant.qch b/tools/assistant/tools/assistant/assistant.qch
index 64763f7..99687ed 100644
Binary files a/tools/assistant/tools/assistant/assistant.qch and b/tools/assistant/tools/assistant/assistant.qch differ
-- 
cgit v0.12


From 8d94fcce0a2ca382eac8357dae05ad387551e364 Mon Sep 17 00:00:00 2001
From: jasplin <qt-info@nokia.com>
Date: Tue, 12 May 2009 09:47:29 +0200
Subject: Fixed bug with Qt::WidgetWithChildren shortcut context in
 QGraphicsWidget.

For a QGraphicsWidget w, a shortcut with Qt::WidgetWithChildren context would
trigger even if w did not have focus (provided no other widgets in the view
had focus).

Reviewed-by: andreas
Task-number: 250119
---
 src/gui/kernel/qshortcutmap.cpp                    |  1 +
 tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp | 85 ++++++++++++++++++++++
 2 files changed, 86 insertions(+)

diff --git a/src/gui/kernel/qshortcutmap.cpp b/src/gui/kernel/qshortcutmap.cpp
index ed9654b..86894b4 100644
--- a/src/gui/kernel/qshortcutmap.cpp
+++ b/src/gui/kernel/qshortcutmap.cpp
@@ -753,6 +753,7 @@ bool QShortcutMap::correctGraphicsWidgetContext(Qt::ShortcutContext context, QGr
                 tw = tw->parentWidget();
             return tw == w;
         }
+        return false;
     }
 
     // Below is Qt::WindowShortcut context
diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
index f25a079..b85abd3 100644
--- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
+++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
@@ -50,6 +50,7 @@
 #include <qcleanlooksstyle.h>
 #include <qlineedit.h>
 #include <qboxlayout.h>
+#include <qaction.h>
 #include "../../shared/util.h"
 
 
@@ -150,6 +151,7 @@ private slots:
     // Task fixes
     void task236127_bspTreeIndexFails();
     void task243004_setStyleCrash();
+    void task250119_shortcutContext();
 };
 
 
@@ -1827,6 +1829,89 @@ void tst_QGraphicsWidget::task243004_setStyleCrash()
     delete item2;
 }
 
+class GraphicsWidget_task250119 : public QGraphicsWidget
+{
+public:
+    GraphicsWidget_task250119()
+        : shortcutEvents(0)
+    {
+        setFocusPolicy(Qt::StrongFocus);
+        resize(100, 100);
+    }
+
+    int shortcutEvents;
+
+private:
+    bool event(QEvent *event)
+    {
+        if (event->type() == QEvent::Shortcut)
+            shortcutEvents++;
+        return QGraphicsWidget::event(event);
+    }
+
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+    {
+        if (hasFocus()) {
+            painter->setPen(QPen(Qt::black, 0, Qt::DashLine));
+            painter->drawRect(rect());
+        }
+        painter->setPen(QPen(Qt::black, 0, Qt::SolidLine));
+        painter->fillRect(rect().adjusted(2, 2, -2, -2), Qt::yellow);
+        painter->drawRect(rect().adjusted(2, 2, -2, -2));
+    }
+};
+
+void tst_QGraphicsWidget::task250119_shortcutContext()
+{
+    QGraphicsScene scene;
+    QGraphicsView view;
+    view.setScene(&scene);
+    view.show();
+    QTest::qWait(100);
+
+
+    // *** Event: ***
+
+    GraphicsWidget_task250119 w_event;
+    scene.addItem(&w_event);
+
+    const int id = w_event.grabShortcut(Qt::Key_A, Qt::WidgetWithChildrenShortcut);
+    w_event.setShortcutEnabled(id, true);
+
+    w_event.setFocus();
+    QTest::keyPress(&view, Qt::Key_A);
+    QCOMPARE(w_event.shortcutEvents, 1);
+
+    w_event.clearFocus();
+    QTest::keyPress(&view, Qt::Key_A);
+    QCOMPARE(w_event.shortcutEvents, 1);
+
+    scene.removeItem(&w_event);
+
+
+    // *** Signal: ***
+
+    GraphicsWidget_task250119 w_signal;
+    scene.addItem(&w_signal);
+
+    QAction action(0);
+    action.setShortcut(Qt::Key_B);
+    action.setShortcutContext(Qt::WidgetWithChildrenShortcut);
+    QSignalSpy spy(&action, SIGNAL(triggered()));
+
+    w_signal.addAction(&action);
+
+    w_signal.setFocus();
+    QTest::keyPress(&view, Qt::Key_B);
+    QCOMPARE(spy.count(), 1);
+
+    w_signal.clearFocus();
+    QTest::keyPress(&view, Qt::Key_B);
+    QCOMPARE(spy.count(), 1);
+
+    scene.removeItem(&w_signal);
+}
+
 QTEST_MAIN(tst_QGraphicsWidget)
 #include "tst_qgraphicswidget.moc"
 
-- 
cgit v0.12


From bb0e2a55192cd134eb642dfa2f5e7ee93668a059 Mon Sep 17 00:00:00 2001
From: Kim Motoyoshi Kalland <kim.kalland@nokia.com>
Date: Tue, 12 May 2009 10:21:21 +0200
Subject: Fix handling of gradients on pens in the emulation paint engine.

The handling of gradients with object bounding mode on pens in the
emulation paint engine has been changed to agree with the SVG standard,
where pen widths are ignored when calculating bounding boxes. Instead
of converting strokes to fills and then transforming the gradients
based on the fills' bounding box, the gradients are now transformed
first based on the bounding box of the stroke path.

Reviewed-by: Trond
---
 src/gui/painting/qemulationpaintengine.cpp | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/gui/painting/qemulationpaintengine.cpp b/src/gui/painting/qemulationpaintengine.cpp
index 3397c45..175f1ab 100644
--- a/src/gui/painting/qemulationpaintengine.cpp
+++ b/src/gui/painting/qemulationpaintengine.cpp
@@ -123,14 +123,30 @@ void QEmulationPaintEngine::stroke(const QVectorPath &path, const QPen &pen)
         real_engine->stroke(path, bgPen);
     }
 
-
     QBrush brush = pen.brush();
+    QPen copy = pen;
     Qt::BrushStyle style = qbrush_style(brush);
     if (style >= Qt::LinearGradientPattern && style <= Qt::ConicalGradientPattern) {
         const QGradient *g = brush.gradient();
+
         if (g->coordinateMode() > QGradient::LogicalMode) {
-            QPaintEngineEx::stroke(path, pen);
-            return;
+            if (g->coordinateMode() == QGradient::StretchToDeviceMode) {
+                QTransform mat = brush.transform();
+                mat.scale(real_engine->painter()->device()->width(), real_engine->painter()->device()->height());
+                brush.setTransform(mat);
+                copy.setBrush(brush);
+                real_engine->stroke(path, copy);
+                return;
+            } else if (g->coordinateMode() == QGradient::ObjectBoundingMode) {
+                QTransform mat = brush.transform();
+                QRealRect r = path.controlPointRect();
+                mat.translate(r.x1, r.y1);
+                mat.scale(r.x2 - r.x1, r.y2 - r.y1);
+                brush.setTransform(mat);
+                copy.setBrush(brush);
+                real_engine->stroke(path, copy);
+                return;
+            }
         }
     }
 
-- 
cgit v0.12


From bc184432c49eb56254bc5db07c6af03718c6b0e7 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Tue, 12 May 2009 13:52:28 +0200
Subject: Correcting bug in QString::fromWCharArray documentation

Clearifying details about bit size of the wchar_t input and the way they are handled.

Task-number:227709
Rev-by: Marius Storm-Olsen
---
 src/corelib/tools/qstring.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 375d672..c3649e3 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -743,7 +743,9 @@ int QString::grow(int size)
 /*!
     \since 4.2
 
-    Returns a copy of the \a string string encoded in ucs4.
+    Returns a copy of the \a string, where the encoding of \a string depends on 
+    the size of wchar. If wchar is 4 bytes, the \a string is interpreted as ucs-4,
+    if wchar is 2 bytes it is interpreted as ucs-2.
 
     If \a size is -1 (default), the \a string has to be 0 terminated.
 
-- 
cgit v0.12


From 4d5a5149b716c67f031a3a40e23370f90542c92f Mon Sep 17 00:00:00 2001
From: Harald Fernengel <harald@trolltech.com>
Date: Tue, 12 May 2009 14:34:10 +0200
Subject: Make QAccessibleLineEdit actually accessible

Q_ACCESSIBLE_OBJECT was missing
---
 src/plugins/accessible/widgets/simplewidgets.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/plugins/accessible/widgets/simplewidgets.h b/src/plugins/accessible/widgets/simplewidgets.h
index d4552e3..d1fd0da 100644
--- a/src/plugins/accessible/widgets/simplewidgets.h
+++ b/src/plugins/accessible/widgets/simplewidgets.h
@@ -115,6 +115,7 @@ public:
 class QAccessibleLineEdit : public QAccessibleWidgetEx, public QAccessibleTextInterface,
                             public QAccessibleSimpleEditableTextInterface
 {
+    Q_ACCESSIBLE_OBJECT
 public:
     explicit QAccessibleLineEdit(QWidget *o, const QString &name = QString());
 
-- 
cgit v0.12


From 62edc8d78a8e38c62a87420bd3b37c886c6926d3 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Tue, 12 May 2009 16:11:41 +0200
Subject: Adding documentation to the fancy browser example

Added documentation to the fancy browser example.

Task-number:252097
Rev-by: Geir Vattekar
Rev-by: Ariya Hidayat
---
 doc/src/examples/fancybrowser.qdoc          | 103 +++++++++++++++++++++++++++-
 examples/webkit/fancybrowser/mainwindow.cpp |  20 +++++-
 examples/webkit/fancybrowser/mainwindow.h   |   4 +-
 3 files changed, 122 insertions(+), 5 deletions(-)

diff --git a/doc/src/examples/fancybrowser.qdoc b/doc/src/examples/fancybrowser.qdoc
index 9001c20..8338d8b 100644
--- a/doc/src/examples/fancybrowser.qdoc
+++ b/doc/src/examples/fancybrowser.qdoc
@@ -40,12 +40,109 @@
 ****************************************************************************/
 
 /*!
-    \example webkit/fancybrowser
-    \title Fancy Browser Example
+   \example webkit/fancybrowser
+  \title Fancy Browser Example
 
     The Fancy Browser example shows how to use jQuery with QtWebKit to
-    make a web browser with some special effects and content manipulation.
+    create a web browser with special effects and content
+    manipulation.
 
     \image fancybrowser-example.png
 
+    The application makes use of QWebFrame::evaluateJavaScript to 
+    evaluate the jQuery JavaScript code. A QMainWindow with a QWebView
+    as central widget builds up the browser itself. 
+
+    \section1 MainWindow Class Definition
+
+    The \c MainWindow class inherits QMainWindow. It implements a number of 
+    slots to perform actions on both the application and on the web content. 
+
+    \snippet examples/webkit/fancybrowser/mainwindow.h 1
+
+    We also declare a QString that contains the jQuery, a QWebView
+    that displays the web content, and a QLineEdit that acts as the
+    address bar.
+
+    \section1 MainWindow Class Implementation
+
+    We start by implementing the constructor. 
+
+    \snippet examples/webkit/fancybrowser/mainwindow.cpp 1
+
+    The first part of the constructor sets the value of \c progress to
+    0. This value will be used later in the code to visualize the
+    loading of a webpage.
+
+    Next, the jQuery library is loaded using a QFile and reading the file 
+    content. The jQuery library is a JavaScript library that provides different 
+    functions for manipulating HTML. 
+
+    \snippet examples/webkit/fancybrowser/mainwindow.cpp 2
+
+    The second part of the constructor creates a QWebView and connects
+    slots to the views signals. Furthermore, we create a QLineEdit as
+    the browsers address bar. We then set the horizontal QSizePolicy
+    to fill the available area in the browser at all times. We add the
+    QLineEdit to a QToolbar together with a set of navigation actions
+    from QWebView::pageAction.  
+
+    \snippet examples/webkit/fancybrowser/mainwindow.cpp 3
+
+    The third and last part of the constructor implements two QMenus and assigns
+    a set of actions to them. The last line sets the QWebView as the central 
+    widget in the QMainWindow.
+
+    \snippet examples/webkit/fancybrowser/mainwindow.cpp 4
+
+    When the page is loaded, \c adjustLocation() updates the address
+    bar; \c adjustLocation() is triggered by the \c loadFinished()
+    signal in QWebView. In \c changeLocation() we create a QUrl
+    objecti, and then use it to load the page into the QWebView. When
+    the new web page has finished loading, \c adjustLocation() will be
+    run once more to update the address bar.
+
+    \snippet examples/webkit/fancybrowser/mainwindow.cpp 5
+
+    \c adjustTitle() sets the window title and displays the loading
+    progress. This slot is triggered by the \c titleChanged() signal
+    in QWebView. 
+
+    \snippet examples/webkit/fancybrowser/mainwindow.cpp 6
+
+    When a web page has loaded, \c finishLoading() is triggered by the 
+    \c loadFinished() signal in QWebView. \c finishLoading() then updates the 
+    progress in the title bar and calls \c evaluateJavaScript() to evaluate the
+    jQuery library. This evaluates the JavaScript against the current web page. 
+    What that means is that the JavaScript can be viewed as part of the content 
+    loaded into the QWebView, and therefore needs to be loaded every time a new 
+    page is loaded. Once the jQuery library is loaded, we can start executing 
+    the different jQuery functions in the browser.
+
+    \snippet examples/webkit/fancybrowser/mainwindow.cpp 7
+
+    The first jQuery-based function, \c highlightAllLinks(), is designed to  
+    highlight all links in the current webpage. The JavaScript code looks 
+    for web elements named \i {a}, which is the tag for a hyperlink. 
+    For each such element, the background color is set to be yellow by
+    using CSS. 
+
+    \snippet examples/webkit/fancybrowser/mainwindow.cpp 8
+    
+    The \c rotateImages() function rotates the images on the current
+    web page. Webkit supports CSS transforms and this JavaScript code 
+    looks up all \i {img} elements and rotates the images 180 degrees
+    and then back again. 
+
+    \snippet examples/webkit/fancybrowser/mainwindow.cpp 9
+
+    The remaining four methods remove different elements from the current web 
+    page. \c removeGifImages() removes all Gif images on the page by looking up 
+    the \i {src} attribute of all the elements on the web page. Any element with 
+    a \i {gif} file as its source is removed. \c removeInlineFrames() removes all 
+    \i {iframe} or inline elements. \c removeObjectElements() removes all 
+    \i {object} elements, and \c removeEmbeddedElements() removes any elements 
+    such as plugins embedded on the page using the \i {embed} element.
+
 */
+
diff --git a/examples/webkit/fancybrowser/mainwindow.cpp b/examples/webkit/fancybrowser/mainwindow.cpp
index bf61f9c..e24f6cf 100644
--- a/examples/webkit/fancybrowser/mainwindow.cpp
+++ b/examples/webkit/fancybrowser/mainwindow.cpp
@@ -43,6 +43,8 @@
 #include <QtWebKit>
 #include "mainwindow.h"
 
+//! [1]
+
 MainWindow::MainWindow()
 {
     progress = 0;
@@ -52,7 +54,9 @@ MainWindow::MainWindow()
     file.open(QIODevice::ReadOnly);
     jQuery = file.readAll();
     file.close();
+//! [1]
 
+//! [2]
     view = new QWebView(this);
     view->load(QUrl("http://www.google.com/ncr"));
     connect(view, SIGNAL(loadFinished(bool)), SLOT(adjustLocation()));
@@ -70,7 +74,9 @@ MainWindow::MainWindow()
     toolBar->addAction(view->pageAction(QWebPage::Reload));
     toolBar->addAction(view->pageAction(QWebPage::Stop));
     toolBar->addWidget(locationEdit);
+//! [2]
 
+//! [3]
     QMenu *effectMenu = menuBar()->addMenu(tr("&Effect"));
     effectMenu->addAction("Highlight all links", this, SLOT(highlightAllLinks()));
 
@@ -89,7 +95,9 @@ MainWindow::MainWindow()
 
     setCentralWidget(view);
 }
+//! [3]
 
+//! [4]
 void MainWindow::adjustLocation()
 {
     locationEdit->setText(view->url().toString());
@@ -98,11 +106,12 @@ void MainWindow::adjustLocation()
 void MainWindow::changeLocation()
 {
     QUrl url = QUrl(locationEdit->text());
-    locationEdit->setText(url.toString());
     view->load(url);
     view->setFocus();
 }
+//! [4]
 
+//! [5]
 void MainWindow::adjustTitle()
 {
     if (progress <= 0 || progress >= 100)
@@ -116,20 +125,26 @@ void MainWindow::setProgress(int p)
     progress = p;
     adjustTitle();
 }
+//! [5]
 
+//! [6]
 void MainWindow::finishLoading(bool)
 {
     progress = 100;
     adjustTitle();
     view->page()->mainFrame()->evaluateJavaScript(jQuery);
 }
+//! [6]
 
+//! [7]
 void MainWindow::highlightAllLinks()
 {
     QString code = "$('a').each( function () { $(this).css('background-color', 'yellow') } )";
     view->page()->mainFrame()->evaluateJavaScript(code);
 }
+//! [7]
 
+//! [8]
 void MainWindow::rotateImages(bool toggle)
 {
     QString code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s') } )";
@@ -140,7 +155,9 @@ void MainWindow::rotateImages(bool toggle)
         code = "$('img').each( function () { $(this).css('-webkit-transform', 'rotate(0deg)') } )";
     view->page()->mainFrame()->evaluateJavaScript(code);
 }
+//! [8]
 
+//! [9]
 void MainWindow::removeGifImages()
 {
     QString code = "$('[src*=gif]').remove()";
@@ -164,4 +181,5 @@ void MainWindow::removeEmbeddedElements()
     QString code = "$('embed').remove()";
     view->page()->mainFrame()->evaluateJavaScript(code);
 }
+//! [9]
 
diff --git a/examples/webkit/fancybrowser/mainwindow.h b/examples/webkit/fancybrowser/mainwindow.h
index 9362ca7..2e1068c 100644
--- a/examples/webkit/fancybrowser/mainwindow.h
+++ b/examples/webkit/fancybrowser/mainwindow.h
@@ -39,13 +39,14 @@
 **
 ****************************************************************************/
 
-#include <QMainWindow>
+#include <QtGui>
 
 QT_BEGIN_NAMESPACE
 class QWebView;
 class QLineEdit;
 QT_END_NAMESPACE
 
+//! [1]
 class MainWindow : public QMainWindow
 {
     Q_OBJECT
@@ -73,4 +74,5 @@ private:
     QWebView *view;
     QLineEdit *locationEdit;
     int progress;
+//! [1]
 };
-- 
cgit v0.12


From 661096f7ed2d9d5c91d716ba414c7286220c6cf9 Mon Sep 17 00:00:00 2001
From: Benjamin Poulain <benjamin.poulain@nokia.com>
Date: Tue, 12 May 2009 16:12:52 +0200
Subject: The description cited MySQL and the code is for PostgreSQL.

Task-number: 253427
Reviewed-by: TrustMe
---
 src/sql/kernel/qsqldatabase.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp
index 6232452..a270c0e 100644
--- a/src/sql/kernel/qsqldatabase.cpp
+++ b/src/sql/kernel/qsqldatabase.cpp
@@ -378,7 +378,7 @@ void QSqlDatabasePrivate::disable()
     the connection name argument, if you don't pass the connection
     name argument, the default connection is assumed. The following
     snippet shows how to create and open a default connection to a
-    MySQL database:
+    PostgreSQL database:
 
     \snippet doc/src/snippets/sqldatabase/sqldatabase.cpp 0
 
-- 
cgit v0.12


From 64f86caef81ee0047fe28f0bc9c1d8a4ca606ebb Mon Sep 17 00:00:00 2001
From: Volker Hilsheimer <volker.hilsheimer@nokia.com>
Date: Tue, 12 May 2009 17:05:33 +0200
Subject: Reviewed-by: TrustMe

Small polishing.
---
 doc/src/examples/fancybrowser.qdoc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/doc/src/examples/fancybrowser.qdoc b/doc/src/examples/fancybrowser.qdoc
index 8338d8b..ea4da71 100644
--- a/doc/src/examples/fancybrowser.qdoc
+++ b/doc/src/examples/fancybrowser.qdoc
@@ -98,7 +98,7 @@
     When the page is loaded, \c adjustLocation() updates the address
     bar; \c adjustLocation() is triggered by the \c loadFinished()
     signal in QWebView. In \c changeLocation() we create a QUrl
-    objecti, and then use it to load the page into the QWebView. When
+    object, and then use it to load the page into the QWebView. When
     the new web page has finished loading, \c adjustLocation() will be
     run once more to update the address bar.
 
@@ -142,7 +142,7 @@
     a \i {gif} file as its source is removed. \c removeInlineFrames() removes all 
     \i {iframe} or inline elements. \c removeObjectElements() removes all 
     \i {object} elements, and \c removeEmbeddedElements() removes any elements 
-    such as plugins embedded on the page using the \i {embed} element.
+    such as plugins embedded on the page using the \i {embed} tag.
 
 */
 
-- 
cgit v0.12


From e58b7a29206bf81735ce45c964285de2e94ccc70 Mon Sep 17 00:00:00 2001
From: Trond Kjernaasen <trond@trolltech.com>
Date: Tue, 12 May 2009 17:22:33 +0200
Subject: Fixed a memory leak that occured when loading system icons on
 Windows.

There was a qFree() call missing.

Task-number: related to 253367
Reviewed-by: jbache
---
 src/gui/image/qpixmap_win.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/gui/image/qpixmap_win.cpp b/src/gui/image/qpixmap_win.cpp
index 3ec441b..cbe9004 100644
--- a/src/gui/image/qpixmap_win.cpp
+++ b/src/gui/image/qpixmap_win.cpp
@@ -319,6 +319,7 @@ static QImage qt_fromWinHBITMAP(HDC hdc, HBITMAP bitmap, int w, int h)
     } else {
         qWarning("qt_fromWinHBITMAP(), failed to get bitmap bits");
     }
+    qFree(data);
 
     return image;
 }
-- 
cgit v0.12


From 8a4934d8b97b55b80b2709dba04346e068251906 Mon Sep 17 00:00:00 2001
From: Norwegian Rock Cat <qt-info@nokia.com>
Date: Tue, 12 May 2009 17:53:27 +0200
Subject: Document a gotcha with QIcon::addFile

addFile makes a QIcon not null, which may be a surprise if the path
given is bad.

Reviewed-by: Jens Bache-Wiig
---
 src/gui/image/qicon.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index 3c71f15..53430ab 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -854,6 +854,9 @@ void QIcon::addPixmap(const QPixmap &pixmap, Mode mode, State state)
     QImageWriter::supportedImageFormats() functions to retrieve a
     complete list of the supported file formats.
 
+    Note: When you add a non-empty filename to a QIcon, the icon becomes
+    non-null, even if the file doesn't exist or points to a corrupt file.
+
     \sa addPixmap()
  */
 void QIcon::addFile(const QString &fileName, const QSize &size, Mode mode, State state)
-- 
cgit v0.12


From efad5df3ee7dea6cb587aacd27010e15a69f4320 Mon Sep 17 00:00:00 2001
From: Kavindra Devi Palaraja <kavindra.palaraja@nokia.com>
Date: Tue, 12 May 2009 18:18:29 +0200
Subject: Doc - cleaning up the documentation of QUiLoader.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Also mentioned an important point: If you subclass QUiLoader and
reimplement either createAction(), createActionGroup(), createLayout(),
or createWidget() -- you must call the original implementation first,
within your implementation.

Reviewed-by: João Abecasis <joao@abecasis.name>
---
 tools/designer/src/uitools/quiloader.cpp | 194 +++++++++++++++++--------------
 1 file changed, 105 insertions(+), 89 deletions(-)

diff --git a/tools/designer/src/uitools/quiloader.cpp b/tools/designer/src/uitools/quiloader.cpp
index 67bd29c..106e641 100644
--- a/tools/designer/src/uitools/quiloader.cpp
+++ b/tools/designer/src/uitools/quiloader.cpp
@@ -572,53 +572,52 @@ void QUiLoaderPrivate::setupWidgetMap() const
     \class QUiLoader
     \inmodule QtUiTools
 
-    \brief The QUiLoader class allows standalone applications dynamically
-    create user interfaces at run-time using the information stored in
-    .ui files or specified plugin paths.
+    \brief enables standalone applications to dynamically create user
+    interfaces at run-time using the information stored in .ui files or
+    specified in plugin paths.
 
-    In addition, you can customize of creating an user interface by
+    In addition, you can customize or create your own user interface by
     deriving your own loader class.
 
-    If you have a custom component or an application that embeds Qt
-    Designer, you can also use the QFormBuilder class provided by the
-    QtDesigner module to create user interfaces from .ui files.
+    If you have a custom component or an application that embeds \QD, you can
+    also use the QFormBuilder class provided by the QtDesigner module to create
+    user interfaces from \c{.ui} files.
 
-    The QUiLoader class provides a collection of functions that allows
-    you to create widgets based on the information stored in \c .ui
-    files (created with Qt Designer) or available in the specified
-    plugin paths. The specified plugin paths can be retrieved using
-    the pluginPaths() function. You can retrieve the contents of an \c
-    .ui file using the load() function. For example:
+    The QUiLoader class provides a collection of functions allowing you to
+    create widgets based on the information stored in \c .ui files (created
+    with \QD) or available in the specified plugin paths. The specified plugin
+    paths can be retrieved using the pluginPaths() function. Similarly, the
+    contents of a \c{.ui} file  can be retrieved using the load() function. For
+    example:
 
     \snippet doc/src/snippets/quiloader/mywidget.cpp 0
 
-    By including the user interface in the form's resources (\c myform.qrc),
-    we ensure that it will be present at run-time:
+    By including the user interface in the form's resources (\c myform.qrc), we
+    ensure that it will be present at run-time:
 
     \quotefile doc/src/snippets/quiloader/mywidget.qrc
 
-    The availableWidgets() function returns a QStringList with the
-    class names of the widgets available in the specified plugin
-    paths. You can create any of these widgets using the
-    createWidget() function. For example:
+    The availableWidgets() function returns a QStringList with the class names
+    of the widgets available in the specified plugin paths. To create these
+    widgets, simply use the createWidget() function. For example:
 
     \snippet doc/src/snippets/quiloader/main.cpp 0
 
-    You can make a custom widget available to the loader using the
-    addPluginPath() function, and you can remove all the available widgets
-    by calling the clearPluginPaths() function.
+    To make a custom widget available to the loader, you can use the
+    addPluginPath() function; to remove all available widgets, you can call
+    the clearPluginPaths() function.
 
-    The createAction(), createActionGroup(), createLayout() and
-    createWidget() functions are used internally by the QUiLoader class
-    whenever it has to create an action, action group, layout or
-    widget respectively. For that reason, you can subclass the QUiLoader
-    class and reimplement these functions to intervene the process of
-    constructing an user interface. For example, you might want to
-    create a list of the actions created when loading a form or
-    creating a custom widget.
+    The createAction(), createActionGroup(), createLayout(), and createWidget()
+    functions are used internally by the QUiLoader class whenever it has to
+    create an action, action group, layout, or widget respectively. For that
+    reason, you can subclass the QUiLoader class and reimplement these
+    functions to intervene the process of constructing a user interface. For
+    example, you might want to have a list of the actions created when loading
+    a form or creating a custom widget. However, in your reimplementation, you
+    must call QUiLoader's original implementation of these functions first.
 
-    For a complete example using the QUiLoader class, see the \l
-    {designer/calculatorbuilder}{Calculator Builder} example.
+    For a complete example using the QUiLoader class, see the
+    \l{Calculator Builder Example}.
 
     \sa QtUiTools, QFormBuilder
 */
@@ -653,8 +652,8 @@ QUiLoader::~QUiLoader()
 }
 
 /*!
-    Loads a form from the given \a device and creates a new widget with the given
-    \a parentWidget to hold its contents.
+    Loads a form from the given \a device and creates a new widget with the
+    given \a parentWidget to hold its contents.
 
     \sa createWidget()
 */
@@ -668,8 +667,8 @@ QWidget *QUiLoader::load(QIODevice *device, QWidget *parentWidget)
 }
 
 /*!
-    Returns a list naming the paths the loader searches when locating
-    custom widget plugins.
+    Returns a list naming the paths in which the loader will search when
+    locating custom widget plugins.
 
     \sa addPluginPath(), clearPluginPaths()
 */
@@ -680,7 +679,7 @@ QStringList QUiLoader::pluginPaths() const
 }
 
 /*!
-    Clears the list of paths the loader searches when locating
+    Clears the list of paths in which the loader will search when locating
     plugins.
 
     \sa addPluginPath(), pluginPaths()
@@ -692,7 +691,7 @@ void QUiLoader::clearPluginPaths()
 }
 
 /*!
-    Adds the given \a path to the list of paths the loader searches
+    Adds the given \a path to the list of paths in which the loader will search
     when locating plugins.
 
     \sa pluginPaths(), clearPluginPaths()
@@ -704,17 +703,17 @@ void QUiLoader::addPluginPath(const QString &path)
 }
 
 /*!
-  Creates a new widget with the given \a parent and \a name
-  using the class specified by \a className. You can use this
-  function to create any of the widgets returned by the
-  availableWidgets() function.
+    Creates a new widget with the given \a parent and \a name using the class
+    specified by \a className. You can use this function to create any of the
+    widgets returned by the availableWidgets() function.
 
-  The function is also used internally by the QUiLoader class whenever
-  it has to create a widget. For that reason, you can subclass the
-  QUiLoader class and reimplement this function to intervene in the
-  process of constructing a user interface or widget.
+    The function is also used internally by the QUiLoader class whenever it
+    creates a widget. Hence, you can subclass QUiLoader and reimplement this
+    function to intervene process of constructing a user interface or widget.
+    However, in your implementation, ensure that you call QUiLoader's version
+    first.
 
-  \sa availableWidgets(), load()
+    \sa availableWidgets(), load()
 */
 QWidget *QUiLoader::createWidget(const QString &className, QWidget *parent, const QString &name)
 {
@@ -723,13 +722,14 @@ QWidget *QUiLoader::createWidget(const QString &className, QWidget *parent, cons
 }
 
 /*!
-    Creates a new layout with the given \a parent and \a name
-    using the class specified by \a className.
+    Creates a new layout with the given \a parent and \a name using the class
+    specified by \a className.
 
-    The function is used internally by the QUiLoader class whenever it
-    has to create a layout. For that reason, you can subclass the
-    QUiLoader class and reimplement this function to intervene the
-    process of constructing an user interface or widget.
+    The function is also used internally by the QUiLoader class whenever it
+    creates a widget. Hence, you can subclass QUiLoader and reimplement this
+    function to intervene process of constructing a user interface or widget.
+    However, in your implementation, ensure that you call QUiLoader's version
+    first.
 
     \sa createWidget(), load()
 */
@@ -742,10 +742,11 @@ QLayout *QUiLoader::createLayout(const QString &className, QObject *parent, cons
 /*!
     Creates a new action group with the given \a parent and \a name.
 
-    The function is used internally by the QUiLoader class whenever it
-    has to create an action group. For that reason, you can subclass
-    the QUiLoader class and reimplement this function to intervene the
-    process of constructing an user interface or widget.
+    The function is also used internally by the QUiLoader class whenever it
+    creates a widget. Hence, you can subclass QUiLoader and reimplement this
+    function to intervene process of constructing a user interface or widget.
+    However, in your implementation, ensure that you call QUiLoader's version
+    first.
 
     \sa createAction(), createWidget(), load()
  */
@@ -758,10 +759,11 @@ QActionGroup *QUiLoader::createActionGroup(QObject *parent, const QString &name)
 /*!
     Creates a new action with the given \a parent and \a name.
 
-    The function is used internally by the QUiLoader class whenever it
-    has to create an action. For that reason, you can subclass the
-    QUiLoader class and reimplement this function to intervene the
-    process of constructing an user interface or widget.
+    The function is also used internally by the QUiLoader class whenever it
+    creates a widget. Hence, you can subclass QUiLoader and reimplement this
+    function to intervene process of constructing a user interface or widget.
+    However, in your implementation, ensure that you call QUiLoader's version
+    first.
 
     \sa createActionGroup(), createWidget(), load()
 */
@@ -772,9 +774,9 @@ QAction *QUiLoader::createAction(QObject *parent, const QString &name)
 }
 
 /*!
-    Returns a list naming the available widgets that can be built
-    using the createWidget() function, i.e all the widgets specified
-    within the given plugin paths.
+    Returns a list naming all available widgets that can be built using the
+    createWidget() function, i.e all the widgets specified within the given
+    plugin paths.
 
     \sa pluginPaths(), createWidget()
 
@@ -795,11 +797,11 @@ QStringList QUiLoader::availableWidgets() const
 
 
 /*!
-    Returns a list naming the available layouts that can be built
-    using the createLayout() function
+    \since 4.5
+    Returns a list naming all available layouts that can be built using the
+    createLayout() function
 
     \sa createLayout()
-    \since 4.5
 */
 
 QStringList QUiLoader::availableLayouts() const
@@ -816,9 +818,9 @@ QStringList QUiLoader::availableLayouts() const
 }
 
 /*!
-    Sets the working directory of the loader to \a dir. The loader
-    looks for other resources, such as icons and resource files,
-    in paths relative to this directory.
+    Sets the working directory of the loader to \a dir. The loader will look
+    for other resources, such as icons and resource files, in paths relative to
+    this directory.
 
     \sa workingDirectory()
 */
@@ -842,9 +844,13 @@ QDir QUiLoader::workingDirectory() const
 }
 
 /*!
-    Sets whether the execution of scripts is enabled to \a enabled.
-    \since 4.3
     \internal
+    \since 4.3
+
+    If \a enabled is true, the loader will be able to execute scripts.
+    Otherwise, execution of scripts will be disabled.
+
+    \sa isScriptingEnabled()
 */
 
 void QUiLoader::setScriptingEnabled(bool enabled)
@@ -854,10 +860,12 @@ void QUiLoader::setScriptingEnabled(bool enabled)
 }
 
 /*!
-   Returns whether the execution of scripts is enabled.
-   \sa setScriptingEnabled()
-   \since 4.3
-   \internal
+    \internal
+    \since 4.3
+    
+    Returns true if execution of scripts is enabled; returns false otherwise.
+
+    \sa setScriptingEnabled()
 */
 
 bool QUiLoader::isScriptingEnabled() const
@@ -867,11 +875,13 @@ bool QUiLoader::isScriptingEnabled() const
 }
 
 /*!
-    Sets whether user interfaces loaded by this loader automatically
-    retranslate themselves upon receiving a language change event or not,
-    depending on \a enabled.
-
     \since 4.5
+
+    If \a enabled is true, user interfaces loaded by this loader will
+    automatically retranslate themselves upon receiving a language change
+    event. Otherwise, the user interfaces will not be retranslated.
+
+    \sa isLanguageChangeEnabled()
 */
 
 void QUiLoader::setLanguageChangeEnabled(bool enabled)
@@ -881,9 +891,12 @@ void QUiLoader::setLanguageChangeEnabled(bool enabled)
 }
 
 /*!
-   Returns whether dynamic retranslation on language change is enabled.
-   \sa setLanguageChangeEnabled()
-   \since 4.5
+    \since 4.5
+
+    Returns true if dynamic retranslation on language change is enabled;
+    returns false otherwise.
+
+    \sa setLanguageChangeEnabled()
 */
 
 bool QUiLoader::isLanguageChangeEnabled() const
@@ -894,11 +907,14 @@ bool QUiLoader::isLanguageChangeEnabled() const
 
 /*!
     \internal
+    \since 4.5
+    
+    If \a enabled is true, user interfaces loaded by this loader will be
+    translated. Otherwise, the user interfaces will not be translated.
 
-    Sets whether user interfaces loaded by this loader are translated
-    at all. Note that this is orthogonal to languageChangeEnabled.
+    \note This is orthogonal to languageChangeEnabled.
 
-    \since 4.5
+    \sa isLanguageChangeEnabled(), setLanguageChangeEnabled()
 */
 
 void QUiLoader::setTranslationEnabled(bool enabled)
@@ -909,11 +925,11 @@ void QUiLoader::setTranslationEnabled(bool enabled)
 
 /*!
     \internal
+    \since 4.5
 
-    Returns whether translation is enabled.
-    \sa setTranslationEnabled()
+    Returns true if translation is enabled; returns false otherwise.
 
-    \since 4.5
+    \sa setTranslationEnabled()
 */
 
 bool QUiLoader::isTranslationEnabled() const
-- 
cgit v0.12


From 7f5e15034a324ecd7df082e012403ad99c5b5476 Mon Sep 17 00:00:00 2001
From: Kavindra Devi Palaraja <kavindra.palaraja@nokia.com>
Date: Tue, 12 May 2009 18:25:30 +0200
Subject: Doc - removing trailing whitespaces

---
 tools/designer/src/uitools/quiloader.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/designer/src/uitools/quiloader.cpp b/tools/designer/src/uitools/quiloader.cpp
index 106e641..548f07e 100644
--- a/tools/designer/src/uitools/quiloader.cpp
+++ b/tools/designer/src/uitools/quiloader.cpp
@@ -862,7 +862,7 @@ void QUiLoader::setScriptingEnabled(bool enabled)
 /*!
     \internal
     \since 4.3
-    
+
     Returns true if execution of scripts is enabled; returns false otherwise.
 
     \sa setScriptingEnabled()
@@ -908,7 +908,7 @@ bool QUiLoader::isLanguageChangeEnabled() const
 /*!
     \internal
     \since 4.5
-    
+
     If \a enabled is true, user interfaces loaded by this loader will be
     translated. Otherwise, the user interfaces will not be translated.
 
-- 
cgit v0.12


From d3f8c08548cf7a454d3fd31c3313031d3e0bb223 Mon Sep 17 00:00:00 2001
From: Anders Bakken <anders.bakken@nokia.com>
Date: Tue, 12 May 2009 16:31:32 -0700
Subject: Fixed wrong function name in warning

Reviewed-by: Donald <qt-info@nokia.com>
---
 src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
index 65fddbf..98e32ed 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
@@ -294,14 +294,14 @@ IDirectFBSurface *QDirectFBScreen::copyToDFBSurface(const QImage &img,
 
     IDirectFBSurface *dfbSurface = createDFBSurface(image.size(), pixmapFormat, options);
     if (!dfbSurface) {
-        qWarning("QDirectFBPixmapData::fromImage() Couldn't create surface");
+        qWarning("QDirectFBScreen::copyToDFBSurface() Couldn't create surface");
         return 0;
     }
 
 #ifndef QT_NO_DIRECTFB_PREALLOCATED
     IDirectFBSurface *imgSurface = createDFBSurface(image, DontTrackSurface);
     if (!imgSurface) {
-        qWarning("QDirectFBPixmapData::fromImage()");
+        qWarning("QDirectFBScreen::copyToDFBSurface()");
         QDirectFBScreen::releaseDFBSurface(dfbSurface);
         return 0;
     }
@@ -316,7 +316,7 @@ IDirectFBSurface *QDirectFBScreen::copyToDFBSurface(const QImage &img,
     dfbSurface->SetBlittingFlags(dfbSurface, flags);
     DFBResult result = dfbSurface->Blit(dfbSurface, imgSurface, 0, 0, 0);
     if (result != DFB_OK)
-        DirectFBError("QDirectFBPixmapData::fromImage()", result);
+        DirectFBError("QDirectFBScreen::copyToDFBSurface()", result);
     dfbSurface->ReleaseSource(dfbSurface);
     imgSurface->Release(imgSurface);
 #else // QT_NO_DIRECTFB_PREALLOCATED
-- 
cgit v0.12


From dcf1867f5715991e233120122f6252b18ccd26e3 Mon Sep 17 00:00:00 2001
From: Bill King <bill.king@nokia.com>
Date: Wed, 13 May 2009 14:06:47 +1000
Subject: Fixes a segfault from out of order cleanup of mysql resources.

If a QSqlQuery survived the lifetime of removal of a mysql db connection (that failed), the cleanup code would cause a segfault because it was using an out of date pointer that was pointing at memory that'd been freed by the removeDatabase() call.

Revby: Justin McPherson
Task-number: 205701
---
 src/sql/drivers/mysql/qsql_mysql.cpp   | 123 +++++++++++++++++++--------------
 tests/auto/qsqlquery/tst_qsqlquery.cpp |  22 +++++-
 2 files changed, 93 insertions(+), 52 deletions(-)

diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index 1f54db7..fbefa0c 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -163,18 +163,21 @@ static inline QVariant qDateTimeFromString(QString &val)
 #endif
 }
 
-class QMYSQLResultPrivate
+class QMYSQLResultPrivate : public QObject
 {
+    Q_OBJECT
 public:
-    QMYSQLResultPrivate(QMYSQLDriverPrivate* dp) : d(dp), result(0),
+    QMYSQLResultPrivate(const QMYSQLDriver* dp) : driver(dp), result(0),
         rowsAffected(0), hasBlobs(false)
 #if MYSQL_VERSION_ID >= 40108
         , stmt(0), meta(0), inBinds(0), outBinds(0)
 #endif
         , precisionPolicy(QSql::HighPrecision)
-        {}
+        {
+            connect(dp, SIGNAL(destroyed()), this, SLOT(driverDestroyed()));
+        }
 
-    QMYSQLDriverPrivate* d;
+    const QMYSQLDriver* driver;
     MYSQL_RES *result;
     MYSQL_ROW row;
 
@@ -207,6 +210,8 @@ public:
     MYSQL_BIND *outBinds;
 #endif
     QSql::NumericalPrecisionPolicy precisionPolicy;
+private Q_SLOTS:
+    void driverDestroyed() { driver = NULL; }
 };
 
 #ifndef QT_NO_TEXTCODEC
@@ -379,7 +384,7 @@ bool QMYSQLResultPrivate::bindInValues()
 QMYSQLResult::QMYSQLResult(const QMYSQLDriver* db)
 : QSqlResult(db)
 {
-    d = new QMYSQLResultPrivate(db->d);
+    d = new QMYSQLResultPrivate(db);
 }
 
 QMYSQLResult::~QMYSQLResult()
@@ -391,7 +396,7 @@ QMYSQLResult::~QMYSQLResult()
 QVariant QMYSQLResult::handle() const
 {
 #if MYSQL_VERSION_ID >= 40108
-    if(d->d->preparedQuerys)
+    if(d->driver && d->driver->d->preparedQuerys)
         return d->meta ? qVariantFromValue(d->meta) : qVariantFromValue(d->stmt);
     else
 #endif
@@ -406,8 +411,8 @@ void QMYSQLResult::cleanup()
 // must iterate trough leftover result sets from multi-selects or stored procedures
 // if this isn't done subsequent queries will fail with "Commands out of sync"
 #if MYSQL_VERSION_ID >= 40100
-    while (d->d->mysql && mysql_next_result(d->d->mysql) == 0) {
-        MYSQL_RES *res = mysql_store_result(d->d->mysql);
+    while (d->driver && d->driver->d->mysql && mysql_next_result(d->driver->d->mysql) == 0) {
+        MYSQL_RES *res = mysql_store_result(d->driver->d->mysql);
         if (res)
             mysql_free_result(res);
     }
@@ -447,11 +452,14 @@ void QMYSQLResult::cleanup()
     setAt(-1);
     setActive(false);
 
-    d->d->preparedQuerys = d->d->preparedQuerysEnabled;
+    if(d->driver)
+        d->driver->d->preparedQuerys = d->driver->d->preparedQuerysEnabled;
 }
 
 bool QMYSQLResult::fetch(int i)
 {
+    if(!d->driver)
+        return false;
     if (isForwardOnly()) { // fake a forward seek
         if (at() < i) {
             int x = i - at();
@@ -463,7 +471,7 @@ bool QMYSQLResult::fetch(int i)
     }
     if (at() == i)
         return true;
-    if (d->d->preparedQuerys) {
+    if (d->driver->d->preparedQuerys) {
 #if MYSQL_VERSION_ID >= 40108
         mysql_stmt_data_seek(d->stmt, i);
 
@@ -494,7 +502,9 @@ bool QMYSQLResult::fetch(int i)
 
 bool QMYSQLResult::fetchNext()
 {
-    if (d->d->preparedQuerys) {
+    if(!d->driver)
+        return false;
+    if (d->driver->d->preparedQuerys) {
 #if MYSQL_VERSION_ID >= 40108
         if (mysql_stmt_fetch(d->stmt))
             return false;
@@ -512,6 +522,8 @@ bool QMYSQLResult::fetchNext()
 
 bool QMYSQLResult::fetchLast()
 {
+    if(!d->driver)
+        return false;
     if (isForwardOnly()) { // fake this since MySQL can't seek on forward only queries
         bool success = fetchNext(); // did we move at all?
         while (fetchNext()) {};
@@ -519,7 +531,7 @@ bool QMYSQLResult::fetchLast()
     }
 
     my_ulonglong numRows;
-    if (d->d->preparedQuerys) {
+    if (d->driver->d->preparedQuerys) {
 #if MYSQL_VERSION_ID >= 40108
         numRows = mysql_stmt_num_rows(d->stmt);
 #else
@@ -553,15 +565,18 @@ QVariant QMYSQLResult::data(int field)
         return QVariant();
     }
 
+    if (!d->driver)
+        return QVariant();
+
     int fieldLength = 0;
     const QMYSQLResultPrivate::QMyField &f = d->fields.at(field);
     QString val;
-    if (d->d->preparedQuerys) {
+    if (d->driver->d->preparedQuerys) {
         if (f.nullIndicator)
             return QVariant(f.type);
 
         if (f.type != QVariant::ByteArray)
-            val = toUnicode(d->d->tc, f.outField, f.bufLength);
+            val = toUnicode(d->driver->d->tc, f.outField, f.bufLength);
     } else {
         if (d->row[field] == NULL) {
             // NULL value
@@ -569,7 +584,7 @@ QVariant QMYSQLResult::data(int field)
         }
         fieldLength = mysql_fetch_lengths(d->result)[field];
         if (f.type != QVariant::ByteArray)
-            val = toUnicode(d->d->tc, d->row[field], fieldLength);
+            val = toUnicode(d->driver->d->tc, d->row[field], fieldLength);
     }
 
     switch(f.type) {
@@ -614,7 +629,7 @@ QVariant QMYSQLResult::data(int field)
     case QVariant::ByteArray: {
 
         QByteArray ba;
-        if (d->d->preparedQuerys) {
+        if (d->driver->d->preparedQuerys) {
             ba = QByteArray(f.outField, f.bufLength);
         } else {
             ba = QByteArray(d->row[field], fieldLength);
@@ -631,7 +646,7 @@ QVariant QMYSQLResult::data(int field)
 
 bool QMYSQLResult::isNull(int field)
 {
-   if (d->d->preparedQuerys)
+   if (d->driver->d->preparedQuerys)
        return d->fields.at(field).nullIndicator;
    else
        return d->row[field] == NULL;
@@ -639,31 +654,31 @@ bool QMYSQLResult::isNull(int field)
 
 bool QMYSQLResult::reset (const QString& query)
 {
-    if (!driver() || !driver()->isOpen() || driver()->isOpenError())
+    if (!driver() || !driver()->isOpen() || driver()->isOpenError() || !d->driver)
         return false;
 
-    if(d->d->preparedQuerysEnabled && prepare(query)) {
-        d->d->preparedQuerys = true;
+    if(d->driver->d->preparedQuerysEnabled && prepare(query)) {
+        d->driver->d->preparedQuerys = true;
         return exec();
     }
-    d->d->preparedQuerys = false;
+    d->driver->d->preparedQuerys = false;
 
-    const QByteArray encQuery(fromUnicode(d->d->tc, query));
-    if (mysql_real_query(d->d->mysql, encQuery.data(), encQuery.length())) {
+    const QByteArray encQuery(fromUnicode(d->driver->d->tc, query));
+    if (mysql_real_query(d->driver->d->mysql, encQuery.data(), encQuery.length())) {
         setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to execute query"),
-                     QSqlError::StatementError, d->d));
+                     QSqlError::StatementError, d->driver->d));
         return false;
     }
-    d->result = mysql_store_result(d->d->mysql);
-    if (!d->result && mysql_field_count(d->d->mysql) > 0) {
+    d->result = mysql_store_result(d->driver->d->mysql);
+    if (!d->result && mysql_field_count(d->driver->d->mysql) > 0) {
         setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to store result"),
-                    QSqlError::StatementError, d->d));
+                    QSqlError::StatementError, d->driver->d));
         return false;
     }
-    int numFields = mysql_field_count(d->d->mysql);
+    int numFields = mysql_field_count(d->driver->d->mysql);
     setSelect(numFields != 0);
     d->fields.resize(numFields);
-    d->rowsAffected = mysql_affected_rows(d->d->mysql);
+    d->rowsAffected = mysql_affected_rows(d->driver->d->mysql);
     if (isSelect()) {
         for(int i = 0; i < numFields; i++) {
             MYSQL_FIELD* field = mysql_fetch_field_direct(d->result, i);
@@ -677,8 +692,8 @@ bool QMYSQLResult::reset (const QString& query)
 
 int QMYSQLResult::size()
 {
-    if (isSelect())
-        if (d->d->preparedQuerys)
+    if (d->driver && isSelect())
+        if (d->driver->d->preparedQuerys)
 #if MYSQL_VERSION_ID >= 40108
             return mysql_stmt_num_rows(d->stmt);
 #else
@@ -697,17 +712,17 @@ int QMYSQLResult::numRowsAffected()
 
 QVariant QMYSQLResult::lastInsertId() const
 {
-    if (!isActive())
+    if (!isActive() || !d->driver)
         return QVariant();
 
-    if (d->d->preparedQuerys) {
+    if (d->driver->d->preparedQuerys) {
 #if MYSQL_VERSION_ID >= 40108
         quint64 id = mysql_stmt_insert_id(d->stmt);
         if (id)
             return QVariant(id);
 #endif
     } else {
-        quint64 id = mysql_insert_id(d->d->mysql);
+        quint64 id = mysql_insert_id(d->driver->d->mysql);
         if (id)
             return QVariant(id);
     }
@@ -718,20 +733,20 @@ QSqlRecord QMYSQLResult::record() const
 {
     QSqlRecord info;
     MYSQL_RES *res;
-    if (!isActive() || !isSelect())
+    if (!isActive() || !isSelect() || !d->driver)
         return info;
 
 #if MYSQL_VERSION_ID >= 40108
-    res = d->d->preparedQuerys ? d->meta : d->result;
+    res = d->driver->d->preparedQuerys ? d->meta : d->result;
 #else
     res = d->result;
 #endif
 
-    if (!mysql_errno(d->d->mysql)) {
+    if (!mysql_errno(d->driver->d->mysql)) {
         mysql_field_seek(res, 0);
         MYSQL_FIELD* field = mysql_fetch_field(res);
         while(field) {
-            info.append(qToField(field, d->d->tc));
+            info.append(qToField(field, d->driver->d->tc));
             field = mysql_fetch_field(res);
         }
     }
@@ -741,6 +756,8 @@ QSqlRecord QMYSQLResult::record() const
 
 bool QMYSQLResult::nextResult()
 {
+    if(!d->driver)
+        return false;
 #if MYSQL_VERSION_ID >= 40100 
     setAt(-1);
     setActive(false);
@@ -754,26 +771,26 @@ bool QMYSQLResult::nextResult()
         delete[] d->fields[i].outField;
     d->fields.clear();
 
-    int status = mysql_next_result(d->d->mysql);
+    int status = mysql_next_result(d->driver->d->mysql);
     if (status > 0) {
         setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to execute next query"),
-                     QSqlError::StatementError, d->d));
+                     QSqlError::StatementError, d->driver->d));
         return false;
     } else if (status == -1) {
         return false;   // No more result sets
     }
 
-    d->result = mysql_store_result(d->d->mysql);
-    int numFields = mysql_field_count(d->d->mysql);
+    d->result = mysql_store_result(d->driver->d->mysql);
+    int numFields = mysql_field_count(d->driver->d->mysql);
     if (!d->result && numFields > 0) {
         setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to store next result"),
-                     QSqlError::StatementError, d->d));
+                     QSqlError::StatementError, d->driver->d));
         return false;
     }
 
     setSelect(numFields > 0);
     d->fields.resize(numFields);
-    d->rowsAffected = mysql_affected_rows(d->d->mysql);
+    d->rowsAffected = mysql_affected_rows(d->driver->d->mysql);
 
     if (isSelect()) {
         for (int i = 0; i < numFields; i++) {
@@ -833,9 +850,11 @@ static MYSQL_TIME *toMySqlDate(QDate date, QTime time, QVariant::Type type)
 
 bool QMYSQLResult::prepare(const QString& query)
 {
+    if(!d->driver)
+        return false;
 #if MYSQL_VERSION_ID >= 40108
     cleanup();
-    if (!d->d->preparedQuerys)
+    if (!d->driver->d->preparedQuerys)
         return QSqlResult::prepare(query);
 
     int r;
@@ -844,14 +863,14 @@ bool QMYSQLResult::prepare(const QString& query)
         return false;
 
     if (!d->stmt)
-        d->stmt = mysql_stmt_init(d->d->mysql);
+        d->stmt = mysql_stmt_init(d->driver->d->mysql);
     if (!d->stmt) {
         setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to prepare statement"),
-                     QSqlError::StatementError, d->d));
+                     QSqlError::StatementError, d->driver->d));
         return false;
     }
 
-    const QByteArray encQuery(fromUnicode(d->d->tc, query));
+    const QByteArray encQuery(fromUnicode(d->driver->d->tc, query));
     r = mysql_stmt_prepare(d->stmt, encQuery.constData(), encQuery.length());
     if (r != 0) {
         setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult",
@@ -873,7 +892,9 @@ bool QMYSQLResult::prepare(const QString& query)
 
 bool QMYSQLResult::exec()
 {
-    if (!d->d->preparedQuerys)
+    if (!d->driver)
+        return false;
+    if (!d->driver->d->preparedQuerys)
         return QSqlResult::exec();
     if (!d->stmt)
         return false;
@@ -963,7 +984,7 @@ bool QMYSQLResult::exec()
                     break;
                 case QVariant::String:
                 default: {
-                    QByteArray ba = fromUnicode(d->d->tc, val.toString());
+                    QByteArray ba = fromUnicode(d->driver->d->tc, val.toString());
                     stringVector.append(ba);
                     currBind->buffer_type = MYSQL_TYPE_STRING;
                     currBind->buffer = const_cast<char *>(ba.constData());
@@ -1459,3 +1480,5 @@ bool QMYSQLDriver::isIdentifierEscapedImplementation(const QString &identifier,
 }
 
 QT_END_NAMESPACE
+
+#include "qsql_mysql.moc"
\ No newline at end of file
diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp
index 074f16f..7f97972 100644
--- a/tests/auto/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp
@@ -178,9 +178,11 @@ private slots:
     void task_217003_data() { generic_data(); }
     void task_217003();
 #endif
-
     void task_250026_data() { generic_data("QODBC"); }
     void task_250026();
+    void task_205701_data() { generic_data("QMYSQL"); }
+    void task_205701();
+
 
 
 private:
@@ -297,7 +299,7 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db )
 #ifdef NOT_READY_YET
     tablenames <<  qTableName( "Planet" );
 #endif
-	tablenames << qTableName( "task_250026" );
+    tablenames << qTableName( "task_250026" );
 
     tst_Databases::safeDropTables( db, tablenames );
 }
@@ -2711,5 +2713,21 @@ void tst_QSqlQuery::task_250026()
 	QCOMPARE( q.value( 0 ).toString().length(), data1026.length() );
 }
 
+void tst_QSqlQuery::task_205701()
+{
+    QSqlDatabase qsdb = QSqlDatabase::addDatabase("QMYSQL", "atest"); 
+    qsdb.setHostName("test"); 
+    qsdb.setDatabaseName("test"); 
+    qsdb.setUserName("test"); 
+    qsdb.setPassword("test"); 
+    qsdb.open(); 
+
+//     {
+        QSqlQuery query(qsdb);
+//     }
+    QSqlDatabase::removeDatabase("atest");
+}
+
+
 QTEST_MAIN( tst_QSqlQuery )
 #include "tst_qsqlquery.moc"
-- 
cgit v0.12


From 03415f5db33ee1d8af15b924f84b547a9ed8020b Mon Sep 17 00:00:00 2001
From: Maurice Kalinowski <maurice.kalinowski@nokia.com>
Date: Fri, 8 May 2009 09:09:32 +0200
Subject: fix WinCE build

Reviewed-by: thartman
---
 src/gui/widgets/qmenu_wince.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gui/widgets/qmenu_wince.cpp b/src/gui/widgets/qmenu_wince.cpp
index 847a623..fbe54fe 100644
--- a/src/gui/widgets/qmenu_wince.cpp
+++ b/src/gui/widgets/qmenu_wince.cpp
@@ -214,10 +214,12 @@ static HWND qt_wce_create_menubar(HWND parentHandle, HINSTANCE resourceHandle, i
         mbi.nToolBarId = toolbarID;
 
         if (ptrCreateMenuBar(&mbi)) {
+#ifdef Q_WS_WINCE_WM
             // Tell the menu bar that we want to override hot key behaviour.
             LPARAM lparam = MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY,
                                        SHMBOF_NODEFAULT | SHMBOF_NOTIFY);
             SendMessage(mbi.hwndMB, SHCMBM_OVERRIDEKEY, VK_TBACK, lparam);
+#endif
             return mbi.hwndMB;
         }
     }
-- 
cgit v0.12


From 55829ebc5664a65fcef158e7ccd3579aaffa8d20 Mon Sep 17 00:00:00 2001
From: Leonardo Sobral Cunha <leo.cunha@nokia.com>
Date: Mon, 11 May 2009 17:37:37 +0200
Subject: Reset the 'connectedToScene' flag when changing the scene of a view

In QGraphicsScene::_q_emitUpdated() the slot
QGrpahicsView::updateScene(QList<QRectF>) gets connected and a boolean
(connectedToScene) is set to prevent double connections. The problem is
that this boolean was not reset when the view gets a new scene.

Task-number: 253415
Reviewed-by: andreas
---
 src/gui/graphicsview/qgraphicsview.cpp         |  1 +
 tests/auto/qgraphicsview/tst_qgraphicsview.cpp | 24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index 05e4907..8b133f3 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -1681,6 +1681,7 @@ void QGraphicsView::setScene(QGraphicsScene *scene)
         disconnect(d->scene, SIGNAL(sceneRectChanged(QRectF)),
                    this, SLOT(updateSceneRect(QRectF)));
         d->scene->d_func()->views.removeAll(this);
+        d->connectedToScene = false;
     }
 
     // Assign the new scene and update the contents (scrollbars, etc.)).
diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
index b5af115..db1e4c3 100644
--- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
@@ -200,6 +200,7 @@ private slots:
     void task239729_noViewUpdate();
     void task239047_fitInViewSmallViewport();
     void task245469_itemsAtPointWithClip();
+    void task253415_reconnectUpdateSceneOnSceneChanged();
 };
 
 void tst_QGraphicsView::initTestCase()
@@ -3044,5 +3045,28 @@ void tst_QGraphicsView::centerOnDirtyItem()
     QCOMPARE(before, after);
 }
 
+void tst_QGraphicsView::task253415_reconnectUpdateSceneOnSceneChanged()
+{
+    QGraphicsView view;
+    QGraphicsView dummyView;
+    view.setWindowFlags(view.windowFlags() | Qt::WindowStaysOnTopHint);
+    view.resize(200, 200);
+
+    QGraphicsScene scene1;
+    QObject::connect(&scene1, SIGNAL(changed(QList<QRectF>)), &dummyView, SLOT(updateScene(QList<QRectF>)));
+    view.setScene(&scene1);
+
+    QTest::qWait(125);
+
+    QGraphicsScene scene2;
+    QObject::connect(&scene2, SIGNAL(changed(QList<QRectF>)), &dummyView, SLOT(updateScene(QList<QRectF>)));
+    view.setScene(&scene2);
+
+    QTest::qWait(125);
+
+    bool wasConnected2 = QObject::disconnect(&scene2, SIGNAL(changed(QList<QRectF>)), &view, 0);
+    QVERIFY(wasConnected2);
+}
+
 QTEST_MAIN(tst_QGraphicsView)
 #include "tst_qgraphicsview.moc"
-- 
cgit v0.12


From 589dfd480d6158aaa59ab56c8be6a6bfc41da3ef Mon Sep 17 00:00:00 2001
From: Martin Smith <msmith@trolltech.com>
Date: Wed, 13 May 2009 12:59:07 +0200
Subject: qdoc: Fixed some qdoc errors.

---
 doc/src/examples/fancybrowser.qdoc       | 14 +++++++-------
 src/corelib/tools/qhash.cpp              |  6 +++---
 tools/designer/src/uitools/quiloader.cpp |  6 +++---
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/doc/src/examples/fancybrowser.qdoc b/doc/src/examples/fancybrowser.qdoc
index ea4da71..631aff9 100644
--- a/doc/src/examples/fancybrowser.qdoc
+++ b/doc/src/examples/fancybrowser.qdoc
@@ -123,7 +123,7 @@
 
     The first jQuery-based function, \c highlightAllLinks(), is designed to  
     highlight all links in the current webpage. The JavaScript code looks 
-    for web elements named \i {a}, which is the tag for a hyperlink. 
+    for web elements named \e {a}, which is the tag for a hyperlink. 
     For each such element, the background color is set to be yellow by
     using CSS. 
 
@@ -131,18 +131,18 @@
     
     The \c rotateImages() function rotates the images on the current
     web page. Webkit supports CSS transforms and this JavaScript code 
-    looks up all \i {img} elements and rotates the images 180 degrees
+    looks up all \e {img} elements and rotates the images 180 degrees
     and then back again. 
 
     \snippet examples/webkit/fancybrowser/mainwindow.cpp 9
 
     The remaining four methods remove different elements from the current web 
     page. \c removeGifImages() removes all Gif images on the page by looking up 
-    the \i {src} attribute of all the elements on the web page. Any element with 
-    a \i {gif} file as its source is removed. \c removeInlineFrames() removes all 
-    \i {iframe} or inline elements. \c removeObjectElements() removes all 
-    \i {object} elements, and \c removeEmbeddedElements() removes any elements 
-    such as plugins embedded on the page using the \i {embed} tag.
+    the \e {src} attribute of all the elements on the web page. Any element with 
+    a \e {gif} file as its source is removed. \c removeInlineFrames() removes all 
+    \e {iframe} or inline elements. \c removeObjectElements() removes all 
+    \e {object} elements, and \c removeEmbeddedElements() removes any elements 
+    such as plugins embedded on the page using the \e {embed} tag.
 
 */
 
diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp
index b2512e1..6c4a3ba 100644
--- a/src/corelib/tools/qhash.cpp
+++ b/src/corelib/tools/qhash.cpp
@@ -379,8 +379,7 @@ void QHashData::checkSanity()
 #endif
 
 /*!
-    \fn uint qHash(const QPair<T1, T2> &key)
-    \relates QHash
+    \
     \since 4.3
 
     Returns the hash value for the \a key.
@@ -502,7 +501,8 @@ void QHashData::checkSanity()
        key. With QHash, the items are arbitrarily ordered.
     \i The key type of a QMap must provide operator<(). The key
        type of a QHash must provide operator==() and a global
-       \l{qHash()} {hash} function.
+       hash function called qHash() (see the related non-member
+       functions).
     \endlist
 
     Here's an example QHash with QString keys and \c int values:
diff --git a/tools/designer/src/uitools/quiloader.cpp b/tools/designer/src/uitools/quiloader.cpp
index 548f07e..2a66095 100644
--- a/tools/designer/src/uitools/quiloader.cpp
+++ b/tools/designer/src/uitools/quiloader.cpp
@@ -572,9 +572,9 @@ void QUiLoaderPrivate::setupWidgetMap() const
     \class QUiLoader
     \inmodule QtUiTools
 
-    \brief enables standalone applications to dynamically create user
-    interfaces at run-time using the information stored in .ui files or
-    specified in plugin paths.
+    \brief The QUiLoader class enables standalone applications to
+    dynamically create user interfaces at run-time using the
+    information stored in .ui files or specified in plugin paths.
 
     In addition, you can customize or create your own user interface by
     deriving your own loader class.
-- 
cgit v0.12


From ad7b21dd57d20cd55774d7a62db117905637e950 Mon Sep 17 00:00:00 2001
From: Martin Smith <msmith@trolltech.com>
Date: Wed, 13 May 2009 13:44:03 +0200
Subject: qdoc: Fixed some qdoc errors.

---
 src/corelib/tools/qhash.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp
index 6c4a3ba..2313e0e 100644
--- a/src/corelib/tools/qhash.cpp
+++ b/src/corelib/tools/qhash.cpp
@@ -379,9 +379,10 @@ void QHashData::checkSanity()
 #endif
 
 /*!
-    \
+    \fn uint qHash(const QPair<T1, T2> &key)
     \since 4.3
-
+    \relates QHash
+    
     Returns the hash value for the \a key.
 
     Types \c T1 and \c T2 must be supported by qHash().
-- 
cgit v0.12


From 4910404284b1bb4fdde89d4fd8a420767ee52069 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Wed, 13 May 2009 13:48:13 +0200
Subject: Clearifying docs QSet::insert

Chaning the sentence to clearify where the iterator points to.

Task-number: 202656

Rev-by: Geir Vattekar
---
 doc/src/qset.qdoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/src/qset.qdoc b/doc/src/qset.qdoc
index 7fbf97a..afbedc3 100644
--- a/doc/src/qset.qdoc
+++ b/doc/src/qset.qdoc
@@ -437,7 +437,7 @@
     \fn QSet::const_iterator QSet::insert(const T &value)
 
     Inserts item \a value into the set, if \a value isn't already
-    in the set, and returns an iterator positioned at the inserted
+    in the set, and returns an iterator pointing at the inserted
     item.
 
     \sa operator<<(), remove(), contains()
-- 
cgit v0.12


From 87022c9a4ab00a9faaf6bcdaa8d5884962ccf305 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Wed, 13 May 2009 12:25:36 +0200
Subject: Fix handling of garbage data sent by the HTTP server instead of a
 proper HTTP reply.

If the server's reply doesn't start with "HTTP/", then the reply is
not valid. This could happen if we connected via HTTP to an HTTPS
server. It could also happen with an Icecast server (reply ICY/x.y).

Task-number: 248838
Reviewed-by: Markus Goetz
---
 src/network/access/qhttpnetworkconnection.cpp  | 14 +++++++--
 src/network/access/qhttpnetworkreply.cpp       | 11 ++++++-
 tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 42 ++++++++++++++++++++++++++
 3 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 5940fba..f558f2b 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -529,10 +529,20 @@ void QHttpNetworkConnectionPrivate::receiveReply(QAbstractSocket *socket, QHttpN
         QHttpNetworkReplyPrivate::ReplyState state = reply ? reply->d_func()->state : QHttpNetworkReplyPrivate::AllDoneState;
         switch (state) {
         case QHttpNetworkReplyPrivate::NothingDoneState:
-        case QHttpNetworkReplyPrivate::ReadingStatusState:
-            bytes += reply->d_func()->readStatus(socket);
+        case QHttpNetworkReplyPrivate::ReadingStatusState: {
+            qint64 statusBytes = reply->d_func()->readStatus(socket);
+            if (statusBytes == -1) {
+                // error reading the status, close the socket and emit error
+                socket->close();
+                reply->d_func()->errorString = errorDetail(QNetworkReply::ProtocolFailure, socket);
+                emit reply->finishedWithError(QNetworkReply::ProtocolFailure, reply->d_func()->errorString);
+                QMetaObject::invokeMethod(q, "_q_startNextRequest", Qt::QueuedConnection);
+                break;
+            }
+            bytes += statusBytes;
             channels[i].lastStatus = reply->d_func()->statusCode;
             break;
+        }
         case QHttpNetworkReplyPrivate::ReadingHeaderState:
             bytes += reply->d_func()->readHeader(socket);
             if (reply->d_func()->state == QHttpNetworkReplyPrivate::ReadingDataState) {
diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp
index fe3f6af..1b41e1e 100644
--- a/src/network/access/qhttpnetworkreply.cpp
+++ b/src/network/access/qhttpnetworkreply.cpp
@@ -409,6 +409,9 @@ qint64 QHttpNetworkReplyPrivate::readStatus(QAbstractSocket *socket)
             if (fragment.endsWith('\r')) {
                 fragment.truncate(fragment.length()-1);
             }
+            if (!fragment.startsWith("HTTP/"))
+                return -1;
+
             parseStatus(fragment);
             state = ReadingHeaderState;
             fragment.clear(); // next fragment
@@ -418,7 +421,13 @@ qint64 QHttpNetworkReplyPrivate::readStatus(QAbstractSocket *socket)
             bytes += socket->read(&c, 1);
             fragment.append(c);
         }
+
+        // is this a valid reply?
+        if (fragment.length() >= 5 && !fragment.startsWith("HTTP/"))
+            return -1;
+
     }
+
     return bytes;
 }
 
@@ -660,4 +669,4 @@ void QHttpNetworkReply::ignoreSslErrors()
 
 QT_END_NAMESPACE
 
-#endif // QT_NO_HTTP
\ No newline at end of file
+#endif // QT_NO_HTTP
diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
index 104b788..c97fcf3 100644
--- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
@@ -172,6 +172,8 @@ private Q_SLOTS:
     void ioGetFromHttpsWithIgnoreSslErrors();
     void ioGetFromHttpsWithSslHandshakeError();
 #endif
+    void ioGetFromHttpBrokenServer_data();
+    void ioGetFromHttpBrokenServer();
 
     void ioGetWithManyProxies_data();
     void ioGetWithManyProxies();
@@ -1887,6 +1889,46 @@ void tst_QNetworkReply::ioGetFromHttpsWithSslHandshakeError()
 }
 #endif
 
+void tst_QNetworkReply::ioGetFromHttpBrokenServer_data()
+{
+    QTest::addColumn<QByteArray>("dataToSend");
+    QTest::addColumn<bool>("doDisconnect");
+
+    QTest::newRow("no-newline") << QByteArray("Hello World") << false;
+    QTest::newRow("just-newline") << QByteArray("\r\n") << false;
+    QTest::newRow("just-2newline") << QByteArray("\r\n\r\n") << false;
+    QTest::newRow("with-newlines") << QByteArray("Long first line\r\nLong second line") << false;
+    QTest::newRow("with-newlines2") << QByteArray("\r\nSecond line") << false;
+    QTest::newRow("with-newlines3") << QByteArray("ICY\r\nSecond line") << false;
+
+    QTest::newRow("empty+disconnect") << QByteArray() << true;
+
+    QTest::newRow("no-newline+disconnect") << QByteArray("Hello World") << true;
+    QTest::newRow("just-newline+disconnect") << QByteArray("\r\n") << true;
+    QTest::newRow("just-2newline+disconnect") << QByteArray("\r\n\r\n") << true;
+    QTest::newRow("with-newlines+disconnect") << QByteArray("Long first line\r\nLong second line") << true;
+    QTest::newRow("with-newlines2+disconnect") << QByteArray("\r\nSecond line") << true;
+    QTest::newRow("with-newlines3+disconnect") << QByteArray("ICY\r\nSecond line") << true;
+}
+
+void tst_QNetworkReply::ioGetFromHttpBrokenServer()
+{
+    QFETCH(QByteArray, dataToSend);
+    QFETCH(bool, doDisconnect);
+    MiniHttpServer server(dataToSend);
+    server.doClose = doDisconnect;
+
+    QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+    QNetworkReplyPtr reply = manager.get(request);
+
+    connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+    QTestEventLoop::instance().enterLoop(10);
+    QVERIFY(!QTestEventLoop::instance().timeout());
+
+    QCOMPARE(reply->url(), request.url());
+    QVERIFY(reply->error() != QNetworkReply::NoError);
+}
+
 void tst_QNetworkReply::ioGetWithManyProxies_data()
 {
     QTest::addColumn<QList<QNetworkProxy> >("proxyList");
-- 
cgit v0.12


From a18ebd2a70e83863bc9a8cc64a65791a6d879f02 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Wed, 13 May 2009 13:27:01 +0200
Subject: Improve the HTTP status line parsing and catch more errors.

There's no need for using QByteArrayMatcher for one single character,
so avoid the overhead.

Also validate the message header a bit more: we require the status
line to start with "HTTP/n.m " where n and m are positive integers
less than 10.

Task-number: 248838
Reviewed-by: Markus Goetz
---
 src/network/access/qhttpnetworkreply.cpp       | 58 ++++++++++++++++----------
 src/network/access/qhttpnetworkreply_p.h       |  2 +-
 tests/auto/qnetworkreply/tst_qnetworkreply.cpp |  7 ++++
 3 files changed, 44 insertions(+), 23 deletions(-)

diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp
index 1b41e1e..69e0a4c 100644
--- a/src/network/access/qhttpnetworkreply.cpp
+++ b/src/network/access/qhttpnetworkreply.cpp
@@ -409,12 +409,12 @@ qint64 QHttpNetworkReplyPrivate::readStatus(QAbstractSocket *socket)
             if (fragment.endsWith('\r')) {
                 fragment.truncate(fragment.length()-1);
             }
-            if (!fragment.startsWith("HTTP/"))
-                return -1;
-
-            parseStatus(fragment);
+            bool ok = parseStatus(fragment);
             state = ReadingHeaderState;
             fragment.clear(); // next fragment
+
+            if (!ok)
+                return -1;
             break;
         } else {
             c = 0;
@@ -431,26 +431,40 @@ qint64 QHttpNetworkReplyPrivate::readStatus(QAbstractSocket *socket)
     return bytes;
 }
 
-void QHttpNetworkReplyPrivate::parseStatus(const QByteArray &status)
+bool QHttpNetworkReplyPrivate::parseStatus(const QByteArray &status)
 {
-    const QByteArrayMatcher sp(" ");
-    int i = sp.indexIn(status);
-    const QByteArray version = status.mid(0, i);
-    int j = sp.indexIn(status, i + 1);
+    // from RFC 2616:
+    //        Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
+    //        HTTP-Version   = "HTTP" "/" 1*DIGIT "." 1*DIGIT
+    // that makes: 'HTTP/n.n xxx Message'
+    // byte count:  0123456789012
+
+    static const int minLength = 11;
+    static const int dotPos = 6;
+    static const int spacePos = 8;
+    static const char httpMagic[] = "HTTP/";
+
+    if (status.length() < minLength
+        || !status.startsWith(httpMagic)
+        || status.at(dotPos) != '.'
+        || status.at(spacePos) != ' ') {
+        // I don't know how to parse this status line
+        return false;
+    }
+
+    // optimize for the valid case: defer checking until the end
+    majorVersion = status.at(dotPos - 1) - '0';
+    minorVersion = status.at(dotPos + 1) - '0';
+
+    int i = spacePos;
+    int j = status.indexOf(' ', i + 1); // j == -1 || at(j) == ' ' so j+1 == 0 && j+1 <= length()
     const QByteArray code = status.mid(i + 1, j - i - 1);
-    const QByteArray reason = status.mid(j + 1, status.count() - j);
-
-    const QByteArrayMatcher slash("/");
-    int k = slash.indexIn(version);
-    const QByteArrayMatcher dot(".");
-    int l = dot.indexIn(version, k);
-    const QByteArray major = version.mid(k + 1, l - k - 1);
-    const QByteArray minor = version.mid(l + 1, version.count() - l);
-
-    majorVersion = QString::fromAscii(major.constData()).toInt();
-    minorVersion = QString::fromAscii(minor.constData()).toInt();
-    statusCode = QString::fromAscii(code.constData()).toInt();
-    reasonPhrase = QString::fromAscii(reason.constData());
+
+    bool ok;
+    statusCode = code.toInt(&ok);
+    reasonPhrase = QString::fromLatin1(status.constData() + j + 1);
+
+    return ok && uint(majorVersion) <= 9 && uint(minorVersion) <= 9;
 }
 
 qint64 QHttpNetworkReplyPrivate::readHeader(QAbstractSocket *socket)
diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h
index c17c65c..cb4d34f 100644
--- a/src/network/access/qhttpnetworkreply_p.h
+++ b/src/network/access/qhttpnetworkreply_p.h
@@ -154,7 +154,7 @@ public:
     QHttpNetworkReplyPrivate(const QUrl &newUrl = QUrl());
     ~QHttpNetworkReplyPrivate();
     qint64 readStatus(QAbstractSocket *socket);
-    void parseStatus(const QByteArray &status);
+    bool parseStatus(const QByteArray &status);
     qint64 readHeader(QAbstractSocket *socket);
     void parseHeader(const QByteArray &header);
     qint64 readBody(QAbstractSocket *socket, QIODevice *out);
diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
index c97fcf3..4be0863 100644
--- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
@@ -1900,6 +1900,9 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer_data()
     QTest::newRow("with-newlines") << QByteArray("Long first line\r\nLong second line") << false;
     QTest::newRow("with-newlines2") << QByteArray("\r\nSecond line") << false;
     QTest::newRow("with-newlines3") << QByteArray("ICY\r\nSecond line") << false;
+    QTest::newRow("invalid-version") << QByteArray("HTTP/123 200 \r\n") << false;
+    QTest::newRow("invalid-version2") << QByteArray("HTTP/a.\033 200 \r\n") << false;
+    QTest::newRow("invalid-reply-code") << QByteArray("HTTP/1.0 fuu \r\n") << false;
 
     QTest::newRow("empty+disconnect") << QByteArray() << true;
 
@@ -1909,6 +1912,10 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer_data()
     QTest::newRow("with-newlines+disconnect") << QByteArray("Long first line\r\nLong second line") << true;
     QTest::newRow("with-newlines2+disconnect") << QByteArray("\r\nSecond line") << true;
     QTest::newRow("with-newlines3+disconnect") << QByteArray("ICY\r\nSecond line") << true;
+
+    QTest::newRow("invalid-version+disconnect") << QByteArray("HTTP/123 200 ") << true;
+    QTest::newRow("invalid-version2+disconnect") << QByteArray("HTTP/a.\033 200 ") << true;
+    QTest::newRow("invalid-reply-code+disconnect") << QByteArray("HTTP/1.0 fuu ") << true;
 }
 
 void tst_QNetworkReply::ioGetFromHttpBrokenServer()
-- 
cgit v0.12


From 56191830cdad9cbaa81c2ed8f22f1b2650a5608a Mon Sep 17 00:00:00 2001
From: Marius Storm-Olsen <marius@trolltech.com>
Date: Wed, 13 May 2009 13:58:18 +0200
Subject: Turn off Link Time Code Generation (/LTCG) by default

Turning on LTCG affected too many projects, where customers applications
would take a long time linking, severly affecting their development time
(even though it was only added for release builds)

We turn it off by default, and add a -ltcg configuration option, and the
possibility to also do CONFIG+=ltcg in projects, should they not want it
for Qt, but in their own projects. (Same, they can build Qt with it, and
do CONFIG-=ltcg for their project)

Reviewed-by: andy
---
 configure.exe                     | Bin 860160 -> 856064 bytes
 mkspecs/features/win32/ltcg.prf   |   5 +++++
 mkspecs/win32-msvc2005/qmake.conf |   7 +++++--
 mkspecs/win32-msvc2008/qmake.conf |   7 +++++--
 tools/configure/configureapp.cpp  |  13 +++++++++++++
 5 files changed, 28 insertions(+), 4 deletions(-)
 create mode 100644 mkspecs/features/win32/ltcg.prf

diff --git a/configure.exe b/configure.exe
index ff71f08..40843b4 100644
Binary files a/configure.exe and b/configure.exe differ
diff --git a/mkspecs/features/win32/ltcg.prf b/mkspecs/features/win32/ltcg.prf
new file mode 100644
index 0000000..f6f1299
--- /dev/null
+++ b/mkspecs/features/win32/ltcg.prf
@@ -0,0 +1,5 @@
+CONFIG(release, debug|release) {
+    QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG
+    QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG
+    QMAKE_LFLAGS *= $$QMAKE_LFLAGS_LTCG
+}
diff --git a/mkspecs/win32-msvc2005/qmake.conf b/mkspecs/win32-msvc2005/qmake.conf
index 00287cb..5ed8e01 100644
--- a/mkspecs/win32-msvc2005/qmake.conf
+++ b/mkspecs/win32-msvc2005/qmake.conf
@@ -19,9 +19,10 @@ QMAKE_YACCFLAGS         = -d
 QMAKE_CFLAGS            = -nologo -Zm200 -Zc:wchar_t-
 QMAKE_CFLAGS_WARN_ON    = -W3
 QMAKE_CFLAGS_WARN_OFF   = -W0
-QMAKE_CFLAGS_RELEASE    = -O2 -MD -GL
+QMAKE_CFLAGS_RELEASE    = -O2 -MD
 QMAKE_CFLAGS_DEBUG      = -Zi -MDd
 QMAKE_CFLAGS_YACC       =
+QMAKE_CFLAGS_LTCG       = -GL
 
 QMAKE_CXX               = $$QMAKE_CC
 QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
@@ -30,6 +31,7 @@ QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
 QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE
 QMAKE_CXXFLAGS_DEBUG    = $$QMAKE_CFLAGS_DEBUG
 QMAKE_CXXFLAGS_YACC     = $$QMAKE_CFLAGS_YACC
+QMAKE_CXXFLAGS_LTCG     = $$QMAKE_CFLAGS_LTCG
 QMAKE_CXXFLAGS_STL_ON   = -EHsc
 QMAKE_CXXFLAGS_STL_OFF  =
 QMAKE_CXXFLAGS_RTTI_ON  = -GR
@@ -50,11 +52,12 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
 
 QMAKE_LINK              = link
 QMAKE_LFLAGS            = /NOLOGO
-QMAKE_LFLAGS_RELEASE    = /INCREMENTAL:NO /LTCG
+QMAKE_LFLAGS_RELEASE    = /INCREMENTAL:NO
 QMAKE_LFLAGS_DEBUG      = /DEBUG
 QMAKE_LFLAGS_CONSOLE    = /SUBSYSTEM:CONSOLE
 QMAKE_LFLAGS_WINDOWS    = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
 QMAKE_LFLAGS_DLL        = /DLL
+QMAKE_LFLAGS_LTCG       = /LTCG
 
 QMAKE_LIBS_CORE         = kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib
 QMAKE_LIBS_GUI          = gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib ws2_32.lib ole32.lib user32.lib advapi32.lib
diff --git a/mkspecs/win32-msvc2008/qmake.conf b/mkspecs/win32-msvc2008/qmake.conf
index b56b41c..373a36d 100644
--- a/mkspecs/win32-msvc2008/qmake.conf
+++ b/mkspecs/win32-msvc2008/qmake.conf
@@ -19,9 +19,10 @@ QMAKE_YACCFLAGS         = -d
 QMAKE_CFLAGS            = -nologo -Zm200 -Zc:wchar_t-
 QMAKE_CFLAGS_WARN_ON    = -W3
 QMAKE_CFLAGS_WARN_OFF   = -W0
-QMAKE_CFLAGS_RELEASE    = -O2 -MD -GL
+QMAKE_CFLAGS_RELEASE    = -O2 -MD
 QMAKE_CFLAGS_DEBUG      = -Zi -MDd
 QMAKE_CFLAGS_YACC       =
+QMAKE_CFLAGS_LTCG       = -GL
 
 QMAKE_CXX               = $$QMAKE_CC
 QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
@@ -30,6 +31,7 @@ QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
 QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE
 QMAKE_CXXFLAGS_DEBUG    = $$QMAKE_CFLAGS_DEBUG
 QMAKE_CXXFLAGS_YACC     = $$QMAKE_CFLAGS_YACC
+QMAKE_CXXFLAGS_LTCG     = $$QMAKE_CFLAGS_LTCG
 QMAKE_CXXFLAGS_STL_ON   = -EHsc
 QMAKE_CXXFLAGS_STL_OFF  =
 QMAKE_CXXFLAGS_RTTI_ON  = -GR
@@ -50,11 +52,12 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
 
 QMAKE_LINK              = link
 QMAKE_LFLAGS            = /NOLOGO
-QMAKE_LFLAGS_RELEASE    = /INCREMENTAL:NO /LTCG
+QMAKE_LFLAGS_RELEASE    = /INCREMENTAL:NO
 QMAKE_LFLAGS_DEBUG      = /DEBUG
 QMAKE_LFLAGS_CONSOLE    = /SUBSYSTEM:CONSOLE
 QMAKE_LFLAGS_WINDOWS    = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
 QMAKE_LFLAGS_DLL        = /DLL
+QMAKE_LFLAGS_LTCG       = /LTCG
 
 QMAKE_LIBS_CORE         = kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib
 QMAKE_LIBS_GUI          = gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib ws2_32.lib ole32.lib user32.lib advapi32.lib
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index bcbf557..91344c8 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -351,6 +351,7 @@ Configure::Configure( int& argc, char** argv )
     dictionary[ "QMAKESPEC" ] = tmp;
 
     dictionary[ "INCREDIBUILD_XGE" ] = "auto";
+    dictionary[ "LTCG" ]            = "no";
 }
 
 Configure::~Configure()
@@ -487,6 +488,12 @@ void Configure::parseCmdLine()
         else if( configCmdLine.at(i) == "-commercial" ) {
             dictionary[ "BUILDTYPE" ] = "commercial";
         }
+        else if( configCmdLine.at(i) == "-ltcg" ) {
+            dictionary[ "LTCG" ] = "yes";
+        }
+        else if( configCmdLine.at(i) == "-no-ltcg" ) {
+            dictionary[ "LTCG" ] = "no";
+        }
 #endif
 
         else if( configCmdLine.at(i) == "-platform" ) {
@@ -1465,6 +1472,9 @@ bool Configure::displayHelp()
         desc("SHARED", "yes",   "-shared",              "Create and use shared Qt libraries.");
         desc("SHARED", "no",    "-static",              "Create and use static Qt libraries.\n");
 
+        desc("LTCG", "yes",   "-ltcg",                  "Use Link Time Code Generation. (Release builds only)");
+        desc("LTCG", "no",    "-no-ltcg",               "Do not use Link Time Code Generation.\n");
+
         desc("FAST", "no",      "-no-fast",             "Configure Qt normally by generating Makefiles for all project files.");
         desc("FAST", "yes",     "-fast",                "Configure Qt quickly by generating Makefiles only for library and "
                                                         "subdirectory targets.  All other Makefiles are created as wrappers "
@@ -2494,6 +2504,8 @@ void Configure::generateCachefile()
         else
             configStream << " static";
 
+        if( dictionary[ "LTCG" ] == "yes" )
+            configStream << " ltcg";
         if( dictionary[ "STL" ] == "yes" )
             configStream << " stl";
         if ( dictionary[ "EXCEPTIONS" ] == "yes" )
@@ -2916,6 +2928,7 @@ void Configure::displayConfig()
     cout << "Architecture................" << dictionary[ "ARCHITECTURE" ] << endl;
     cout << "Maketool...................." << dictionary[ "MAKE" ] << endl;
     cout << "Debug symbols..............." << (dictionary[ "BUILD" ] == "debug" ? "yes" : "no") << endl;
+    cout << "Link Time Code Generation..." << dictionary[ "LTCG" ] << endl;
     cout << "Accessibility support......." << dictionary[ "ACCESSIBILITY" ] << endl;
     cout << "STL support................." << dictionary[ "STL" ] << endl;
     cout << "Exception support..........." << dictionary[ "EXCEPTIONS" ] << endl;
-- 
cgit v0.12


From bb000e03fc1e876eb6ee0d02de15a0bc9a6ea1b8 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Wed, 13 May 2009 14:53:24 +0200
Subject: Added API for quietly saving a form.

Task-number: 163220

Added to FormWindowBase. Required among other
things for Qt Creator code completion for
uic-generated-headers.
Acked-by: dt <qtc-committer@nokia.com>
---
 tools/designer/src/lib/shared/formwindowbase.cpp | 10 +++++++++-
 tools/designer/src/lib/shared/formwindowbase_p.h |  3 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/tools/designer/src/lib/shared/formwindowbase.cpp b/tools/designer/src/lib/shared/formwindowbase.cpp
index 3e7e17b..b569b51 100644
--- a/tools/designer/src/lib/shared/formwindowbase.cpp
+++ b/tools/designer/src/lib/shared/formwindowbase.cpp
@@ -55,7 +55,7 @@ TRANSLATOR qdesigner_internal::FormWindowBase
 #include "deviceprofile_p.h"
 #include "qdesigner_utils_p.h"
 
-#include <abstractformbuilder.h>
+#include "qsimpleresource_p.h"
 
 #include <QtDesigner/QDesignerFormEditorInterface>
 #include <QtDesigner/QDesignerContainerExtension>
@@ -482,6 +482,14 @@ void FormWindowBase::setupDefaultAction(QDesignerFormWindowInterface *fw)
     QObject::connect(fw, SIGNAL(activated(QWidget*)), fw, SLOT(triggerDefaultAction(QWidget*)));
 }
 
+QString FormWindowBase::fileContents() const
+{
+    const bool oldValue = QSimpleResource::setWarningsEnabled(false);
+    const QString rc = contents();
+    QSimpleResource::setWarningsEnabled(oldValue);
+    return rc;
+}
+
 } // namespace qdesigner_internal
 
 QT_END_NAMESPACE
diff --git a/tools/designer/src/lib/shared/formwindowbase_p.h b/tools/designer/src/lib/shared/formwindowbase_p.h
index 68e977e..0891f6e 100644
--- a/tools/designer/src/lib/shared/formwindowbase_p.h
+++ b/tools/designer/src/lib/shared/formwindowbase_p.h
@@ -90,6 +90,9 @@ public:
     QVariantMap formData();
     void setFormData(const QVariantMap &vm);
 
+    // Return contents without warnings. Should be 'contents(bool quiet)'
+    QString fileContents() const;
+
     // Return the widget containing the form. This is used to
     // apply embedded design settings to that are inherited (for example font).
     // These are meant to be applied to the form only and not to the other editors
-- 
cgit v0.12


From 960d2a7639062b6582d460aaae140b4d2e0a8b70 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Wed, 13 May 2009 14:59:52 +0200
Subject: Adding details to QVariant docs

Adding note about requriements for converting QVariants

Task-number: 192607

Rev-by: David Boddie
---
 src/corelib/kernel/qvariant.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index b4427c0..0a0500d 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -1187,8 +1187,9 @@ const QVariant::Handler *QVariant::handler = &qt_kernel_variant_handler;
     and versatile, but may prove less memory and speed efficient than
     storing specific types in standard data structures.
 
-    QVariant also supports the notion of null values, where you have
-    a defined type with no value set.
+    QVariant also supports the notion of null values, where you can 
+    have a defined type with no value set. However, note that QVariant 
+    types can only be cast when they have had a value set.
 
     \snippet doc/src/snippets/code/src_corelib_kernel_qvariant.cpp 1
 
-- 
cgit v0.12


From 62677589caf8b2f45f369cfc9df30ded323c4155 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Wed, 13 May 2009 15:13:10 +0200
Subject: Cleaning docs

Highlight part of the general description in QTimeLine

Task-number: 218487

Rev-by: Geir Vattekar
---
 src/corelib/tools/qtimeline.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/corelib/tools/qtimeline.cpp b/src/corelib/tools/qtimeline.cpp
index 2979a09..3a03558 100644
--- a/src/corelib/tools/qtimeline.cpp
+++ b/src/corelib/tools/qtimeline.cpp
@@ -225,7 +225,9 @@ void QTimeLinePrivate::setCurrentTime(int msecs)
     valueForTime() and emitting valueChanged(). By default, valueForTime()
     applies an interpolation algorithm to generate these value. You can choose
     from a set of predefined timeline algorithms by calling
-    setCurveShape(). By default, QTimeLine uses the EaseInOut curve shape,
+    setCurveShape().
+   
+    Note that by default, QTimeLine uses the EaseInOut curve shape,
     which provides a value that grows slowly, then grows steadily, and
     finally grows slowly. For a custom timeline, you can reimplement
     valueForTime(), in which case QTimeLine's curveShape property is ignored.
-- 
cgit v0.12


From 1c22d96f15d46c222bf5f1720e3e49e202a6c941 Mon Sep 17 00:00:00 2001
From: Peter Hartmann <peter.hartmann@trolltech.com>
Date: Tue, 12 May 2009 17:58:27 +0200
Subject: HTTP backend / network cache: only cache responses to GET by default

responses to POST might be cacheable, but are not cacheable by default;
responses to PUT or DELETE are never cacheable.

Reviewed-by: Thiago Macieira
Task-number: 252281
---
 src/network/access/qnetworkaccesshttpbackend.cpp | 42 +++++++++++++++++-------
 1 file changed, 30 insertions(+), 12 deletions(-)

diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp
index a52b5a0..f214699 100644
--- a/src/network/access/qnetworkaccesshttpbackend.cpp
+++ b/src/network/access/qnetworkaccesshttpbackend.cpp
@@ -1036,21 +1036,39 @@ QNetworkCacheMetaData QNetworkAccessHttpBackend::fetchCacheMetaData(const QNetwo
     if (it != cacheHeaders.rawHeaders.constEnd())
         metaData.setLastModified(QNetworkHeadersPrivate::fromHttpDate(it->second));
 
-    bool canDiskCache = true; // Everything defaults to being cacheable on disk
-
-    // 14.32
-    // HTTP/1.1 caches SHOULD treat "Pragma: no-cache" as if the client
-    // had sent "Cache-Control: no-cache".
-    it = cacheHeaders.findRawHeader("pragma");
-    if (it != cacheHeaders.rawHeaders.constEnd()
-        && it->second == "no-cache")
-        canDiskCache = false;
+    bool canDiskCache;
+    // only cache GET replies by default, all other replies (POST, PUT, DELETE)
+    //  are not cacheable by default (according to RFC 2616 section 9)
+    if (httpReply->request().operation() == QHttpNetworkRequest::Get) {
+
+        canDiskCache = true;
+        // 14.32
+        // HTTP/1.1 caches SHOULD treat "Pragma: no-cache" as if the client
+        // had sent "Cache-Control: no-cache".
+        it = cacheHeaders.findRawHeader("pragma");
+        if (it != cacheHeaders.rawHeaders.constEnd()
+            && it->second == "no-cache")
+            canDiskCache = false;
+
+        // HTTP/1.1. Check the Cache-Control header
+        if (cacheControl.contains("no-cache"))
+            canDiskCache = false;
+        else if (cacheControl.contains("no-store"))
+            canDiskCache = false;
+
+    // responses to POST might be cacheable
+    } else if (httpReply->request().operation() == QHttpNetworkRequest::Post) {
 
-    // HTTP/1.1. Check the Cache-Control header
-    if (cacheControl.contains("no-cache"))
         canDiskCache = false;
-    else if (cacheControl.contains("no-store"))
+        // some pages contain "expires:" and "cache-control: no-cache" field,
+        // so we only might cache POST requests if we get "cache-control: max-age ..."
+        if (cacheControl.contains("max-age"))
+            canDiskCache = true;
+
+    // responses to PUT and DELETE are not cacheable
+    } else {
         canDiskCache = false;
+    }
 
     metaData.setSaveToDisk(canDiskCache);
     int statusCode = httpReply->statusCode();
-- 
cgit v0.12


From 484ad0eccc84488b57d58a1223760623c70389a5 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Wed, 13 May 2009 17:10:43 +0200
Subject: Correcting bug in cardLayout example

Adding the count() function to the example.

Task-number: 220766

Rev-by: Geir Vattekar
---
 doc/src/layout.qdoc                       | 16 +++++++-----
 doc/src/snippets/code/doc_src_layout.qdoc | 41 +++++++++++++++++--------------
 2 files changed, 33 insertions(+), 24 deletions(-)

diff --git a/doc/src/layout.qdoc b/doc/src/layout.qdoc
index 55dfd8b..196999b 100644
--- a/doc/src/layout.qdoc
+++ b/doc/src/layout.qdoc
@@ -315,7 +315,11 @@
 
     \snippet doc/src/snippets/code/doc_src_layout.qdoc 1
 
-    First we define two functions that iterate over the layout: \c{itemAt()}
+    First we define \c{count()} to fetch the number of items in the list.
+
+    \snippet doc/src/snippets/code/doc_src_layout.qdoc 2
+
+    Then we define two functions that iterate over the layout: \c{itemAt()}
     and \c{takeAt()}. These functions are used internally by the layout system
     to handle deletion of widgets. They are also available for application
     programmers. 
@@ -326,7 +330,7 @@
     structure, we may have to spend more effort defining a linear order for the
     items.
 
-    \snippet doc/src/snippets/code/doc_src_layout.qdoc 2
+    \snippet doc/src/snippets/code/doc_src_layout.qdoc 3
 
     \c{addItem()} implements the default placement strategy for layout items.
     This function must be implemented. It is used by QLayout::add(), by the
@@ -336,26 +340,26 @@
     QGridLayout::addItem(), QGridLayout::addWidget(), and
     QGridLayout::addLayout().
 
-    \snippet doc/src/snippets/code/doc_src_layout.qdoc 3
+    \snippet doc/src/snippets/code/doc_src_layout.qdoc 4
 
     The layout takes over responsibility of the items added. Since QLayoutItem
     does not inherit QObject, we must delete the items manually. The function
     QLayout::deleteAllItems() uses \c{takeAt()} defined above to delete all the
     items in the layout.
 
-    \snippet doc/src/snippets/code/doc_src_layout.qdoc 4
+    \snippet doc/src/snippets/code/doc_src_layout.qdoc 5
 
     The \c{setGeometry()} function actually performs the layout. The rectangle
     supplied as an argument does not include \c{margin()}. If relevant, use
     \c{spacing()} as the distance between items.
 
-    \snippet doc/src/snippets/code/doc_src_layout.qdoc 5
+    \snippet doc/src/snippets/code/doc_src_layout.qdoc 6
 
     \c{sizeHint()} and \c{minimumSize()} are normally very similar in
     implementation. The sizes returned by both functions should include
     \c{spacing()}, but not \c{margin()}.
 
-    \snippet doc/src/snippets/code/doc_src_layout.qdoc 6
+    \snippet doc/src/snippets/code/doc_src_layout.qdoc 7
 
 
     \section2 Further Notes
diff --git a/doc/src/snippets/code/doc_src_layout.qdoc b/doc/src/snippets/code/doc_src_layout.qdoc
index 48e10e9..fedcf0c 100644
--- a/doc/src/snippets/code/doc_src_layout.qdoc
+++ b/doc/src/snippets/code/doc_src_layout.qdoc
@@ -2,23 +2,21 @@
 #ifndef CARD_H
 #define CARD_H
 
-#include <QLayout>
+#include <QtGui>
 #include <QList>
 
 class CardLayout : public QLayout
 {
 public:
-    CardLayout(QWidget *parent, int dist)
-        : QLayout(parent, 0, dist) {}
-    CardLayout(QLayout *parent, int dist)
-        : QLayout(parent, dist) {}
-    CardLayout(int dist)
-        : QLayout(dist) {}
+    CardLayout(QWidget *parent, int dist): QLayout(parent, 0, dist) {}
+    CardLayout(QLayout *parent, int dist): QLayout(parent, dist) {}
+    CardLayout(int dist): QLayout(dist) {}
     ~CardLayout();
 
     void addItem(QLayoutItem *item);
     QSize sizeHint() const;
     QSize minimumSize() const;
+	QLayoutItem *count() const;
     QLayoutItem *itemAt(int) const;
     QLayoutItem *takeAt(int);
     void setGeometry(const QRect &rect);
@@ -31,11 +29,18 @@ private:
 
 
 //! [1]
-#include "card.h"
+//#include "card.h"
 //! [1]
 
-
 //! [2]
+QLayoutItem *CardLayout::count() const
+{
+	// QList::size() returns the number of QLayoutItems in the list
+    return list.size();
+}
+//! [2]
+
+//! [3]
 QLayoutItem *CardLayout::itemAt(int idx) const
 {
     // QList::value() performs index checking, and returns 0 if we are
@@ -48,26 +53,26 @@ QLayoutItem *CardLayout::takeAt(int idx)
     // QList::take does not do index checking
     return idx >= 0 && idx < list.size() ? list.takeAt(idx) : 0;
 }
-//! [2]
+//! [3]
 
 
-//! [3]
+//! [4]
 void CardLayout::addItem(QLayoutItem *item)
 {
     list.append(item);
 }
-//! [3]
+//! [4]
 
 
-//! [4]
+//! [5]
 CardLayout::~CardLayout()
 {
     deleteAllItems();
 }
-//! [4]
+//! [5]
 
 
-//! [5]
+//! [6]
 void CardLayout::setGeometry(const QRect &r)
 {
     QLayout::setGeometry(r);
@@ -85,10 +90,10 @@ void CardLayout::setGeometry(const QRect &r)
         ++i;
     }
 }
-//! [5]
+//! [6]
 
 
-//! [6]
+//! [7]
 QSize CardLayout::sizeHint() const
 {
     QSize s(0,0);
@@ -116,4 +121,4 @@ QSize CardLayout::minimumSize() const
     }
     return s + n*QSize(spacing(), spacing());
 }
-//! [6]
+//! [7]
\ No newline at end of file
-- 
cgit v0.12


From 54ad50c99fee0db0dc9a64ee16dfcc4315b9d86d Mon Sep 17 00:00:00 2001
From: Jason McDonald <jason.mcdonald@nokia.com>
Date: Thu, 14 May 2009 09:41:08 +1000
Subject: Fix broken wince build.

The WinCE build was failing due to a spelling error in an #ifdef
directive.

Reviewed-by: Trust Me
---
 src/gui/widgets/qmenu_wince.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gui/widgets/qmenu_wince.cpp b/src/gui/widgets/qmenu_wince.cpp
index fbe54fe..42a4e0b 100644
--- a/src/gui/widgets/qmenu_wince.cpp
+++ b/src/gui/widgets/qmenu_wince.cpp
@@ -214,7 +214,7 @@ static HWND qt_wce_create_menubar(HWND parentHandle, HINSTANCE resourceHandle, i
         mbi.nToolBarId = toolbarID;
 
         if (ptrCreateMenuBar(&mbi)) {
-#ifdef Q_WS_WINCE_WM
+#ifdef Q_OS_WINCE_WM
             // Tell the menu bar that we want to override hot key behaviour.
             LPARAM lparam = MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY,
                                        SHMBOF_NODEFAULT | SHMBOF_NOTIFY);
-- 
cgit v0.12


From 4cfe2b57d97488b4f312ad2ec2985f619b4984b6 Mon Sep 17 00:00:00 2001
From: Bill King <bill.king@nokia.com>
Date: Thu, 14 May 2009 14:15:21 +1000
Subject: Use newer safer error function if available.

Uses fb_interpret instead of isc_interprete if using firebird. Closes a potential security hole/buffer overrun.

Reviewed-by: Justin McPherson
---
 src/sql/drivers/ibase/qsql_ibase.cpp | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/sql/drivers/ibase/qsql_ibase.cpp b/src/sql/drivers/ibase/qsql_ibase.cpp
index 6834d9a..4f3d79d 100644
--- a/src/sql/drivers/ibase/qsql_ibase.cpp
+++ b/src/sql/drivers/ibase/qsql_ibase.cpp
@@ -66,8 +66,11 @@ QT_BEGIN_NAMESPACE
 
 enum { QIBaseChunkSize = SHRT_MAX / 2 };
 
-static bool getIBaseError(QString& msg, ISC_STATUS* status, ISC_LONG &sqlcode,
-                          QTextCodec *tc)
+#if defined(FB_API_VER) && FB_API_VER >= 20
+static bool getIBaseError(QString& msg, const ISC_STATUS* status, ISC_LONG &sqlcode, QTextCodec *tc)
+#else
+static bool getIBaseError(QString& msg, ISC_STATUS* status, ISC_LONG &sqlcode, QTextCodec *tc)
+#endif
 {
     if (status[0] != 1 || status[1] <= 0)
         return false;
@@ -75,7 +78,11 @@ static bool getIBaseError(QString& msg, ISC_STATUS* status, ISC_LONG &sqlcode,
     msg.clear();
     sqlcode = isc_sqlcode(status);
     char buf[512];
+#if defined(FB_API_VER) && FB_API_VER >= 20
+    while(fb_interpret(buf, 512, &status)) {
+#else
     while(isc_interprete(buf, &status)) {
+#endif
         if(!msg.isEmpty())
             msg += QLatin1String(" - ");
         if (tc)
-- 
cgit v0.12


From 8a97b3b9e506580b4a89c1277068b274794a858c Mon Sep 17 00:00:00 2001
From: Richard Moe Gustavsen <richard.gustavsen@nokia.com>
Date: Thu, 14 May 2009 10:37:37 +0200
Subject: Sheets misbehaviour on Carbon - Mac OS X

Seems like some old legacy code was left behind when sheets behaved as
application modal. This is not the case anymore, so this patch just
removes the special case code for enforcing the old behaviour, and let
carbon do the correct thing instead.

Task-number: 252379
Reviewed-by: Trenton Schulz
---
 src/gui/kernel/qwidget_mac.mm | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index b315eaf..0e021dc 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -786,16 +786,6 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event,
             // By also setting the current modal window back into the event, we
             // help Carbon determining which window is supposed to be raised.
             handled_event = qApp->activePopupWidget() ? true : false;
-            QWidget *top = 0;
-            if (!QApplicationPrivate::tryModalHelper(widget, &top) && top && top != widget){
-                if(!qt_mac_is_macsheet(top) || top->parentWidget() != widget) {
-                    handled_event = true;
-                    WindowPtr topWindowRef = qt_mac_window_for(top);
-                    SetEventParameter(event, kEventParamModalWindow, typeWindowRef, sizeof(topWindowRef), &topWindowRef);
-                    HIModalClickResult clickResult = kHIModalClickIsModal;
-                    SetEventParameter(event, kEventParamModalClickResult, typeModalClickResult, sizeof(clickResult), &clickResult);
-                }
-            }
 #endif
         } else if(ekind == kEventWindowClose) {
             widget->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);
-- 
cgit v0.12


From 8a0272a37aa44ed7583cce40eeff1b030c07741e Mon Sep 17 00:00:00 2001
From: Norwegian Rock Cat <qt-info@nokia.com>
Date: Thu, 14 May 2009 10:57:22 +0200
Subject: Small updates to the .hgignore file.

This is handy in cases where you are maybe using something like the
hg-git extension in Mercurial or just storing release in Mercurial for
patch queues or what have you.
---
 .hgignore | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/.hgignore b/.hgignore
index 784d507..eb6ff05 100755
--- a/.hgignore
+++ b/.hgignore
@@ -5,6 +5,8 @@ syntax: glob
 
 *~
 *.a
+*.la
+*.pc
 *.core
 *.moc
 *.o
@@ -45,7 +47,9 @@ bin/rcc*
 bin/uic*
 bin/qcollectiongenerator
 bin/qhelpgenerator
+bin/macdeployqt
 tools/qdoc3/qdoc3*
+tools/macdeployqt/macchangeqt/macchangeqt
 #configure.cache
 mkspecs/default
 mkspecs/qconfig.pri
-- 
cgit v0.12


From d6e87c332c721bbcb86bebc6f4daa8a3125e80c6 Mon Sep 17 00:00:00 2001
From: Andy <qt-info@nokia.com>
Date: Thu, 14 May 2009 15:07:25 +0200
Subject: Fixes build issue with WinCE and MSVC 2008 and MIPS-II

Reviewed-by: Maurice
---
 mkspecs/wince50standard-mipsii-msvc2008/default_post.prf | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mkspecs/wince50standard-mipsii-msvc2008/default_post.prf b/mkspecs/wince50standard-mipsii-msvc2008/default_post.prf
index a232ba3..d423784 100644
--- a/mkspecs/wince50standard-mipsii-msvc2008/default_post.prf
+++ b/mkspecs/wince50standard-mipsii-msvc2008/default_post.prf
@@ -1 +1 @@
-include(../wince50standard-mipsii-msvc2005/qmake.conf)
+include(../wince50standard-mipsii-msvc2005/default_post.prf)
-- 
cgit v0.12


From 7179792bbbc34a091bfc18ebc3e5bd2e401faa65 Mon Sep 17 00:00:00 2001
From: Andreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com>
Date: Thu, 14 May 2009 15:06:48 +0200
Subject: Fix QGraphicsItem::deviceTransform() to also work with normal items.

QGraphicsItem::deviceTransform() returns the item-to-device transform,
provided with the device-to-scene transform, and combining it with the
item's scene transform. This function is meant to handle items that
enable ItemIgnoresTransformations, but it happened to not work properly
for items that _don't_ enable that flag. Unfortunately this bug is
hard to work around for users from the outside, as it requires you to
check if the item or any ancestor enables ItemIgnoresTransformations.

The fix also removes unnecessary branchs inside QGV so that we use the
same function for all items.

Reviewed-by: bnilsen
---
 src/gui/graphicsview/qgraphicsitem.cpp         |   4 +
 src/gui/graphicsview/qgraphicsscene.cpp        |  21 +----
 src/gui/graphicsview/qgraphicsview.cpp         |  13 +--
 tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 110 +++++++++++++++++++++++++
 4 files changed, 120 insertions(+), 28 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 30c15bc..4908296 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -2572,6 +2572,10 @@ QTransform QGraphicsItem::sceneTransform() const
 */
 QTransform QGraphicsItem::deviceTransform(const QTransform &viewportTransform) const
 {
+    // Ensure we return the standard transform if we're not untransformable.
+    if (!d_ptr->itemIsUntransformable())
+        return sceneTransform() * viewportTransform;
+
     // Find the topmost item that ignores view transformations.
     const QGraphicsItem *untransformedAncestor = this;
     QList<const QGraphicsItem *> parents;
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 13f70e5..b89e352 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -2289,12 +2289,7 @@ void QGraphicsScene::render(QPainter *painter, const QRectF &target, const QRect
         // Calculate a simple level-of-detail metric.
         // ### almost identical code in QGraphicsView::paintEvent()
         //     and QGraphicsView::render() - consider refactoring
-        QTransform itemToDeviceTransform;
-        if (item->d_ptr->itemIsUntransformable()) {
-            itemToDeviceTransform = item->deviceTransform(painterTransform);
-        } else {
-            itemToDeviceTransform = item->sceneTransform() * painterTransform;
-        }
+        QTransform itemToDeviceTransform = item->deviceTransform(painterTransform);
 
         option.levelOfDetail = qSqrt(itemToDeviceTransform.map(v1).length() * itemToDeviceTransform.map(v2).length());
         option.matrix = itemToDeviceTransform.toAffine(); //### discards perspective
@@ -5078,11 +5073,7 @@ void QGraphicsScene::drawItems(QPainter *painter,
                 // optimization, but it's hit very rarely.
                 for (int i = clippers.size() - 1; i >= 0; --i) {
                     QGraphicsItem *clipper = clippers[i];
-                    if (clipper->d_ptr->itemIsUntransformable()) {
-                        painter->setWorldTransform(clipper->deviceTransform(viewTransform), false);
-                    } else {
-                        painter->setWorldTransform(clipper->sceneTransform() * viewTransform, false);
-                    }
+                    painter->setWorldTransform(clipper->deviceTransform(viewTransform), false);
 
                     childClippers.append(clipper);
                     painter->save();
@@ -5093,12 +5084,8 @@ void QGraphicsScene::drawItems(QPainter *painter,
         }
 
         // Set up the painter transform
-        if (item->d_ptr->itemIsUntransformable()) {
-            painter->setWorldTransform(item->deviceTransform(viewTransform), false);
-        } else {
-            painter->setWorldTransform(item->sceneTransform() * viewTransform, false);
-        }
-       
+        painter->setWorldTransform(item->deviceTransform(viewTransform), false);
+
         // Save painter
         bool saveState = (d->painterStateProtection || (item->flags() & QGraphicsItem::ItemClipsToShape));
         if (saveState)
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index 8b133f3..a795fb4 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -1153,11 +1153,7 @@ void QGraphicsViewPrivate::generateStyleOptions(const QList<QGraphicsItem *> &it
         // Calculate a simple level-of-detail metric.
         // ### almost identical code in QGraphicsScene::render()
         //     and QGraphicsView::render() - consider refactoring
-        if (item->d_ptr->itemIsUntransformable()) {
-            itemToViewportTransform = item->deviceTransform(worldTransform);
-        } else {
-            itemToViewportTransform = item->sceneTransform() * worldTransform;
-        }
+        itemToViewportTransform = item->deviceTransform(worldTransform);
 
         if (itemToViewportTransform.type() <= QTransform::TxTranslate) {
             // Translation and rotation only? The LOD is 1.
@@ -2160,12 +2156,7 @@ void QGraphicsView::render(QPainter *painter, const QRectF &target, const QRect
         // Calculate a simple level-of-detail metric.
         // ### almost identical code in QGraphicsScene::render()
         //     and QGraphicsView::paintEvent() - consider refactoring
-        QTransform itemToViewportTransform;
-        if (item->d_ptr->itemIsUntransformable()) {
-            itemToViewportTransform = item->deviceTransform(painterMatrix);
-        } else {
-            itemToViewportTransform = item->sceneTransform() * painterMatrix;
-        }
+        QTransform itemToViewportTransform = item->deviceTransform(painterMatrix);
 
         option->levelOfDetail = qSqrt(itemToViewportTransform.map(v1).length() * itemToViewportTransform.map(v2).length());
         option->matrix = itemToViewportTransform.toAffine();
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 6d150cb..58a17ea 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -215,6 +215,8 @@ private slots:
     void tabChangesFocus_data();
     void cacheMode();
     void updateCachedItemAfterMove();
+    void deviceTransform_data();
+    void deviceTransform();
 
     // task specific tests below me
     void task141694_textItemEnsureVisible();
@@ -6200,5 +6202,113 @@ void tst_QGraphicsItem::updateCachedItemAfterMove()
     QCOMPARE(tester->repaints, 1);
 }
 
+class Track : public QGraphicsRectItem
+{
+public:
+    Track(const QRectF &rect)
+        : QGraphicsRectItem(rect)
+    {
+        setAcceptHoverEvents(true);
+    }
+
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0)
+    {
+        QGraphicsRectItem::paint(painter, option, widget);
+        painter->drawText(boundingRect(), Qt::AlignCenter, QString("%1x%2\n%3x%4").arg(p.x()).arg(p.y()).arg(sp.x()).arg(sp.y()));
+    }
+    
+protected:
+    void hoverMoveEvent(QGraphicsSceneHoverEvent *event)
+    {
+        p = event->pos();
+        sp = event->widget()->mapFromGlobal(event->screenPos());
+        update();
+    }
+private:
+    QPointF p;
+    QPoint sp;
+};
+
+void tst_QGraphicsItem::deviceTransform_data()
+{
+    QTest::addColumn<bool>("untransformable1");
+    QTest::addColumn<bool>("untransformable2");
+    QTest::addColumn<bool>("untransformable3");
+    QTest::addColumn<qreal>("rotation1");
+    QTest::addColumn<qreal>("rotation2");
+    QTest::addColumn<qreal>("rotation3");
+    QTest::addColumn<QTransform>("deviceX");
+    QTest::addColumn<QPointF>("mapResult1");
+    QTest::addColumn<QPointF>("mapResult2");
+    QTest::addColumn<QPointF>("mapResult3");
+
+    QTest::newRow("nil") << false << false << false
+                         << qreal(0.0) << qreal(0.0) << qreal(0.0)
+                         << QTransform()
+                         << QPointF(150, 150) << QPointF(250, 250) << QPointF(350, 350);
+    QTest::newRow("deviceX rot 90") << false << false << false
+                         << qreal(0.0) << qreal(0.0) << qreal(0.0)
+                         << QTransform().rotate(90)
+                         << QPointF(-150, 150) << QPointF(-250, 250) << QPointF(-350, 350);
+    QTest::newRow("deviceX rot 90 100") << true << false << false
+                         << qreal(0.0) << qreal(0.0) << qreal(0.0)
+                         << QTransform().rotate(90)
+                         << QPointF(-50, 150) << QPointF(50, 250) << QPointF(150, 350);
+    QTest::newRow("deviceX rot 90 010") << false << true << false
+                         << qreal(0.0) << qreal(0.0) << qreal(0.0)
+                         << QTransform().rotate(90)
+                         << QPointF(-150, 150) << QPointF(-150, 250) << QPointF(-50, 350);
+    QTest::newRow("deviceX rot 90 001") << false << false << true
+                         << qreal(0.0) << qreal(0.0) << qreal(0.0)
+                         << QTransform().rotate(90)
+                         << QPointF(-150, 150) << QPointF(-250, 250) << QPointF(-250, 350);
+    QTest::newRow("deviceX rot 90 111") << true << true << true
+                         << qreal(0.0) << qreal(0.0) << qreal(0.0)
+                         << QTransform().rotate(90)
+                         << QPointF(-50, 150) << QPointF(50, 250) << QPointF(150, 350);
+    QTest::newRow("deviceX rot 90 101") << true << false << true
+                         << qreal(0.0) << qreal(0.0) << qreal(0.0)
+                         << QTransform().rotate(90)
+                         << QPointF(-50, 150) << QPointF(50, 250) << QPointF(150, 350);
+}
+
+void tst_QGraphicsItem::deviceTransform()
+{
+    QFETCH(bool, untransformable1);
+    QFETCH(bool, untransformable2);
+    QFETCH(bool, untransformable3);
+    QFETCH(qreal, rotation1);
+    QFETCH(qreal, rotation2);
+    QFETCH(qreal, rotation3);
+    QFETCH(QTransform, deviceX);
+    QFETCH(QPointF, mapResult1);
+    QFETCH(QPointF, mapResult2);
+    QFETCH(QPointF, mapResult3);
+
+    QGraphicsScene scene;
+    Track *rect1 = new Track(QRectF(0, 0, 100, 100));
+    Track *rect2 = new Track(QRectF(0, 0, 100, 100));
+    Track *rect3 = new Track(QRectF(0, 0, 100, 100));
+    rect2->setParentItem(rect1);
+    rect3->setParentItem(rect2);
+    rect1->setPos(100, 100);
+    rect2->setPos(100, 100);
+    rect3->setPos(100, 100);
+    rect1->rotate(rotation1);
+    rect2->rotate(rotation2);
+    rect3->rotate(rotation3);
+    rect1->setFlag(QGraphicsItem::ItemIgnoresTransformations, untransformable1);
+    rect2->setFlag(QGraphicsItem::ItemIgnoresTransformations, untransformable2);
+    rect3->setFlag(QGraphicsItem::ItemIgnoresTransformations, untransformable3);
+    rect1->setBrush(Qt::red);
+    rect2->setBrush(Qt::green);
+    rect3->setBrush(Qt::blue);
+    scene.addItem(rect1);
+
+    QCOMPARE(rect1->deviceTransform(deviceX).map(QPointF(50, 50)), mapResult1);
+    QCOMPARE(rect2->deviceTransform(deviceX).map(QPointF(50, 50)), mapResult2);
+    QCOMPARE(rect3->deviceTransform(deviceX).map(QPointF(50, 50)), mapResult3);
+}
+
 QTEST_MAIN(tst_QGraphicsItem)
 #include "tst_qgraphicsitem.moc"
-- 
cgit v0.12


From d755bb5e8cfd88d0cd909f32d240d18e856bbd36 Mon Sep 17 00:00:00 2001
From: Andy <qt-info@nokia.com>
Date: Thu, 14 May 2009 15:37:00 +0200
Subject: Prevent duplicate entries in the sidebar when the paths are the same

If two urls were added to the sidebar that only differed in how they
referenced the added url (i.e. /foo/bar/. and /foo/bar) then only one
entry should appear.

Task-number: 253532
Reviewed-by: Alexis
---
 src/gui/dialogs/qsidebar.cpp         | 4 ++--
 tests/auto/qsidebar/tst_qsidebar.cpp | 9 +++++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/gui/dialogs/qsidebar.cpp b/src/gui/dialogs/qsidebar.cpp
index 26108d7..9abefdf 100644
--- a/src/gui/dialogs/qsidebar.cpp
+++ b/src/gui/dialogs/qsidebar.cpp
@@ -249,9 +249,9 @@ void QUrlModel::addUrls(const QList<QUrl> &list, int row, bool move)
             continue;
         for (int j = 0; move && j < rowCount(); ++j) {
 #if defined(Q_OS_WIN)
-            if (index(j, 0).data(UrlRole).toUrl().toLocalFile().toLower() == url.toLocalFile().toLower()) {
+            if (QDir::cleanPath(index(j, 0).data(UrlRole).toUrl().toLocalFile()).toLower() == QDir::cleanPath(url.toLocalFile()).toLower()) {
 #else
-            if (index(j, 0).data(UrlRole) == url) {
+            if (QDir::cleanPath(index(j, 0).data(UrlRole)) == QDir::cleanPath(url)) {
 #endif
                 removeRow(j);
                 if (j <= row)
diff --git a/tests/auto/qsidebar/tst_qsidebar.cpp b/tests/auto/qsidebar/tst_qsidebar.cpp
index 705e222..1384391 100644
--- a/tests/auto/qsidebar/tst_qsidebar.cpp
+++ b/tests/auto/qsidebar/tst_qsidebar.cpp
@@ -185,6 +185,13 @@ void tst_QSidebar::addUrls()
     qsidebar.addUrls(doubleUrls, 1);
     QCOMPARE(qsidebar.urls().size(), 1);
 
+    // Two paths that are effectively pointing to the same location
+    doubleUrls << QUrl::fromLocalFile(QDir::home().absolutePath());
+    doubleUrls << QUrl::fromLocalFile(QDir::home().absolutePath() + "/.");
+    qsidebar.setUrls(emptyUrls);
+    qsidebar.addUrls(doubleUrls, 1);
+    QCOMPARE(qsidebar.urls().size(), 1);
+
 #if defined(Q_OS_WIN)
     //Windows is case insensitive so no duplicate entries in that case
     doubleUrls << QUrl::fromLocalFile(QDir::home().absolutePath());
@@ -200,8 +207,6 @@ void tst_QSidebar::addUrls()
     qsidebar.addUrls(doubleUrls, 1);
     QCOMPARE(qsidebar.urls().size(), 2);
 #endif
-
-
 }
 
 void tst_QSidebar::goToUrl()
-- 
cgit v0.12


From f09304d46bac91f3e8329cb7147f8df44898d1e0 Mon Sep 17 00:00:00 2001
From: jasplin <qt-info@nokia.com>
Date: Thu, 14 May 2009 15:45:21 +0200
Subject: Fixed regression that prevented any widget from having focus when
 graphics view was disabled.

A bug in Commit d5c018f7b014ab794e49d6e1f24e02233555847d prevented any
widget from having focus when QT_NO_GRAPHICSVIEW was defined.
This patch fixes the bug.

Reviewed-by: bnilsen
Task-number: 249589
---
 src/gui/kernel/qapplication.cpp | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index f3bd57b..4cf0ad7 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -2032,12 +2032,10 @@ QWidget *QApplication::focusWidget()
 
 void QApplicationPrivate::setFocusWidget(QWidget *focus, Qt::FocusReason reason)
 {
-    if (focus && focus->window()
 #ifndef QT_NO_GRAPHICSVIEW
-        && focus->window()->graphicsProxyWidget()
-#endif
-       )
+    if (focus && focus->window()->graphicsProxyWidget())
         return;
+#endif
 
     hidden_focus_widget = 0;
 
-- 
cgit v0.12


From 8e9b041f0081cd5af67c5c5f3cee0cf2b70ffe11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jesper=20Thomsch=C3=BCtz?= <jesper@trolltech.com>
Date: Thu, 14 May 2009 15:48:31 +0200
Subject: Use isNull() for strings instead of comparing against QString().

foo == QString() should be foo.isNull(). Fixes 7 warnings in the Norwegian Breakfast Network

Reviewed-by: Samuel
---
 qmake/generators/xmloutput.cpp            | 2 +-
 src/corelib/concurrent/qfuturewatcher.cpp | 2 +-
 src/corelib/kernel/qcoreapplication.cpp   | 4 ++--
 tools/macdeployqt/shared/shared.cpp       | 4 ++--
 tools/porting/src/portingrules.cpp        | 2 +-
 5 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/qmake/generators/xmloutput.cpp b/qmake/generators/xmloutput.cpp
index 68d22e1..d77dd4b 100644
--- a/qmake/generators/xmloutput.cpp
+++ b/qmake/generators/xmloutput.cpp
@@ -277,7 +277,7 @@ void XmlOutput::closeTag()
 void XmlOutput::closeTo(const QString &tag)
 {
     bool cont = true;
-    if (!tagStack.contains(tag) && tag != QString()) {
+    if (!tagStack.contains(tag) && !tag.isNull()) {
         //warn_msg(WarnLogic, "<%s>: Cannot close to tag <%s>, not on stack", tagStack.last().latin1(), tag.latin1());
         qDebug("<%s>: Cannot close to tag <%s>, not on stack", tagStack.last().toLatin1().constData(), tag.toLatin1().constData());
         return;
diff --git a/src/corelib/concurrent/qfuturewatcher.cpp b/src/corelib/concurrent/qfuturewatcher.cpp
index ea35e9e..39d7698 100644
--- a/src/corelib/concurrent/qfuturewatcher.cpp
+++ b/src/corelib/concurrent/qfuturewatcher.cpp
@@ -465,7 +465,7 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event)
                 break;
 
             emit q->progressValueChanged(event->index1);
-            if (event->text != QString()) // ###
+            if (!event->text.isNull()) // ###
                 q->progressTextChanged(event->text);
         break;
         case QFutureCallOutEvent::ProgressRange:
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index a23b2dd..f6ce4b3 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -1696,7 +1696,7 @@ QString QCoreApplication::applicationDirPath()
     }
 
     QCoreApplicationPrivate *d = self->d_func();
-    if (d->cachedApplicationDirPath == QString())
+    if (d->cachedApplicationDirPath.isNull())
         d->cachedApplicationDirPath = QFileInfo(applicationFilePath()).path();
     return d->cachedApplicationDirPath;
 }
@@ -1724,7 +1724,7 @@ QString QCoreApplication::applicationFilePath()
     }
 
     QCoreApplicationPrivate *d = self->d_func();
-    if (d->cachedApplicationFilePath != QString())
+    if (!d->cachedApplicationFilePath.isNull())
         return d->cachedApplicationFilePath;
 
 #if defined( Q_WS_WIN )
diff --git a/tools/macdeployqt/shared/shared.cpp b/tools/macdeployqt/shared/shared.cpp
index db76ef2..1faa63a 100644
--- a/tools/macdeployqt/shared/shared.cpp
+++ b/tools/macdeployqt/shared/shared.cpp
@@ -343,7 +343,7 @@ DeploymentInfo deployQtFrameworks(QList<FrameworkInfo> frameworks, const QString
         copiedFrameworks.append(framework.frameworkName);
         
         // Get the qt path from one of the Qt frameworks;
-        if (deploymenInfo.qtPath == QString() && framework.frameworkName.contains("Qt") 
+        if (deploymenInfo.qtPath.isNull() && framework.frameworkName.contains("Qt") 
             && framework.frameworkDirectory.contains("/lib"))
         {
                 deploymenInfo.qtPath = framework.frameworkDirectory;
@@ -364,7 +364,7 @@ DeploymentInfo deployQtFrameworks(QList<FrameworkInfo> frameworks, const QString
         // Copy farmework to app bundle.
         const QString deployedBinaryPath = copyFramework(framework, bundlePath);
         // Skip the rest if already was deployed.
-        if (deployedBinaryPath == QString())
+        if (deployedBinaryPath.isNull())
             continue;
         
         runStrip(deployedBinaryPath);
diff --git a/tools/porting/src/portingrules.cpp b/tools/porting/src/portingrules.cpp
index 4931064..cd29403 100644
--- a/tools/porting/src/portingrules.cpp
+++ b/tools/porting/src/portingrules.cpp
@@ -189,7 +189,7 @@ void PortingRules::parseXml(QString fileName)
 
     QString includeFile = xml[QLatin1String("Rules")][QLatin1String("Include")].text();
 
-    if(includeFile != QString()) {
+    if(!includeFile.isNull()) {
         QString resolvedIncludeFile = resolveFileName(fileName, includeFile);
         if (!resolvedIncludeFile.isEmpty())
             parseXml(resolvedIncludeFile);
-- 
cgit v0.12


From d644a9a89ff4f7bf8866b69af5334ea1c696e4a7 Mon Sep 17 00:00:00 2001
From: Norwegian Rock Cat <qt-info@nokia.com>
Date: Thu, 14 May 2009 16:19:22 +0200
Subject: Compile.

Need the proper types.

Reviewed-by: Andy
---
 src/gui/dialogs/qsidebar.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gui/dialogs/qsidebar.cpp b/src/gui/dialogs/qsidebar.cpp
index 9abefdf..000a06b 100644
--- a/src/gui/dialogs/qsidebar.cpp
+++ b/src/gui/dialogs/qsidebar.cpp
@@ -251,7 +251,7 @@ void QUrlModel::addUrls(const QList<QUrl> &list, int row, bool move)
 #if defined(Q_OS_WIN)
             if (QDir::cleanPath(index(j, 0).data(UrlRole).toUrl().toLocalFile()).toLower() == QDir::cleanPath(url.toLocalFile()).toLower()) {
 #else
-            if (QDir::cleanPath(index(j, 0).data(UrlRole)) == QDir::cleanPath(url)) {
+            if (QDir::cleanPath(index(j, 0).data(UrlRole).toUrl().toLocalFile()) == QDir::cleanPath(url.toLocalFile())) {
 #endif
                 removeRow(j);
                 if (j <= row)
-- 
cgit v0.12


From 85f98acaa3a38079071bea711e43c9a86edec1f6 Mon Sep 17 00:00:00 2001
From: Trond Kjernaasen <trond@trolltech.com>
Date: Thu, 14 May 2009 17:38:56 +0200
Subject: Fixed an issue with text drawing under Windows.

Some text drawn with OpenType fonts where cut off by a pixel or two
under certain circumstances. This adds an additional 2 pixel pad margin
to the glyph cache entries. The padding behaves slightly different
when ClearType is enabled/disabled, hence the general 2 pixel padding.

Task-number: 246196
Reviewed-by: Samuel
---
 src/gui/painting/qtextureglyphcache.cpp | 11 ++++-------
 src/gui/text/qfontengine_win.cpp        |  6 +++---
 2 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index 1ea40ba..3fd1ffb 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -88,11 +88,12 @@ void QTextureGlyphCache::populate(const QTextItemInt &ti,
                ti.ascent.toReal(),
                ti.descent.toReal());
 #endif
-        int glyph_width = metrics.width.ceil().toInt() + margin * 2;
-        int glyph_height = metrics.height.ceil().toInt() + margin * 2;
+        int glyph_width = metrics.width.ceil().toInt();
+        int glyph_height = metrics.height.ceil().toInt();
         if (glyph_height == 0 || glyph_width == 0)
             continue;
-
+        glyph_width += margin * 2 + 2;
+        glyph_height += margin * 2 + 2;
         // align to 8-bit boundary
         if (m_type == QFontEngineGlyphCache::Raster_Mono)
             glyph_width = (glyph_width+7)&~7;
@@ -188,11 +189,7 @@ void QImageTextureGlyphCache::createTextureData(int width, int height)
 
 int QImageTextureGlyphCache::glyphMargin() const
 {
-#ifdef Q_WS_MAC
     return 2;
-#else
-    return m_type == QFontEngineGlyphCache::Raster_RGBMask ? 2 : 0;
-#endif
 }
 
 void QImageTextureGlyphCache::fillTexture(const Coord &c, glyph_t g)
diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp
index 1996d44..bf3a176 100644
--- a/src/gui/text/qfontengine_win.cpp
+++ b/src/gui/text/qfontengine_win.cpp
@@ -1406,8 +1406,8 @@ QNativeImage *QFontEngineWin::drawGDIGlyph(HFONT font, glyph_t glyph, int margin
 #endif
 #endif
 
-    QNativeImage *ni = new QNativeImage(iw + 2 * margin,
-                                        ih + 2 * margin,
+    QNativeImage *ni = new QNativeImage(iw + 2 * margin + 2,
+                                        ih + 2 * margin + 2,
                                         QNativeImage::systemFormat(), true);
     ni->image.fill(0xffffffff);
 
@@ -1449,7 +1449,7 @@ QImage QFontEngineWin::alphaMapForGlyph(glyph_t glyph, const QTransform &xform)
         font = CreateFontIndirectW(&lf);
     }
 
-    QNativeImage *mask = drawGDIGlyph(font, glyph, 0, xform);
+    QNativeImage *mask = drawGDIGlyph(font, glyph, 2, xform);
     if (mask == 0)
         return QImage();
 
-- 
cgit v0.12


From ae3f20e9ce7f592c22c23e8dea6bb9feb52c8b90 Mon Sep 17 00:00:00 2001
From: Benjamin Poulain <benjamin.poulain@nokia.com>
Date: Thu, 14 May 2009 18:40:03 +0200
Subject: QColor::toCmyk() does not convert the color if it is already in CMYK

QColor::toCmyk() converted the color to RGB and then to CMYK. If the color
was already in CMYK, this conversion change it.
The color is now returned directly if it is in CMYK

Reviewed-by: Ariya
Task-number: 253625
---
 src/gui/painting/qcolor.cpp      |  4 ++--
 tests/auto/qcolor/tst_qcolor.cpp | 21 +++++++++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/gui/painting/qcolor.cpp b/src/gui/painting/qcolor.cpp
index 5d7d4ab..1723a19 100644
--- a/src/gui/painting/qcolor.cpp
+++ b/src/gui/painting/qcolor.cpp
@@ -1369,7 +1369,7 @@ QColor QColor::toRgb() const
 */
 QColor QColor::toHsv() const
 {
-    if (!isValid())
+    if (!isValid() || cspec == Hsv)
         return *this;
 
     if (cspec != Rgb)
@@ -1421,7 +1421,7 @@ QColor QColor::toHsv() const
 */
 QColor QColor::toCmyk() const
 {
-    if (!isValid())
+    if (!isValid() || cspec == Cmyk)
         return *this;
     if (cspec != Rgb)
         return toRgb().toCmyk();
diff --git a/tests/auto/qcolor/tst_qcolor.cpp b/tests/auto/qcolor/tst_qcolor.cpp
index 7608a15..684d5b5 100644
--- a/tests/auto/qcolor/tst_qcolor.cpp
+++ b/tests/auto/qcolor/tst_qcolor.cpp
@@ -111,12 +111,15 @@ private slots:
 
     void toRgb_data();
     void toRgb();
+    void toRgbNonDestructive();
 
     void toHsv_data();
     void toHsv();
+    void toHsvNonDestructive();
 
     void toCmyk_data();
     void toCmyk();
+    void toCmykNonDestructive();
 
     void convertTo();
 
@@ -1124,6 +1127,12 @@ void tst_QColor::toHsv_data()
         << QColor::fromCmykF(0., 1., 1., 0.);
 }
 
+void tst_QColor::toRgbNonDestructive()
+{
+    QColor aColor = QColor::fromRgbF(0.11, 0.22, 0.33, 0.44);
+    QCOMPARE(aColor, aColor.toRgb());
+}
+
 void tst_QColor::toHsv()
 {
     // invalid should remain invalid
@@ -1136,6 +1145,12 @@ void tst_QColor::toHsv()
     QCOMPARE(cmykColor.toHsv(), expectedColor);
 }
 
+void tst_QColor::toHsvNonDestructive()
+{
+    QColor aColor = QColor::fromHsvF(0.11, 0.22, 0.33, 0.44);
+    QCOMPARE(aColor, aColor.toHsv());
+}
+
 void tst_QColor::toCmyk_data()
 {
     QTest::addColumn<QColor>("expectedColor");
@@ -1165,6 +1180,12 @@ void tst_QColor::toCmyk()
     QCOMPARE(hsvColor.toCmyk(), expectedColor);
 }
 
+void tst_QColor::toCmykNonDestructive()
+{
+    QColor aColor = QColor::fromCmykF(0.11, 0.22, 0.33, 0.44);
+    QCOMPARE(aColor, aColor.toCmyk());
+}
+
 void tst_QColor::convertTo()
 {
     QColor color(Qt::black);
-- 
cgit v0.12


From ad679a7993042f1df8da8c2d90d325be3cf0113d Mon Sep 17 00:00:00 2001
From: Jason McDonald <jason.mcdonald@nokia.com>
Date: Fri, 15 May 2009 18:51:54 +1000
Subject: Fix syntax error in demos.pro.

Reviewed-by: Lincoln Ramsay
---
 demos/demos.pro | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/demos/demos.pro b/demos/demos.pro
index 9248ab8..6084550 100644
--- a/demos/demos.pro
+++ b/demos/demos.pro
@@ -30,7 +30,7 @@ contains(QT_BUILD_PARTS, tools):{
 wince*: SUBDIRS += demos_sqlbrowser
 }
 }
-contains(QT_CONFIG, phonon)!static:SUBDIRS += demos_mediaplayer
+contains(QT_CONFIG, phonon):!static:SUBDIRS += demos_mediaplayer
 contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):SUBDIRS += demos_browser
 
 # install
-- 
cgit v0.12


From 9c3f5040bc9b80619ebe167c352ac8f0394f9b41 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Fri, 15 May 2009 11:43:09 +0200
Subject: Cleaning bug in custom layout example.

The example was using deleteAllItems() to delete items from the layout. This method is now part of the QT3_SUPPORT and shold not be used if not needed. Replaced by deleting all items one by one.

Task-number: 220656

Rev-by: janarve
---
 doc/src/layout.qdoc                       | 6 +++---
 doc/src/snippets/code/doc_src_layout.qdoc | 6 ++++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/doc/src/layout.qdoc b/doc/src/layout.qdoc
index 196999b..d97fcfc 100644
--- a/doc/src/layout.qdoc
+++ b/doc/src/layout.qdoc
@@ -343,9 +343,9 @@
     \snippet doc/src/snippets/code/doc_src_layout.qdoc 4
 
     The layout takes over responsibility of the items added. Since QLayoutItem
-    does not inherit QObject, we must delete the items manually. The function
-    QLayout::deleteAllItems() uses \c{takeAt()} defined above to delete all the
-    items in the layout.
+    does not inherit QObject, we must delete the items manually. In the 
+    destructor, we remove each item from the list using \c{takeAt()}, and
+    then delete it.
 
     \snippet doc/src/snippets/code/doc_src_layout.qdoc 5
 
diff --git a/doc/src/snippets/code/doc_src_layout.qdoc b/doc/src/snippets/code/doc_src_layout.qdoc
index fedcf0c..60f36b0 100644
--- a/doc/src/snippets/code/doc_src_layout.qdoc
+++ b/doc/src/snippets/code/doc_src_layout.qdoc
@@ -67,7 +67,9 @@ void CardLayout::addItem(QLayoutItem *item)
 //! [5]
 CardLayout::~CardLayout()
 {
-    deleteAllItems();
+     QLayoutItem *item;
+     while ((item = takeAt(0)))
+         delete item;
 }
 //! [5]
 
@@ -121,4 +123,4 @@ QSize CardLayout::minimumSize() const
     }
     return s + n*QSize(spacing(), spacing());
 }
-//! [7]
\ No newline at end of file
+//! [7]
-- 
cgit v0.12


From d216c0fd62a879fd1eb84e087f70c7f542d75d58 Mon Sep 17 00:00:00 2001
From: Peter Hartmann <peter.hartmann@trolltech.com>
Date: Thu, 14 May 2009 11:21:25 +0200
Subject: HTTP authentication: return error if authentication cannot be handled

return error upon receiving an unknown authentication method (e.g.
WSSE); before we were just silently returning.

Reviewed-by: Thiago Macieira
---
 src/network/access/qhttpnetworkconnection.cpp  | 20 +++++++---
 tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 52 ++++++++++++++++++++++++++
 2 files changed, 67 insertions(+), 5 deletions(-)

diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index f558f2b..ae518df 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -643,10 +643,21 @@ void QHttpNetworkConnectionPrivate::handleStatus(QAbstractSocket *socket, QHttpN
     switch (statusCode) {
     case 401:
     case 407:
-        handleAuthenticateChallenge(socket, reply, (statusCode == 407), resend);
-        if (resend) {
-            eraseData(reply);
-            sendRequest(socket);
+        if (handleAuthenticateChallenge(socket, reply, (statusCode == 407), resend)) {
+            if (resend) {
+                eraseData(reply);
+                sendRequest(socket);
+            }
+        } else {
+            int i = indexOf(socket);
+            emit channels[i].reply->headerChanged();
+            emit channels[i].reply->readyRead();
+            QNetworkReply::NetworkError errorCode = (statusCode == 407)
+                ? QNetworkReply::ProxyAuthenticationRequiredError
+                : QNetworkReply::AuthenticationRequiredError;
+            reply->d_func()->errorString = errorDetail(errorCode, socket);
+            emit q->error(errorCode, reply->d_func()->errorString);
+            emit channels[i].reply->finished();
         }
         break;
     default:
@@ -749,7 +760,6 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket
             // authentication is cancelled, send the current contents to the user.
             emit channels[i].reply->headerChanged();
             emit channels[i].reply->readyRead();
-            emit channels[i].reply->finished();
             QNetworkReply::NetworkError errorCode =
                 isProxy
                 ? QNetworkReply::ProxyAuthenticationRequiredError
diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
index 4be0863..bb199b9 100644
--- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
@@ -217,6 +217,8 @@ private Q_SLOTS:
     void httpProxyCommands_data();
     void httpProxyCommands();
     void proxyChange();
+    void authorizationError_data();
+    void authorizationError();
 };
 
 QT_BEGIN_NAMESPACE
@@ -3012,5 +3014,55 @@ void tst_QNetworkReply::proxyChange()
     QVERIFY(int(reply3->error()) > 0);
 }
 
+void tst_QNetworkReply::authorizationError_data()
+{
+
+    QTest::addColumn<QString>("url");
+    QTest::addColumn<int>("errorSignalCount");
+    QTest::addColumn<int>("finishedSignalCount");
+    QTest::addColumn<int>("error");
+    QTest::addColumn<int>("httpStatusCode");
+    QTest::addColumn<QString>("httpBody");
+
+    QTest::newRow("unknown-authorization-method") << "http://" + QtNetworkSettings::serverName() +
+                                                     "/cgi-bin/http-unknown-authentication-method.cgi?401-authorization-required" << 1 << 1
+                                                  << int(QNetworkReply::AuthenticationRequiredError) << 401 << "authorization required";
+    QTest::newRow("unknown-proxy-authorization-method") << "http://" + QtNetworkSettings::serverName() +
+                                                           "/cgi-bin/http-unknown-authentication-method.cgi?407-proxy-authorization-required" << 1 << 1
+                                                        << int(QNetworkReply::ProxyAuthenticationRequiredError) << 407
+                                                        << "authorization required";
+}
+
+void tst_QNetworkReply::authorizationError()
+{
+    QFETCH(QString, url);
+    QNetworkRequest request(url);
+    QNetworkReplyPtr reply = manager.get(request);
+
+    QCOMPARE(reply->error(), QNetworkReply::NoError);
+
+    qRegisterMetaType<QNetworkReply::NetworkError>("QNetworkReply::NetworkError");
+    QSignalSpy errorSpy(reply, SIGNAL(error(QNetworkReply::NetworkError)));
+    QSignalSpy finishedSpy(reply, SIGNAL(finished()));
+    // now run the request:
+    connect(reply, SIGNAL(finished()),
+            &QTestEventLoop::instance(), SLOT(exitLoop()));
+    QTestEventLoop::instance().enterLoop(10);
+    QVERIFY(!QTestEventLoop::instance().timeout());
+
+    QFETCH(int, errorSignalCount);
+    QCOMPARE(errorSpy.count(), errorSignalCount);
+    QFETCH(int, finishedSignalCount);
+    QCOMPARE(finishedSpy.count(), finishedSignalCount);
+    QFETCH(int, error);
+    QCOMPARE(reply->error(), QNetworkReply::NetworkError(error));
+
+    QFETCH(int, httpStatusCode);
+    QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), httpStatusCode);
+
+    QFETCH(QString, httpBody);
+    QCOMPARE(QString(reply->readAll()), httpBody);
+}
+
 QTEST_MAIN(tst_QNetworkReply)
 #include "tst_qnetworkreply.moc"
-- 
cgit v0.12


From 3875cd2b0a81c190939ea2803a2efbe890ae38ec Mon Sep 17 00:00:00 2001
From: Richard Moe Gustavsen <richard.gustavsen@nokia.com>
Date: Fri, 15 May 2009 14:53:23 +0200
Subject: Cocoa: Window flickers when resized with a QTabWidget

Seems like we were not using the correct functions for setting
the max/min size on a cocoa window. The version we used before included
the unified toolbar, which is wrong. The new one does not.

Task-number: 252642
Reviewed-by: Trenton Schulz
---
 src/gui/kernel/qwidget_mac.mm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index 0e021dc..f863428 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -4035,8 +4035,8 @@ void QWidgetPrivate::applyMaxAndMinSizeOnWindow()
     NSSize max = NSMakeSize(SF(extra->maxw), SF(extra->maxh));
     NSSize min = NSMakeSize(SF(extra->minw), SF(extra->minh));
 #undef SF
-    [qt_mac_window_for(q) setMinSize:min];
-    [qt_mac_window_for(q) setMaxSize:max];
+    [qt_mac_window_for(q) setContentMinSize:min];
+    [qt_mac_window_for(q) setContentMaxSize:max];
 #endif
 }
 
-- 
cgit v0.12


From a830e5f22a42d00b0b92544cfcb56c79b2c3b6cd Mon Sep 17 00:00:00 2001
From: Geir Vattekar <geir.vattekar@trolltech.com>
Date: Fri, 15 May 2009 15:20:35 +0200
Subject: Doc: Updated description of QMainWindow::unifiedTitleAndToolBarOnMac
 to include info on Cocoa.

Task-number: 252658
Reviewed-by: Trenton Schulz
---
 src/gui/widgets/qmainwindow.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gui/widgets/qmainwindow.cpp b/src/gui/widgets/qmainwindow.cpp
index 502c1e9..558ba42 100644
--- a/src/gui/widgets/qmainwindow.cpp
+++ b/src/gui/widgets/qmainwindow.cpp
@@ -1408,10 +1408,10 @@ bool QMainWindow::event(QEvent *event)
 
     This property is false by default and only has any effect on Mac OS X 10.4 or higher.
 
-    If set to true, then the top toolbar area is replaced with a Carbon
-    HIToolbar and all toolbars in the top toolbar area are moved to that. Any
-    toolbars added afterwards will also be added to the Carbon HIToolbar. This
-    means a couple of things.
+    If set to true, then the top toolbar area is replaced with a Carbon HIToolbar
+    or a Cocoa NSToolbar (depending on whether Qt was built with Carbon or Cocoa).
+    All toolbars in the top toolbar area and any toolbars added afterwards are
+    moved to that. This means a couple of things.
 
     \list
     \i QToolBars in this toolbar area are not movable and you cannot drag other
-- 
cgit v0.12


From 4573bc08a280be8f8dfd4659146b6d4b1afc185a Mon Sep 17 00:00:00 2001
From: Frans Englich <frans.englich@nokia.com>
Date: Fri, 15 May 2009 15:38:35 +0200
Subject: Initialize variable to avoid valgrind error.

For some reason it's only sometimes hit and cannot be deterministically
reproduced.

Task-number: 253722
Reviewed-by: TrustMe
---
 src/xmlpatterns/expr/qxsltsimplecontentconstructor.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xmlpatterns/expr/qxsltsimplecontentconstructor.cpp b/src/xmlpatterns/expr/qxsltsimplecontentconstructor.cpp
index ef77c76..104c5cc 100644
--- a/src/xmlpatterns/expr/qxsltsimplecontentconstructor.cpp
+++ b/src/xmlpatterns/expr/qxsltsimplecontentconstructor.cpp
@@ -105,7 +105,7 @@ Item XSLTSimpleContentConstructor::evaluateSingleton(const DynamicContext::Ptr &
     QString result;
 
     bool previousIsText = false;
-    bool discard;
+    bool discard = false;
 
     if(next)
     {
-- 
cgit v0.12


From b3db2368b63f3d7f0a8abbb0620232d8aa079ad7 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Fri, 15 May 2009 17:01:51 +0200
Subject: Adapted uic test-baseline to the icon generation change  251248)

Task-number: 251248
---
 tests/auto/uic/baseline/languagesdialog.ui.h | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/tests/auto/uic/baseline/languagesdialog.ui.h b/tests/auto/uic/baseline/languagesdialog.ui.h
index a0b9cae..fbe57ca 100644
--- a/tests/auto/uic/baseline/languagesdialog.ui.h
+++ b/tests/auto/uic/baseline/languagesdialog.ui.h
@@ -1,8 +1,8 @@
 /********************************************************************************
 ** Form generated from reading ui file 'languagesdialog.ui'
 **
-** Created: Mon Jun 16 17:57:32 2008
-**      by: Qt User Interface Compiler version 4.5.0
+** Created: Fri May 15 16:58:03 2009
+**      by: Qt User Interface Compiler version 4.5.2
 **
 ** WARNING! All changes made in this file will be lost when recompiling ui file!
 ********************************************************************************/
@@ -57,7 +57,7 @@ public:
         upButton->setObjectName(QString::fromUtf8("upButton"));
         upButton->setEnabled(false);
         QIcon icon;
-        icon.addPixmap(QPixmap(QString::fromUtf8(":/images/up.png")), QIcon::Normal, QIcon::Off);
+        icon.addFile(QString::fromUtf8(":/images/up.png"), QSize(), QIcon::Normal, QIcon::Off);
         upButton->setIcon(icon);
 
         hboxLayout->addWidget(upButton);
@@ -66,7 +66,7 @@ public:
         downButton->setObjectName(QString::fromUtf8("downButton"));
         downButton->setEnabled(false);
         QIcon icon1;
-        icon1.addPixmap(QPixmap(QString::fromUtf8(":/images/down.png")), QIcon::Normal, QIcon::Off);
+        icon1.addFile(QString::fromUtf8(":/images/down.png"), QSize(), QIcon::Normal, QIcon::Off);
         downButton->setIcon(icon1);
 
         hboxLayout->addWidget(downButton);
@@ -75,7 +75,7 @@ public:
         removeButton->setObjectName(QString::fromUtf8("removeButton"));
         removeButton->setEnabled(false);
         QIcon icon2;
-        icon2.addPixmap(QPixmap(QString::fromUtf8(":/images/editdelete.png")), QIcon::Normal, QIcon::Off);
+        icon2.addFile(QString::fromUtf8(":/images/editdelete.png"), QSize(), QIcon::Normal, QIcon::Off);
         removeButton->setIcon(icon2);
 
         hboxLayout->addWidget(removeButton);
@@ -84,7 +84,7 @@ public:
         openFileButton->setObjectName(QString::fromUtf8("openFileButton"));
         openFileButton->setEnabled(true);
         QIcon icon3;
-        icon3.addPixmap(QPixmap(QString::fromUtf8(":/images/mac/fileopen.png")), QIcon::Normal, QIcon::Off);
+        icon3.addFile(QString::fromUtf8(":/images/mac/fileopen.png"), QSize(), QIcon::Normal, QIcon::Off);
         openFileButton->setIcon(icon3);
 
         hboxLayout->addWidget(openFileButton);
-- 
cgit v0.12


From 97d0f8f43db98e1c5ae49bd32dfc027e6d3a1349 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= <trond@trolltech.com>
Date: Mon, 18 May 2009 09:59:06 +0200
Subject: Fixed a bug which implicitly closed perspective transformed poly
 lines.

When the end point of a line in a path is clipped, only closed paths
should have the closing line.

Task-number: 253663
Reviewed-by: Samuel
---
 src/gui/painting/qtransform.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp
index 2383272..cec2d16 100644
--- a/src/gui/painting/qtransform.cpp
+++ b/src/gui/painting/qtransform.cpp
@@ -1355,7 +1355,8 @@ static inline QHomogeneousCoordinate mapHomogeneous(const QTransform &transform,
     return c;
 }
 
-static inline bool lineTo_clipped(QPainterPath &path, const QTransform &transform, const QPointF &a, const QPointF &b, bool needsMoveTo)
+static inline bool lineTo_clipped(QPainterPath &path, const QTransform &transform, const QPointF &a, const QPointF &b,
+                                  bool needsMoveTo, bool needsLineTo = true)
 {
     QHomogeneousCoordinate ha = mapHomogeneous(transform, a);
     QHomogeneousCoordinate hb = mapHomogeneous(transform, b);
@@ -1388,7 +1389,8 @@ static inline bool lineTo_clipped(QPainterPath &path, const QTransform &transfor
     if (needsMoveTo)
         path.moveTo(ha.toPoint());
 
-    path.lineTo(hb.toPoint());
+    if (needsLineTo)
+        path.lineTo(hb.toPoint());
 
     return true;
 }
@@ -1455,7 +1457,7 @@ static QPainterPath mapProjective(const QTransform &transform, const QPainterPat
     }
 
     if (path.elementCount() > 0 && lastMoveTo != last)
-        lineTo_clipped(result, transform, last, lastMoveTo, needsMoveTo);
+        lineTo_clipped(result, transform, last, lastMoveTo, needsMoveTo, false);
 
     return result;
 }
-- 
cgit v0.12


From 8dfb09c26d228388fba5318b6f61b4edbf67cdc2 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Mon, 18 May 2009 10:55:52 +0200
Subject: Updated German translations for 4.5.2

---
 translations/assistant_de.qm | Bin 20332 -> 18688 bytes
 translations/assistant_de.ts | 110 +++++++------
 translations/designer_de.qm  | Bin 152455 -> 151189 bytes
 translations/designer_de.ts  |  12 +-
 translations/linguist_de.qm  | Bin 47074 -> 45915 bytes
 translations/linguist_de.ts  | 365 ++++++++++++++++++++++---------------------
 translations/qt_de.qm        | Bin 181913 -> 181348 bytes
 translations/qt_de.ts        | 110 ++++++-------
 translations/qt_help_de.qm   | Bin 9381 -> 9583 bytes
 translations/qt_help_de.ts   |   2 +-
 10 files changed, 300 insertions(+), 299 deletions(-)

diff --git a/translations/assistant_de.qm b/translations/assistant_de.qm
index 54146f6..5b31aea 100644
Binary files a/translations/assistant_de.qm and b/translations/assistant_de.qm differ
diff --git a/translations/assistant_de.ts b/translations/assistant_de.ts
index 0411ef1..9b0d628 100644
--- a/translations/assistant_de.ts
+++ b/translations/assistant_de.ts
@@ -163,7 +163,7 @@
 <context>
     <name>CentralWidget</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+195"/>
+        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+208"/>
         <source>Add new page</source>
         <translation>Neue Seite hinzufügen</translation>
     </message>
@@ -173,38 +173,38 @@
         <translation>Aktuelle Seite schließen</translation>
     </message>
     <message>
-        <location line="+265"/>
+        <location line="+282"/>
         <source>Print Document</source>
         <translation>Drucken</translation>
     </message>
     <message>
-        <location line="+147"/>
+        <location line="+148"/>
         <location line="+2"/>
         <source>unknown</source>
         <translation>unbekannt</translation>
     </message>
     <message>
-        <location line="+96"/>
+        <location line="+91"/>
         <source>Add New Page</source>
         <translation>Neue Seite hinzufügen</translation>
     </message>
     <message>
-        <location line="+1"/>
+        <location line="+3"/>
         <source>Close This Page</source>
         <translation>Aktuelle Seite schließen</translation>
     </message>
     <message>
-        <location line="+1"/>
+        <location line="+3"/>
         <source>Close Other Pages</source>
         <translation>Andere Seiten schließen</translation>
     </message>
     <message>
-        <location line="+2"/>
+        <location line="+5"/>
         <source>Add Bookmark for this Page...</source>
         <translation>Lesezeichen für diese Seite hinzufügen...</translation>
     </message>
     <message>
-        <location line="+257"/>
+        <location line="+259"/>
         <source>Search</source>
         <translation>Suchen</translation>
     </message>
@@ -242,17 +242,17 @@
 <context>
     <name>FindWidget</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-863"/>
+        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-899"/>
         <source>Previous</source>
         <translation>Vorherige</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+4"/>
         <source>Next</source>
         <translation>Nächste</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+4"/>
         <source>Case Sensitive</source>
         <translation>Gross/ Kleinschreibung beachten</translation>
     </message>
@@ -298,7 +298,7 @@
 <context>
     <name>HelpViewer</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+481"/>
+        <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+492"/>
         <source>Help</source>
         <translation>Hilfe</translation>
     </message>
@@ -329,12 +329,12 @@
         <translation>Link in neuem Tab öffnen	</translation>
     </message>
     <message>
-        <location line="-267"/>
+        <location line="-275"/>
         <source>Open Link in New Tab</source>
         <translation>Link in neuem Tab öffnen</translation>
     </message>
     <message>
-        <location line="+201"/>
+        <location line="+209"/>
         <source>Unable to launch external application.
 </source>
         <translation>Fehler beim Starten der externen Anwendung.
@@ -463,38 +463,37 @@
     <name>MainWindow</name>
     <message>
         <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+108"/>
-        <location line="+350"/>
+        <location line="+354"/>
         <source>Index</source>
         <translation>Index</translation>
     </message>
     <message>
-        <location line="-344"/>
-        <location line="+342"/>
+        <location line="-348"/>
+        <location line="+346"/>
         <source>Contents</source>
         <translation>Inhalt</translation>
     </message>
     <message>
-        <location line="-337"/>
-        <location line="+341"/>
+        <location line="-341"/>
+        <location line="+345"/>
         <source>Bookmarks</source>
         <translation>Lesezeichen</translation>
     </message>
     <message>
-        <location line="-329"/>
-        <location line="+331"/>
+        <location line="+2"/>
         <source>Search</source>
         <translation>Suchen</translation>
     </message>
     <message>
-        <location line="-319"/>
-        <location line="+192"/>
-        <location line="+470"/>
+        <location line="-335"/>
+        <location line="+208"/>
+        <location line="+476"/>
         <source>Qt Assistant</source>
         <translation>Qt Assistant</translation>
     </message>
     <message>
-        <location line="-501"/>
-        <location line="+4"/>
+        <location line="-508"/>
+        <location line="+5"/>
         <source>Unfiltered</source>
         <translation>Ohne Filter</translation>
     </message>
@@ -718,7 +717,7 @@
         <translation>Navigationsleiste</translation>
     </message>
     <message>
-        <location line="+74"/>
+        <location line="+76"/>
         <source>Toolbars</source>
         <translation>Werkzeugleisten</translation>
     </message>
@@ -743,7 +742,7 @@
         <translation>Adresse:</translation>
     </message>
     <message>
-        <location line="+110"/>
+        <location line="+114"/>
         <source>Could not find the associated content item.</source>
         <translation>Der zugehörige Inhaltseintrag konnte nicht gefunden werden.</translation>
     </message>
@@ -769,12 +768,12 @@
         <translation>Über %1</translation>
     </message>
     <message>
-        <location line="+115"/>
+        <location line="+113"/>
         <source>Updating search index</source>
         <translation>Suchindex wird aufgebaut</translation>
     </message>
     <message>
-        <location line="-597"/>
+        <location line="-601"/>
         <source>Looking for Qt Documentation...</source>
         <translation>Suche nach Qt Dokumentationen...</translation>
     </message>
@@ -862,46 +861,45 @@
         <translation type="obsolete">Von Helpserver herunterladen...</translation>
     </message>
     <message>
-        <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+237"/>
-        <location line="+7"/>
-        <location line="+6"/>
+        <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+256"/>
+        <location line="+43"/>
         <source>Add Documentation</source>
         <translation>Dokumentation hinzufügen</translation>
     </message>
     <message>
-        <location line="-13"/>
+        <location line="-43"/>
         <source>Qt Compressed Help Files (*.qch)</source>
         <translation>Komprimierte Hilfe Dateien (*.qch)</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location line="+37"/>
         <source>The specified file is not a valid Qt Help File!</source>
         <translation>Die angegebene Datei ist keine Qt Hilfe Datei!</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="-8"/>
         <source>The namespace %1 is already registered!</source>
         <translation>Der Namespace %1 ist bereits registriert!</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+31"/>
         <source>Remove Documentation</source>
-        <translation type="unfinished"></translation>
+        <translation>Dokumentation entfernen</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Einige der gegenwärtig geöffneten Dokumente stammen aus der Dokumentation, die Sie gerade zu löschen versuchen. Sie werden beim Löschen geschlossen.</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Cancel</source>
-        <translation type="unfinished">Abbrechen</translation>
+        <translation>Abbrechen</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>OK</source>
-        <translation type="unfinished">OK</translation>
+        <translation>OK</translation>
     </message>
     <message>
         <location line="+86"/>
@@ -1000,22 +998,22 @@
     <message>
         <location/>
         <source>Options</source>
-        <translation type="unfinished"></translation>
+        <translation>Einstellungen</translation>
     </message>
     <message>
         <location/>
         <source>Current Page</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktuelle Seite</translation>
     </message>
     <message>
         <location/>
         <source>Restore to default</source>
-        <translation type="unfinished"></translation>
+        <translation>Vorgabe wiederherstellen</translation>
     </message>
     <message>
         <location/>
         <source>Homepage</source>
-        <translation type="unfinished"></translation>
+        <translation>Startseite</translation>
     </message>
 </context>
 <context>
@@ -1025,7 +1023,7 @@
         <translation type="obsolete">Neuer Ordner</translation>
     </message>
     <message>
-        <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+110"/>
+        <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+112"/>
         <source>The specified collection file does not exist!</source>
         <translation>Die angegeben Katalogdatei (collection file) konnte nicht gefunden werden!</translation>
     </message>
@@ -1073,10 +1071,10 @@
     <message>
         <location line="+7"/>
         <source>Missing filter argument!</source>
-        <translation type="unfinished"></translation>
+        <translation>Das Filter-Argument fehlt!</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location line="+12"/>
         <source>Unknown option: %1</source>
         <translation>Unbekannte Option: %1</translation>
     </message>
@@ -1087,7 +1085,7 @@
         <translation>Qt Assistant</translation>
     </message>
     <message>
-        <location filename="../tools/assistant/tools/assistant/main.cpp" line="+190"/>
+        <location filename="../tools/assistant/tools/assistant/main.cpp" line="+203"/>
         <source>Could not register documentation file
 %1
 
@@ -1115,9 +1113,9 @@ Reason:
         <translation>Dokumentation erfolgreich entfernt.</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location line="+40"/>
         <source>Cannot load sqlite database driver!</source>
-        <translation type="unfinished"></translation>
+        <translation>Der Datenbanktreiber für SQLite kann nicht geladen werden!</translation>
     </message>
     <message>
         <location line="+9"/>
@@ -1147,7 +1145,7 @@ Reason:
 <context>
     <name>SearchWidget</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+193"/>
+        <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+195"/>
         <source>&amp;Copy</source>
         <translation>&amp;Kopieren</translation>
     </message>
@@ -1157,20 +1155,18 @@ Reason:
         <translation>&amp;Link Adresse kopieren</translation>
     </message>
     <message>
-        <location line="+3"/>
-        <location line="+36"/>
+        <location line="+4"/>
         <source>Open Link in New Tab</source>
         <translation>Link in neuem Tab öffnen</translation>
     </message>
     <message>
-        <location line="-29"/>
+        <location line="+8"/>
         <source>Select All</source>
         <translation>Alles markieren</translation>
     </message>
     <message>
-        <location line="+28"/>
         <source>Open Link</source>
-        <translation>Link öffnen</translation>
+        <translation type="obsolete">Link öffnen</translation>
     </message>
 </context>
 <context>
diff --git a/translations/designer_de.qm b/translations/designer_de.qm
index d51c51d..f9b0a03 100644
Binary files a/translations/designer_de.qm and b/translations/designer_de.qm differ
diff --git a/translations/designer_de.ts b/translations/designer_de.ts
index 4cd9914..002fc8d 100644
--- a/translations/designer_de.ts
+++ b/translations/designer_de.ts
@@ -339,7 +339,7 @@ ate the goose who was loose.</source>
     <message>
         <location line="-220"/>
         <source>Change signal-slot connection</source>
-        <translation type="unfinished"></translation>
+        <translation>Signale-Slotverbindung ändern</translation>
     </message>
     <message>
         <location line="+234"/>
@@ -1384,7 +1384,7 @@ ate the goose who was loose.</source>
     <message>
         <location filename="../tools/designer/src/lib/shared/plugindialog.ui"/>
         <source>Plugin Information</source>
-        <translation type="unfinished">Plugins</translation>
+        <translation>Plugins</translation>
     </message>
     <message>
         <location/>
@@ -4026,7 +4026,7 @@ Möchten Sie sie überschreiben?</translation>
     <message>
         <location line="+1"/>
         <source>Go to slot...</source>
-        <translation type="unfinished">Slot anzeigen...</translation>
+        <translation>Slot anzeigen...</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5963,14 +5963,14 @@ Please select another name.</source>
         <translation>Detailansicht</translation>
     </message>
     <message>
-        <location line="+596"/>
+        <location line="+597"/>
         <source>Object: %1
 Class: %2</source>
         <translation>Objekt: %1
 Klasse: %2</translation>
     </message>
     <message>
-        <location line="-599"/>
+        <location line="-600"/>
         <source>Sorting</source>
         <translation>Sortiert</translation>
     </message>
@@ -5980,7 +5980,7 @@ Klasse: %2</translation>
         <translation>Farbige Hervorhebung</translation>
     </message>
     <message>
-        <location line="+65"/>
+        <location line="+66"/>
         <source>Configure Property Editor</source>
         <translation>Anzeige der Eigenschaften konfigurieren</translation>
     </message>
diff --git a/translations/linguist_de.qm b/translations/linguist_de.qm
index f411122..a39c3bf 100644
Binary files a/translations/linguist_de.qm and b/translations/linguist_de.qm differ
diff --git a/translations/linguist_de.ts b/translations/linguist_de.ts
index 712f75d..cb8e4d2 100644
--- a/translations/linguist_de.ts
+++ b/translations/linguist_de.ts
@@ -6,7 +6,7 @@
     <message>
         <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="+59"/>
         <source>(New Entry)</source>
-        <translation type="unfinished"></translation>
+        <translation>(Neuer Eintrag)</translation>
     </message>
 </context>
 <context>
@@ -29,7 +29,7 @@
     <message>
         <location filename="../tools/linguist/linguist/batchtranslationdialog.cpp" line="+79"/>
         <source>Batch Translation of &apos;%1&apos; - Qt Linguist</source>
-        <translation type="unfinished"></translation>
+        <translation>Automatische Übersetzung von &apos;%1&apos; - Qt Linguist</translation>
     </message>
     <message>
         <location line="+37"/>
@@ -57,62 +57,62 @@
     <message>
         <location filename="../tools/linguist/linguist/batchtranslation.ui"/>
         <source>Qt Linguist - Batch Translation</source>
-        <translation type="unfinished">Qt Linguist - Automatische Übersetzung</translation>
+        <translation>Qt Linguist - Automatische Übersetzung</translation>
     </message>
     <message>
         <location/>
         <source>Options</source>
-        <translation type="unfinished">Optionen</translation>
+        <translation>Optionen</translation>
     </message>
     <message>
         <location/>
         <source>Set translated entries to finished</source>
-        <translation type="unfinished">Markiere Übersetzung als erledigt</translation>
+        <translation>Markiere Übersetzung als erledigt</translation>
     </message>
     <message>
         <location/>
         <source>Retranslate entries with existing translation</source>
-        <translation type="unfinished"></translation>
+        <translation>Einträge mit bereits existierender Übersetzung neu übersetzen</translation>
     </message>
     <message>
         <location/>
         <source>Note that the modified entries will be reset to unfinished if &apos;Set translated entries to finished&apos; above is unchecked.</source>
-        <translation type="unfinished"></translation>
+        <translation>Beachten Sie, dass die geänderten Einträge in den Status &apos;unerledigt&apos; zurückgesetzt werden, wenn &apos;Markiere Übersetzung als erledigt&apos; deaktiviert ist.</translation>
     </message>
     <message>
         <location/>
         <source>Translate also finished entries</source>
-        <translation type="unfinished"></translation>
+        <translation>Erledigte Einträge übersetzen</translation>
     </message>
     <message>
         <location/>
         <source>Phrase book preference</source>
-        <translation type="unfinished">Wörterbücher</translation>
+        <translation>Wörterbücher</translation>
     </message>
     <message>
         <location/>
         <source>Move up</source>
-        <translation type="unfinished">Nach oben</translation>
+        <translation>Nach oben</translation>
     </message>
     <message>
         <location/>
         <source>Move down</source>
-        <translation type="unfinished">Nach unten</translation>
+        <translation>Nach unten</translation>
     </message>
     <message>
         <location/>
         <source>The batch translator will search through the selected phrase books in the order given above.</source>
-        <translation type="unfinished"></translation>
+        <translation>Der automatische Übersetzer wird in der angegebenen Reihenfolge durch die ausgewählten Wörterbücher gehen.</translation>
     </message>
     <message>
         <location/>
         <source>&amp;Run</source>
-        <translation type="unfinished">&amp;Ausführen</translation>
+        <translation>&amp;Ausführen</translation>
     </message>
     <message>
         <location/>
         <source>Cancel</source>
-        <translation type="unfinished">Abbrechen</translation>
+        <translation>Abbrechen</translation>
     </message>
 </context>
 <context>
@@ -120,38 +120,39 @@
     <message>
         <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+214"/>
         <source>&lt;qt&gt;Duplicate messages found in &apos;%1&apos;:</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;qt&gt;Mehrfach vorhandene Meldungen in &apos;%1&apos;:</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>&lt;p&gt;[more duplicates omitted]</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;p&gt;[weitere mehrfach vorhandene Nachrichten weggelassen]</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>&lt;p&gt;* Context: %1&lt;br&gt;* Source: %2</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;p&gt;* Kontext: %1&lt;br&gt;* Quelle: %2</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>&lt;br&gt;* Comment: %3</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;br&gt;* Kommentar: %3</translation>
     </message>
     <message>
         <location line="+70"/>
         <source>Linguist does not know the plural rules for &apos;%1&apos;.
 Will assume a single universal form.</source>
-        <translation type="unfinished"></translation>
+        <translation>Die Regeln zur Pluralbildung der Sprache &apos;%1&apos; sind in Linguist nicht definiert.
+Es wird mit einer einfachen Universalform gearbeitet.</translation>
     </message>
     <message>
         <location line="+56"/>
         <source>Cannot create &apos;%2&apos;: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>&apos;%2&apos; kann nicht erzeugt werden: %1</translation>
     </message>
     <message>
         <location line="+56"/>
         <source>Universal Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Universalform</translation>
     </message>
 </context>
 <context>
@@ -239,7 +240,7 @@ Will assume a single universal form.</source>
     <message>
         <location line="+3"/>
         <source>Translation does not contain the necessary %n place marker.</source>
-        <translation type="unfinished"></translation>
+        <translation>Der erforderliche Platzhalter (%n) fehlt in der Übersetzung.</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -311,37 +312,37 @@ Will assume a single universal form.</source>
     <message>
         <location/>
         <source>Find</source>
-        <translation type="unfinished"></translation>
+        <translation>Suchen</translation>
     </message>
     <message>
         <location/>
         <source>&amp;Find what:</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Suchmuster:</translation>
     </message>
     <message>
         <location/>
         <source>&amp;Source texts</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Quelltexte</translation>
     </message>
     <message>
         <location/>
         <source>&amp;Translations</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Übersetzungen</translation>
     </message>
     <message>
         <location/>
         <source>&amp;Match case</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Groß-/Kleinschreibung beachten</translation>
     </message>
     <message>
         <location/>
         <source>&amp;Comments</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Kommentare</translation>
     </message>
     <message>
         <location/>
         <source>Ignore &amp;accelerators</source>
-        <translation type="unfinished"></translation>
+        <translation>Tastenkürzel &amp;ignorieren</translation>
     </message>
     <message>
         <location/>
@@ -612,102 +613,102 @@ p, li { white-space: pre-wrap; }
     <message>
         <location/>
         <source>Previous unfinished item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vorherige Unerledigte</translation>
     </message>
     <message>
         <location/>
         <source>Move to the previous unfinished item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Gehe zum vorangehenden unerledigten Eintrag.</translation>
     </message>
     <message>
         <location/>
         <source>Next unfinished item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nächste Unerledigte</translation>
     </message>
     <message>
         <location/>
         <source>Move to the next unfinished item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Gehe zum nächsten unerledigten Eintrag.</translation>
     </message>
     <message>
         <location/>
         <source>Move to previous item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Gehe zum vorigen Eintrag.</translation>
     </message>
     <message>
         <location/>
         <source>Move to the previous item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Gehe zum vorigen Eintrag.</translation>
     </message>
     <message>
         <location/>
         <source>Next item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nächster EIntrag.</translation>
     </message>
     <message>
         <location/>
         <source>Move to the next item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Gehe zum nächsten Eintrag.</translation>
     </message>
     <message>
         <location/>
         <source>Mark item as done and move to the next unfinished item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Markiere Eintrag als erledigt und gehe zum nächsten unerledigten Eintrag.</translation>
     </message>
     <message>
         <location/>
         <source>Mark this item as done and move to the next unfinished item.</source>
-        <translation type="unfinished"></translation>
+        <translation>Markiert diesen Eintrag als erledigt und geht zum nächsten unerledigten Eintrag.</translation>
     </message>
     <message>
         <location/>
         <source>Copy from source text</source>
-        <translation type="unfinished"></translation>
+        <translation>Übernehme &amp;Ursprungstext</translation>
     </message>
     <message>
         <location/>
         <source>Toggle the validity check of accelerators.</source>
-        <translation type="unfinished"></translation>
+        <translation>Schalte Prüfung der Tastenkürzel um.</translation>
     </message>
     <message>
         <location/>
         <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source>
-        <translation type="unfinished"></translation>
+        <translation>Schalte Prüfung der Tastenkürzel um; das heisst, die Übereinstimmung der kaufmännischen Und-Zeichen in Quelle und Übersetzung. Bei Fehlschlag wird eine Warnung im Hinweis-Fenster angezeigt.</translation>
     </message>
     <message>
         <location/>
         <source>Toggle the validity check of ending punctuation.</source>
-        <translation type="unfinished"></translation>
+        <translation>Schalte Prüfung der Satzendezeichen am Ende des Textes um.</translation>
     </message>
     <message>
         <location/>
         <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source>
-        <translation type="unfinished"></translation>
+        <translation>Schaltet die Prüfung der Satzendezeichen am Ende des Textes um. Bei Fehlschlag wird eine Warnung im Hinweis-Fenster angezeigt.</translation>
     </message>
     <message>
         <location/>
         <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source>
-        <translation type="unfinished"></translation>
+        <translation>Schaltet die Prüfung der Verwendung der Wörterbuchvorschläge um. Bei Fehlschlag wird eine Warnung im Hinweis-Fenster angezeigt.</translation>
     </message>
     <message>
         <location/>
         <source>Toggle the validity check of place markers.</source>
-        <translation type="unfinished"></translation>
+        <translation>Schaltet die Prüfung der Platzhalter um.</translation>
     </message>
     <message>
         <location/>
         <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source>
-        <translation type="unfinished"></translation>
+        <translation>Schaltet die Prüfung der Platzhalter um; das heisst, ob %1, %2,... in Quelltext und Übersetzung übereinstimmend verwendet werden. Bei Fehlschlag wird eine Warnung im Hinweis-Fenster angezeigt.</translation>
     </message>
     <message>
         <location/>
         <source>Open Read-O&amp;nly...</source>
-        <translation type="unfinished"></translation>
+        <translation>Schr&amp;eibgeschützt öffnen...</translation>
     </message>
     <message>
         <location/>
         <source>&amp;Save All</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Alles Speichern</translation>
     </message>
     <message>
         <location/>
@@ -767,22 +768,22 @@ p, li { white-space: pre-wrap; }
     <message>
         <location/>
         <source>Recently Opened &amp;Files</source>
-        <translation type="unfinished"></translation>
+        <translation>Zu&amp;letzt bearbeitete Dateien</translation>
     </message>
     <message>
         <location/>
         <source>Save</source>
-        <translation type="unfinished"></translation>
+        <translation>Speichern</translation>
     </message>
     <message>
         <location/>
         <source>Print a list of all the translation units in the current translation source file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Liste aller Übersetzungseinheiten in der aktuellen Übersetzungsdatei drucken.</translation>
     </message>
     <message>
         <location/>
         <source>Undo the last editing operation performed on the current translation.</source>
-        <translation type="unfinished"></translation>
+        <translation>Mache die letzte Änderung an der Übersetzung rückgängig.</translation>
     </message>
     <message>
         <location/>
@@ -902,12 +903,12 @@ p, li { white-space: pre-wrap; }
     <message>
         <location/>
         <source>Close</source>
-        <translation type="unfinished">Schließen</translation>
+        <translation>Schließen</translation>
     </message>
     <message>
         <location/>
         <source>&amp;Close All</source>
-        <translation type="unfinished"></translation>
+        <translation>A&amp;lle schließen</translation>
     </message>
     <message>
         <location/>
@@ -1170,49 +1171,49 @@ p, li { white-space: pre-wrap; }
     <message>
         <location line="+195"/>
         <source>Source text</source>
-        <translation type="unfinished">Ursprungstext</translation>
+        <translation>Ursprungstext</translation>
     </message>
     <message>
         <location line="+1"/>
         <location line="+25"/>
         <source>Index</source>
-        <translation type="unfinished">Index</translation>
+        <translation>Index</translation>
     </message>
     <message>
         <location line="-2"/>
         <location line="+61"/>
         <source>Context</source>
-        <translation type="unfinished">Kontext</translation>
+        <translation>Kontext</translation>
     </message>
     <message>
         <location line="-60"/>
         <source>Items</source>
-        <translation type="unfinished">Einträge</translation>
+        <translation>Einträge</translation>
     </message>
     <message>
         <location line="+77"/>
         <source>This panel lists the source contexts.</source>
-        <translation type="unfinished">Dieser Bereich zeigt die Kontexte an.</translation>
+        <translation>Dieser Bereich zeigt die Kontexte an.</translation>
     </message>
     <message>
         <location line="+15"/>
         <source>Strings</source>
-        <translation type="unfinished">Zeichenketten</translation>
+        <translation>Zeichenketten</translation>
     </message>
     <message>
         <location line="+39"/>
         <source>Phrases and guesses</source>
-        <translation type="unfinished">Wörterbuch und Vorschläge</translation>
+        <translation>Wörterbuch und Vorschläge</translation>
     </message>
     <message>
         <location line="+10"/>
         <source>Sources and Forms</source>
-        <translation type="unfinished"></translation>
+        <translation>Quelldateien und Formulare</translation>
     </message>
     <message>
         <location line="+15"/>
         <source>Warnings</source>
-        <translation type="unfinished">Warnungen</translation>
+        <translation>Hinweise</translation>
     </message>
     <message>
         <location line="+59"/>
@@ -1223,120 +1224,124 @@ p, li { white-space: pre-wrap; }
     <message>
         <location line="+125"/>
         <source>Loading...</source>
-        <translation type="unfinished">Lade...</translation>
+        <translation>Lade...</translation>
     </message>
     <message>
         <location line="+32"/>
         <location line="+22"/>
         <source>Loading File - Qt Linguist</source>
-        <translation type="unfinished"></translation>
+        <translation>Laden - Qt Linguist</translation>
     </message>
     <message>
         <location line="-21"/>
         <source>The file &apos;%1&apos; does not seem to be related to the currently open file(s) &apos;%2&apos;.
 
 Close the open file(s) first?</source>
-        <translation type="unfinished"></translation>
+        <translation>Die Datei &apos;%1&apos; scheint nicht zu den bereits geöffneten Dateien &apos;%2&apos; zu passen.
+
+Sollen die bereits geöffneten Dateien vorher geschlossen werden?</translation>
     </message>
     <message>
         <location line="+22"/>
         <source>The file &apos;%1&apos; does not seem to be related to the file &apos;%2&apos; which is being loaded as well.
 
 Skip loading the first named file?</source>
-        <translation type="unfinished"></translation>
+        <translation>Die Datei &apos;%1&apos; scheint nicht zu der Datei &apos;%2&apos; zu passen, die ebenfalls geladen wird.
+
+Soll die erstgenannte Datei übersprungen werden?</translation>
     </message>
     <message numerus="yes">
         <location line="+61"/>
         <source>%n translation unit(s) loaded.</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>Eine Übersetzungseinheit geladen.</numerusform>
+            <numerusform>%n Übersetzungseinheiten geladen.</numerusform>
         </translation>
     </message>
     <message>
         <location line="+93"/>
         <source>Related files (%1);;</source>
-        <translation type="unfinished"></translation>
+        <translation>Verwandte Dateien (%1);;</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Open Translation Files</source>
-        <translation type="unfinished"></translation>
+        <translation>Übersetzungsdateien öffnen</translation>
     </message>
     <message>
         <location line="+10"/>
         <location line="+31"/>
         <source>File saved.</source>
-        <translation type="unfinished">Datei gespeichert.</translation>
+        <translation>Datei gespeichert.</translation>
     </message>
     <message>
         <location line="+15"/>
         <location line="+1164"/>
         <location filename="../tools/linguist/linguist/mainwindow.ui"/>
         <source>Release</source>
-        <translation type="unfinished">Freigeben</translation>
+        <translation>Freigeben</translation>
     </message>
     <message>
         <location line="-1163"/>
         <source>Qt message files for released applications (*.qm)
 All files (*)</source>
-        <translation type="unfinished">Qt Nachrichtendateien (*.qm)
+        <translation>Qt Nachrichtendateien (*.qm)
 Alle Dateien (*)</translation>
     </message>
     <message>
         <location line="+3"/>
         <location line="+12"/>
         <source>File created.</source>
-        <translation type="unfinished">Datei erzeugt.</translation>
+        <translation>Datei erzeugt.</translation>
     </message>
     <message>
         <location line="+27"/>
         <location line="+355"/>
         <source>Printing...</source>
-        <translation type="unfinished">Drucke...</translation>
+        <translation>Drucke...</translation>
     </message>
     <message>
         <location line="-347"/>
         <source>Context: %1</source>
-        <translation type="unfinished">Kontext: %1</translation>
+        <translation>Kontext: %1</translation>
     </message>
     <message>
         <location line="+32"/>
         <source>finished</source>
-        <translation type="unfinished">erledigt</translation>
+        <translation>erledigt</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>unresolved</source>
-        <translation type="unfinished">ungelöst</translation>
+        <translation>ungelöst</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>obsolete</source>
-        <translation type="unfinished">veraltet</translation>
+        <translation>veraltet</translation>
     </message>
     <message>
         <location line="+15"/>
         <location line="+307"/>
         <source>Printing... (page %1)</source>
-        <translation type="unfinished">Drucke... (Seite %1)</translation>
+        <translation>Drucke... (Seite %1)</translation>
     </message>
     <message>
         <location line="-300"/>
         <location line="+307"/>
         <source>Printing completed</source>
-        <translation type="unfinished">Drucken beendet</translation>
+        <translation>Drucken beendet</translation>
     </message>
     <message>
         <location line="-305"/>
         <location line="+307"/>
         <source>Printing aborted</source>
-        <translation type="unfinished">Drucken abgebrochen</translation>
+        <translation>Drucken abgebrochen</translation>
     </message>
     <message>
         <location line="-232"/>
         <source>Search wrapped.</source>
-        <translation type="unfinished">Suche beginnt von oben.</translation>
+        <translation>Suche beginnt von oben.</translation>
     </message>
     <message>
         <location line="+17"/>
@@ -1356,7 +1361,7 @@ Alle Dateien (*)</translation>
         <location line="-1204"/>
         <location line="+102"/>
         <source>Cannot find the string &apos;%1&apos;.</source>
-        <translation type="unfinished">Kann Zeichenkette &apos;%1&apos; nicht finden.</translation>
+        <translation>Kann Zeichenkette &apos;%1&apos; nicht finden.</translation>
     </message>
     <message numerus="yes">
         <source>Translated %n entries to &apos;%1&apos;</source>
@@ -1368,59 +1373,59 @@ Alle Dateien (*)</translation>
     <message>
         <location line="-82"/>
         <source>Search And Translate in &apos;%1&apos; - Qt Linguist</source>
-        <translation type="unfinished"></translation>
+        <translation>Suchen und übersetzen &apos;%1&apos; - Qt Linguist</translation>
     </message>
     <message>
         <location line="+34"/>
         <location line="+23"/>
         <location line="+24"/>
         <source>Translate - Qt Linguist</source>
-        <translation type="unfinished"></translation>
+        <translation>Übersetzung - Qt Linguist</translation>
     </message>
     <message numerus="yes">
         <location line="-46"/>
         <source>Translated %n entry(s)</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>Ein Eintrag übersetzt</numerusform>
+            <numerusform>%n Einträge übersetzt</numerusform>
         </translation>
     </message>
     <message>
         <location line="+23"/>
         <source>No more occurrences of &apos;%1&apos;. Start over?</source>
-        <translation type="unfinished"></translation>
+        <translation>Keine weiteren Fundstellen von &apos;%1&apos;. Von vorn beginnen?</translation>
     </message>
     <message>
         <location line="+30"/>
         <source>Create New Phrase Book</source>
-        <translation type="unfinished">Erzeugen eines neuen Wörterbuchs</translation>
+        <translation>Erzeugen eines neuen Wörterbuchs</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Qt phrase books (*.qph)
 All files (*)</source>
-        <translation type="unfinished">Qt Wörterbücher (*.qph)
+        <translation>Qt Wörterbücher (*.qph)
 Alle Dateien (*)</translation>
     </message>
     <message>
         <location line="+11"/>
         <source>Phrase book created.</source>
-        <translation type="unfinished">Wörterbuch erzeugt.</translation>
+        <translation>Wörterbuch erzeugt.</translation>
     </message>
     <message>
         <location line="+17"/>
         <source>Open Phrase Book</source>
-        <translation type="unfinished">Öffne Wörterbuch</translation>
+        <translation>Öffne Wörterbuch</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Qt phrase books (*.qph);;All files (*)</source>
-        <translation type="unfinished">Qt Wörterbücher (*.qph);;Alle Dateien (*)</translation>
+        <translation>Qt Wörterbücher (*.qph);;Alle Dateien (*)</translation>
     </message>
     <message numerus="yes">
         <location line="+7"/>
         <source>%n phrase(s) loaded.</source>
-        <translation type="unfinished">
+        <translation>
             <numerusform>Ein Wörterbucheintrag geladen.</numerusform>
             <numerusform>%n Wörterbucheinträge geladen.</numerusform>
         </translation>
@@ -1430,32 +1435,32 @@ Alle Dateien (*)</translation>
         <location line="+3"/>
         <location line="+7"/>
         <source>Add to phrase book</source>
-        <translation type="unfinished">Hinzufügen zum Wörterbuch</translation>
+        <translation>Hinzufügen zum Wörterbuch</translation>
     </message>
     <message>
         <location line="-9"/>
         <source>No appropriate phrasebook found.</source>
-        <translation type="unfinished"></translation>
+        <translation>Es wurde kein geeignetes Wörterbuch gefunden.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Adding entry to phrasebook %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Eintrag zu Wörterbuch %1 hinzufügen</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Select phrase book to add to</source>
-        <translation type="unfinished">Zu welchem Wörterbuch soll der Eintrag hinzugefügt werden?</translation>
+        <translation>Zu welchem Wörterbuch soll der Eintrag hinzugefügt werden?</translation>
     </message>
     <message>
         <location line="+29"/>
         <source>Unable to launch Qt Assistant (%1)</source>
-        <translation type="unfinished">Kann Qt Assistant nicht starten (%1)</translation>
+        <translation>Kann Qt Assistant nicht starten (%1)</translation>
     </message>
     <message>
         <location line="+17"/>
         <source>Version %1</source>
-        <translation type="unfinished">Version %1</translation>
+        <translation>Version %1</translation>
     </message>
     <message>
         <source> Open Source Edition</source>
@@ -1464,17 +1469,17 @@ Alle Dateien (*)</translation>
     <message>
         <location line="+6"/>
         <source>&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist is a tool for adding translations to Qt applications.&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.&lt;/p&gt;</source>
-        <translation type="unfinished">&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist ist ein Werkzeug zum Übersetzen von Qt Anwendungen.&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.&lt;/p&gt;</translation>
+        <translation>&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist ist ein Werkzeug zum Übersetzen von Qt Anwendungen.&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.&lt;/p&gt;</translation>
     </message>
     <message>
         <location line="+41"/>
         <source>Do you want to save the modified files?</source>
-        <translation type="unfinished"></translation>
+        <translation>Möchten Sie die geänderten Dateien speichern?</translation>
     </message>
     <message>
         <location line="+22"/>
         <source>Do you want to save &apos;%1&apos;?</source>
-        <translation type="unfinished">Wollen Sie &apos;%1&apos; speichern?</translation>
+        <translation>Möchten Sie &apos;%1&apos; speichern?</translation>
     </message>
     <message>
         <location line="+43"/>
@@ -1490,99 +1495,99 @@ Alle Dateien (*)</translation>
         <location line="+267"/>
         <location line="+12"/>
         <source>No untranslated translation units left.</source>
-        <translation type="unfinished"></translation>
+        <translation>Es wurden alle Übersetzungseinheiten abgearbeitet.</translation>
     </message>
     <message>
         <location line="+176"/>
         <source>&amp;Window</source>
-        <translation type="unfinished">&amp;Fenster</translation>
+        <translation>&amp;Fenster</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Minimize</source>
-        <translation type="unfinished">Minimieren</translation>
+        <translation>Minimieren</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Ctrl+M</source>
-        <translation type="unfinished">Ctrl+M</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+12"/>
         <source>Display the manual for %1.</source>
-        <translation type="unfinished">Zeige Handbuch für %1 an.</translation>
+        <translation>Zeige Handbuch für %1 an.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Display information about %1.</source>
-        <translation type="unfinished">Zeige Informationen über %1 an.</translation>
+        <translation>Zeige Informationen über %1 an.</translation>
     </message>
     <message>
         <location line="+70"/>
         <source>&amp;Save &apos;%1&apos;</source>
-        <translation type="unfinished"></translation>
+        <translation>&apos;%1&apos; &amp;Speichern</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Save &apos;%1&apos; &amp;As...</source>
-        <translation type="unfinished"></translation>
+        <translation>Speichere &apos;%1&apos; &amp;unter...</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Release &apos;%1&apos;</source>
-        <translation type="unfinished"></translation>
+        <translation>&apos;%1&apos; freigeben</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Release &apos;%1&apos; As...</source>
-        <translation type="unfinished"></translation>
+        <translation>Gebe &apos;%1&apos;frei unter ...</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&amp;Close &apos;%1&apos;</source>
-        <translation type="unfinished"></translation>
+        <translation>&apos;%1&apos; &amp;Schließen</translation>
     </message>
     <message>
         <location line="+6"/>
         <location line="+13"/>
         <source>&amp;Close</source>
-        <translation type="unfinished">&amp;Schließen</translation>
+        <translation>&amp;Schließen</translation>
     </message>
     <message>
         <location line="-10"/>
         <source>Save All</source>
-        <translation type="unfinished"></translation>
+        <translation>Alles speichern</translation>
     </message>
     <message>
         <location line="+1"/>
         <location filename="../tools/linguist/linguist/mainwindow.ui"/>
         <source>&amp;Release All</source>
-        <translation type="unfinished"></translation>
+        <translation>Alles f&amp;reigeben</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Close All</source>
-        <translation type="unfinished">Alle schließen</translation>
+        <translation>Alle schließen</translation>
     </message>
     <message>
         <location line="+23"/>
         <source>Translation File &amp;Settings for &apos;%1&apos;...</source>
-        <translation type="unfinished"></translation>
+        <translation>Einstellungen der Übersetzungs&amp;datei für &apos;%1&apos;...</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&amp;Batch Translation of &apos;%1&apos;...</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Automatische Übersetzung von &apos;%1&apos;...</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Search And &amp;Translate in &apos;%1&apos;...</source>
-        <translation type="unfinished"></translation>
+        <translation>Suchen und &amp;Übersetzen in &apos;%1&apos;...</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Search And &amp;Translate...</source>
-        <translation type="unfinished"></translation>
+        <translation>Suchen und &amp;Übersetzen...</translation>
     </message>
     <message>
         <location line="+51"/>
@@ -1617,37 +1622,37 @@ Alle Dateien (*)</translation>
     <message>
         <location line="+84"/>
         <source>Cannot read from phrase book &apos;%1&apos;.</source>
-        <translation type="unfinished">Kann Wörterbuch &apos;%1&apos; nicht lesen.</translation>
+        <translation>Kann Wörterbuch &apos;%1&apos; nicht lesen.</translation>
     </message>
     <message>
         <location line="+15"/>
         <source>Close this phrase book.</source>
-        <translation type="unfinished">Schließe dieses Wörterbuch.</translation>
+        <translation>Schließe dieses Wörterbuch.</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Enables you to add, modify, or delete entries in this phrase book.</source>
-        <translation type="unfinished"></translation>
+        <translation>Erlaubt das Hinzufügen, Ändern und Entfernen von Einträgen aus dem Wörterbuch.</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>Print the entries in this phrase book.</source>
-        <translation type="unfinished"></translation>
+        <translation>Drucke die Einträge des Wörterbuchs.</translation>
     </message>
     <message>
         <location line="+16"/>
         <source>Cannot create phrase book &apos;%1&apos;.</source>
-        <translation type="unfinished">Kann Wörterbuch &apos;%1&apos; nicht erzeugen.</translation>
+        <translation>Kann Wörterbuch &apos;%1&apos; nicht erzeugen.</translation>
     </message>
     <message>
         <location line="+10"/>
         <source>Do you want to save phrase book &apos;%1&apos;?</source>
-        <translation type="unfinished"></translation>
+        <translation>Möchten Sie das Wörterbuch &apos;%1&apos; speichern?</translation>
     </message>
     <message>
         <location line="+314"/>
         <source>All</source>
-        <translation type="unfinished"></translation>
+        <translation>Alle</translation>
     </message>
     <message>
         <location filename="../tools/linguist/linguist/mainwindow.ui"/>
@@ -1704,27 +1709,27 @@ Alle Dateien (*)</translation>
     <message>
         <location filename="../tools/linguist/linguist/messageeditor.cpp" line="+72"/>
         <source>German</source>
-        <translation type="unfinished">Deutsch</translation>
+        <translation>Deutsch</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Japanese</source>
-        <translation type="unfinished">Japanisch</translation>
+        <translation>Japanisch</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>French</source>
-        <translation type="unfinished">Französisch</translation>
+        <translation>Französisch</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Polish</source>
-        <translation type="unfinished">Polnisch</translation>
+        <translation>Polnisch</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Chinese</source>
-        <translation type="unfinished">Chinesisch</translation>
+        <translation>Chinesisch</translation>
     </message>
     <message>
         <location line="+50"/>
@@ -1732,59 +1737,59 @@ Alle Dateien (*)</translation>
         <translation>Dieser Bereich erlaubt die Darstellung und Änderung der Übersetzung eines Textes.</translation>
     </message>
     <message>
-        <location line="+25"/>
+        <location line="+18"/>
         <source>Source text</source>
-        <translation type="unfinished">Ursprungstext</translation>
+        <translation>Ursprungstext</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>This area shows the source text.</source>
-        <translation type="unfinished">Dieser Bereich zeigt den Ursprungstext.</translation>
+        <translation>Dieser Bereich zeigt den Ursprungstext.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Source text (Plural)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ursprungstext (Plural)</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>This area shows the plural form of the source text.</source>
-        <translation type="unfinished"></translation>
+        <translation>Dieser Bereich zeigt die Pluralform des Ursprungstexts.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Developer comments</source>
-        <translation type="unfinished"></translation>
+        <translation>Hinweise des Entwicklers</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>This area shows a comment that may guide you, and the context in which the text occurs.</source>
-        <translation type="unfinished">Dieser Bereich zeigt eventuelle Kommentare und den Kontext, in dem der Text auftritt.</translation>
+        <translation>Dieser Bereich zeigt eventuelle Kommentare und den Kontext, in dem der Text auftritt.</translation>
     </message>
     <message>
         <location line="+59"/>
         <source>Here you can enter comments for your own use. They have no effect on the translated applications.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hier können Sie Hinweise für den eigenen Gebrauch eintragen. Diese haben keinen Einflusse auf die Übersetzung.</translation>
     </message>
     <message>
         <location line="+205"/>
         <source>%1 translation (%2)</source>
-        <translation type="unfinished">Übersetzung %1 (%2)</translation>
+        <translation>Übersetzung %1 (%2)</translation>
     </message>
     <message>
         <location line="+19"/>
         <source>This is where you can enter or modify the translation of the above source text.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hier können Sie die Übersetzung des Ursprungstextes eingeben bzw. ändern.</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>%1 translation</source>
-        <translation type="unfinished">Übersetzung %1</translation>
+        <translation>Übersetzung %1</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>%1 translator comments</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 Hinweise des Übersetzers</translation>
     </message>
     <message>
         <location line="+138"/>
@@ -1839,22 +1844,22 @@ Zeile: %2</translation>
     <message>
         <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+832"/>
         <source>Completion status for %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Bearbeitungsstand von %1</translation>
     </message>
     <message>
         <location line="+15"/>
         <source>&lt;file header&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;Dateikopf&gt;</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>&lt;context comment&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;Kontexthinweis&gt;</translation>
     </message>
     <message>
         <location line="+71"/>
         <source>&lt;unnamed context&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;unbenannter Kontext&gt;</translation>
     </message>
 </context>
 <context>
@@ -1867,7 +1872,7 @@ Zeile: %2</translation>
 <context>
     <name>MsgEdit</name>
     <message>
-        <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-579"/>
+        <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-572"/>
         <source></source>
         <comment>This is the right panel of the main window.</comment>
         <translation></translation>
@@ -1912,7 +1917,7 @@ Zeile: %2</translation>
     <message>
         <location/>
         <source>This window allows you to add, modify, or delete entries in a phrase book.</source>
-        <translation type="unfinished"></translation>
+        <translation>Dieses Fenster erlaubt das Hinzufügen, Ändern und Entfernen von Einträgen aus dem Wörterbuch.</translation>
     </message>
     <message>
         <location/>
@@ -1952,22 +1957,22 @@ Zeile: %2</translation>
     <message>
         <location/>
         <source>&amp;New Entry</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Neuer Eintrag</translation>
     </message>
     <message>
         <location/>
         <source>Click here to remove the entry from the phrase book.</source>
-        <translation type="unfinished"></translation>
+        <translation>Entferne den Eintrag aus dem Wörterbuch.</translation>
     </message>
     <message>
         <location/>
         <source>&amp;Remove Entry</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Entferne Eintrag</translation>
     </message>
     <message>
         <location/>
         <source>Settin&amp;gs...</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Einstellungen...</translation>
     </message>
     <message>
         <source>&amp;New Phrase</source>
@@ -2053,12 +2058,12 @@ Zeile: %2</translation>
     <message>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1279"/>
         <source>Translation files (%1);;</source>
-        <translation type="unfinished"></translation>
+        <translation>Übersetzungsdateien (%1);;</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>All files (*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Alle Dateien (*)</translation>
     </message>
     <message>
         <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1118"/>
@@ -2074,57 +2079,57 @@ Zeile: %2</translation>
     <message>
         <location filename="../tools/linguist/shared/cpp.cpp" line="+1072"/>
         <source>C++ source files</source>
-        <translation type="unfinished"></translation>
+        <translation>C++-Quelltextdateien&apos;</translation>
     </message>
     <message>
         <location filename="../tools/linguist/shared/java.cpp" line="+646"/>
         <source>Java source files</source>
-        <translation type="unfinished"></translation>
+        <translation>Java-Quelltextdateien</translation>
     </message>
     <message>
         <location filename="../tools/linguist/shared/po.cpp" line="+651"/>
         <source>GNU Gettext localization files</source>
-        <translation type="unfinished"></translation>
+        <translation>GNU-Gettext Übersetzungsdateien</translation>
     </message>
     <message>
         <location filename="../tools/linguist/shared/qscript.cpp" line="+2399"/>
         <source>Qt Script source files</source>
-        <translation type="unfinished"></translation>
+        <translation>Qt-Skript-Quelltextdateien</translation>
     </message>
     <message>
         <location filename="../tools/linguist/shared/ts.cpp" line="+752"/>
         <source>Qt translation sources (format 1.1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Qt-Übersetzungsdateien (Formatversion 1.1)</translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Qt translation sources (format 2.0)</source>
-        <translation type="unfinished"></translation>
+        <translation>Qt-Übersetzungsdateien (Formatversion 2.0)</translation>
     </message>
     <message>
         <location line="+9"/>
         <source>Qt translation sources (latest format)</source>
-        <translation type="unfinished"></translation>
+        <translation>Qt Übersetzungsdateien (aktuelles Format)</translation>
     </message>
     <message>
         <location filename="../tools/linguist/shared/ui.cpp" line="+213"/>
         <source>Qt Designer form files</source>
-        <translation type="unfinished"></translation>
+        <translation>Qt Designer Formulardateien</translation>
     </message>
     <message>
         <location line="+9"/>
         <source>Qt Jambi form files</source>
-        <translation type="unfinished"></translation>
+        <translation>Qt Jambi Formulardateien</translation>
     </message>
     <message>
         <location filename="../tools/linguist/shared/xliff.cpp" line="+817"/>
         <source>XLIFF localization files</source>
-        <translation type="unfinished"></translation>
+        <translation>XLIFF Übersetzungsdateien</translation>
     </message>
     <message>
         <location filename="../tools/linguist/shared/qph.cpp" line="+192"/>
         <source>Qt Linguist &apos;Phrase Book&apos;</source>
-        <translation type="unfinished"></translation>
+        <translation>Qt Linguist-Wörterbuch</translation>
     </message>
 </context>
 <context>
@@ -2223,7 +2228,7 @@ Zeile: %2</translation>
     <message>
         <location/>
         <source>Close</source>
-        <translation type="unfinished">Schließen</translation>
+        <translation>Schließen</translation>
     </message>
 </context>
 <context>
@@ -2727,27 +2732,27 @@ Alle Dateien (*)</translation>
         <location line="+11"/>
         <location line="+8"/>
         <source>Settings for &apos;%1&apos; - Qt Linguist</source>
-        <translation type="unfinished"></translation>
+        <translation>Einstellungen für &apos;%1&apos; - Qt Linguist</translation>
     </message>
     <message>
         <location filename="../tools/linguist/linguist/translationsettings.ui"/>
         <source>Source language</source>
-        <translation type="unfinished"></translation>
+        <translation>Ursprungssprache</translation>
     </message>
     <message>
         <location/>
         <source>Language</source>
-        <translation type="unfinished">Sprache</translation>
+        <translation>Sprache</translation>
     </message>
     <message>
         <location/>
         <source>Country/Region</source>
-        <translation type="unfinished">Land/Region</translation>
+        <translation>Land/Region</translation>
     </message>
     <message>
         <location/>
         <source>Target language</source>
-        <translation type="unfinished">Zielsprache</translation>
+        <translation>Zielsprache</translation>
     </message>
 </context>
 <context>
diff --git a/translations/qt_de.qm b/translations/qt_de.qm
index 5d68bf7..9ea09a7 100644
Binary files a/translations/qt_de.qm and b/translations/qt_de.qm differ
diff --git a/translations/qt_de.ts b/translations/qt_de.ts
index 70cf6f3..33f9ea8 100644
--- a/translations/qt_de.ts
+++ b/translations/qt_de.ts
@@ -22,7 +22,7 @@
 <context>
     <name>CloseButton</name>
     <message>
-        <location filename="../src/gui/widgets/qtabbar.cpp" line="+2251"/>
+        <location filename="../src/gui/widgets/qtabbar.cpp" line="+2252"/>
         <source>Close Tab</source>
         <translation>Schließen</translation>
     </message>
@@ -186,7 +186,7 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa
 <context>
     <name>Q3FileDialog</name>
     <message>
-        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+864"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+865"/>
         <source>Copy or Move a File</source>
         <translation>Datei kopieren oder verschieben</translation>
     </message>
@@ -203,7 +203,7 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa
     </message>
     <message>
         <location line="-22"/>
-        <location line="+1575"/>
+        <location line="+1579"/>
         <source>Cancel</source>
         <translation>Abbrechen</translation>
     </message>
@@ -886,7 +886,7 @@ nach
 <context>
     <name>QApplication</name>
     <message>
-        <location filename="../src/gui/kernel/qapplication.cpp" line="+2248"/>
+        <location filename="../src/gui/kernel/qapplication.cpp" line="+2247"/>
         <source>QT_LAYOUT_DIRECTION</source>
         <comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
         <translation>LTR</translation>
@@ -1170,7 +1170,7 @@ nach
 <context>
     <name>QDialogButtonBox</name>
     <message>
-        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1866"/>
+        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1869"/>
         <location line="+464"/>
         <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+561"/>
         <source>OK</source>
@@ -1392,7 +1392,7 @@ nach
     <message>
         <location line="-108"/>
         <source>Cannot remove source file</source>
-        <translation type="unfinished"></translation>
+        <translation>Die Quelldatei kann nicht entfernt werden</translation>
     </message>
     <message>
         <location line="+120"/>
@@ -1418,8 +1418,8 @@ nach
 <context>
     <name>QFileDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+515"/>
-        <location line="+444"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+514"/>
+        <location line="+447"/>
         <source>All Files (*)</source>
         <translation>Alle Dateien (*)</translation>
     </message>
@@ -1448,7 +1448,7 @@ nach
         <translation>Datei</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-461"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-464"/>
         <source>Open</source>
         <translation>Öffnen</translation>
     </message>
@@ -1458,26 +1458,26 @@ nach
         <translation>Speichern unter</translation>
     </message>
     <message>
-        <location line="+678"/>
+        <location line="+681"/>
         <location line="+50"/>
-        <location line="+1471"/>
+        <location line="+1467"/>
         <location line="+75"/>
         <source>&amp;Open</source>
         <translation>&amp;Öffnen</translation>
     </message>
     <message>
-        <location line="-1596"/>
+        <location line="-1592"/>
         <location line="+50"/>
         <source>&amp;Save</source>
         <translation>S&amp;peichern</translation>
     </message>
     <message>
-        <location line="+1822"/>
+        <location line="+1818"/>
         <source>Recent Places</source>
         <translation>Zuletzt besucht</translation>
     </message>
     <message>
-        <location line="-2521"/>
+        <location line="-2520"/>
         <source>&amp;Rename</source>
         <translation>&amp;Umbenennen</translation>
     </message>
@@ -1492,17 +1492,17 @@ nach
         <translation>&amp;Versteckte Dateien anzeigen</translation>
     </message>
     <message>
-        <location line="+1964"/>
+        <location line="+1963"/>
         <source>New Folder</source>
         <translation>Neues Verzeichnis</translation>
     </message>
     <message>
-        <location line="-1999"/>
+        <location line="-1998"/>
         <source>Find Directory</source>
         <translation>Verzeichnis suchen</translation>
     </message>
     <message>
-        <location line="+685"/>
+        <location line="+688"/>
         <source>Directories</source>
         <translation>Verzeichnisse</translation>
     </message>
@@ -1512,13 +1512,13 @@ nach
         <translation>Alle Dateien (*.*)</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-644"/>
-        <location line="+648"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-647"/>
+        <location line="+651"/>
         <source>Directory:</source>
         <translation>Verzeichnis:</translation>
     </message>
     <message>
-        <location line="+828"/>
+        <location line="+825"/>
         <source>%1 already exists.
 Do you want to replace it?</source>
         <translation>Die Datei %1 existiert bereits.
@@ -1552,7 +1552,7 @@ Stellen Sie sicher, dass der Dateiname richtig ist.</translation>
     </message>
     <message>
         <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-54"/>
-        <location line="+862"/>
+        <location line="+861"/>
         <source>%1
 Directory not found.
 Please verify the correct directory name was given.</source>
@@ -1588,7 +1588,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
         <translation>Unbekannt</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2118"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2117"/>
         <source>Show </source>
         <translation>Anzeigen </translation>
     </message>
@@ -1604,19 +1604,19 @@ Möchten sie die Datei trotzdem löschen?</translation>
         <translation>&amp;Neues Verzeichnis</translation>
     </message>
     <message>
-        <location line="+656"/>
+        <location line="+659"/>
         <location line="+38"/>
         <source>&amp;Choose</source>
         <translation>&amp;Auswählen</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qsidebar.cpp" line="+418"/>
+        <location filename="../src/gui/dialogs/qsidebar.cpp" line="+437"/>
         <source>Remove</source>
         <translation>Löschen</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-687"/>
-        <location line="+652"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-690"/>
+        <location line="+655"/>
         <source>File &amp;name:</source>
         <translation>Datei&amp;name:</translation>
     </message>
@@ -1698,7 +1698,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
         <translation>Änderungsdatum</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+234"/>
+        <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+242"/>
         <source>My Computer</source>
         <translation>Mein Computer</translation>
     </message>
@@ -2161,7 +2161,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
 <context>
     <name>QHttp</name>
     <message>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+876"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+901"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="+1836"/>
         <source>Connection refused</source>
         <translation>Verbindung verweigert</translation>
@@ -2253,7 +2253,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
     <message>
         <location line="+28"/>
         <source>Unknown authentication method</source>
-        <translation type="unfinished"></translation>
+        <translation>Unbekannte Authentifizierungsmethode</translation>
     </message>
     <message>
         <location line="+97"/>
@@ -2365,7 +2365,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
 <context>
     <name>QIBaseDriver</name>
     <message>
-        <location filename="../src/sql/drivers/ibase/qsql_ibase.cpp" line="+1428"/>
+        <location filename="../src/sql/drivers/ibase/qsql_ibase.cpp" line="+1435"/>
         <source>Error opening database</source>
         <translation>Die Datenbankverbindung konnte nicht geöffnet werden</translation>
     </message>
@@ -2643,7 +2643,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
     <name>QLocalServer</name>
     <message>
         <location filename="../src/network/socket/qlocalserver.cpp" line="+226"/>
-        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+231"/>
+        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+233"/>
         <source>%1: Name error</source>
         <translation>%1: Fehlerhafter Name</translation>
     </message>
@@ -2738,7 +2738,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
 <context>
     <name>QMYSQLDriver</name>
     <message>
-        <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1231"/>
+        <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1252"/>
         <source>Unable to open database &apos;</source>
         <translation>Die Datenbankverbindung konnte nicht geöffnet werden &apos;</translation>
     </message>
@@ -2766,12 +2766,12 @@ Möchten sie die Datei trotzdem löschen?</translation>
 <context>
     <name>QMYSQLResult</name>
     <message>
-        <location line="-922"/>
+        <location line="-935"/>
         <source>Unable to fetch data</source>
         <translation>Es konnten keine Daten abgeholt werden</translation>
     </message>
     <message>
-        <location line="+176"/>
+        <location line="+183"/>
         <source>Unable to execute query</source>
         <translation>Die Abfrage konnte nicht ausgeführt werden</translation>
     </message>
@@ -2781,13 +2781,13 @@ Möchten sie die Datei trotzdem löschen?</translation>
         <translation>Das Ergebnis konnte nicht gespeichert werden</translation>
     </message>
     <message>
-        <location line="+190"/>
+        <location line="+194"/>
         <location line="+8"/>
         <source>Unable to prepare statement</source>
         <translation>Der Befehl konnte nicht initialisiert werden</translation>
     </message>
     <message>
-        <location line="+34"/>
+        <location line="+36"/>
         <source>Unable to reset statement</source>
         <translation>Der Befehl konnte nicht zurückgesetzt werden</translation>
     </message>
@@ -2813,7 +2813,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
         <translation>Die Ergebnisse des Befehls konnten nicht gespeichert werden</translation>
     </message>
     <message>
-        <location line="-253"/>
+        <location line="-257"/>
         <source>Unable to execute next query</source>
         <translation>Die folgende Abfrage kann nicht ausgeführt werden</translation>
     </message>
@@ -2971,7 +2971,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
         <translation type="obsolete">&lt;p&gt;Dieses Programm verwendet Qt-Version %1.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location line="-1097"/>
+        <location line="-1100"/>
         <source>Show Details...</source>
         <translation>Details einblenden...</translation>
     </message>
@@ -2981,7 +2981,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
         <translation>Details ausblenden...</translation>
     </message>
     <message>
-        <location line="+1570"/>
+        <location line="+1573"/>
         <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://www.qtsoftware.com/products/licensing&quot;&gt;www.qtsoftware.com/products/licensing&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt is a Nokia product. See &lt;a href=&quot;http://www.qtsoftware.com/qt/&quot;&gt;www.qtsoftware.com/qt&lt;/a&gt; for more information.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3310,7 +3310,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
 <context>
     <name>QODBCDriver</name>
     <message>
-        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1785"/>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1781"/>
         <source>Unable to connect</source>
         <translation>Es kann keine Verbindung aufgebaut werden</translation>
     </message>
@@ -3444,7 +3444,7 @@ Möchten sie die Datei trotzdem löschen?</translation>
 <context>
     <name>QPPDOptionsModel</name>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1195"/>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1197"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
@@ -4009,7 +4009,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
         <translation>Benutzerdefiniert</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-522"/>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-524"/>
         <location line="+68"/>
         <source>&amp;Options &gt;&gt;</source>
         <translation>&amp;Einstellungen &gt;&gt;</translation>
@@ -4030,7 +4030,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
         <translation>Druck in Postscript-Datei</translation>
     </message>
     <message>
-        <location line="+45"/>
+        <location line="+47"/>
         <source>Local file</source>
         <translation>Lokale Datei</translation>
     </message>
@@ -4040,7 +4040,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
         <translation>Schreiben der Datei %1</translation>
     </message>
     <message>
-        <location line="-367"/>
+        <location line="-369"/>
         <source>&amp;Print</source>
         <translation>&amp;Drucken</translation>
     </message>
@@ -4373,7 +4373,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
     <message>
         <location line="+912"/>
         <source>No program defined</source>
-        <translation type="unfinished"></translation>
+        <translation>Es wurde kein Programm angegeben</translation>
     </message>
     <message>
         <location filename="../src/corelib/io/qprocess_win.cpp" line="-341"/>
@@ -5985,7 +5985,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
         <translation>%1 (%2x%3 Pixel)</translation>
     </message>
     <message>
-        <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+382"/>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+384"/>
         <source>Bad HTTP request</source>
         <translation>Ungültige HTTP-Anforderung</translation>
     </message>
@@ -6077,15 +6077,15 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
     <message>
         <location line="+15"/>
         <source>JavaScript Confirm - %1</source>
-        <translation type="unfinished">JavaScript-Bestätigung - %1</translation>
+        <translation>JavaScript-Bestätigung - %1</translation>
     </message>
     <message>
         <location line="+17"/>
         <source>JavaScript Prompt - %1</source>
-        <translation type="unfinished">JavaScript-Eingabeaufforderung - %1</translation>
+        <translation>JavaScript-Eingabeaufforderung - %1</translation>
     </message>
     <message>
-        <location line="+333"/>
+        <location line="+340"/>
         <source>Move the cursor to the next character</source>
         <translation>Positionsmarke auf folgendes Zeichen setzen</translation>
     </message>
@@ -6147,7 +6147,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
     <message>
         <location line="+3"/>
         <source>Select all</source>
-        <translation type="unfinished"></translation>
+        <translation>Alles auswählen</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -6222,12 +6222,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
     <message>
         <location line="+33"/>
         <source>Insert a new paragraph</source>
-        <translation type="unfinished"></translation>
+        <translation>Neuen Abschnitt einfügen</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Insert a new line</source>
-        <translation type="unfinished"></translation>
+        <translation>Neue Zeile einfügen</translation>
     </message>
 </context>
 <context>
@@ -6241,7 +6241,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
 <context>
     <name>QWidget</name>
     <message>
-        <location filename="../src/gui/kernel/qwidget.cpp" line="+5326"/>
+        <location filename="../src/gui/kernel/qwidget.cpp" line="+5340"/>
         <source>*</source>
         <translation>*</translation>
     </message>
@@ -6787,7 +6787,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
         <translation>%1 ist kein gültiger regulärer Ausdruck: %2</translation>
     </message>
     <message>
-        <location filename="../src/xmlpatterns/functions/qsequencefns.cpp" line="+347"/>
+        <location filename="../src/xmlpatterns/functions/qsequencefns.cpp" line="+346"/>
         <source>It will not be possible to retrieve %1.</source>
         <translation>%1 kann nicht bestimmt werden.</translation>
     </message>
@@ -7508,7 +7508,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
     <message>
         <location filename="../src/xmlpatterns/expr/qcomputednamespaceconstructor.cpp" line="+69"/>
         <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source>
-        <translation type="unfinished"></translation>
+        <translation>Im Konstruktor eines Namensraums darf der Wert des Namensraumes keine leere Zeichenkette sein.</translation>
     </message>
     <message>
         <location line="+11"/>
diff --git a/translations/qt_help_de.qm b/translations/qt_help_de.qm
index e28a97e..e3d8d87 100644
Binary files a/translations/qt_help_de.qm and b/translations/qt_help_de.qm differ
diff --git a/translations/qt_help_de.ts b/translations/qt_help_de.ts
index ed8a3c3..8f67ec3 100644
--- a/translations/qt_help_de.ts
+++ b/translations/qt_help_de.ts
@@ -39,7 +39,7 @@
     <message>
         <location line="+22"/>
         <source>Cannot load sqlite database driver!</source>
-        <translation type="unfinished"></translation>
+        <translation>Der Datenbanktreiber für SQLite kann nicht geladen werden!</translation>
     </message>
     <message>
         <location line="+11"/>
-- 
cgit v0.12


From 44d0dbcc350ddd2ab3459aea78628409a1aef0d5 Mon Sep 17 00:00:00 2001
From: Tom Cooksey <thomas.cooksey@nokia.com>
Date: Mon, 18 May 2009 10:48:11 +0200
Subject: Fix QSoundServer on Big-Endian machines.

Task-number: 253619
Reviewed-by: Paul
---
 src/gui/embedded/qsoundqss_qws.cpp | 40 +++++++++++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 7 deletions(-)

diff --git a/src/gui/embedded/qsoundqss_qws.cpp b/src/gui/embedded/qsoundqss_qws.cpp
index c72ea91..283bbd3 100644
--- a/src/gui/embedded/qsoundqss_qws.cpp
+++ b/src/gui/embedded/qsoundqss_qws.cpp
@@ -52,6 +52,7 @@
 #include <qalgorithms.h>
 #include <qtimer.h>
 #include <qpointer.h>
+#include <qendian.h>
 
 #include <unistd.h>
 #include <stdlib.h>
@@ -335,7 +336,13 @@ public:
     virtual int readySamples(int) = 0;
 
     int getSample(int off, int bps) {
-        return (bps == 1) ? (data[out+off] - 128) * 128 : ((short*)data)[(out/2)+off];
+
+        //
+        //  16-bit audio data is converted to native endian so that it can be scaled
+        //  Yes, this is ugly on a BigEndian machine
+        //  Perhaps it shouldn't be scaled at all
+        //
+        return (bps == 1) ? (data[out+off] - 128) * 128 : qToLittleEndian(((short*)data)[(out/2)+off]);
     }
 
     int add(int* mixl, int* mixr, int count)
@@ -547,7 +554,7 @@ public:
 		    wavedata_remaining = 0;
 		    mFinishedRead = true;
 		} else if ( qstrncmp(chunk.id,"data",4) == 0 ) {
-		    wavedata_remaining = chunk.size;
+		    wavedata_remaining = qToLittleEndian( chunk.size );
 
 		    //out = max = sound_buffer_size;
 
@@ -572,10 +579,23 @@ public:
 			//qDebug("couldn't ready chunkdata");
 			mFinishedRead = true;
 		    }
+
 #define WAVE_FORMAT_PCM 1
-		    else if ( chunkdata.formatTag != WAVE_FORMAT_PCM ) {
-			//qDebug("WAV file: UNSUPPORTED FORMAT %d",chunkdata.formatTag);
-			mFinishedRead = true;
+		    else
+            {
+                /*
+                **  Endian Fix the chuck data
+                */
+                chunkdata.formatTag         = qToLittleEndian( chunkdata.formatTag );
+                chunkdata.channels          = qToLittleEndian( chunkdata.channels );
+                chunkdata.samplesPerSec     = qToLittleEndian( chunkdata.samplesPerSec );
+                chunkdata.avgBytesPerSec    = qToLittleEndian( chunkdata.avgBytesPerSec );
+                chunkdata.blockAlign        = qToLittleEndian( chunkdata.blockAlign );
+                chunkdata.wBitsPerSample    = qToLittleEndian( chunkdata.wBitsPerSample );
+                if ( chunkdata.formatTag != WAVE_FORMAT_PCM ) {
+                    qWarning("WAV file: UNSUPPORTED FORMAT %d",chunkdata.formatTag);
+                    mFinishedRead = true;
+                }
 		    }
 		} else {
 		    // ignored chunk
@@ -1166,9 +1186,15 @@ bool QWSSoundServerPrivate::openDevice()
             if (ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &v))
                 qWarning("Could not set fragments to %08x",v);
 #ifdef QT_QWS_SOUND_16BIT
-            v=AFMT_S16_LE; if (ioctl(fd, SNDCTL_DSP_SETFMT, &v))
+            //
+            //  Use native endian
+            //  Since we have manipulated the data volume the data
+            //  is now in native format, even though its stored
+            //  as little endian in the WAV file
+            //
+            v=AFMT_S16_NE; if (ioctl(fd, SNDCTL_DSP_SETFMT, &v))
                 qWarning("Could not set format %d",v);
-            if (AFMT_S16_LE != v)
+            if (AFMT_S16_NE != v)
                 qDebug("Want format %d got %d", AFMT_S16_LE, v);
 #else
             v=AFMT_U8; if (ioctl(fd, SNDCTL_DSP_SETFMT, &v))
-- 
cgit v0.12


From 7133b932ac2af6e5a09323f09ee8024d0042bce3 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Mon, 18 May 2009 11:00:10 +0200
Subject: Made it possible to set string properties using
 QDesignerFormWindowCursor::setProperty.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Ensure the text does not get clobbered by the subproperty handling.

Reviewed-by: Kai Köhne <kai.koehne@nokia.com>
Task-number: 253278
---
 tools/designer/src/lib/shared/qdesigner_propertycommand.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tools/designer/src/lib/shared/qdesigner_propertycommand.cpp b/tools/designer/src/lib/shared/qdesigner_propertycommand.cpp
index ff3b50b..94e8044 100644
--- a/tools/designer/src/lib/shared/qdesigner_propertycommand.cpp
+++ b/tools/designer/src/lib/shared/qdesigner_propertycommand.cpp
@@ -316,6 +316,10 @@ Qt::Alignment variantToAlignment(const QVariant & q)
 // find changed subproperties of a variant
 unsigned compareSubProperties(const QVariant & q1, const QVariant & q2, qdesigner_internal::SpecialProperty specialProperty)
 {
+    // Do not clobber new value in the comparison function in
+    // case someone sets a QString on a PropertySheetStringValue.
+    if (q1.type() != q2.type())
+        return SubPropertyAll;
     switch (q1.type()) {
     case QVariant::Rect:
         return compareSubProperties(q1.toRect(), q2.toRect());
-- 
cgit v0.12


From 76504e5e5ee51665ddd37d36e220c9266d84aa53 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Mon, 18 May 2009 11:06:06 +0200
Subject: Fixed a bug caused by forms with a sizepolicy of 'Fixed' on the main
 container.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Restore 4.4 behaviour by using a QStackedLayout as the layout containing
the actual form (as was in 4.4). The difference in behaviour was caused
by insertion of an additional widget with a QVBoxLayout which is supposed
to ease setting of inheritable properties (style, etc).

Reviewed-by: Kai Köhne <kai.koehne@nokia.com>
Task-number: 253236
---
 tools/designer/src/components/formeditor/formwindow_widgetstack.cpp | 6 +++++-
 tools/designer/src/components/formeditor/formwindow_widgetstack.h   | 3 +--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/tools/designer/src/components/formeditor/formwindow_widgetstack.cpp b/tools/designer/src/components/formeditor/formwindow_widgetstack.cpp
index 7270628..58127b0 100644
--- a/tools/designer/src/components/formeditor/formwindow_widgetstack.cpp
+++ b/tools/designer/src/components/formeditor/formwindow_widgetstack.cpp
@@ -57,16 +57,20 @@ using namespace qdesigner_internal;
 FormWindowWidgetStack::FormWindowWidgetStack(QObject *parent) :
     QObject(parent),
     m_formContainer(new QWidget),
-    m_formContainerLayout(new QVBoxLayout),
+    m_formContainerLayout(new QStackedLayout),
     m_layout(new QStackedLayout)
 {
     m_layout->setMargin(0);
     m_layout->setSpacing(0);
     m_layout->setStackingMode(QStackedLayout::StackAll);
 
+    // We choose a QStackedLayout as immediate layout for
+    // the form windows as it ignores the sizePolicy of
+    // its child (for example, Fixed would cause undesired side effects).
     m_formContainerLayout->setMargin(0);
     m_formContainer->setObjectName(QLatin1String("formContainer"));
     m_formContainer->setLayout(m_formContainerLayout);
+    m_formContainerLayout->setStackingMode(QStackedLayout::StackAll);
     // System settings might have different background colors, autofill them
     // (affects for example mainwindow status bars)
     m_formContainer->setAutoFillBackground(true);
diff --git a/tools/designer/src/components/formeditor/formwindow_widgetstack.h b/tools/designer/src/components/formeditor/formwindow_widgetstack.h
index 92323c5..f21c4f0 100644
--- a/tools/designer/src/components/formeditor/formwindow_widgetstack.h
+++ b/tools/designer/src/components/formeditor/formwindow_widgetstack.h
@@ -51,7 +51,6 @@ QT_BEGIN_NAMESPACE
 class QDesignerFormWindowToolInterface;
 
 class QStackedLayout;
-class QVBoxLayout;
 class QWidget;
 
 namespace qdesigner_internal {
@@ -92,7 +91,7 @@ protected:
 private:
     QList<QDesignerFormWindowToolInterface*> m_tools;
     QWidget *m_formContainer;
-    QVBoxLayout *m_formContainerLayout;
+    QStackedLayout *m_formContainerLayout;
     QStackedLayout *m_layout;
 };
 
-- 
cgit v0.12


From cfcf72970cd58282aff9aac76f421915d287dc09 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Mon, 18 May 2009 11:27:13 +0200
Subject: Wrote Designer/uic changelog for 4.5.2.

---
 dist/changes-4.5.2 | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/dist/changes-4.5.2 b/dist/changes-4.5.2
index a772bf7..3180b7c 100644
--- a/dist/changes-4.5.2
+++ b/dist/changes-4.5.2
@@ -78,7 +78,17 @@ Qt for Windows CE
 
 
 - Designer
-
+   * [248769] Fixed a bug affecting the display of keyboard shortcuts in
+     the detailed view of the action editor.
+   * [251092] Fixed a bug preventing entering local file names for QUrl-type
+     properties on Windows.
+   * [251691] Fixed dynamic re-translation of table headers.
+   * [252251] Improved readability of the property editor when using the
+     KDE Obsidian Coast theme.
+   * [253236] Fixed a regression bug triggered by forms with a size policy
+     of 'Fixed' on the main cointainer.
+   * [253278] Made it possible to set QString-type properties using
+     QDesignerFormWindowCursor::setProperty().
 
 - Linguist
   - Linguist GUI
@@ -95,7 +105,8 @@ Qt for Windows CE
 
 
 - uic
-
+  * [252333] Fixed a regression crash triggered by using icons with
+    different pixmaps for QIcon states.
 
 - uic3
 
-- 
cgit v0.12


From 7008bfe80e0466ed2978b39e7e698bbd52fb690f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= <trond@trolltech.com>
Date: Mon, 18 May 2009 13:05:14 +0200
Subject: Fixed the SVG parser to handle CSS properties with multiple values.

CSS properties with more than 1 value was ignored. E.g. the
'stroke-dasharray' attribute is specified by a comma separates list of
numbers. This was previously ignored because the CSS parser split it
into a value array.

Task-number: 253614
Reviewed-by: Kim
---
 src/svg/qsvghandler.cpp | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp
index 433a3ad..6a897e8 100644
--- a/src/svg/qsvghandler.cpp
+++ b/src/svg/qsvghandler.cpp
@@ -1673,10 +1673,19 @@ static void parseCSStoXMLAttrs(const QVector<QCss::Declaration> &declarations,
         const QCss::Declaration &decl = declarations.at(i);
         if (decl.d->property.isEmpty())
             continue;
-        if (decl.d->values.count() != 1)
-            continue;
         QCss::Value val = decl.d->values.first();
-        QString valueStr = val.toString();
+        QString valueStr;
+        if (decl.d->values.count() != 1) {
+            for (int i=0; i<decl.d->values.count(); ++i) {
+                const QString &value = decl.d->values[i].toString();
+                if (value.isEmpty())
+                    valueStr += QLatin1Char(',');
+                else
+                    valueStr += value;
+            }
+        } else {
+            valueStr = val.toString();
+        }
         if (val.type == QCss::Value::Uri) {
             valueStr.prepend(QLatin1String("url("));
             valueStr.append(QLatin1Char(')'));
-- 
cgit v0.12