diff options
author | axis <qt-info@nokia.com> | 2009-05-18 12:25:08 (GMT) |
---|---|---|
committer | axis <qt-info@nokia.com> | 2009-05-18 12:25:08 (GMT) |
commit | 6e81bfbaf69864a06240835e0b30cdc47a2668b7 (patch) | |
tree | aff37bf74549836696d420477e57f51969e97091 | |
parent | 3e5abb158c1924e555dc4142c4be89adc517b8c1 (diff) | |
parent | 7008bfe80e0466ed2978b39e7e698bbd52fb690f (diff) | |
download | Qt-6e81bfbaf69864a06240835e0b30cdc47a2668b7.zip Qt-6e81bfbaf69864a06240835e0b30cdc47a2668b7.tar.gz Qt-6e81bfbaf69864a06240835e0b30cdc47a2668b7.tar.bz2 |
Merge branch '4.5' of git@scm.dev.nokia.troll.no:qt/qt
Conflicts:
configure.exe
src/corelib/kernel/qcoreapplication.cpp
Configure.exe not rebuilt because the changes are irrelevant for the
S60 port. We'll rebuild it before merging back.
160 files changed, 1970 insertions, 13482 deletions
@@ -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 diff --git a/demos/demos.pro b/demos/demos.pro index 1c98b9e..3856591 100644 --- a/demos/demos.pro +++ b/demos/demos.pro @@ -35,7 +35,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 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 diff --git a/doc/src/examples/fancybrowser.qdoc b/doc/src/examples/fancybrowser.qdoc index 9001c20..631aff9 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 + 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. + + \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 \e {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 \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 \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/doc/src/layout.qdoc b/doc/src/layout.qdoc index 55dfd8b..d97fcfc 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. + 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 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/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() diff --git a/doc/src/snippets/code/doc_src_layout.qdoc b/doc/src/snippets/code/doc_src_layout.qdoc index 48e10e9..60f36b0 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,28 @@ 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(); + QLayoutItem *item; + while ((item = takeAt(0))) + delete item; } -//! [4] +//! [5] -//! [5] +//! [6] void CardLayout::setGeometry(const QRect &r) { QLayout::setGeometry(r); @@ -85,10 +92,10 @@ void CardLayout::setGeometry(const QRect &r) ++i; } } -//! [5] +//! [6] -//! [6] +//! [7] QSize CardLayout::sizeHint() const { QSize s(0,0); @@ -116,4 +123,4 @@ QSize CardLayout::minimumSize() const } return s + n*QSize(spacing(), spacing()); } -//! [6] +//! [7] 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] 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 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] }; 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/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) 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/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 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) 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/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index 4747bcc..72ea065 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -1045,7 +1045,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(); diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 12b80f6..7d8a77a 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -1728,7 +1728,7 @@ QString QCoreApplication::applicationDirPath() } QCoreApplicationPrivate *d = self->d_func(); - if (d->cachedApplicationDirPath == QString()) + if (d->cachedApplicationDirPath.isNull()) #if defined(Q_OS_SYMBIAN) { QString appPath; @@ -1781,7 +1781,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/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 006c635..0d85b93 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -1214,8 +1214,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 diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp index 21d98b5..2313e0e 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) + \since 4.3 + \relates QHash + + 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,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()}{qHash}(Key) function. + hash function called qHash() (see the related non-member + functions). \endlist Here's an example QHash with QString keys and \c int values: @@ -732,7 +834,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 +1591,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 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. 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. 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; } diff --git a/src/gui/dialogs/qsidebar.cpp b/src/gui/dialogs/qsidebar.cpp index 26108d7..000a06b 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).toUrl().toLocalFile()) == QDir::cleanPath(url.toLocalFile())) { #endif removeRow(j); if (j <= row) 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)) 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 05e4907..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. @@ -1681,6 +1677,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.)). @@ -2159,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/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) 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; } diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 1906025..fb002a3 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -2054,12 +2054,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; 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) 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/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index b315eaf..f863428 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); @@ -4045,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 } 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/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; + } } } 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 */ 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/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; } 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; 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(); 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 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 diff --git a/src/gui/widgets/qmenu_wince.cpp b/src/gui/widgets/qmenu_wince.cpp index 847a623..42a4e0b 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_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); SendMessage(mbi.hwndMB, SHCMBM_OVERRIDEKEY, VK_TBACK, lparam); +#endif return mbi.hwndMB; } } diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 5940fba..ae518df 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) { @@ -633,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: @@ -739,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/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp index fe3f6af..69e0a4c 100644 --- a/src/network/access/qhttpnetworkreply.cpp +++ b/src/network/access/qhttpnetworkreply.cpp @@ -409,39 +409,62 @@ qint64 QHttpNetworkReplyPrivate::readStatus(QAbstractSocket *socket) if (fragment.endsWith('\r')) { fragment.truncate(fragment.length()-1); } - parseStatus(fragment); + bool ok = parseStatus(fragment); state = ReadingHeaderState; fragment.clear(); // next fragment + + if (!ok) + return -1; break; } else { c = 0; bytes += socket->read(&c, 1); fragment.append(c); } + + // is this a valid reply? + if (fragment.length() >= 5 && !fragment.startsWith("HTTP/")) + return -1; + } + 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); + bool ok; + statusCode = code.toInt(&ok); + reasonPhrase = QString::fromLatin1(status.constData() + j + 1); - majorVersion = QString::fromAscii(major.constData()).toInt(); - minorVersion = QString::fromAscii(minor.constData()).toInt(); - statusCode = QString::fromAscii(code.constData()).toInt(); - reasonPhrase = QString::fromAscii(reason.constData()); + return ok && uint(majorVersion) <= 9 && uint(minorVersion) <= 9; } qint64 QHttpNetworkReplyPrivate::readHeader(QAbstractSocket *socket) @@ -660,4 +683,4 @@ void QHttpNetworkReply::ignoreSslErrors() QT_END_NAMESPACE -#endif // QT_NO_HTTP
\ No newline at end of file +#endif // QT_NO_HTTP 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/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(); 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 */ 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()); 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; 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; } diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp index f571d1b..98e32ed 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); @@ -293,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; } @@ -315,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 @@ -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); 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) 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/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) 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/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 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(')')); 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) { 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); 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" diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index 7934781..ddc2074 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() @@ -3048,5 +3049,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" 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" diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index d7faa73..c5c2942 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -181,6 +181,8 @@ private Q_SLOTS: void ioGetFromHttpsWithIgnoreSslErrors(); void ioGetFromHttpsWithSslHandshakeError(); #endif + void ioGetFromHttpBrokenServer_data(); + void ioGetFromHttpBrokenServer(); void ioGetWithManyProxies_data(); void ioGetWithManyProxies(); @@ -224,6 +226,8 @@ private Q_SLOTS: void httpProxyCommands_data(); void httpProxyCommands(); void proxyChange(); + void authorizationError_data(); + void authorizationError(); }; QT_BEGIN_NAMESPACE @@ -1914,6 +1918,53 @@ 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("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; + + 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; + + 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() +{ + 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"); @@ -3008,5 +3059,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" 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" 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() 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" 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. 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); 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 diff --git a/tools/assistant/tools/assistant/assistant.qch b/tools/assistant/tools/assistant/assistant.qch Binary files differindex 64763f7..99687ed 100644 --- a/tools/assistant/tools/assistant/assistant.qch +++ b/tools/assistant/tools/assistant/assistant.qch diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 70413e1..2c20d51 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -353,6 +353,7 @@ Configure::Configure( int& argc, char** argv ) dictionary[ "QMAKESPEC" ] = tmp; dictionary[ "INCREDIBUILD_XGE" ] = "auto"; + dictionary[ "LTCG" ] = "no"; } Configure::~Configure() @@ -489,6 +490,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" ) { @@ -1560,6 +1567,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 " @@ -2628,6 +2638,8 @@ void Configure::generateCachefile() else configStream << " static"; + if( dictionary[ "LTCG" ] == "yes" ) + configStream << " ltcg"; if( dictionary[ "STL" ] == "yes" ) configStream << " stl"; if ( dictionary[ "EXCEPTIONS" ] == "yes" ) @@ -3071,6 +3083,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; 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; }; 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 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()); diff --git a/tools/designer/src/uitools/quiloader.cpp b/tools/designer/src/uitools/quiloader.cpp index 67bd29c..2a66095 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 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 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 - Sets whether user interfaces loaded by this loader are translated - at all. Note that this is orthogonal to languageChangeEnabled. + If \a enabled is true, user interfaces loaded by this loader will be + translated. Otherwise, the user interfaces will not be translated. - \since 4.5 + \note This is orthogonal to languageChangeEnabled. + + \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 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); 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" diff --git a/translations/assistant_de.qm b/translations/assistant_de.qm Binary files differindex 54146f6..5b31aea 100644 --- a/translations/assistant_de.qm +++ b/translations/assistant_de.qm 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>&Copy</source> <translation>&Kopieren</translation> </message> @@ -1157,20 +1155,18 @@ Reason: <translation>&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 Binary files differindex d51c51d..f9b0a03 100644 --- a/translations/designer_de.qm +++ b/translations/designer_de.qm 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 Binary files differindex f411122..a39c3bf 100644 --- a/translations/linguist_de.qm +++ b/translations/linguist_de.qm 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 '%1' - Qt Linguist</source> - <translation type="unfinished"></translation> + <translation>Automatische Übersetzung von '%1' - 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 'Set translated entries to finished' above is unchecked.</source> - <translation type="unfinished"></translation> + <translation>Beachten Sie, dass die geänderten Einträge in den Status 'unerledigt' zurückgesetzt werden, wenn 'Markiere Übersetzung als erledigt' 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>&Run</source> - <translation type="unfinished">&Ausführen</translation> + <translation>&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><qt>Duplicate messages found in '%1':</source> - <translation type="unfinished"></translation> + <translation><qt>Mehrfach vorhandene Meldungen in '%1':</translation> </message> <message> <location line="+4"/> <source><p>[more duplicates omitted]</source> - <translation type="unfinished"></translation> + <translation><p>[weitere mehrfach vorhandene Nachrichten weggelassen]</translation> </message> <message> <location line="+3"/> <source><p>* Context: %1<br>* Source: %2</source> - <translation type="unfinished"></translation> + <translation><p>* Kontext: %1<br>* Quelle: %2</translation> </message> <message> <location line="+3"/> <source><br>* Comment: %3</source> - <translation type="unfinished"></translation> + <translation><br>* Kommentar: %3</translation> </message> <message> <location line="+70"/> <source>Linguist does not know the plural rules for '%1'. Will assume a single universal form.</source> - <translation type="unfinished"></translation> + <translation>Die Regeln zur Pluralbildung der Sprache '%1' sind in Linguist nicht definiert. +Es wird mit einer einfachen Universalform gearbeitet.</translation> </message> <message> <location line="+56"/> <source>Cannot create '%2': %1</source> - <translation type="unfinished"></translation> + <translation>'%2' 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>&Find what:</source> - <translation type="unfinished"></translation> + <translation>&Suchmuster:</translation> </message> <message> <location/> <source>&Source texts</source> - <translation type="unfinished"></translation> + <translation>&Quelltexte</translation> </message> <message> <location/> <source>&Translations</source> - <translation type="unfinished"></translation> + <translation>&Übersetzungen</translation> </message> <message> <location/> <source>&Match case</source> - <translation type="unfinished"></translation> + <translation>&Groß-/Kleinschreibung beachten</translation> </message> <message> <location/> <source>&Comments</source> - <translation type="unfinished"></translation> + <translation>&Kommentare</translation> </message> <message> <location/> <source>Ignore &accelerators</source> - <translation type="unfinished"></translation> + <translation>Tastenkürzel &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 &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&nly...</source> - <translation type="unfinished"></translation> + <translation>Schr&eibgeschützt öffnen...</translation> </message> <message> <location/> <source>&Save All</source> - <translation type="unfinished"></translation> + <translation>&Alles Speichern</translation> </message> <message> <location/> @@ -767,22 +768,22 @@ p, li { white-space: pre-wrap; } <message> <location/> <source>Recently Opened &Files</source> - <translation type="unfinished"></translation> + <translation>Zu&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>&Close All</source> - <translation type="unfinished"></translation> + <translation>A&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 '%1' does not seem to be related to the currently open file(s) '%2'. Close the open file(s) first?</source> - <translation type="unfinished"></translation> + <translation>Die Datei '%1' scheint nicht zu den bereits geöffneten Dateien '%2' zu passen. + +Sollen die bereits geöffneten Dateien vorher geschlossen werden?</translation> </message> <message> <location line="+22"/> <source>The file '%1' does not seem to be related to the file '%2' which is being loaded as well. Skip loading the first named file?</source> - <translation type="unfinished"></translation> + <translation>Die Datei '%1' scheint nicht zu der Datei '%2' 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 '%1'.</source> - <translation type="unfinished">Kann Zeichenkette '%1' nicht finden.</translation> + <translation>Kann Zeichenkette '%1' nicht finden.</translation> </message> <message numerus="yes"> <source>Translated %n entries to '%1'</source> @@ -1368,59 +1373,59 @@ Alle Dateien (*)</translation> <message> <location line="-82"/> <source>Search And Translate in '%1' - Qt Linguist</source> - <translation type="unfinished"></translation> + <translation>Suchen und übersetzen '%1' - 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 '%1'. Start over?</source> - <translation type="unfinished"></translation> + <translation>Keine weiteren Fundstellen von '%1'. 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><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>%2</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p></source> - <translation type="unfinished"><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist ist ein Werkzeug zum Übersetzen von Qt Anwendungen.</p><p>%2</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p></translation> + <translation><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist ist ein Werkzeug zum Übersetzen von Qt Anwendungen.</p><p>%2</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p></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 '%1'?</source> - <translation type="unfinished">Wollen Sie '%1' speichern?</translation> + <translation>Möchten Sie '%1' 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>&Window</source> - <translation type="unfinished">&Fenster</translation> + <translation>&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>&Save '%1'</source> - <translation type="unfinished"></translation> + <translation>'%1' &Speichern</translation> </message> <message> <location line="+1"/> <source>Save '%1' &As...</source> - <translation type="unfinished"></translation> + <translation>Speichere '%1' &unter...</translation> </message> <message> <location line="+1"/> <source>Release '%1'</source> - <translation type="unfinished"></translation> + <translation>'%1' freigeben</translation> </message> <message> <location line="+1"/> <source>Release '%1' As...</source> - <translation type="unfinished"></translation> + <translation>Gebe '%1'frei unter ...</translation> </message> <message> <location line="+1"/> <source>&Close '%1'</source> - <translation type="unfinished"></translation> + <translation>'%1' &Schließen</translation> </message> <message> <location line="+6"/> <location line="+13"/> <source>&Close</source> - <translation type="unfinished">&Schließen</translation> + <translation>&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>&Release All</source> - <translation type="unfinished"></translation> + <translation>Alles f&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 &Settings for '%1'...</source> - <translation type="unfinished"></translation> + <translation>Einstellungen der Übersetzungs&datei für '%1'...</translation> </message> <message> <location line="+1"/> <source>&Batch Translation of '%1'...</source> - <translation type="unfinished"></translation> + <translation>&Automatische Übersetzung von '%1'...</translation> </message> <message> <location line="+1"/> <source>Search And &Translate in '%1'...</source> - <translation type="unfinished"></translation> + <translation>Suchen und &Übersetzen in '%1'...</translation> </message> <message> <location line="+4"/> <source>Search And &Translate...</source> - <translation type="unfinished"></translation> + <translation>Suchen und &Übersetzen...</translation> </message> <message> <location line="+51"/> @@ -1617,37 +1622,37 @@ Alle Dateien (*)</translation> <message> <location line="+84"/> <source>Cannot read from phrase book '%1'.</source> - <translation type="unfinished">Kann Wörterbuch '%1' nicht lesen.</translation> + <translation>Kann Wörterbuch '%1' 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 '%1'.</source> - <translation type="unfinished">Kann Wörterbuch '%1' nicht erzeugen.</translation> + <translation>Kann Wörterbuch '%1' nicht erzeugen.</translation> </message> <message> <location line="+10"/> <source>Do you want to save phrase book '%1'?</source> - <translation type="unfinished"></translation> + <translation>Möchten Sie das Wörterbuch '%1' 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><file header></source> - <translation type="unfinished"></translation> + <translation><Dateikopf></translation> </message> <message> <location line="+2"/> <source><context comment></source> - <translation type="unfinished"></translation> + <translation><Kontexthinweis></translation> </message> <message> <location line="+71"/> <source><unnamed context></source> - <translation type="unfinished"></translation> + <translation><unbenannter Kontext></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>&New Entry</source> - <translation type="unfinished"></translation> + <translation>&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>&Remove Entry</source> - <translation type="unfinished"></translation> + <translation>&Entferne Eintrag</translation> </message> <message> <location/> <source>Settin&gs...</source> - <translation type="unfinished"></translation> + <translation>&Einstellungen...</translation> </message> <message> <source>&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'</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 'Phrase Book'</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 '%1' - Qt Linguist</source> - <translation type="unfinished"></translation> + <translation>Einstellungen für '%1' - 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 Binary files differindex 5d68bf7..9ea09a7 100644 --- a/translations/qt_de.qm +++ b/translations/qt_de.qm 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 'LTR' in left-to-right languages or to 'RTL' 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>&Open</source> <translation>&Öffnen</translation> </message> <message> - <location line="-1596"/> + <location line="-1592"/> <location line="+50"/> <source>&Save</source> <translation>S&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>&Rename</source> <translation>&Umbenennen</translation> </message> @@ -1492,17 +1492,17 @@ nach <translation>&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>&Neues Verzeichnis</translation> </message> <message> - <location line="+656"/> + <location line="+659"/> <location line="+38"/> <source>&Choose</source> <translation>&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 &name:</source> <translation>Datei&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 '</source> <translation>Die Datenbankverbindung konnte nicht geöffnet werden '</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"><p>Dieses Programm verwendet Qt-Version %1.</p></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><h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&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.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>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.</p><p>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.</p><p>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.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p></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>&Options >></source> <translation>&Einstellungen >></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>&Print</source> <translation>&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 Binary files differindex e28a97e..e3d8d87 100644 --- a/translations/qt_help_de.qm +++ b/translations/qt_help_de.qm 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"/> 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 Binary files differdeleted file mode 100644 index 20139b9..0000000 --- a/util/install/mac/unpackage.icns +++ /dev/null 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 Binary files differdeleted file mode 100644 index b996fb7..0000000 --- a/util/install/win/install.ico +++ /dev/null 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><Replace></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 &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 &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>&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 &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 &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 &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 &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&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&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>&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 &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>&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++ .&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 &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>&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><p>It is strongly recommended that you exit all Windows programs before running this install program.</p><p>Click <tt>Cancel</tt> to quit install and then close any programs you have running.</p><p>Click <tt>Next</tt> to continue with the setup program.</p></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 -} |