diff options
author | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2009-11-09 18:32:04 (GMT) |
---|---|---|
committer | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2009-11-09 18:32:04 (GMT) |
commit | 81f3b28f2f82b15f9d255ec38abdc5f749b8809c (patch) | |
tree | 7e41a16587d903498fbb1ca71cd286a9ba156241 | |
parent | f656909791819b3f033f9ec1bd0de524b92919e2 (diff) | |
parent | b770abdd564f28a8d9dde816f72f73e6b15984af (diff) | |
download | Qt-81f3b28f2f82b15f9d255ec38abdc5f749b8809c.zip Qt-81f3b28f2f82b15f9d255ec38abdc5f749b8809c.tar.gz Qt-81f3b28f2f82b15f9d255ec38abdc5f749b8809c.tar.bz2 |
Merge remote branch 'origin/4.6' into 4.6-platform
125 files changed, 1758 insertions, 1381 deletions
@@ -1,148 +1,14 @@ INSTALLING Qt Source Package Version %VERSION%. -1. If you have the commercial edition of Qt, install your license - file as $HOME/.qt-license if you are on Unix. If you are on - Windows, copy the license file into your home directory - (this may be known as the userprofile environment variable) and - rename it to .qt-license. For example on Windows XP, - %USERPROFILE% should be something like C:\Documents and - Settings\username. +For full installation instructions for each supported platform, please +see http://qt.nokia.com/doc/%VERSION%/installation.html, the file +doc/html/installation.html in this package, or follow one of the following +links: + +Embedded Linux: http://qt.nokia.com/doc/%VERSION%/qt-embedded-install.html +Mac OS X: http://qt.nokia.com/doc/%VERSION%/install-mac.html +Windows: http://qt.nokia.com/doc/%VERSION%/install-win.html +Windows CE: http://qt.nokia.com/doc/%VERSION%/install-wince.html +X11 Platforms: http://qt.nokia.com/doc/%VERSION%/install-x11.html +Symbian Platform: http://qt.nokia.com/doc/%VERSION%/install-symbian.html - For the open source version you do not need a license file. - -2. Unpack the archive if you have not done so already: - - On Unix (X11 and Mac): - cd /tmp - gunzip %DISTNAME%.tar.gz # uncompress the archive - tar xvf %DISTNAME%.tar # unpack it - - This creates the directory /tmp/%DISTNAME% containing the files - from the archive. We only support the GNU version of the tar - archiving utility. Note that on some systems it is called gtar. - - On Windows, uncompress the files into the directory you want Qt - installed, e.g. C:\Qt\%VERSION%. - - NOTE: The install path must not contain any spaces. - -4. Environment variables - - In order to build and use Qt, the PATH environment variable needs - to be extended to locate qmake, moc and other Qt tools - - On Windows, this is done by adding C:\Qt\%VERSION%\bin - to the PATH variable. On Unix, this is done by adding - /tmp/%DISTNAME%. - - For newer versions of Windows, PATH can be extended through - "Control Panel->System->Advanced->Environment variables" and for - older versions by editing C:\autoexec.bat. - - In .profile (if your Unix shell is bash), add the following lines: - - PATH=/usr/local/Trolltech/Qt-%VERSION%/bin:$PATH - export PATH - - In .login (in case your Unix shell is csh or tcsh), add the following line: - - setenv PATH /usr/local/Trolltech/Qt-%VERSION%/bin:$PATH - - If you use a different Unix shell, please modify your environment - variables accordingly. - - For some X11 compilers that do not support rpath you must also - extended the LD_LIBRARY_PATH environment variable to include - /usr/local/Trolltech/Qt-%VERSION%/lib. On Linux or Mac with GCC - this step is not needed. - -4. Building - -4.1 Building on Unix - - To configure the Qt library for your machine type, run the - ./configure script in the package directory. - - By default, Qt is configured for installation in the - /usr/local/Trolltech/Qt-%VERSION% directory, but this can be - changed by using the -prefix option. - - cd /tmp/%DISTNAME% - ./configure - - Type "./configure -help" to get a list of all available options. - - To create the library and compile all the demos, examples, tools, - and tutorials, type: - - make - - If you did not configure Qt using the -prefix-install option, - you need to install the library, demos, examples, tools, and - tutorials in the appropriate place. To do this, type: - - su -c "make install" - - and enter the root password. On some systems, you have to use the - sudo command as follows: - - sudo make install - - and enter your password, this requires that you have administrator access - to your machine. - - Note that on some systems the make utility is named differently, - e.g. gmake. The configure script tells you which make utility to - use. - - If you need to reconfigure and rebuild Qt from the same location, - ensure that all traces of the previous configuration are removed - by entering the build directory and typing - - make confclean - - before running the configure script again. - -4.2 Building on Windows - - To configure the Qt library for your machine type: - - C: - cd \Qt\%VERSION% - configure - - Type "configure -help" to get a list of all available options. - - If you are using the "-direct3d" option, make sure that you have - the Direct3D SDK installed, and that you have run the - %DXSDK_DIR%\Utilities\Bin\dx_setenv.cmd command, before attempting - to run configure. - - The actual commands needed to build Qt depends on your development - system. For Microsoft Visual Studio to create the library and - compile all the demos, examples, tools and tutorials type: - - nmake - - If you need to reconfigure and rebuild Qt from the same location, - ensure that all traces of the previous configuration are removed - by entering the build directory and typing - - nmake confclean - - before running the configure script again. - -5. That's all. Qt is now installed. - - If you are new to Qt, we suggest that you take a look at the demos - and examples to see Qt in action. Run the Qt Examples and Demos - either by typing 'qtdemo' on the command line or through the - desktop's Start menu. - - You might also want to try the following links: - - http://qt.nokia.com/doc/%VERSION%/how-to-learn-qt.html - http://qt.nokia.com/doc/%VERSION%/tutorial.html - http://qt.nokia.com/developer - - We hope you will enjoy using Qt. Good luck! diff --git a/README.s60 b/README.s60 deleted file mode 100644 index 2137135..0000000 --- a/README.s60 +++ /dev/null @@ -1,184 +0,0 @@ -This is Qt version %VERSION%. - -Qt is a comprehensive cross-platform C++ application framework. With -this pre-release you can make advanced graphical applications and -utilize TCP/IP connections. More specifically, these modules are now -available for S60: - -QtCore - http://doc.trolltech.com/4.6-snapshot/qtcore.html -QtGui - http://doc.trolltech.com/4.6-snapshot/qtgui.html -QtNetwork - http://doc.trolltech.com/4.6-snapshot/qtnetwork.html -QtScript - http://doc.trolltech.com/4.6-snapshot/qtscript.html -QtSql - http://doc.trolltech.com/4.6-snapshot/qtsql.html -QtSvg - http://doc.trolltech.com/4.6-snapshot/qtsvg.html -QtTest - http://doc.trolltech.com/4.6-snapshot/qttest.html -QtWebKit - http://doc.trolltech.com/4.6-snapshot/qtwebkit.html -QtXml - http://doc.trolltech.com/4.6-snapshot/qtxml.html -Phonon - http://doc.trolltech.com/4.6-snapshot/phonon-module.html - -INSTALLING Qt - -Follow the instructions in the INSTALL file. - -REFERENCE DOCUMENTATION - -The Qt reference documentation is available locally in Qt's doc/html -directory or at http://doc.trolltech.com/4.6-snapshot/index.html - -SUPPORTED PLATFORMS - -For this release, the following platforms have been tested: - - S60 3.1, 3.2 and 5.0 - -with these compilers: - - WINSCW (Emulator, X86) - RVCT (Hardware, ARM) - GCCE (Hardware, ARM)* - -The current version of GCCE cannot compile the Qt libraries -themselves as it has issues with global static data in DLLs. -However, we supply precompiled Qt libraries compiled with RVCT -that can be used instead. This makes it possible to write and -compile Qt applications using GCCE by linking to these -precompiled binaries. For more information on this issue see: -http://www3.symbian.com/faq.nsf/0/B8542F039C193CCC802573DA0011DFA7 - -HOW TO REPORT A BUG - -We have set up a special mailinglist for feedback on the S60 port. -Bug-reports, feedback or questions all go to this list. -Please go to http://pepper.troll.no/s60prereleases/ -for details on how to subscribe to the list. - -Before posting, please consult the FAQ and the list of known issues: -http://labs.trolltech.com/page/QtforS60FAQ -http://labs.trolltech.com/page/QtforS60KnownIssues - -Always include the following information in your bug report: the name -and version number of your compiler; the name and version number of -your operating system; the version of Qt you are using, and what -configure options it was compiled with. - -If the problem you are reporting is only visible at run-time, try to -create a small test program that shows the problem when run. Often, -such a program can be created with some minor changes to one of the -many example programs in Qt's examples directory. - - - INSTALLING Qt for S60 Version %VERSION% - -1. Install needed IDE and SDKs - - Make sure you have the following installed: - - - Carbide.c++ v2.0.0 or higher: - http://www.forum.nokia.com/main/resources/tools_and_sdks/carbide_cpp/ - - Note: It may be necessary to update the Carbide compiler. - See http://pepper.troll.no/s60prereleases/patches/ for instructions - how to check your compiler version and how to patch it, if needed. - - - S60 Platform SDK 3rd Edition FP1 or higher: - http://www.forum.nokia.com/main/resources/tools_and_sdks/S60SDK/ - - - Open C/C++ v1.6.0 or higher. Install this to all S60 SDKs you plan to use Qt with: - http://www.forum.nokia.com/main/resources/technologies/openc_cpp/ - - - Building Qt tools requires a windows compiler, e.g. MinGW 3.4.5 or higher. - http://www.mingw.org/ - - - Building Qt libraries for real device requires RVCT 2.2 [build 686] or later: - http://www.arm.com/products/DevTools/RVCT.html - - Make sure you have the following packages installed on any device you want to use to - run Qt applications. These packages can be found under nokia_plugin directory in any - S60 SDK where you have installed Open C/C++: - - - nokia_plugin\openc\s60opencsis\pips_s60_<version>.sis - - nokia_plugin\openc\s60opencsis\openc_ssl_s60_<version>.sis - - nokia_plugin\opencpp\s60opencppsis\stdcpp_s60_<version>.sis - - These instructions assume the above tools are installed and - that the enviroment variables for your compiler are set correctly. - - Note: Users of S60 Platform SDK 3rd Edition FP1 also need special updates: - http://pepper.troll.no/s60prereleases/patches/ - -2. Install Qt - - Uncompress the package into the directory you want Qt installed, - e.g. C:\Qt\%VERSION%. - - Note: Qt must be installed on the same drive as the S60 SDK you are - using, and the install path must not contain any whitespaces. - -3. Environment variables - - In order to build and use Qt, the PATH environment variable needs - to be extended: - - PATH - to locate qmake, moc and other Qt tools - - This is done by adding c:\Qt\%VERSION%\bin to the PATH variable. - - On Windows the PATH can be extended by navigating to - "Control Panel->System->Advanced->Environment variables". - - In addition, you must configure the environment for use with the S60 - emulator. This is done by locating the Carbide.c++ submenu on the Start - menu, and choosing "Configure environment for WINSCW command line". - -4. Configure Qt - - To configure Qt for S60, do: - - cd \Qt\%VERSION% - configure -platform win32-g++ -xplatform symbian-abld - - For other options, type "configure -help" to get a list of all available - options. - -5. Build Qt - - To build Qt for the emulator, type: - - make debug-winscw - - To build Qt for the device, type: - - make release-armv5 - - Congratulations, Qt is now ready to use. - -6. Running Qt demos - - We've included a subset of the Qt demos in this package for you to try out. - An excellent starting point is the "fluidlauncher" demo. To run the demo on - a real device, you first have to install the Qt libraries on the device: - - cd src\s60installs - createpackage -i Qt_for_S60_template.pkg release-armv5 <certificate file> <certificate key file> - - Note: You will need to supply certificate that allows installation of - binaries with "All -Tcb" capability to your device. - - Similarly, install fluidlauncher to the device: - - cd embedded\fluidlauncher - createpackage -i fluidlauncher_template.pkg release-armv5 - - This will create a self-signed fluidlauncher_release-armv5.sis and install it to your device. - - To run the demos on the emulator simply navigate to the directory of the demo and run: - - make run - - Or, if you need to supply arguments to the program, navigate to - %EPOCROOT%\Epoc32\release\winscw\udeb\ and start any of the Qt demos located there, - for example: - - wiggly.exe -small-screen - - We hope you will enjoy using Qt. diff --git a/README.wince b/README.wince deleted file mode 100644 index 27dfd60..0000000 --- a/README.wince +++ /dev/null @@ -1,44 +0,0 @@ - Signing on Windows CE. - -Windows CE provides a security mechanism to ask the user to confirm -that he wants to use an application/library, which is unknown to the -system. This process gets repeated for each dependency of an -application, meaning each library the application links to, which is -not recognized yet. - -To simplify this process you can use signatures and certificates. A -certificate gets installed on the device and each file which is -signed with the according certificate can be launched without the -security warning. - -In case you want to use signatures for your project written in Qt, -configure provides the -signature option. You need to specify the -location of the .pfx file and qmake adds the signing step to the -build rules. - -If you need to select a separate signature for a specific project, -or you only want to sign this single project, you can use the -"SIGNATURE_FILE = foo.pfx" rule inside the project file. - -The above decribed rules apply for command line makefiles as well as -Visual Studio projects generated by qmake. - -Microsoft usually ships development signatures inside the SDK packages. -You can find them in the Tools subdirectory of the SDK root folder. - -Example: - -1. calling configure with signing enabled: -configure.exe -platform win32-msvc2005 -xplatform wincewm50pocket-msvc2005 --signature C:\some\path\SDKSamplePrivDeveloper.pfx - -2. using pro file to specify signature -[inside .pro file] -... -TARGET = foo - -wince*: { - SIGNATURE_FILE = somepath\customSignature.pfx -} -... - @@ -362,7 +362,7 @@ elif [ -f "$relpath"/LICENSE.PREVIEW.COMMERCIAL ] && [ $COMMERCIAL_USER = "yes" elif [ $COMMERCIAL_USER = "yes" ]; then # one of commercial editions [ "$PLATFORM_MAC" = "maybe" ] && PLATFORM_MAC=yes - [ "$PLATFORM_QWS" = "maybe" ] && PLATFORM_QWS=yes + [ "$PLATFORM_QWS" = "maybe" ] && PLATFORM_QWS=no # read in the license file if [ -f "$LICENSE_FILE" ]; then diff --git a/demos/composition/composition.cpp b/demos/composition/composition.cpp index 24e9187..1025d3c 100644 --- a/demos/composition/composition.cpp +++ b/demos/composition/composition.cpp @@ -457,7 +457,7 @@ void CompositionRenderer::paint(QPainter *painter) #ifdef Q_WS_QWS m_buffer = m_base_buffer; #else - memcpy(m_buffer.bits(), m_base_buffer.bits(), m_buffer.numBytes()); + memcpy(m_buffer.bits(), m_base_buffer.bits(), m_buffer.byteCount()); #endif { diff --git a/dist/README b/dist/README index 05475e7..1c52eb3 100644 --- a/dist/README +++ b/dist/README @@ -19,17 +19,22 @@ On Mac OS X, the binary package requires Mac OS X 10.4.x (Tiger) or later and GCC 4.0.1 to develop applications. Its applications will run on Mac OS X 10.3.9 and above. -If you have a source package (a .tar.gz, .tar.bz2, or .zip file), -follow the instructions in the INSTALL file. +If you have a source package (a .tar.gz, or .zip file), follow the +instructions in the INSTALL file. DEMOS AND EXAMPLES Once Qt is installed, we suggest that you take a look at the demos and -examples to see Qt in action. Run the Qt Examples and Demos either by +examples to see Qt in action. + +For desktop computers, run the Qt Examples and Demos either by typing 'qtdemo' on the command line or through the desktop's Start menu. On Mac OS X, you can find it in /Developers/Applications/Qt. +For embedded devices, launch the Qt 'fluidlauncher' demo, either through +the platforms filebrowser or the built in menu system. + REFERENCE DOCUMENTATION @@ -43,7 +48,7 @@ documentation is available at http://qt.nokia.com/doc/. SUPPORTED PLATFORMS For a complete list of supported platforms, see -http://qt.nokia.com/doc/latest/supported-platforms.html. +http://qt.nokia.com/doc/%VERSION%/supported-platforms.html. COMMERCIAL EDITIONS @@ -56,16 +61,18 @@ the QtCore, QtGui (except QGraphicsView), QtTest, QtDBus and Qt3Support modules. For a full listing of the contents of each module, please refer to -http://qt.nokia.com/doc/latest/modules.html +http://qt.nokia.com/doc/%VERSION%/modules.html HOW TO REPORT A BUG If you think you have found a bug in Qt, we would like to hear about -it so that we can fix it. Before reporting a bug, please check -http://qt.nokia.com/developer/faqs/ and -http://qt.nokia.com/products/appdev/platform/platforms/ to see if -the issue is already known. +it so that we can fix it. The Qt bug tracking system is open to the +public at http://bugreports.qt.nokia.com/. + +Before reporting a bug, please use the bug-tracker's search functions +and consult http://qt.nokia.com/developer/faqs/ to see if the issue is +already known. Always include the following information in your bug report: the name and version number of your compiler; the name and version number of @@ -74,11 +81,9 @@ configure options it was compiled with. If the problem you are reporting is only visible at run-time, try to create a small test program that shows the problem when run. Often, -such a program can be created with some minor changes to one of the -many example programs in Qt's examples directory. Please submit the -bug report using the Task Tracker on the Qt website: - -http://qt.nokia.com/developer/task-tracker +such a program can be created with some minor changes to one of the many +example programs in Qt's examples directory, or to the autotests that +are available in the public source repository on http://qt.gitorious.org/. Qt is a trademark of Nokia Corporation and/or its subsidiary(-ies). diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0 index eadc5c9..f90777d 100644 --- a/dist/changes-4.6.0 +++ b/dist/changes-4.6.0 @@ -61,6 +61,9 @@ Third party components QtCore + - QByteArray + * New overloads for QByteArray::insert() and QByteArray::prepend() + - QObject * [259514] fixed a possible dead-lock in the destructor @@ -95,6 +98,9 @@ QtCore * Improved reading utf8/utf16/utf32 data by correctly skipping the ByteOrderMark when reading data by one character at a time. +- QXmlStreamWriter + * [256468] fix comment indentation + QtGui - QGraphicsAnchorLayout * Support for expanding size policy has been removed. (The Qt 4.6 Beta had support for it). @@ -250,6 +256,42 @@ QtGui - QApplication * [QTBUG-739] Removed internal widgets from QApplication::topLevelWidgets(). +QtNetwork + + - QAbstractSocket + * only disconnect from host when all bytes have been written + * New setSocketOption method. + + - QHttp + * Do not buffer the complete POST data anymore when HTTPS is used. + * QHttp is now obsolete and replaced by QNetworkAccessManager. + + - QLocalServer + * fix timeout when waiting for a connection on Unix + + - QNativeSocketEngine + * Do not set the OS socket send and receive buffer size. The OS + should auto tune these values for us. + + - QNetworkAcessManager + * [242916] add possibility to send HTTP DELETE requests + * Connection count per HTTP server increased to 6 on Desktop, 3 on Symbian. + * Optional HTTP pipelining support. + * General HTTP performance improvements. + + - QNetworkReply + * [257322] add possibility to ignore specific SSL errors + * New isFinished() method. + + - QSslCertificate + * [251830] fix version() and serialNumber() methods + + - QSslSocket + * [257322] add possibility to ignore specific SSL errors + * Fix build with openssl 1.0.0 betas + * Trigger a SSL transmission when reading from the socket. In certain + cases the connection stalled when a buffer limit was used. + QtOpenGL - QGLFormat @@ -280,6 +322,11 @@ QtOpenGL - QGLGradientCache * [249919] Clean up the gradient cache in the right context. +QtXml + +- QDomDocument + * set the codec to UTF-8 if codec not present or unknown + **************************************************************************** * Platform Specific Changes * **************************************************************************** diff --git a/doc/src/examples/googlesuggest.qdoc b/doc/src/examples/googlesuggest.qdoc index bec242d..ab8ab57 100644 --- a/doc/src/examples/googlesuggest.qdoc +++ b/doc/src/examples/googlesuggest.qdoc @@ -43,10 +43,152 @@ \example network/googlesuggest \title Google Suggest Example - The Google Suggest example shows how to use the network access manager - to get the list of suggested search terms from Google. + The Google Suggest example demonstrates how to use the QNetworkAccessManager + class to obtain a list of suggestions from the Google search engine as the + user types into a QLineEdit. \image googlesuggest-example.png - \note The Google Suggest suggestion service is a registered trademark of Google Inc. + The application makes use of the \c get function in + QNetworkAccessManager to post a request and obtain the result of the search + query sent to the Google search engine. The results returned are listed as + clickable links appearing below the search box as a drop-down menu. + + The widget is built up by a QLineEdit as the search box, and a QTreeView + used as a popup menu below the search box. + + \section1 GSuggestCompletion Class Declaration + + This class implements an event filter and a number of functions to display + the search results and to determent when and how to perform the search. + + \snippet examples/network/googlesuggest/googlesuggest.h 1 + + The class connects to a QLineEdit and uses a QTreeWidget to display the + results. A QTimer controls the start of the network requests that are + executed using a QNetworkAccessManager. + + \section1 GSuggestCompletion Class Implementation + + We start by defining a constant containing the URL to be used in the Google + queries. This is the basis for the query. The letters typed into the search + box will be added to the query to perform the search itself. + + \snippet examples/network/googlesuggest/googlesuggest.cpp 1 + + In the constructor, we set the parent of this GSuggestCompletion instance + to be the QLineEdit passed in. For simplicity, the QLineEdit is also stored + in the explicit \c editor member variable. + + We then create a QTreeWidget as a toplevel widget and configure the various + properties to give it the look of a popup widget. + + The popup will be populated by the results returned from Google. We set + the number of columns to be two, since we want to display both the + suggested search term and the number of hits it will trigger in the search + engine. + + Furthermore, we install the GSuggestCompletion instance as an event filter + on the QTreeWidget, and connect the \c itemClicked() signal with the \c + doneCompletion() slot. + + A single-shot QTimer is used to start the request when the user has stopped + typing for 500 ms. + + Finally, we connect the networkManagers \c finished() signal with the \c + handleNetworkData() slot to handle the incoming data. + + \snippet examples/network/googlesuggest/googlesuggest.cpp 2 + + Since the QTreeWidget popup has been instantiated as a toplevel widget, the + destructor has to delete it explicitly from memory to avoid a memory leak. + + \snippet examples/network/googlesuggest/googlesuggest.cpp 3 + + The event filter handles mouse press and key press events that are + delivered to the popup. For mouse press events we just hide the popup and + return focus to the editor widget, and then return true to prevent further + event processing. + + Key event handling is implemented so that Enter and Return execute the + selected link, while the Escape key hides the popup. Sine we want to be + able to navigate the list of suggestions using the different navigation + keys on the keyboard we let Qt continue regular event processing for those + by returning false from the eventFilter reimplementation. + + For all other keys, the event will be passed on to the editor widget and the + popup is hidden. This way the user's typing will not be interrupted by the + popping up of the completion list. + + \snippet examples/network/googlesuggest/googlesuggest.cpp 4 + + The \c showCompletion() function populates the QTreeWidget with the results + returned from the query. It takes two QStringLists, one with the suggested + search terms and the other with the corresponding number of hits. + + \snippet examples/network/googlesuggest/googlesuggest.cpp 5 + + A QTreeWidgetItem is created for each index in the list and inserted into + the QTreeWidget. Finally, we adjust position and size of the popup to make + sure that it pops up in the correct position below the editor, and show it. + + The \c doneCompletion() function, which is called by the event filter when + either Enter or Return keys are pressed, stops the timer to prevent further + requests and passes the text of the selected item to the editor. We then + make the \c editor QLineEdit emit the returnPressed() signal, to which the + application can connect to open the respective web page. + + \snippet examples/network/googlesuggest/googlesuggest.cpp 6 + + The \c autoSuggest() slot is called when the timer times out, and uses the + text in the editor to build the complete search query. The query is then + passed to the QNetworkAccessManager's \c get() function to start the + request. + + \snippet examples/network/googlesuggest/googlesuggest.cpp 7 + + The function \c preventSuggest() stops the timer to prevent further + requests from being started. + + \snippet examples/network/googlesuggest/googlesuggest.cpp 8 + + When the network request is finished, the QNetworkAccessManager delivers the + data received from the server through the networkReply object. + + \snippet examples/network/googlesuggest/googlesuggest.cpp 9 + + To extract the data from the reply we use the \c readAll() function, which + is inherited from QIODevice and returns a QByteArray. Since this data is + encoded in XML we can use a QXmlStreamReader to traverse the data and + extract the search result as QStrings, which we can stream into two + QStringLists used to populate the popup. + + Finally, we schedule the QNetworkReply object for deletion using the \c + deleteLater function. + + \section1 SearchBox Class Declaration + + The SearchBox class inherits QLineEdit and adds the protected slot \c + doSearch(). + + A \c GSuggestCompletion member provides the SearchBox with the request + functionality and the suggestions returned from the Google search engine. + + \snippet examples/network/googlesuggest/searchbox.h 1 + + \section1 SearchBox Class Implementation + + The search box constructor instantiates the GSuggestCompletion object and + connects the returnPressed() signal to the doSearch() slot. + + \snippet examples/network/googlesuggest/searchbox.cpp 1 + + The function \c doSearch() stops the completer from sending any further + queries to the search engine. + + Further, the function extracts the selected search phrase and opens it + in the default web browser using QDesktopServices. + + \snippet examples/network/googlesuggest/searchbox.cpp 2 + */ diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index 1eefed3..c8e225c 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -39,10 +39,6 @@ ** ****************************************************************************/ -/**************************************************************************** -** Please remember to update the corresponding INSTALL files. -****************************************************************************/ - /*! \group installation \title Installation @@ -484,6 +480,7 @@ in the \l{Qt for Windows CE Requirements} document. \o \l{Windows CE - Introduction to using Qt} \o \l{Windows CE - Working with Custom SDKs} \o \l{Windows CE - Using shadow builds} + \o \l{Windows CE - Signing} \endlist Information on feature and performance tuning for embedded builds can diff --git a/doc/src/images/googlesuggest-example.png b/doc/src/images/googlesuggest-example.png Binary files differindex 4ef072a..477d444 100644 --- a/doc/src/images/googlesuggest-example.png +++ b/doc/src/images/googlesuggest-example.png diff --git a/doc/src/platforms/wince-signing.qdoc b/doc/src/platforms/wince-signing.qdoc new file mode 100644 index 0000000..fa383b3 --- /dev/null +++ b/doc/src/platforms/wince-signing.qdoc @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation 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 Technology Preview License Agreement accompanying +** this package. +** +** 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.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page windowsce-signing.html + \ingroup qtce + \title Windows CE - Signing + \brief How to sign Qt projects for use with Windows CE. + + \section1 Signing on Windows CE + +Windows CE provides a security mechanism to ask the user to confirm +that they want to use an application/library that is unknown to the +system. This process gets repeated for each dependency of an +application, meaning each library the application links to, which is +not recognized yet. + +To simplify this process you can use signatures and certificates. A +certificate gets installed on the device and each file which is +signed with the according certificate can be launched without the +security warning. + +If you want to use signatures for your project written in Qt, +configure provides the \c -signature option. You need to specify the +location of the .pfx file and qmake adds the signing step to the +build rules. + +If you need to select a separate signature for a specific project, +or you only want to sign a single project, you can use the +"SIGNATURE_FILE = foo.pfx" rule inside the project file. + +The above described rules apply for command line makefiles as well as +Visual Studio projects generated by qmake. + +Microsoft usually ships development signatures inside the SDK packages. +You can find them in the Tools subdirectory of the SDK root folder. + +Example: + +\list +\o Calling configure with signing enabled: +\code +configure.exe -platform win32-msvc2005 -xplatform wincewm50pocket-msvc2005 -signature C:\some\path\SDKSamplePrivDeveloper.pfx +\endcode + +\o Using pro file to specify signature +\code +... +TARGET = foo + +wince*: { + SIGNATURE_FILE = somepath\customSignature.pfx +} +... +\endcode +\endlist + +*/ diff --git a/examples/network/googlesuggest/googlesuggest.cpp b/examples/network/googlesuggest/googlesuggest.cpp index e1588a6..a1075ec 100644 --- a/examples/network/googlesuggest/googlesuggest.cpp +++ b/examples/network/googlesuggest/googlesuggest.cpp @@ -39,17 +39,22 @@ ** ****************************************************************************/ -#include <QtCore> -#include <QtGui> -#include <QtNetwork> +//! [1] #include "googlesuggest.h" #define GSUGGEST_URL "http://google.com/complete/search?output=toolbar&q=%1" +//! [1] +//! [2] GSuggestCompletion::GSuggestCompletion(QLineEdit *parent): QObject(parent), editor(parent) { popup = new QTreeWidget; + popup->setWindowFlags(Qt::Popup); + popup->setFocusPolicy(Qt::NoFocus); + popup->setFocusProxy(parent); + popup->setMouseTracking(true); + popup->setColumnCount(2); popup->setUniformRowHeights(true); popup->setRootIsDecorated(false); @@ -57,18 +62,13 @@ GSuggestCompletion::GSuggestCompletion(QLineEdit *parent): QObject(parent), edit popup->setSelectionBehavior(QTreeWidget::SelectRows); popup->setFrameStyle(QFrame::Box | QFrame::Plain); popup->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - popup->header()->hide(); + popup->installEventFilter(this); - popup->setMouseTracking(true); connect(popup, SIGNAL(itemClicked(QTreeWidgetItem*, int)), SLOT(doneCompletion())); - popup->setWindowFlags(Qt::Popup); - popup->setFocusPolicy(Qt::NoFocus); - popup->setFocusProxy(parent); - timer = new QTimer(this); timer->setSingleShot(true); timer->setInterval(500); @@ -79,12 +79,16 @@ GSuggestCompletion::GSuggestCompletion(QLineEdit *parent): QObject(parent), edit this, SLOT(handleNetworkData(QNetworkReply*))); } +//! [2] +//! [3] GSuggestCompletion::~GSuggestCompletion() { delete popup; } +//! [3] +//! [4] bool GSuggestCompletion::eventFilter(QObject *obj, QEvent *ev) { if (obj != popup) @@ -131,9 +135,12 @@ bool GSuggestCompletion::eventFilter(QObject *obj, QEvent *ev) return false; } +//! [4] +//! [5] void GSuggestCompletion::showCompletion(const QStringList &choices, const QStringList &hits) { + if (choices.isEmpty() || choices.count() != hits.count()) return; @@ -163,7 +170,9 @@ void GSuggestCompletion::showCompletion(const QStringList &choices, const QStrin popup->setFocus(); popup->show(); } +//! [5] +//! [6] void GSuggestCompletion::doneCompletion() { timer->stop(); @@ -172,26 +181,28 @@ void GSuggestCompletion::doneCompletion() QTreeWidgetItem *item = popup->currentItem(); if (item) { editor->setText(item->text(0)); - QKeyEvent *e; - e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier); - QApplication::postEvent(editor, e); - e = new QKeyEvent(QEvent::KeyRelease, Qt::Key_Enter, Qt::NoModifier); - QApplication::postEvent(editor, e); + QMetaObject::invokeMethod(editor, "returnPressed"); } } +//! [6] -void GSuggestCompletion::preventSuggest() -{ - timer->stop(); -} - +//! [7] void GSuggestCompletion::autoSuggest() { QString str = editor->text(); QString url = QString(GSUGGEST_URL).arg(str); networkManager.get(QNetworkRequest(QString(url))); } +//! [7] + +//! [8] +void GSuggestCompletion::preventSuggest() +{ + timer->stop(); +} +//! [8] +//! [9] void GSuggestCompletion::handleNetworkData(QNetworkReply *networkReply) { QUrl url = networkReply->url(); @@ -199,20 +210,20 @@ void GSuggestCompletion::handleNetworkData(QNetworkReply *networkReply) QStringList choices; QStringList hits; - QString response(networkReply->readAll()); + QByteArray response(networkReply->readAll()); QXmlStreamReader xml(response); while (!xml.atEnd()) { xml.readNext(); - if (xml.isStartElement()) { + if (xml.tokenType() == QXmlStreamReader::StartElement) if (xml.name() == "suggestion") { QStringRef str = xml.attributes().value("data"); choices << str.toString(); } - else if (xml.name() == "num_queries") { + if (xml.tokenType() == QXmlStreamReader::StartElement) + if (xml.name() == "num_queries") { QStringRef str = xml.attributes().value("int"); hits << str.toString(); } - } } showCompletion(choices, hits); @@ -220,3 +231,4 @@ void GSuggestCompletion::handleNetworkData(QNetworkReply *networkReply) networkReply->deleteLater(); } +//! [9]
\ No newline at end of file diff --git a/examples/network/googlesuggest/googlesuggest.h b/examples/network/googlesuggest/googlesuggest.h index 2a3c878..c33df36 100644 --- a/examples/network/googlesuggest/googlesuggest.h +++ b/examples/network/googlesuggest/googlesuggest.h @@ -42,8 +42,9 @@ #ifndef GOOGLESUGGEST_H #define GOOGLESUGGEST_H +#include <QtGui> +#include <QtNetwork> #include <QObject> -#include <QNetworkAccessManager> QT_BEGIN_NAMESPACE class QLineEdit; @@ -52,6 +53,7 @@ class QTimer; class QTreeWidget; QT_END_NAMESPACE +//! [1] class GSuggestCompletion : public QObject { Q_OBJECT @@ -75,6 +77,6 @@ private: QTimer *timer; QNetworkAccessManager networkManager; }; - +//! [1] #endif // GOOGLESUGGEST_H diff --git a/examples/network/googlesuggest/searchbox.cpp b/examples/network/googlesuggest/searchbox.cpp index 21599e0..ae08a75 100644 --- a/examples/network/googlesuggest/searchbox.cpp +++ b/examples/network/googlesuggest/searchbox.cpp @@ -47,12 +47,12 @@ #define GSEARCH_URL "http://www.google.com/search?q=%1" - +//! [1] SearchBox::SearchBox(QWidget *parent): QLineEdit(parent) { completer = new GSuggestCompletion(this); - connect(this, SIGNAL(returnPressed()), SLOT(doSearch())); + connect(this, SIGNAL(returnPressed()),this, SLOT(doSearch())); setWindowTitle("Search with Google"); @@ -60,10 +60,13 @@ SearchBox::SearchBox(QWidget *parent): QLineEdit(parent) resize(400, height()); setFocus(); } +//! [1] +//! [2] void SearchBox::doSearch() { completer->preventSuggest(); QString url = QString(GSEARCH_URL).arg(text()); QDesktopServices::openUrl(QUrl(url)); } +//! [2]
\ No newline at end of file diff --git a/examples/network/googlesuggest/searchbox.h b/examples/network/googlesuggest/searchbox.h index 4b03dba..ec18bb0 100644 --- a/examples/network/googlesuggest/searchbox.h +++ b/examples/network/googlesuggest/searchbox.h @@ -42,6 +42,7 @@ #ifndef SEARCHBOX_H #define SEARCHBOX_H +//! [1] #include <QLineEdit> class GSuggestCompletion; @@ -58,6 +59,7 @@ protected slots: private: GSuggestCompletion *completer; +//! [1] }; diff --git a/examples/tools/regexp/regexpdialog.cpp b/examples/tools/regexp/regexpdialog.cpp index 08c7a97..3becc2b 100644 --- a/examples/tools/regexp/regexpdialog.cpp +++ b/examples/tools/regexp/regexpdialog.cpp @@ -180,8 +180,8 @@ void RegExpDialog::refresh() indexEdit->setText(QString::number(rx.indexIn(text))); matchedLengthEdit->setText(QString::number(rx.matchedLength())); for (int i = 0; i < MaxCaptures; ++i) { - captureLabels[i]->setEnabled(i <= rx.numCaptures()); - captureEdits[i]->setEnabled(i <= rx.numCaptures()); + captureLabels[i]->setEnabled(i <= rx.captureCount()); + captureEdits[i]->setEnabled(i <= rx.captureCount()); captureEdits[i]->setText(rx.cap(i)); } diff --git a/examples/webkit/fancybrowser/mainwindow.cpp b/examples/webkit/fancybrowser/mainwindow.cpp index a3293b8..11fac91 100644 --- a/examples/webkit/fancybrowser/mainwindow.cpp +++ b/examples/webkit/fancybrowser/mainwindow.cpp @@ -150,12 +150,11 @@ void MainWindow::highlightAllLinks() //! [8] void MainWindow::rotateImages(bool toggle) { - QString code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s') } )"; - view->page()->mainFrame()->evaluateJavaScript(code); + QString code; if (toggle) - code = "$('img').each( function () { $(this).css('-webkit-transform', 'rotate(180deg)') } )"; + code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(180deg)') } )"; else - code = "$('img').each( function () { $(this).css('-webkit-transform', 'rotate(0deg)') } )"; + code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(0deg)') } )"; view->page()->mainFrame()->evaluateJavaScript(code); } //! [8] diff --git a/src/3rdparty/phonon/mmf/videooutput.cpp b/src/3rdparty/phonon/mmf/videooutput.cpp index 5288b4d..1b338a2 100644 --- a/src/3rdparty/phonon/mmf/videooutput.cpp +++ b/src/3rdparty/phonon/mmf/videooutput.cpp @@ -136,7 +136,7 @@ void MMF::VideoOutput::paintEvent(QPaintEvent* event) TRACE("rect %d %d - %d %d", event->rect().left(), event->rect().top(), event->rect().right(), event->rect().bottom()); - TRACE("regions %d", event->region().numRects()); + TRACE("regions %d", event->region().rectCount()); TRACE("type %d", event->type()); // Do nothing diff --git a/src/3rdparty/webkit/WebCore/platform/qt/PlatformScreenQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/PlatformScreenQt.cpp index 8221760..442ffa3 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/PlatformScreenQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/qt/PlatformScreenQt.cpp @@ -72,7 +72,7 @@ int screenDepthPerComponent(Widget* w) bool screenIsMonochrome(Widget* w) { - return QApplication::desktop()->screen(screenNumber(w))->numColors() < 2; + return QApplication::desktop()->screen(screenNumber(w))->colorCount() < 2; } FloatRect screenRect(Widget* w) diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index d376dc7..9ab831f 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -76,17 +76,6 @@ QT_BEGIN_NAMESPACE # endif #endif -#ifdef Q_OS_SYMBIAN - // Using default 4k block in symbian is highly inefficient due to - // the fact that each file operation requires slow IPC calls, so - // use somewhat larger block size. -# define FDFH_BLOCK_SIZE 16384 -#else - // Read/write in blocks of 4k to avoid platform limitations (Windows - // commonly bails out if you read or write too large blocks at once). -# define FDFH_BLOCK_SIZE 4096 -#endif - /*! \class QFSFileEngine \brief The QFSFileEngine class implements Qt's default file engine. \since 4.1 @@ -633,67 +622,55 @@ qint64 QFSFileEnginePrivate::readFdFh(char *data, qint64 len) { Q_Q(QFSFileEngine); - // Buffered stdlib mode. + if (len < 0 || len != qint64(size_t(len))) { + q->setError(QFile::ReadError, qt_error_string(EINVAL)); + return -1; + } + + qint64 readBytes = 0; + bool eof = false; + if (fh) { - qint64 readBytes = 0; - qint64 read = 0; - int retry = 0; + // Buffered stdlib mode. - qint64 bytesToRead; + size_t result; + bool retry = true; do { - if (retry == 1) - retry = 2; - - bytesToRead = qMin<qint64>(FDFH_BLOCK_SIZE, len - read); - do { - readBytes = fread(data + read, 1, size_t(bytesToRead), fh); - } while (readBytes == 0 && !feof(fh) && errno == EINTR); - - if (readBytes > 0) { - read += readBytes; - } else if (!retry && feof(fh)) { - // Synchronize and try again (just once though). - if (++retry == 1) - QT_FSEEK(fh, QT_FTELL(fh), SEEK_SET); + result = fread(data + readBytes, 1, size_t(len - readBytes), fh); + eof = feof(fh); + if (retry && eof && result == 0) { + // On Mac OS, this is needed, e.g., if a file was written to + // through another stream since our last read. See test + // tst_QFile::appendAndRead + QT_FSEEK(fh, QT_FTELL(fh), SEEK_SET); // re-sync stream. + retry = false; + continue; } - } while (retry == 1 || (readBytes == bytesToRead && read < len)); + readBytes += result; + } while (!eof && (result == 0 ? errno == EINTR : readBytes < len)); - // Return the number of bytes read, or if nothing was read, return -1 - // if an error occurred, or 0 if we detected EOF. - if (read == 0) { - q->setError(QFile::ReadError, qt_error_string(int(errno))); - if (!feof(fh)) - read = -1; - } - return read; - } + } else if (fd != -1) { + // Unbuffered stdio mode. - // Unbuffered stdio mode. - qint64 ret = 0; - if (len) { +#ifdef Q_OS_WIN int result; - qint64 read = 0; - errno = 0; - +#else + ssize_t result; +#endif do { - qint64 bytesToRead = qMin<qint64>(FDFH_BLOCK_SIZE, len - read); - do { - result = QT_READ(fd, data + read, int(bytesToRead)); - } while (result == -1 && errno == EINTR); - if (result > 0) - read += result; - } while (result > 0 && read < len); - - // Return the number of bytes read, or if nothing was read, return -1 - // if an error occurred. - if (read > 0) { - ret += read; - } else if (read == 0 && result < 0) { - ret = -1; - q->setError(QFile::ReadError, qt_error_string(errno)); - } + result = QT_READ(fd, data + readBytes, size_t(len - readBytes)); + } while ((result == -1 && errno == EINTR) + || (result > 0 && (readBytes += result) < len)); + + eof = !(result == -1); } - return ret; + + if (!eof && readBytes == 0) { + readBytes = -1; + q->setError(QFile::ReadError, qt_error_string(errno)); + } + + return readBytes; } /*! @@ -773,34 +750,45 @@ qint64 QFSFileEngine::write(const char *data, qint64 len) qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len) { Q_Q(QFSFileEngine); - qint64 result; - qint64 written = 0; - do { - qint64 bytesToWrite = qMin<qint64>(FDFH_BLOCK_SIZE, len - written); - if (fh) { - do { - // Buffered stdlib mode. - result = qint64(fwrite(data + written, 1, size_t(bytesToWrite), fh)); - } while (result == 0 && errno == EINTR); - if (bytesToWrite > 0 && result == 0) - result = -1; - } else { - do { - // Unbuffered stdio mode. - result = QT_WRITE(fd, data + written, bytesToWrite); - } while (result == -1 && errno == EINTR); - } - if (result > 0) - written += qint64(result); - } while (written < len && result > 0); - - // If we read anything, return that with success. Otherwise, set an error, - // and return the last return value. - if (result > 0) - return written; - q->setError(errno == ENOSPC ? QFile::ResourceError : QFile::WriteError, qt_error_string(errno)); - return result; + if (len < 0 || len != qint64(size_t(len))) { + q->setError(QFile::WriteError, qt_error_string(EINVAL)); + return -1; + } + + qint64 writtenBytes = 0; + + if (fh) { + // Buffered stdlib mode. + + size_t result; + bool eof; + do { + result = fwrite(data + writtenBytes, 1, size_t(len - writtenBytes), fh); + writtenBytes += result; + eof = feof(fh); + } while (!eof && (result == 0 ? errno == EINTR : writtenBytes < len)); + + } else if (fd != -1) { + // Unbuffered stdio mode. + +#ifdef Q_OS_WIN + int result; +#else + ssize_t result; +#endif + do { + result = QT_WRITE(fd, data + writtenBytes, size_t(len - writtenBytes)); + } while ((result == -1 && errno == EINTR) + || (result > 0 && (writtenBytes += result) < len)); + } + + if (writtenBytes == 0) { + writtenBytes = -1; + q->setError(errno == ENOSPC ? QFile::ResourceError : QFile::WriteError, qt_error_string(errno)); + } + + return writtenBytes; } /*! diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp index 1f23211..3ca8ab9 100644 --- a/src/corelib/tools/qregexp.cpp +++ b/src/corelib/tools/qregexp.cpp @@ -1083,7 +1083,7 @@ public: bool isValid() const { return valid; } const QString &errorString() const { return yyError; } - int numCaptures() const { return officialncap; } + int captureCount() const { return officialncap; } int createState(QChar ch); int createState(const QRegExpCharClass &cc); @@ -1378,7 +1378,7 @@ void QRegExpMatchState::prepareForMatch(QRegExpEngine *eng) #else int newSlideTabSize = 0; #endif - int numCaptures = eng->numCaptures(); + int numCaptures = eng->captureCount(); int newCapturedSize = 2 + 2 * numCaptures; bigArray = q_check_ptr((int *)realloc(bigArray, ((3 + 4 * ncap) * ns + 4 * ncap + newSlideTabSize + newCapturedSize)*sizeof(int))); @@ -4168,12 +4168,24 @@ int QRegExp::matchedLength() const #ifndef QT_NO_REGEXP_CAPTURE /*! + \obsolete Returns the number of captures contained in the regular expression. + + \sa captureCount() */ int QRegExp::numCaptures() const { + return captureCount(); +} + +/*! + \since 4.6 + Returns the number of captures contained in the regular expression. + */ +int QRegExp::captureCount() const +{ prepareEngine(priv); - return priv->eng->numCaptures(); + return priv->eng->captureCount(); } /*! diff --git a/src/corelib/tools/qregexp.h b/src/corelib/tools/qregexp.h index 1a7cf53..2bad40e 100644 --- a/src/corelib/tools/qregexp.h +++ b/src/corelib/tools/qregexp.h @@ -119,7 +119,8 @@ public: #endif int matchedLength() const; #ifndef QT_NO_REGEXP_CAPTURE - int numCaptures() const; + QT_DEPRECATED int numCaptures() const; + int captureCount() const; QStringList capturedTexts() const; QStringList capturedTexts(); QString cap(int nth = 0) const; diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 55ad28d..f7321ef 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -2681,7 +2681,7 @@ QString& QString::replace(const QRegExp &rx, const QString &after) realloc(); int index = 0; - int numCaptures = rx2.numCaptures(); + int numCaptures = rx2.captureCount(); int al = after.length(); QRegExp::CaretMode caretMode = QRegExp::CaretAtZero; diff --git a/src/gui/dialogs/qprintpreviewdialog.cpp b/src/gui/dialogs/qprintpreviewdialog.cpp index 4cb0c93..1f0b51d 100644 --- a/src/gui/dialogs/qprintpreviewdialog.cpp +++ b/src/gui/dialogs/qprintpreviewdialog.cpp @@ -446,7 +446,7 @@ void QPrintPreviewDialogPrivate::setFitting(bool on) void QPrintPreviewDialogPrivate::updateNavActions() { int curPage = preview->currentPage(); - int numPages = preview->numPages(); + int numPages = preview->pageCount(); nextPageAction->setEnabled(curPage < numPages); prevPageAction->setEnabled(curPage > 1); firstPageAction->setEnabled(curPage > 1); @@ -458,7 +458,7 @@ void QPrintPreviewDialogPrivate::updatePageNumLabel() { Q_Q(QPrintPreviewDialog); - int numPages = preview->numPages(); + int numPages = preview->pageCount(); int maxChars = QString::number(numPages).length(); pageNumLabel->setText(QString::fromLatin1("/ %1").arg(numPages)); int cyphersWidth = q->fontMetrics().width(QString().fill(QLatin1Char('8'), maxChars)); @@ -515,7 +515,7 @@ void QPrintPreviewDialogPrivate::_q_navigate(QAction* action) else if (action == firstPageAction) preview->setCurrentPage(1); else if (action == lastPageAction) - preview->setCurrentPage(preview->numPages()); + preview->setCurrentPage(preview->pageCount()); updateNavActions(); } diff --git a/src/gui/embedded/qscreen_qws.cpp b/src/gui/embedded/qscreen_qws.cpp index 911a77e..ae5570f 100644 --- a/src/gui/embedded/qscreen_qws.cpp +++ b/src/gui/embedded/qscreen_qws.cpp @@ -600,7 +600,7 @@ static void blit_template(QScreen *screen, const QImage &image, const int screenStride = screen->linestep(); const int imageStride = image.bytesPerLine(); - if (region.numRects() == 1) { + if (region.rectCount() == 1) { const QRect r = region.boundingRect(); const SRC *src = reinterpret_cast<const SRC*>(image.scanLine(r.y())) + r.x(); @@ -1385,7 +1385,7 @@ QImage::Format QScreenPrivate::preferredImageFormat() const QScreen provides several functions to retrieve information about the color palette: The clut() function returns a pointer to the - color lookup table (i.e. its color palette). Use the numCols() + color lookup table (i.e. its color palette). Use the colorCount() function to determine the number of entries in this table, and the alloc() function to retrieve the palette index of the color that is the closest match to a given RGB value. @@ -1998,12 +1998,20 @@ QImage::Format QScreenPrivate::preferredImageFormat() const i.e. in modes where only the palette indexes (and not the actual color values) are stored in memory. - \sa alloc(), depth(), numCols() + \sa alloc(), depth(), colorCount() */ /*! + \obsolete \fn int QScreen::numCols() + \sa colorCount() +*/ + +/*! + \since 4.6 + \fn int QScreen::colorCount() + Returns the number of entries in the screen's color lookup table (i.e. its color palette). A pointer to the color table can be retrieved using the clut() function. @@ -2103,7 +2111,7 @@ void QScreen::setPixelFormat(QImage::Format format) i.e. in modes where only the palette indexes (and not the actual color values) are stored in memory. - \sa clut(), numCols() + \sa clut(), colorCount() */ int QScreen::alloc(unsigned int r,unsigned int g,unsigned int b) @@ -2455,7 +2463,7 @@ void QScreen::exposeRegion(QRegion r, int windowIndex) delete blendBuffer; } - if (r.numRects() == 1) { + if (r.rectCount() == 1) { setDirty(r.boundingRect()); } else { const QVector<QRect> rects = r.rects(); diff --git a/src/gui/embedded/qscreen_qws.h b/src/gui/embedded/qscreen_qws.h index d20d709..b3246f9 100644 --- a/src/gui/embedded/qscreen_qws.h +++ b/src/gui/embedded/qscreen_qws.h @@ -243,7 +243,8 @@ public: int totalSize() const { return mapsize; } QRgb * clut() { return screenclut; } - int numCols() { return screencols; } + QT_DEPRECATED int numCols() { return screencols; } + int colorCount() { return screencols; } virtual QSize mapToDevice(const QSize &) const; virtual QSize mapFromDevice(const QSize &) const; diff --git a/src/gui/embedded/qwscursor_qws.cpp b/src/gui/embedded/qwscursor_qws.cpp index 07271e1..7d5a3d1 100644 --- a/src/gui/embedded/qwscursor_qws.cpp +++ b/src/gui/embedded/qwscursor_qws.cpp @@ -534,7 +534,7 @@ void QWSCursor::set(const uchar *data, const uchar *mask, if (!width || !height || !data || !mask || cursor.isNull()) return; - cursor.setNumColors(3); + cursor.setColorCount(3); cursor.setColor(0, 0xff000000); cursor.setColor(1, 0xffffffff); cursor.setColor(2, 0x00000000); diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h index 3ef37f9..5f50c85 100644 --- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h +++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h @@ -267,7 +267,7 @@ inline QString AnchorVertex::toString() const const AnchorVertexPair *vp = static_cast<const AnchorVertexPair *>(this); return QString::fromAscii("(%1, %2)").arg(vp->m_first->toString()).arg(vp->m_second->toString()); } else if (!m_item) { - return QString::fromAscii("NULL_%1").arg(int(this)); + return QString::fromAscii("NULL_%1").arg(quintptr(this)); } QString edge; switch (m_edge) { diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index d1845c2..2748ab6 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -4208,7 +4208,7 @@ static void _q_paintIntoCache(QPixmap *pix, QGraphicsItem *item, const QRegion & QRect br = pixmapExposed.boundingRect(); // Don't use subpixmap if we get a full update. - if (pixmapExposed.isEmpty() || (pixmapExposed.numRects() == 1 && br.contains(pix->rect()))) { + if (pixmapExposed.isEmpty() || (pixmapExposed.rectCount() == 1 && br.contains(pix->rect()))) { pix->fill(Qt::transparent); pixmapPainter.begin(pix); } else { diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 87585a2..27fd09e 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -978,7 +978,7 @@ QList<QGraphicsItem *> QGraphicsViewPrivate::findItems(const QRegion &exposedReg // Step 2) If the expose region is a simple rect and the view is only // translated or scaled, search for items using // QGraphicsScene::items(QRectF). - bool simpleRectLookup = exposedRegion.numRects() == 1 && matrix.type() <= QTransform::TxScale; + bool simpleRectLookup = exposedRegion.rectCount() == 1 && matrix.type() <= QTransform::TxScale; if (simpleRectLookup) { return scene->items(exposedRegionSceneBounds, Qt::IntersectsItemBoundingRect, diff --git a/src/gui/image/qbmphandler.cpp b/src/gui/image/qbmphandler.cpp index 4b6fcba..f3eb7c3 100644 --- a/src/gui/image/qbmphandler.cpp +++ b/src/gui/image/qbmphandler.cpp @@ -52,9 +52,9 @@ QT_BEGIN_NAMESPACE static void swapPixel01(QImage *image) // 1-bpp: swap 0 and 1 pixels { int i; - if (image->depth() == 1 && image->numColors() == 2) { + if (image->depth() == 1 && image->colorCount() == 2) { register uint *p = (uint *)image->bits(); - int nbytes = image->numBytes(); + int nbytes = image->byteCount(); for (i=0; i<nbytes/4; i++) { *p = ~*p; p++; @@ -246,7 +246,7 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int if (depth != 32) { ncols = bi.biClrUsed ? bi.biClrUsed : 1 << nbits; - image.setNumColors(ncols); + image.setColorCount(ncols); } image.setDotsPerMeterX(bi.biXPelsPerMeter); @@ -526,7 +526,7 @@ bool qt_write_dib(QDataStream &s, QImage image) if (!d->isWritable()) return false; - if (image.depth() == 8 && image.numColors() <= 16) { + if (image.depth() == 8 && image.colorCount() <= 16) { bpl_bmp = (((bpl+1)/2+3)/4)*4; nbits = 4; } else if (image.depth() == 32) { @@ -554,23 +554,23 @@ bool qt_write_dib(QDataStream &s, QImage image) bi.biXPelsPerMeter = image.dotsPerMeterX() ? image.dotsPerMeterX() : 2834; // 72 dpi default bi.biYPelsPerMeter = image.dotsPerMeterY() ? image.dotsPerMeterY() : 2834; - bi.biClrUsed = image.numColors(); - bi.biClrImportant = image.numColors(); + bi.biClrUsed = image.colorCount(); + bi.biClrImportant = image.colorCount(); s << bi; // write info header if (s.status() != QDataStream::Ok) return false; if (image.depth() != 32) { // write color table - uchar *color_table = new uchar[4*image.numColors()]; + uchar *color_table = new uchar[4*image.colorCount()]; uchar *rgb = color_table; QVector<QRgb> c = image.colorTable(); - for (int i=0; i<image.numColors(); i++) { + for (int i=0; i<image.colorCount(); i++) { *rgb++ = qBlue (c[i]); *rgb++ = qGreen(c[i]); *rgb++ = qRed (c[i]); *rgb++ = 0; } - if (d->write((char *)color_table, 4*image.numColors()) == -1) { + if (d->write((char *)color_table, 4*image.colorCount()) == -1) { delete [] color_table; return false; } @@ -754,7 +754,7 @@ bool QBmpHandler::write(const QImage &img) int bpl = image.bytesPerLine(); // Code partially repeated in qt_write_dib - if (image.depth() == 8 && image.numColors() <= 16) { + if (image.depth() == 8 && image.colorCount() <= 16) { bpl_bmp = (((bpl+1)/2+3)/4)*4; } else if (image.depth() == 32) { bpl_bmp = ((image.width()*24+31)/32)*4; @@ -771,7 +771,7 @@ bool QBmpHandler::write(const QImage &img) // write file header bf.bfReserved1 = 0; bf.bfReserved2 = 0; - bf.bfOffBits = BMP_FILEHDR_SIZE + BMP_WIN + image.numColors() * 4; + bf.bfOffBits = BMP_FILEHDR_SIZE + BMP_WIN + image.colorCount() * 4; bf.bfSize = bf.bfOffBits + bpl_bmp*image.height(); s << bf; diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 21ca1e3..6d96d7a 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -449,7 +449,7 @@ bool QImageData::checkForAlphaPixels() const to the pixel() function. The pixel() function returns the color as a QRgb value indepedent of the image's format. - In case of monochrome and 8-bit images, the numColors() and + In case of monochrome and 8-bit images, the colorCount() and colorTable() functions provide information about the color components used to store the image data: The colorTable() function returns the image's entire color table. To obtain a single entry, @@ -484,7 +484,7 @@ bool QImageData::checkForAlphaPixels() const depths are 1 (monochrome), 8 and 32 (for more information see the \l {QImage#Image Formats}{Image Formats} section). - The format(), bytesPerLine(), and numBytes() functions provide + The format(), bytesPerLine(), and byteCount() functions provide low-level information about the data stored in the image. The cacheKey() function returns a number that uniquely @@ -623,7 +623,7 @@ bool QImageData::checkForAlphaPixels() const \o Sets the color table used to translate color indexes. Only monochrome and 8-bit formats. \row - \o setNumColors() + \o setColorCount() \o Resizes the color table. Only monochrome and 8-bit formats. \endtable @@ -906,7 +906,7 @@ QImageData *QImageData::create(uchar *data, int width, int height, int bpl, QIm If \a format is an indexed color format, the image color table is initially empty and must be sufficiently expanded with - setNumColors() or setColorTable() before the image is used. + setColorCount() or setColorTable() before the image is used. */ QImage::QImage(uchar* data, int width, int height, Format format) : QPaintDevice() @@ -928,7 +928,7 @@ QImage::QImage(uchar* data, int width, int height, Format format) If \a format is an indexed color format, the image color table is initially empty and must be sufficiently expanded with - setNumColors() or setColorTable() before the image is used. + setColorCount() or setColorTable() before the image is used. Unlike the similar QImage constructor that takes a non-const data buffer, this version will never alter the contents of the buffer. For example, @@ -954,7 +954,7 @@ QImage::QImage(const uchar* data, int width, int height, Format format) If \a format is an indexed color format, the image color table is initially empty and must be sufficiently expanded with - setNumColors() or setColorTable() before the image is used. + setColorCount() or setColorTable() before the image is used. */ QImage::QImage(uchar *data, int width, int height, int bytesPerLine, Format format) :QPaintDevice() @@ -974,7 +974,7 @@ QImage::QImage(uchar *data, int width, int height, int bytesPerLine, Format form If \a format is an indexed color format, the image color table is initially empty and must be sufficiently expanded with - setNumColors() or setColorTable() before the image is used. + setColorCount() or setColorTable() before the image is used. Unlike the similar QImage constructor that takes a non-const data buffer, this version will never alter the contents of the buffer. For example, @@ -1126,7 +1126,7 @@ QImage::QImage(const QImage &image) Use the constructor that accepts a width, a height and a format (i.e. specifying the depth and bit order), in combination with the - setNumColors() function, instead. + setColorCount() function, instead. \oldcode QImage image(width, height, depth, numColors); @@ -1135,15 +1135,15 @@ QImage::QImage(const QImage &image) // For 8 bit images the default number of colors is 256. If // another number of colors is required it can be specified - // using the setNumColors() function. - image.setNumColors(numColors); + // using the setColorCount() function. + image.setColorCount(numColors); \endcode */ -QImage::QImage(int w, int h, int depth, int numColors, Endian bitOrder) +QImage::QImage(int w, int h, int depth, int colorCount, Endian bitOrder) : QPaintDevice() { - d = QImageData::create(QSize(w, h), formatFor(depth, bitOrder), numColors); + d = QImageData::create(QSize(w, h), formatFor(depth, bitOrder), colorCount); } /*! @@ -1152,7 +1152,7 @@ QImage::QImage(int w, int h, int depth, int numColors, Endian bitOrder) Use the constructor that accepts a size and a format (i.e. specifying the depth and bit order), in combination with the - setNumColors() function, instead. + setColorCount() function, instead. \oldcode QSize mySize(width, height); @@ -1163,8 +1163,8 @@ QImage::QImage(int w, int h, int depth, int numColors, Endian bitOrder) // For 8 bit images the default number of colors is 256. If // another number of colors is required it can be specified - // using the setNumColors() function. - image.setNumColors(numColors); + // using the setColorCount() function. + image.setColorCount(numColors); \endcode */ QImage::QImage(const QSize& size, int depth, int numColors, Endian bitOrder) @@ -1232,7 +1232,7 @@ QImage::QImage(uchar* data, int w, int h, int depth, const QRgb* colortable, int for (int i = 0; i < numColors; ++i) d->colortable[i] = colortable[i]; } else if (numColors) { - setNumColors(numColors); + setColorCount(numColors); } } @@ -1283,7 +1283,7 @@ QImage::QImage(uchar* data, int w, int h, int depth, int bpl, const QRgb* colort for (int i = 0; i < numColors; ++i) d->colortable[i] = colortable[i]; } else if (numColors) { - setNumColors(numColors); + setColorCount(numColors); } } #endif // Q_WS_QWS @@ -1592,17 +1592,31 @@ int QImage::depth() const } /*! + \obsolete \fn int QImage::numColors() const Returns the size of the color table for the image. - Notice that numColors() returns 0 for 32-bpp images because these + \sa setColorCount() +*/ +int QImage::numColors() const +{ + return d ? d->colortable.size() : 0; +} + +/*! + \since 4.6 + \fn int QImage::colorCount() const + + Returns the size of the color table for the image. + + Notice that colorCount() returns 0 for 32-bpp images because these images do not use color tables, but instead encode pixel values as ARGB quadruplets. - \sa setNumColors(), {QImage#Image Information}{Image Information} + \sa setColorCount(), {QImage#Image Information}{Image Information} */ -int QImage::numColors() const +int QImage::colorCount() const { return d ? d->colortable.size() : 0; } @@ -1711,7 +1725,7 @@ void QImage::setColorTable(const QVector<QRgb> colors) Returns a list of the colors contained in the image's color table, or an empty list if the image does not have a color table - \sa setColorTable(), numColors(), color() + \sa setColorTable(), colorCount(), color() */ QVector<QRgb> QImage::colorTable() const { @@ -1720,12 +1734,24 @@ QVector<QRgb> QImage::colorTable() const /*! + \obsolete + Returns the number of bytes occupied by the image data. + + \sa byteCount() +*/ +int QImage::numBytes() const +{ + return d ? d->nbytes : 0; +} + +/*! + \since 4.6 Returns the number of bytes occupied by the image data. \sa bytesPerLine(), bits(), {QImage#Image Information}{Image Information} */ -int QImage::numBytes() const +int QImage::byteCount() const { return d ? d->nbytes : 0; } @@ -1733,7 +1759,7 @@ int QImage::numBytes() const /*! Returns the number of bytes per image scanline. - This is equivalent to numBytes()/ height(). + This is equivalent to byteCount() / height(). \sa scanLine() */ @@ -1756,7 +1782,7 @@ int QImage::bytesPerLine() const */ QRgb QImage::color(int i) const { - Q_ASSERT(i < numColors()); + Q_ASSERT(i < colorCount()); return d ? d->colortable.at(i) : QRgb(uint(-1)); } @@ -1767,9 +1793,9 @@ QRgb QImage::color(int i) const given to \a colorValue. The color value is an ARGB quadruplet. If \a index is outside the current size of the color table, it is - expanded with setNumColors(). + expanded with setColorCount(). - \sa color(), numColors(), setColorTable(), {QImage#Pixel Manipulation}{Pixel + \sa color(), colorCount(), setColorTable(), {QImage#Pixel Manipulation}{Pixel Manipulation} */ void QImage::setColor(int i, QRgb c) @@ -1787,7 +1813,7 @@ void QImage::setColor(int i, QRgb c) return; if (i >= d->colortable.size()) - setNumColors(i+1); + setColorCount(i+1); d->colortable[i] = c; d->has_alpha_clut |= (qAlpha(c) != 255); } @@ -1844,7 +1870,7 @@ const uchar *QImage::scanLine(int i) const data, thus ensuring that this QImage is the only one using the current return value. - \sa scanLine(), numBytes() + \sa scanLine(), byteCount() */ uchar *QImage::bits() { @@ -2025,8 +2051,21 @@ void QImage::invertPixels(InvertMode mode) #endif /*! + \obsolete Resizes the color table to contain \a numColors entries. + \sa setColorCount() +*/ + +void QImage::setNumColors(int numColors) +{ + setColorCount(numColors); +} + +/*! + \since 4.6 + Resizes the color table to contain \a colorCount entries. + If the color table is expanded, all the extra colors will be set to transparent (i.e qRgba(0, 0, 0, 0)). @@ -2034,14 +2073,14 @@ void QImage::invertPixels(InvertMode mode) have entries for all the pixel/index values present in the image, otherwise the results are undefined. - \sa numColors(), colorTable(), setColor(), {QImage#Image + \sa colorsCount(), colorTable(), setColor(), {QImage#Image Transformations}{Image Transformations} */ -void QImage::setNumColors(int numColors) +void QImage::setColorCount(int colorCount) { if (!d) { - qWarning("QImage::setNumColors: null image"); + qWarning("QImage::setColorCount: null image"); return; } @@ -2051,17 +2090,16 @@ void QImage::setNumColors(int numColors) if (!d) return; - if (numColors == d->colortable.size()) + if (colorCount == d->colortable.size()) return; - if (numColors <= 0) { // use no color table + if (colorCount <= 0) { // use no color table d->colortable = QVector<QRgb>(); return; } int nc = d->colortable.size(); - d->colortable.resize(numColors); - for (int i = nc; i < numColors; ++i) + d->colortable.resize(colorCount); + for (int i = nc; i < colorCount; ++i) d->colortable[i] = 0; - } /*! @@ -3674,7 +3712,7 @@ QRgb QImage::pixel(int x, int y) const otherwise the parameter must be a QRgb value. If \a position is not a valid coordinate pair in the image, or if - \a index_or_rgb >= numColors() in the case of monochrome and + \a index_or_rgb >= colorCount() in the case of monochrome and 8-bit images, the result is undefined. \warning This function is expensive due to the call of the internal @@ -3835,7 +3873,7 @@ bool QImage::allGray() const } else { if (d->colortable.isEmpty()) return true; - for (int i = 0; i < numColors(); i++) + for (int i = 0; i < colorCount(); i++) if (!qIsGray(d->colortable.at(i))) return false; } @@ -3862,7 +3900,7 @@ bool QImage::isGrayscale() const case 16: return allGray(); case 8: { - for (int i = 0; i < numColors(); i++) + for (int i = 0; i < colorCount(); i++) if (d->colortable.at(i) != qRgb(i,i,i)) return false; return true; @@ -4128,7 +4166,7 @@ QImage QImage::createHeuristicMask(bool clipTight) const int w = width(); int h = height(); QImage m(w, h, Format_MonoLSB); - m.setNumColors(2); + m.setColorCount(2); m.setColor(0, QColor(Qt::color0).rgba()); m.setColor(1, QColor(Qt::color1).rgba()); m.fill(0xff); @@ -5703,7 +5741,7 @@ QImage QImage::alphaChannel() const int h = d->height; QImage image(w, h, Format_Indexed8); - image.setNumColors(256); + image.setColorCount(256); // set up gray scale table. for (int i=0; i<256; ++i) @@ -5833,7 +5871,7 @@ static QImage smoothScaled(const QImage &source, int w, int h) { static QImage rotated90(const QImage &image) { QImage out(image.height(), image.width(), image.format()); - if (image.numColors() > 0) + if (image.colorCount() > 0) out.setColorTable(image.colorTable()); int w = image.width(); int h = image.height(); @@ -5872,7 +5910,7 @@ static QImage rotated90(const QImage &image) { break; default: for (int y=0; y<h; ++y) { - if (image.numColors()) + if (image.colorCount()) for (int x=0; x<w; ++x) out.setPixel(h-y-1, x, image.pixelIndex(x, y)); else @@ -5892,7 +5930,7 @@ static QImage rotated180(const QImage &image) { static QImage rotated270(const QImage &image) { QImage out(image.height(), image.width(), image.format()); - if (image.numColors() > 0) + if (image.colorCount() > 0) out.setColorTable(image.colorTable()); int w = image.width(); int h = image.height(); @@ -5931,7 +5969,7 @@ static QImage rotated270(const QImage &image) { break; default: for (int y=0; y<h; ++y) { - if (image.numColors()) + if (image.colorCount()) for (int x=0; x<w; ++x) out.setPixel(y, w-x-1, image.pixelIndex(x, y)); else @@ -6071,16 +6109,16 @@ QImage QImage::transformed(const QTransform &matrix, Qt::TransformationMode mode if (dImage.d->colortable.size() < 256) { // colors are left in the color table, so pick that one as transparent dImage.d->colortable.append(0x0); - memset(dImage.bits(), dImage.d->colortable.size() - 1, dImage.numBytes()); + memset(dImage.bits(), dImage.d->colortable.size() - 1, dImage.byteCount()); } else { - memset(dImage.bits(), 0, dImage.numBytes()); + memset(dImage.bits(), 0, dImage.byteCount()); } break; case 1: case 16: case 24: case 32: - memset(dImage.bits(), 0x00, dImage.numBytes()); + memset(dImage.bits(), 0x00, dImage.byteCount()); break; } diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h index 1ac56a7..d8809ef 100644 --- a/src/gui/image/qimage.h +++ b/src/gui/image/qimage.h @@ -165,18 +165,21 @@ public: QRect rect() const; int depth() const; - int numColors() const; + QT_DEPRECATED int numColors() const; + int colorCount() const; QRgb color(int i) const; void setColor(int i, QRgb c); - void setNumColors(int); + QT_DEPRECATED void setNumColors(int); + void setColorCount(int); bool allGray() const; bool isGrayscale() const; uchar *bits(); const uchar *bits() const; - int numBytes() const; + QT_DEPRECATED int numBytes() const; + int byteCount() const; uchar *scanLine(int); const uchar *scanLine(int) const; diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index dfeea76..985a20b 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -2150,6 +2150,13 @@ QPixmapData* QPixmap::pixmapData() const */ /*! \fn int QPixmap::numCols() const + \obsolete + \internal + \sa colorCount() +*/ + +/*! \fn int QPixmap::colorCount() const + \since 4.6 \internal */ diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h index d11bd03..d95b4ee 100644 --- a/src/gui/image/qpixmap.h +++ b/src/gui/image/qpixmap.h @@ -185,7 +185,8 @@ public: const uchar *qwsBits() const; int qwsBytesPerLine() const; QRgb *clut() const; - int numCols() const; + QT_DEPRECATED int numCols() const; + int colorCount() const; #elif defined(Q_WS_MAC) Qt::HANDLE macQDHandle() const; Qt::HANDLE macQDAlphaHandle() const; diff --git a/src/gui/image/qpixmap_mac.cpp b/src/gui/image/qpixmap_mac.cpp index 9209d45..6175931 100644 --- a/src/gui/image/qpixmap_mac.cpp +++ b/src/gui/image/qpixmap_mac.cpp @@ -248,7 +248,7 @@ void QMacPixmapData::fromImage(const QImage &img, } else if ((flags & Qt::ColorMode_Mask) == Qt::ColorOnly) { conv8 = d == 1; // native depth wanted } else if (d == 1) { - if (image.numColors() == 2) { + if (image.colorCount() == 2) { QRgb c0 = image.color(0); // Auto: convert to best QRgb c1 = image.color(1); conv8 = qMin(c0,c1) != qRgb(0,0,0) || qMax(c0,c1) != qRgb(255,255,255); @@ -339,7 +339,7 @@ void QMacPixmapData::fromImage(const QImage &img, bool alphamap = image.depth() == 32; if (sfmt == QImage::Format_Indexed8) { const QVector<QRgb> rgb = image.colorTable(); - for (int i = 0, count = image.numColors(); i < count; ++i) { + for (int i = 0, count = image.colorCount(); i < count; ++i) { const int alpha = qAlpha(rgb[i]); if (alpha != 0xff) { alphamap = true; @@ -355,13 +355,13 @@ void QMacPixmapData::fromImage(const QImage &img, int get_index(QImage * qi,QRgb mycol) { int loopc; - for(loopc=0;loopc<qi->numColors();loopc++) { + for(loopc=0;loopc<qi->colorCount();loopc++) { if(qi->color(loopc)==mycol) return loopc; } - qi->setNumColors(qi->numColors()+1); - qi->setColor(qi->numColors(),mycol); - return qi->numColors(); + qi->setColorCount(qi->colorCount()+1); + qi->setColor(qi->colorCount(),mycol); + return qi->colorCount(); } QImage QMacPixmapData::toImage() const @@ -376,7 +376,7 @@ QImage QMacPixmapData::toImage() const const uint sbpr = bytesPerRow; if (format == QImage::Format_MonoLSB) { image.fill(0); - image.setNumColors(2); + image.setColorCount(2); image.setColor(0, QColor(Qt::color0).rgba()); image.setColor(1, QColor(Qt::color1).rgba()); for (int y = 0; y < h; ++y) { diff --git a/src/gui/image/qpixmap_qws.cpp b/src/gui/image/qpixmap_qws.cpp index a8516a5..69626ed 100644 --- a/src/gui/image/qpixmap_qws.cpp +++ b/src/gui/image/qpixmap_qws.cpp @@ -124,9 +124,14 @@ QRgb* QPixmap::clut() const int QPixmap::numCols() const { + return colorCount(); +} + +int QPixmap::colorCount() const +{ if (data && data->classId() == QPixmapData::RasterClass) { const QRasterPixmapData *d = static_cast<const QRasterPixmapData*>(data.data()); - return d->image.numColors(); + return d->image.colorCount(); } return 0; diff --git a/src/gui/image/qpixmap_raster.cpp b/src/gui/image/qpixmap_raster.cpp index fc76dc3..1b01e6f 100644 --- a/src/gui/image/qpixmap_raster.cpp +++ b/src/gui/image/qpixmap_raster.cpp @@ -119,7 +119,7 @@ void QRasterPixmapData::resize(int width, int height) is_null = (w <= 0 || h <= 0); if (pixelType() == BitmapType && !image.isNull()) { - image.setNumColors(2); + image.setColorCount(2); image.setColor(0, QColor(Qt::color0).rgba()); image.setColor(1, QColor(Qt::color1).rgba()); } diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp index cd8a4d4..f7a880c 100644 --- a/src/gui/image/qpixmap_s60.cpp +++ b/src/gui/image/qpixmap_s60.cpp @@ -443,7 +443,7 @@ void QS60PixmapData::fromSymbianBitmap(CFbsBitmap* bitmap) // Create default palette if needed if (cfbsBitmap->DisplayMode() == EGray2) { - image.setNumColors(2); + image.setColorCount(2); image.setColor(0, QColor(Qt::color0).rgba()); image.setColor(1, QColor(Qt::color1).rgba()); @@ -526,13 +526,13 @@ void QS60PixmapData::fromImage(const QImage &img, Qt::ImageConversionFlags flags const uchar *sptr = const_cast<const QImage &>(sourceImage).bits(); symbianBitmapDataAccess->beginDataAccess(cfbsBitmap); uchar *dptr = (uchar*)cfbsBitmap->DataAddress(); - Mem::Copy(dptr, sptr, sourceImage.numBytes()); + Mem::Copy(dptr, sptr, sourceImage.byteCount()); symbianBitmapDataAccess->endDataAccess(cfbsBitmap); UPDATE_BUFFER(); if (destFormat == QImage::Format_MonoLSB) { - image.setNumColors(2); + image.setColorCount(2); image.setColor(0, QColor(Qt::color0).rgba()); image.setColor(1, QColor(Qt::color1).rgba()); } else { @@ -835,7 +835,7 @@ void* QS60PixmapData::toNativeType(NativeType type) symbianBitmapDataAccess->beginDataAccess(newBitmap); uchar *dptr = (uchar*)newBitmap->DataAddress(); - Mem::Copy(dptr, sptr, source.numBytes()); + Mem::Copy(dptr, sptr, source.byteCount()); symbianBitmapDataAccess->endDataAccess(newBitmap); diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp index c735031..3f297df 100644 --- a/src/gui/image/qpixmap_x11.cpp +++ b/src/gui/image/qpixmap_x11.cpp @@ -464,7 +464,7 @@ void QX11PixmapData::fromImage(const QImage &img, } else if ((flags & Qt::ColorMode_Mask) == Qt::ColorOnly) { conv8 = (d == 1); // native depth wanted } else if (d == 1) { - if (image.numColors() == 2) { + if (image.colorCount() == 2) { QRgb c0 = image.color(0); // Auto: convert to best QRgb c1 = image.color(1); conv8 = qMin(c0,c1) != qRgb(0,0,0) || qMax(c0,c1) != qRgb(255,255,255); @@ -489,7 +489,7 @@ void QX11PixmapData::fromImage(const QImage &img, Visual *visual = (Visual *)xinfo.visual(); XImage *xi = 0; bool trucol = (visual->c_class >= TrueColor); - int nbytes = image.numBytes(); + int nbytes = image.byteCount(); uchar *newbits= 0; #ifndef QT_NO_XRENDER @@ -631,7 +631,7 @@ void QX11PixmapData::fromImage(const QImage &img, if (d8) { // setup pixel translation QVector<QRgb> ctable = cimage.colorTable(); - for (int i=0; i < cimage.numColors(); i++) { + for (int i=0; i < cimage.colorCount(); i++) { int r = qRed (ctable[i]); int g = qGreen(ctable[i]); int b = qBlue (ctable[i]); @@ -957,8 +957,8 @@ void QX11PixmapData::fromImage(const QImage &img, if (d == 8 && !trucol) { // 8 bit pixmap int pop[256]; // pixel popularity - if (image.numColors() == 0) - image.setNumColors(1); + if (image.colorCount() == 0) + image.setColorCount(1); const QImage &cimage = image; memset(pop, 0, sizeof(int)*256); // reset popularity array @@ -988,11 +988,11 @@ void QX11PixmapData::fromImage(const QImage &img, int mindist; }; int ncols = 0; - for (int i=0; i< cimage.numColors(); i++) { // compute number of colors + for (int i=0; i< cimage.colorCount(); i++) { // compute number of colors if (pop[i] > 0) ncols++; } - for (int i = cimage.numColors(); i < 256; i++) // ignore out-of-range pixels + for (int i = cimage.colorCount(); i < 256; i++) // ignore out-of-range pixels pop[i] = 0; // works since we make sure above to have at least @@ -1651,7 +1651,7 @@ QImage QX11PixmapData::toImage() const } if (d == 1) { // bitmap - image.setNumColors(2); + image.setColorCount(2); image.setColor(0, qRgb(255,255,255)); image.setColor(1, qRgb(0,0,0)); } else if (!trucol) { // pixmap with colormap @@ -1707,10 +1707,10 @@ QImage QX11PixmapData::toImage() const int trans; if (ncols < 256) { trans = ncols++; - image.setNumColors(ncols); // create color table + image.setColorCount(ncols); // create color table image.setColor(trans, 0x00000000); } else { - image.setNumColors(ncols); // create color table + image.setColorCount(ncols); // create color table // oh dear... no spare "transparent" pixel. // use first pixel in image (as good as any). trans = image.scanLine(0)[0]; @@ -1733,7 +1733,7 @@ QImage QX11PixmapData::toImage() const } } } else { - image.setNumColors(ncols); // create color table + image.setColorCount(ncols); // create color table } QVector<QColor> colors = QColormap::instance(xinfo.screen()).colormap(); int j = 0; diff --git a/src/gui/image/qpixmapdata.cpp b/src/gui/image/qpixmapdata.cpp index 10194e4..38f6b5d 100644 --- a/src/gui/image/qpixmapdata.cpp +++ b/src/gui/image/qpixmapdata.cpp @@ -201,7 +201,7 @@ QBitmap QPixmapData::mask() const if (mask.isNull()) // allocation failed return QBitmap(); - mask.setNumColors(2); + mask.setColorCount(2); mask.setColor(0, QColor(Qt::color0).rgba()); mask.setColor(1, QColor(Qt::color1).rgba()); diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h index d1bb92a..41e2923 100644 --- a/src/gui/image/qpixmapdata_p.h +++ b/src/gui/image/qpixmapdata_p.h @@ -113,7 +113,8 @@ public: inline int width() const { return w; } inline int height() const { return h; } - inline int numColors() const { return metric(QPaintDevice::PdmNumColors); } + QT_DEPRECATED inline int numColors() const { return metric(QPaintDevice::PdmNumColors); } + inline int colorCount() const { return metric(QPaintDevice::PdmNumColors); } inline int depth() const { return d; } inline bool isNull() const { return is_null; } diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp index 44d689d..14c863b 100644 --- a/src/gui/image/qpnghandler.cpp +++ b/src/gui/image/qpnghandler.cpp @@ -171,7 +171,7 @@ void setup_qt(QImage& image, png_structp png_ptr, png_infop info_ptr, float scre if (image.isNull()) return; } - image.setNumColors(2); + image.setColorCount(2); image.setColor(1, qRgb(0,0,0)); image.setColor(0, qRgb(255,255,255)); } else if (bit_depth == 16 && png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) { @@ -199,7 +199,7 @@ void setup_qt(QImage& image, png_structp png_ptr, png_infop info_ptr, float scre if (image.isNull()) return; } - image.setNumColors(ncols); + image.setColorCount(ncols); for (int i=0; i<ncols; i++) { int c = i*255/(ncols-1); image.setColor(i, qRgba(c,c,c,0xff)); @@ -230,7 +230,7 @@ void setup_qt(QImage& image, png_structp png_ptr, png_infop info_ptr, float scre if (image.isNull()) return; } - image.setNumColors(info_ptr->num_palette); + image.setColorCount(info_ptr->num_palette); int i = 0; if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) { while (i < info_ptr->num_trans) { @@ -508,7 +508,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngImage(QImage *outImage) // sanity check palette entries if (color_type == PNG_COLOR_TYPE_PALETTE && outImage->format() == QImage::Format_Indexed8) { - int color_table_size = outImage->numColors(); + int color_table_size = outImage->colorCount(); for (int y=0; y<(int)height; ++y) { uchar *p = outImage->scanLine(y); uchar *end = p + width; @@ -762,9 +762,9 @@ bool Q_INTERNAL_WIN_NO_THROW QPNGImageWriter::writeImage(const QImage& image_in, png_colorp palette = 0; png_bytep copy_trans = 0; - if (image.numColors()) { + if (image.colorCount()) { // Paletted - int num_palette = image.numColors(); + int num_palette = image.colorCount(); palette = new png_color[num_palette]; png_set_PLTE(png_ptr, info_ptr, palette, num_palette); int* trans = new int[num_palette]; diff --git a/src/gui/image/qppmhandler.cpp b/src/gui/image/qppmhandler.cpp index 28e4a2a..8ec9efb 100644 --- a/src/gui/image/qppmhandler.cpp +++ b/src/gui/image/qppmhandler.cpp @@ -242,11 +242,11 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q } if (nbits == 1) { // bitmap - outImage->setNumColors(2); + outImage->setColorCount(2); outImage->setColor(0, qRgb(255,255,255)); // white outImage->setColor(1, qRgb(0,0,0)); // black } else if (nbits == 8) { // graymap - outImage->setNumColors(maxc+1); + outImage->setColorCount(maxc+1); for (int i=0; i<=maxc; i++) outImage->setColor(i, qRgb(i*255/maxc,i*255/maxc,i*255/maxc)); } @@ -287,7 +287,7 @@ static bool write_pbm_image(QIODevice *out, const QImage &sourceImage, const QBy } } - if (image.depth() == 1 && image.numColors() == 2) { + if (image.depth() == 1 && image.colorCount() == 2) { if (qGray(image.color(0)) < qGray(image.color(1))) { // 0=dark/black, 1=light/white - invert image.detach(); diff --git a/src/gui/image/qxbmhandler.cpp b/src/gui/image/qxbmhandler.cpp index 1c74351..0d76ea0 100644 --- a/src/gui/image/qxbmhandler.cpp +++ b/src/gui/image/qxbmhandler.cpp @@ -135,7 +135,7 @@ static bool read_xbm_body(QIODevice *device, int w, int h, QImage *outImage) return false; } - outImage->setNumColors(2); + outImage->setColorCount(2); outImage->setColor(0, qRgb(255,255,255)); // white outImage->setColor(1, qRgb(0,0,0)); // black diff --git a/src/gui/image/qxpmhandler.cpp b/src/gui/image/qxpmhandler.cpp index 4bdd16e..ac4711a 100644 --- a/src/gui/image/qxpmhandler.cpp +++ b/src/gui/image/qxpmhandler.cpp @@ -895,7 +895,7 @@ static bool read_xpm_body( if (image.isNull()) return false; } - image.setNumColors(ncols); + image.setColorCount(ncols); } QMap<quint64, int> colorMap; diff --git a/src/gui/itemviews/qitemdelegate.cpp b/src/gui/itemviews/qitemdelegate.cpp index 3b3036d..3e00dba 100644 --- a/src/gui/itemviews/qitemdelegate.cpp +++ b/src/gui/itemviews/qitemdelegate.cpp @@ -1059,7 +1059,7 @@ QPixmap *QItemDelegate::selected(const QPixmap &pixmap, const QPalette &palette, painter.end(); QPixmap selected = QPixmap(QPixmap::fromImage(img)); - int n = (img.numBytes() >> 10) + 1; + int n = (img.byteCount() >> 10) + 1; if (QPixmapCache::cacheLimit() < n) QPixmapCache::setCacheLimit(n); diff --git a/src/gui/kernel/qcursor_win.cpp b/src/gui/kernel/qcursor_win.cpp index 26cde1a..a4e7b1f 100644 --- a/src/gui/kernel/qcursor_win.cpp +++ b/src/gui/kernel/qcursor_win.cpp @@ -153,8 +153,8 @@ static HCURSOR create32BitCursor(const QPixmap &pixmap, int hx, int hy) bool invb, invm; bbits = pixmap.toImage().convertToFormat(QImage::Format_Mono); mbits = pixmap.toImage().convertToFormat(QImage::Format_Mono); - invb = bbits.numColors() > 1 && qGray(bbits.color(0)) < qGray(bbits.color(1)); - invm = mbits.numColors() > 1 && qGray(mbits.color(0)) < qGray(mbits.color(1)); + invb = bbits.colorCount() > 1 && qGray(bbits.color(0)) < qGray(bbits.color(1)); + invm = mbits.colorCount() > 1 && qGray(mbits.color(0)) < qGray(mbits.color(1)); int sysW = GetSystemMetrics(SM_CXCURSOR); int sysH = GetSystemMetrics(SM_CYCURSOR); @@ -396,8 +396,8 @@ void QCursorData::update() } else { bbits = bm->toImage().convertToFormat(QImage::Format_Mono); mbits = bmm->toImage().convertToFormat(QImage::Format_Mono); - invb = bbits.numColors() > 1 && qGray(bbits.color(0)) < qGray(bbits.color(1)); - invm = mbits.numColors() > 1 && qGray(mbits.color(0)) < qGray(mbits.color(1)); + invb = bbits.colorCount() > 1 && qGray(bbits.color(0)) < qGray(bbits.color(1)); + invm = mbits.colorCount() > 1 && qGray(mbits.color(0)) < qGray(mbits.color(1)); } int n = qMax(1, bbits.width() / 8); int h = bbits.height(); diff --git a/src/gui/kernel/qlayout.cpp b/src/gui/kernel/qlayout.cpp index 70cd5a5..5d44b3d 100644 --- a/src/gui/kernel/qlayout.cpp +++ b/src/gui/kernel/qlayout.cpp @@ -496,6 +496,21 @@ void QLayout::setContentsMargins(int left, int top, int right, int bottom) } /*! + \since 4.6 + + Sets the \a margins to use around the layout. + + By default, QLayout uses the values provided by the style. On + most platforms, the margin is 11 pixels in all directions. + + \sa contentsMargins() +*/ +void QLayout::setContentsMargins(const QMargins &margins) +{ + setContentsMargins(margins.left(), margins.top(), margins.right(), margins.bottom()); +} + +/*! \since 4.3 Extracts the left, top, right, and bottom margins used around the @@ -521,6 +536,23 @@ void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) c } /*! + \since 4.6 + + Returns the margins used around the layout. + + By default, QLayout uses the values provided by the style. On + most platforms, the margin is 11 pixels in all directions. + + \sa setContentsMargins() +*/ +QMargins QLayout::contentsMargins() const +{ + int left, top, right, bottom; + getContentsMargins(&left, &top, &right, &bottom); + return QMargins(left, top, right, bottom); +} + +/*! \since 4.3 Returns the layout's geometry() rectangle, but taking into account the diff --git a/src/gui/kernel/qlayout.h b/src/gui/kernel/qlayout.h index 83cbab6..2f30294 100644 --- a/src/gui/kernel/qlayout.h +++ b/src/gui/kernel/qlayout.h @@ -46,6 +46,7 @@ #include <QtGui/qlayoutitem.h> #include <QtGui/qsizepolicy.h> #include <QtCore/qrect.h> +#include <QtCore/qmargins.h> #include <limits.h> @@ -122,7 +123,9 @@ public: void setSpacing(int); void setContentsMargins(int left, int top, int right, int bottom); + void setContentsMargins(const QMargins &margins); void getContentsMargins(int *left, int *top, int *right, int *bottom) const; + QMargins contentsMargins() const; QRect contentsRect() const; bool setAlignment(QWidget *w, Qt::Alignment alignment); diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp index 566e18c..fde0d45 100644 --- a/src/gui/kernel/qwidget_win.cpp +++ b/src/gui/kernel/qwidget_win.cpp @@ -2073,7 +2073,6 @@ void QWidgetPrivate::winSetupGestures() (vbarpolicy == Qt::ScrollBarAsNeeded && vbar->minimum() < vbar->maximum())); singleFingerPanEnabled = asa->d_func()->singleFingerPanEnabled; if (!winid) { - q->setAttribute(Qt::WA_DontCreateNativeAncestors); winid = q->winId(); // enforces the native winid on the viewport } } diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp index 28676da..7461637 100644 --- a/src/gui/kernel/qwidget_x11.cpp +++ b/src/gui/kernel/qwidget_x11.cpp @@ -1445,7 +1445,7 @@ void QWidgetPrivate::setWindowIcon_sys(bool forceReset) icon_data[pos++] = image.width(); icon_data[pos++] = image.height(); if (sizeof(long) == sizeof(quint32)) { - memcpy(icon_data.data() + pos, image.scanLine(0), image.numBytes()); + memcpy(icon_data.data() + pos, image.scanLine(0), image.byteCount()); } else { for (int y = 0; y < image.height(); ++y) { uint *scanLine = reinterpret_cast<uint *>(image.scanLine(y)); diff --git a/src/gui/painting/qcolormap_qws.cpp b/src/gui/painting/qcolormap_qws.cpp index ce4cd09..bc97b08 100644 --- a/src/gui/painting/qcolormap_qws.cpp +++ b/src/gui/painting/qcolormap_qws.cpp @@ -170,7 +170,7 @@ const QColor QColormap::colorAt(uint pixel) const (pixel & green_mask) >> green_shift, (pixel & blue_mask)); } - Q_ASSERT_X(int(pixel) < qt_screen->numCols(), "QColormap::colorAt", "pixel out of bounds of palette"); + Q_ASSERT_X(int(pixel) < qt_screen->colorCount(), "QColormap::colorAt", "pixel out of bounds of palette"); return QColor(qt_screen->clut()[pixel]); } diff --git a/src/gui/painting/qmatrix.cpp b/src/gui/painting/qmatrix.cpp index 88b2b7a..17b7241 100644 --- a/src/gui/painting/qmatrix.cpp +++ b/src/gui/painting/qmatrix.cpp @@ -85,7 +85,7 @@ QT_BEGIN_NAMESPACE which returns true if the matrix is non-singular (i.e. AB = BA = I). The inverted() function returns an inverted copy of \e this matrix if it is invertible (otherwise it returns the identity - matrix). In addition, QMatrix provides the det() function + matrix). In addition, QMatrix provides the determinant() function returning the matrix's determinant. Finally, the QMatrix class supports matrix multiplication, and @@ -959,9 +959,19 @@ QMatrix &QMatrix::rotate(qreal a) */ /*! + \obsolete \fn qreal QMatrix::det() const Returns the matrix's determinant. + + \sa determinant() +*/ + +/*! + \since 4.6 + \fn qreal QMatrix::determinant() const + + Returns the matrix's determinant. */ /*! @@ -985,8 +995,8 @@ QMatrix &QMatrix::rotate(qreal a) QMatrix QMatrix::inverted(bool *invertible) const { - qreal determinant = det(); - if (determinant == 0.0) { + qreal dtr = determinant(); + if (dtr == 0.0) { if (invertible) *invertible = false; // singular matrix return QMatrix(true); @@ -994,7 +1004,7 @@ QMatrix QMatrix::inverted(bool *invertible) const else { // invertible matrix if (invertible) *invertible = true; - qreal dinv = 1.0/determinant; + qreal dinv = 1.0/dtr; return QMatrix((_m22*dinv), (-_m12*dinv), (-_m21*dinv), (_m11*dinv), ((_m21*_dy - _m22*_dx)*dinv), diff --git a/src/gui/painting/qmatrix.h b/src/gui/painting/qmatrix.h index 8887f0e..152b3c9 100644 --- a/src/gui/painting/qmatrix.h +++ b/src/gui/painting/qmatrix.h @@ -101,7 +101,8 @@ public: QMatrix &rotate(qreal a); bool isInvertible() const { return !qFuzzyIsNull(_m11*_m22 - _m12*_m21); } - qreal det() const { return _m11*_m22 - _m12*_m21; } + qreal determinant() const { return _m11*_m22 - _m12*_m21; } + QT_DEPRECATED qreal det() const { return _m11*_m22 - _m12*_m21; } QMatrix inverted(bool *invertible = 0) const; diff --git a/src/gui/painting/qpaintdevice.h b/src/gui/painting/qpaintdevice.h index c8e86b8..9148e4b 100644 --- a/src/gui/painting/qpaintdevice.h +++ b/src/gui/painting/qpaintdevice.h @@ -96,7 +96,8 @@ public: int logicalDpiY() const { return metric(PdmDpiY); } int physicalDpiX() const { return metric(PdmPhysicalDpiX); } int physicalDpiY() const { return metric(PdmPhysicalDpiY); } - int numColors() const { return metric(PdmNumColors); } + QT_DEPRECATED int numColors() const { return metric(PdmNumColors); } + int colorCount() const { return metric(PdmNumColors); } int depth() const { return metric(PdmDepth); } protected: diff --git a/src/gui/painting/qpaintengine_mac.cpp b/src/gui/painting/qpaintengine_mac.cpp index e686373..c1b887c 100644 --- a/src/gui/painting/qpaintengine_mac.cpp +++ b/src/gui/painting/qpaintengine_mac.cpp @@ -1023,7 +1023,7 @@ CGImageRef qt_mac_createCGImageFromQImage(const QImage &img, const QImage **imag #endif QCFType<CGDataProviderRef> dataProvider = CGDataProviderCreateWithData(image, static_cast<const QImage *>(image)->bits(), - image->numBytes(), + image->byteCount(), drawImageReleaseData); if (imagePtr) *imagePtr = image; diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 8d0b961..3f33319 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -1362,7 +1362,7 @@ void QRasterPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) Q_D(QRasterPaintEngine); - if (region.numRects() == 1) { + if (region.rectCount() == 1) { clip(region.boundingRect(), op); return; } @@ -4536,7 +4536,7 @@ void QClipData::setClipRect(const QRect &rect) */ void QClipData::setClipRegion(const QRegion ®ion) { - if (region.numRects() == 1) { + if (region.rectCount() == 1) { setClipRect(region.rects().at(0)); return; } diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp index 1fb8aab..7d1c109 100644 --- a/src/gui/painting/qpaintengineex.cpp +++ b/src/gui/painting/qpaintengineex.cpp @@ -602,7 +602,7 @@ void QPaintEngineEx::clip(const QRect &r, Qt::ClipOperation op) void QPaintEngineEx::clip(const QRegion ®ion, Qt::ClipOperation op) { - if (region.numRects() == 1) + if (region.rectCount() == 1) clip(region.boundingRect(), op); QVector<QRect> rects = region.rects(); diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp index b48b024..9d1d965 100644 --- a/src/gui/painting/qregion.cpp +++ b/src/gui/painting/qregion.cpp @@ -690,7 +690,7 @@ bool QRegion::intersects(const QRegion ®ion) const if (!rect_intersects(boundingRect(), region.boundingRect())) return false; - if (numRects() == 1 && region.numRects() == 1) + if (rectCount() == 1 && region.rectCount() == 1) return true; const QVector<QRect> myRects = rects(); @@ -717,7 +717,7 @@ bool QRegion::intersects(const QRect &rect) const const QRect r = rect.normalized(); if (!rect_intersects(boundingRect(), r)) return false; - if (numRects() == 1) + if (rectCount() == 1) return true; const QVector<QRect> myRects = rects(); @@ -739,6 +739,7 @@ QRegion QRegion::intersect(const QRect &r) const #endif /*! + \obsolete \fn int QRegion::numRects() const \since 4.4 @@ -746,6 +747,13 @@ QRegion QRegion::intersect(const QRect &r) const */ /*! + \fn int QRegion::rectCount() const + \since 4.6 + + Returns the number of rectangles that will be returned in rects(). +*/ + +/*! \fn bool QRegion::isEmpty() const Returns true if the region is empty; otherwise returns false. An @@ -1027,7 +1035,7 @@ void addSegmentsToPath(Segment *segment, QPainterPath &path) Q_AUTOTEST_EXPORT QPainterPath qt_regionToPath(const QRegion ®ion) { QPainterPath result; - if (region.numRects() == 1) { + if (region.rectCount() == 1) { result.addRect(region.boundingRect()); return result; } @@ -4317,6 +4325,12 @@ int QRegion::numRects() const return (d->qt_rgn ? d->qt_rgn->numRects : 0); } +int QRegion::rectCount() const +{ + return (d->qt_rgn ? d->qt_rgn->numRects : 0); +} + + bool QRegion::operator==(const QRegion &r) const { if (!d->qt_rgn) diff --git a/src/gui/painting/qregion.h b/src/gui/painting/qregion.h index 7e459ed..2a1be86 100644 --- a/src/gui/painting/qregion.h +++ b/src/gui/painting/qregion.h @@ -116,7 +116,8 @@ public: QRect boundingRect() const; QVector<QRect> rects() const; void setRects(const QRect *rect, int num); - int numRects() const; + QT_DEPRECATED int numRects() const; + int rectCount() const; const QRegion operator|(const QRegion &r) const; const QRegion operator+(const QRegion &r) const; diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp index 1bd5842..45db80a 100644 --- a/src/gui/painting/qtransform.cpp +++ b/src/gui/painting/qtransform.cpp @@ -1421,7 +1421,7 @@ QRegion QTransform::map(const QRegion &r) const return copy; } - if (t == TxScale && r.numRects() == 1) + if (t == TxScale && r.rectCount() == 1) return QRegion(mapRect(r.boundingRect())); QPainterPath p = map(qt_regionToPath(r)); diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp index d412040..5060f95 100644 --- a/src/gui/painting/qwindowsurface_raster.cpp +++ b/src/gui/painting/qwindowsurface_raster.cpp @@ -140,7 +140,7 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi // Not ready for painting yet, bail out. This can happen in // QWidget::create_sys() - if (!d->image || rgn.numRects() == 0) + if (!d->image || rgn.rectCount() == 0) return; #ifdef Q_WS_WIN @@ -203,7 +203,7 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi wrgn.translate(-wOffset); QRect wbr = wrgn.boundingRect(); - if (wrgn.numRects() != 1) { + if (wrgn.rectCount() != 1) { int num; XRectangle *rects = (XRectangle *)qt_getClipRects(wrgn, num); XSetClipRectangles(X11->display, d_ptr->gc, 0, 0, rects, num, YXBanded); @@ -242,7 +242,7 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi } } - if (wrgn.numRects() != 1) + if (wrgn.rectCount() != 1) XSetClipMask(X11->display, d_ptr->gc, XNone); #endif // FALCON diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index e0fcb92..b5e92c7 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -433,7 +433,7 @@ QColor QS60StylePrivate::colorFromFrameGraphics(SkinFrameElements frame) const return Qt::black; const QRgb *pixelRgb = (const QRgb*)frameImage.bits(); - const int pixels = frameImage.numBytes()/sizeof(QRgb); + const int pixels = frameImage.byteCount()/sizeof(QRgb); int estimatedRed = 0; int estimatedGreen = 0; diff --git a/src/gui/text/qfontengine_qpf.cpp b/src/gui/text/qfontengine_qpf.cpp index 94974fc..f978bd8 100644 --- a/src/gui/text/qfontengine_qpf.cpp +++ b/src/gui/text/qfontengine_qpf.cpp @@ -938,7 +938,7 @@ void QFontEngineQPF::loadGlyph(glyph_t glyph) g.advance = qRound(metrics.xoff); QT_WRITE(fd, &g, sizeof(g)); - QT_WRITE(fd, img.bits(), img.numBytes()); + QT_WRITE(fd, img.bits(), img.byteCount()); glyphPos = oldSize - glyphDataOffset; #if 0 && defined(DEBUG_FONTENGINE) @@ -948,7 +948,7 @@ void QFontEngineQPF::loadGlyph(glyph_t glyph) quint32 *gmap = (quint32 *)(fontData + glyphMapOffset); gmap[glyph] = qToBigEndian(glyphPos); - glyphDataSize = glyphPos + sizeof(g) + img.numBytes(); + glyphDataSize = glyphPos + sizeof(g) + img.byteCount(); quint32 *blockSizePtr = (quint32 *)(fontData + glyphDataOffset - 4); *blockSizePtr = qToBigEndian(glyphDataSize); } diff --git a/src/gui/widgets/qabstractscrollarea.cpp b/src/gui/widgets/qabstractscrollarea.cpp index 1a4ee2b..b0d0baf 100644 --- a/src/gui/widgets/qabstractscrollarea.cpp +++ b/src/gui/widgets/qabstractscrollarea.cpp @@ -51,6 +51,7 @@ #include "qdebug.h" #include "qboxlayout.h" #include "qpainter.h" +#include "qmargins.h" #include "qabstractscrollarea_p.h" #include <qwidget.h> @@ -868,6 +869,22 @@ void QAbstractScrollArea::setViewportMargins(int left, int top, int right, int b } /*! + \since 4.6 + Sets \a margins around the scrolling area. This is useful for + applications such as spreadsheets with "locked" rows and columns. + The marginal space is is left blank; put widgets in the unused + area. + + By default all margins are zero. + +*/ +void QAbstractScrollArea::setViewportMargins(const QMargins &margins) +{ + setViewportMargins(margins.left(), margins.top(), + margins.right(), margins.bottom()); +} + +/*! \fn bool QAbstractScrollArea::event(QEvent *event) \reimp diff --git a/src/gui/widgets/qabstractscrollarea.h b/src/gui/widgets/qabstractscrollarea.h index b3a1861..18d1e96 100644 --- a/src/gui/widgets/qabstractscrollarea.h +++ b/src/gui/widgets/qabstractscrollarea.h @@ -52,6 +52,7 @@ QT_MODULE(Gui) #ifndef QT_NO_SCROLLAREA +class QMargins; class QScrollBar; class QAbstractScrollAreaPrivate; @@ -95,6 +96,7 @@ protected Q_SLOTS: protected: QAbstractScrollArea(QAbstractScrollAreaPrivate &dd, QWidget *parent = 0); void setViewportMargins(int left, int top, int right, int bottom); + void setViewportMargins(const QMargins &margins); bool event(QEvent *); virtual bool viewportEvent(QEvent *); diff --git a/src/gui/widgets/qlcdnumber.cpp b/src/gui/widgets/qlcdnumber.cpp index 9f9e353..f33a98f 100644 --- a/src/gui/widgets/qlcdnumber.cpp +++ b/src/gui/widgets/qlcdnumber.cpp @@ -85,7 +85,7 @@ public: decimal point with setSmallDecimalPoint(). QLCDNumber emits the overflow() signal when it is asked to display - something beyond its range. The range is set by setNumDigits(), + something beyond its range. The range is set by setDigitCount(), but setSmallDecimalPoint() also influences it. If the display is set to hexadecimal, octal or binary, the integer equivalent of the value is displayed. @@ -160,7 +160,7 @@ public: This signal is emitted whenever the QLCDNumber is asked to display a too-large number or a too-long string. - It is never emitted by setNumDigits(). + It is never emitted by setDigitCount(). */ @@ -345,7 +345,7 @@ static const char *getSegments(char ch) // gets list of segments f The \a parent and \a name arguments are passed to the QFrame constructor. - \sa setNumDigits(), setSmallDecimalPoint() + \sa setDigitCount(), setSmallDecimalPoint() */ QLCDNumber::QLCDNumber(QWidget *parent, const char *name) @@ -367,7 +367,7 @@ QLCDNumber::QLCDNumber(QWidget *parent, const char *name) The \a parent and \a name arguments are passed to the QFrame constructor. - \sa setNumDigits(), setSmallDecimalPoint() + \sa setDigitCount(), setSmallDecimalPoint() */ QLCDNumber::QLCDNumber(uint numDigits, QWidget *parent, const char *name) @@ -387,7 +387,7 @@ QLCDNumber::QLCDNumber(uint numDigits, QWidget *parent, const char *name) The \a parent argument is passed to the QFrame constructor. - \sa setNumDigits(), setSmallDecimalPoint() + \sa setDigitCount(), setSmallDecimalPoint() */ QLCDNumber::QLCDNumber(QWidget *parent) @@ -407,7 +407,7 @@ QLCDNumber::QLCDNumber(QWidget *parent) The \a parent argument is passed to the QFrame constructor. - \sa setNumDigits(), setSmallDecimalPoint() + \sa setDigitCount(), setSmallDecimalPoint() */ QLCDNumber::QLCDNumber(uint numDigits, QWidget *parent) @@ -426,7 +426,7 @@ void QLCDNumberPrivate::init() val = 0; base = QLCDNumber::Dec; smallPoint = false; - q->setNumDigits(ndigits); + q->setDigitCount(ndigits); q->setSegmentStyle(QLCDNumber::Filled); q->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); } @@ -441,8 +441,21 @@ QLCDNumber::~QLCDNumber() /*! + \obsolete \property QLCDNumber::numDigits \brief the current number of digits displayed + \sa setDigitCount +*/ + +void QLCDNumber::setNumDigits(int numDigits) +{ + setDigitCount(numDigits); +} + +/*! + \since 4.6 + \property QLCDNumber::digitCount + \brief the current number of digits displayed Corresponds to the current number of digits. If \l QLCDNumber::smallDecimalPoint is false, the decimal point occupies @@ -453,7 +466,7 @@ QLCDNumber::~QLCDNumber() \sa smallDecimalPoint */ -void QLCDNumber::setNumDigits(int numDigits) +void QLCDNumber::setDigitCount(int numDigits) { Q_D(QLCDNumber); if (numDigits > 99) { @@ -508,13 +521,19 @@ int QLCDNumber::numDigits() const return d->ndigits; } +int QLCDNumber::digitCount() const +{ + Q_D(const QLCDNumber); + return d->ndigits; +} + /*! \overload Returns true if \a num is too big to be displayed in its entirety; otherwise returns false. - \sa display(), numDigits(), smallDecimalPoint() + \sa display(), digitCount(), smallDecimalPoint() */ bool QLCDNumber::checkOverflow(int num) const @@ -530,7 +549,7 @@ bool QLCDNumber::checkOverflow(int num) const Returns true if \a num is too big to be displayed in its entirety; otherwise returns false. - \sa display(), numDigits(), smallDecimalPoint() + \sa display(), digitCount(), smallDecimalPoint() */ bool QLCDNumber::checkOverflow(double num) const @@ -1256,7 +1275,7 @@ QLCDNumber::SegmentStyle QLCDNumber::segmentStyle() const */ QSize QLCDNumber::sizeHint() const { - return QSize(10 + 9 * (numDigits() + (smallDecimalPoint() ? 0 : 1)), 23); + return QSize(10 + 9 * (digitCount() + (smallDecimalPoint() ? 0 : 1)), 23); } /*! \reimp */ diff --git a/src/gui/widgets/qlcdnumber.h b/src/gui/widgets/qlcdnumber.h index 9753f31..e65637d 100644 --- a/src/gui/widgets/qlcdnumber.h +++ b/src/gui/widgets/qlcdnumber.h @@ -60,6 +60,7 @@ class Q_GUI_EXPORT QLCDNumber : public QFrame // LCD number widget Q_ENUMS(Mode SegmentStyle) Q_PROPERTY(bool smallDecimalPoint READ smallDecimalPoint WRITE setSmallDecimalPoint) Q_PROPERTY(int numDigits READ numDigits WRITE setNumDigits) + Q_PROPERTY(int digitCount READ digitCount WRITE setDigitCount) Q_PROPERTY(Mode mode READ mode WRITE setMode) Q_PROPERTY(SegmentStyle segmentStyle READ segmentStyle WRITE setSegmentStyle) Q_PROPERTY(double value READ value WRITE display) @@ -82,8 +83,10 @@ public: bool smallDecimalPoint() const; - int numDigits() const; - void setNumDigits(int nDigits); + QT_DEPRECATED int numDigits() const; + QT_DEPRECATED void setNumDigits(int nDigits); + int digitCount() const; + void setDigitCount(int nDigits); bool checkOverflow(double num) const; bool checkOverflow(int num) const; diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp index e4252b5..f5dbe1c 100644 --- a/src/gui/widgets/qlineedit.cpp +++ b/src/gui/widgets/qlineedit.cpp @@ -1102,6 +1102,17 @@ void QLineEdit::setTextMargins(int left, int top, int right, int bottom) } /*! + \since 4.6 + Sets the \a margins around the text inside the frame. + + See also textMargins(). +*/ +void QLineEdit::setTextMargins(const QMargins &margins) +{ + setTextMargins(margins.left(), margins.top(), margins.right(), margins.bottom()); +} + +/*! Returns the widget's text margins for \a left, \a top, \a right, and \a bottom. \since 4.5 @@ -1121,6 +1132,18 @@ void QLineEdit::getTextMargins(int *left, int *top, int *right, int *bottom) con } /*! + \since 4.6 + Returns the widget's text margins. + + \sa setTextMargins() +*/ +QMargins QLineEdit::textMargins() const +{ + Q_D(const QLineEdit); + return QMargins(d->leftTextMargin, d->topTextMargin, d->rightTextMargin, d->bottomTextMargin); +} + +/*! \property QLineEdit::inputMask \brief The validation input mask diff --git a/src/gui/widgets/qlineedit.h b/src/gui/widgets/qlineedit.h index 214509a..ac918c7 100644 --- a/src/gui/widgets/qlineedit.h +++ b/src/gui/widgets/qlineedit.h @@ -44,6 +44,7 @@ #include <QtGui/qframe.h> #include <QtCore/qstring.h> +#include <QtCore/qmargins.h> QT_BEGIN_HEADER @@ -158,7 +159,9 @@ public: bool hasAcceptableInput() const; void setTextMargins(int left, int top, int right, int bottom); + void setTextMargins(const QMargins &margins); void getTextMargins(int *left, int *top, int *right, int *bottom) const; + QMargins textMargins() const; public Q_SLOTS: void setText(const QString &); diff --git a/src/gui/widgets/qprintpreviewwidget.cpp b/src/gui/widgets/qprintpreviewwidget.cpp index d92b1ea..0074c91 100644 --- a/src/gui/widgets/qprintpreviewwidget.cpp +++ b/src/gui/widgets/qprintpreviewwidget.cpp @@ -663,7 +663,9 @@ void QPrintPreviewWidget::setZoomFactor(qreal factor) } /*! + \obsolete Returns the number of pages in the preview. + \sa pageCount() */ int QPrintPreviewWidget::numPages() const { @@ -672,6 +674,16 @@ int QPrintPreviewWidget::numPages() const } /*! + \since 4.6 + Returns the number of pages in the preview. +*/ +int QPrintPreviewWidget::pageCount() const +{ + Q_D(const QPrintPreviewWidget); + return d->pages.size(); +} + +/*! Returns the currently viewed page in the preview. */ int QPrintPreviewWidget::currentPage() const diff --git a/src/gui/widgets/qprintpreviewwidget.h b/src/gui/widgets/qprintpreviewwidget.h index 2823873..08e596d 100644 --- a/src/gui/widgets/qprintpreviewwidget.h +++ b/src/gui/widgets/qprintpreviewwidget.h @@ -82,7 +82,8 @@ public: ViewMode viewMode() const; ZoomMode zoomMode() const; int currentPage() const; - int numPages() const; + QT_DEPRECATED int numPages() const; + int pageCount() const; void setVisible(bool visible); public Q_SLOTS: diff --git a/src/multimedia/video/qimagevideobuffer.cpp b/src/multimedia/video/qimagevideobuffer.cpp index bfeb2a0..e57adb6 100644 --- a/src/multimedia/video/qimagevideobuffer.cpp +++ b/src/multimedia/video/qimagevideobuffer.cpp @@ -85,7 +85,7 @@ uchar *QImageVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine) d->mapMode = mode; if (numBytes) - *numBytes = d->image.numBytes(); + *numBytes = d->image.byteCount(); if (bytesPerLine) *bytesPerLine = d->image.bytesPerLine(); diff --git a/src/network/access/qnetworkcookie.cpp b/src/network/access/qnetworkcookie.cpp index 73a8703..7dfb7af 100644 --- a/src/network/access/qnetworkcookie.cpp +++ b/src/network/access/qnetworkcookie.cpp @@ -984,14 +984,14 @@ QList<QNetworkCookie> QNetworkCookiePrivate::parseSetCookieHeaderLine(const QByt cookie.setExpirationDate(dt); } else if (field.first == "domain") { QByteArray rawDomain = field.second; + QString maybeLeadingDot; if (rawDomain.startsWith('.')) { + maybeLeadingDot = QLatin1Char('.'); rawDomain = rawDomain.mid(1); } + QString normalizedDomain = QUrl::fromAce(QUrl::toAce(QString::fromUtf8(rawDomain))); - // always add the dot, there are some servers that forget the - // leading dot. This is actually forbidden according to RFC 2109, - // but all browsers accept it anyway so we do that as well - cookie.setDomain(QLatin1Char('.') + normalizedDomain); + cookie.setDomain(maybeLeadingDot + normalizedDomain); } else if (field.first == "max-age") { bool ok = false; int secs = field.second.toInt(&ok); diff --git a/src/network/access/qnetworkcookiejar.cpp b/src/network/access/qnetworkcookiejar.cpp index 8430966..19f7217 100644 --- a/src/network/access/qnetworkcookiejar.cpp +++ b/src/network/access/qnetworkcookiejar.cpp @@ -198,6 +198,13 @@ bool QNetworkCookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieLis if (cookie.domain().isEmpty()) { cookie.setDomain(defaultDomain); } else { + // Ensure the domain starts with a dot if its field was not empty + // in the HTTP header. There are some servers that forget the + // leading dot and this is actually forbidden according to RFC 2109, + // but all browsers accept it anyway so we do that as well. + if (!cookie.domain().startsWith(QLatin1Char('.'))) + cookie.setDomain(QLatin1Char('.') + cookie.domain()); + QString domain = cookie.domain(); if (!(isParentDomain(domain, defaultDomain) || isParentDomain(defaultDomain, domain))) { diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h index 64c5152..afd3570 100644 --- a/src/network/kernel/qhostinfo_p.h +++ b/src/network/kernel/qhostinfo_p.h @@ -161,9 +161,11 @@ public Q_SLOTS: cond.wakeOne(); } #ifndef QT_NO_THREAD - if (!wait(QHOSTINFO_THREAD_WAIT)) + if (!wait(QHOSTINFO_THREAD_WAIT)) { terminate(); - wait(); + // Don't wait forever; see QTBUG-5296. + wait(QHOSTINFO_THREAD_WAIT); + } #endif } diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index 8228c7e..8c5bf0e 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -2107,7 +2107,7 @@ void QGL2PaintEngineExPrivate::systemStateChanged() q->state()->rectangleClip = use_system_clip ? systemClip.boundingRect() : QRect(0, 0, width, height); updateClipScissorTest(); - if (systemClip.numRects() == 1) { + if (systemClip.rectCount() == 1) { if (systemClip.boundingRect() == QRect(0, 0, width, height)) use_system_clip = false; #ifndef QT_GL_NO_SCISSOR_TEST diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index ad177dc..8063fc8 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -4078,7 +4078,7 @@ QImage QGLWidget::grabFrameBuffer(bool withAlpha) glReadPixels(0, 0, w, h, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, res.bits()); const QVector<QColor> pal = QColormap::instance().colormap(); if (pal.size()) { - res.setNumColors(pal.size()); + res.setColorCount(pal.size()); for (int i = 0; i < pal.size(); i++) res.setColor(i, pal.at(i).rgb()); } diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp index 5ca37ef..fb55097 100644 --- a/src/opengl/qpixmapdata_gl.cpp +++ b/src/opengl/qpixmapdata_gl.cpp @@ -452,7 +452,7 @@ QImage QGLPixmapData::fillImage(const QColor &color) const if (pixelType() == BitmapType) { img = QImage(w, h, QImage::Format_MonoLSB); - img.setNumColors(2); + img.setColorCount(2); img.setColor(0, QColor(Qt::color0).rgba()); img.setColor(1, QColor(Qt::color1).rgba()); diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index 047d9d8..75b7fa5 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -1753,13 +1753,13 @@ void QVGPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) // QRegion copy on the heap for the test if we can. QRegion clip = d->systemClip; // Reference-counted, no alloc. QRect clipRect; - if (clip.numRects() == 1) { + if (clip.rectCount() == 1) { clipRect = clip.boundingRect().intersected(r); } else if (clip.isEmpty()) { clipRect = r; } else { clip = clip.intersect(r); - if (clip.numRects() != 1) { + if (clip.rectCount() != 1) { d->maskValid = false; d->maskIsSet = false; d->maskRect = QRect(); @@ -1810,7 +1810,7 @@ void QVGPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) Q_D(QVGPaintEngine); // Use the QRect case if the region consists of a single rectangle. - if (region.numRects() == 1) { + if (region.rectCount() == 1) { clip(region.boundingRect(), op); return; } @@ -1853,7 +1853,7 @@ void QVGPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) clip = r; else clip = clip.intersect(r); - if (clip.numRects() == 1) { + if (clip.rectCount() == 1) { d->maskValid = false; d->maskIsSet = false; d->maskRect = clip.boundingRect(); @@ -1871,7 +1871,7 @@ void QVGPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) case Qt::IntersectClip: { - if (region.numRects() != 1) { + if (region.rectCount() != 1) { // If there is more than one rectangle, then intersecting // the rectangles one by one in modifyMask() will not give // the desired result. So fall back to path-based clipping. @@ -2148,7 +2148,7 @@ QRegion QVGPaintEngine::defaultClipRegion() bool QVGPaintEngine::isDefaultClipRegion(const QRegion& region) { - if (region.numRects() != 1) + if (region.rectCount() != 1) return false; QPaintDevice *pdev = paintDevice(); @@ -3544,7 +3544,7 @@ void QVGCompositionHelper::fillBackground d->clearColor = color; d->clearOpacity = 1.0f; } - if (region.numRects() == 1) { + if (region.rectCount() == 1) { QRect r = region.boundingRect(); vgClear(r.x(), screenSize.height() - r.y() - r.height(), r.width(), r.height()); @@ -3569,7 +3569,7 @@ void QVGCompositionHelper::fillBackground d->ensureBrush(brush); d->setFillRule(VG_EVEN_ODD); - if (region.numRects() == 1) { + if (region.rectCount() == 1) { fillBackgroundRect(region.boundingRect(), d); } else { const QVector<QRect> rects = region.rects(); diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp index 87d81f0..7be4a2a 100644 --- a/src/plugins/accessible/widgets/simplewidgets.cpp +++ b/src/plugins/accessible/widgets/simplewidgets.cpp @@ -528,7 +528,7 @@ QString QAccessibleDisplay::text(Text t, int child) const #ifndef QT_NO_LCDNUMBER } else if (qobject_cast<QLCDNumber*>(object())) { QLCDNumber *l = qobject_cast<QLCDNumber*>(object()); - if (l->numDigits()) + if (l->digitCount()) str = QString::number(l->value()); else str = QString::number(l->intValue()); diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp index cb4fb88..daefa21 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp @@ -176,7 +176,7 @@ int QDirectFBPaintDevice::metric(QPaintDevice::PaintDeviceMetric metric) const return QDirectFBScreen::depth(imageFormat); case QPaintDevice::PdmNumColors: { if (!lockedImage.isNull()) - return lockedImage.numColors(); + return lockedImage.colorCount(); DFBResult result; IDirectFBPalette *palette = 0; diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp index 449bc0d..eb771ba 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp @@ -214,7 +214,7 @@ IDirectFBSurface *QDirectFBScreen::createDFBSurface(const QImage &image, QImage: const int height = image.height(); const int bplQt = image.bytesPerLine(); if (bplQt == bplDFB && bplQt == (image.width() * image.depth() / 8)) { - memcpy(mem, image.bits(), image.numBytes()); + memcpy(mem, image.bits(), image.byteCount()); } else { for (int i=0; i<height; ++i) { memcpy(mem, image.scanLine(i), bplQt); @@ -225,7 +225,7 @@ IDirectFBSurface *QDirectFBScreen::createDFBSurface(const QImage &image, QImage: } } #ifdef QT_DIRECTFB_PALETTE - if (image.numColors() != 0 && surface) + if (image.colorCount() != 0 && surface) QDirectFBScreen::setSurfaceColorTable(surface, image); #endif return surface; @@ -497,7 +497,7 @@ void QDirectFBScreen::setSurfaceColorTable(IDirectFBSurface *surface, if (!surface) return; - const int numColors = image.numColors(); + const int numColors = image.colorCount(); if (numColors == 0) return; @@ -1066,7 +1066,7 @@ static inline QColor colorFromName(const QString &name) QRegExp rx("#([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])"); rx.setCaseSensitivity(Qt::CaseInsensitive); if (rx.exactMatch(name)) { - Q_ASSERT(rx.numCaptures() == 4); + Q_ASSERT(rx.captureCount() == 4); int ints[4]; int i; for (i=0; i<4; ++i) { @@ -1564,7 +1564,7 @@ void QDirectFBScreen::exposeRegion(QRegion r, int) primary->SetColor(primary, 0xff, 0xff, 0xff, cmd.windowOpacity); } const QRegion ®ion = cmd.source; - const int rectCount = region.numRects(); + const int rectCount = region.rectCount(); DFBRectangle source; if (rectCount == 1) { ::initParameters(source, region.boundingRect(), cmd.windowPosition); @@ -1619,7 +1619,7 @@ void QDirectFBScreen::solidFill(const QColor &color, const QRegion ®ion) d_ptr->primarySurface->SetColor(d_ptr->primarySurface, color.red(), color.green(), color.blue(), color.alpha()); - const int n = region.numRects(); + const int n = region.rectCount(); if (n == 1) { const QRect r = region.boundingRect(); d_ptr->primarySurface->FillRectangle(d_ptr->primarySurface, r.x(), r.y(), r.width(), r.height()); @@ -1680,7 +1680,7 @@ void QDirectFBScreen::flipSurface(IDirectFBSurface *surface, DFBSurfaceFlipFlags if (!(flipFlags & DSFLIP_BLIT)) { surface->Flip(surface, 0, flipFlags); } else { - if (!(d_ptr->directFBFlags & BoundingRectFlip) && region.numRects() > 1) { + if (!(d_ptr->directFBFlags & BoundingRectFlip) && region.rectCount() > 1) { const QVector<QRect> rects = region.rects(); const DFBSurfaceFlipFlags nonWaitFlags = flipFlags & ~DSFLIP_WAIT; for (int i=0; i<rects.size(); ++i) { diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp index 3fbefc3..c9a010f 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp @@ -311,7 +311,7 @@ bool QDirectFBWindowSurface::scroll(const QRegion ®ion, int dx, int dy) if (!dfbSurface || !(flipFlags & DSFLIP_BLIT) || region.isEmpty()) return false; dfbSurface->SetBlittingFlags(dfbSurface, DSBLIT_NOFX); - if (region.numRects() == 1) { + if (region.rectCount() == 1) { scrollSurface(dfbSurface, region.boundingRect(), dx, dy); } else { const QVector<QRect> rects = region.rects(); diff --git a/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglwindowsurface.cpp b/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglwindowsurface.cpp index 4a3787f..51a6c4e 100644 --- a/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglwindowsurface.cpp +++ b/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglwindowsurface.cpp @@ -199,7 +199,7 @@ void PvrEglWindowSurface::setDirectRegion(const QRegion &r, int id) if (region.isEmpty()) { pvrQwsClearVisibleRegion(drawable); - } else if (region.numRects() == 1) { + } else if (region.rectCount() == 1) { QRect rect = region.boundingRect(); PvrQwsRect pvrRect; pvrRect.x = rect.x(); diff --git a/src/plugins/imageformats/gif/qgifhandler.cpp b/src/plugins/imageformats/gif/qgifhandler.cpp index 98879b0..c95b63c 100644 --- a/src/plugins/imageformats/gif/qgifhandler.cpp +++ b/src/plugins/imageformats/gif/qgifhandler.cpp @@ -335,7 +335,7 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, QImage::Format format = trans_index >= 0 ? QImage::Format_ARGB32 : QImage::Format_RGB32; if (image->isNull()) { (*image) = QImage(swidth, sheight, format); - memset(image->bits(), 0, image->numBytes()); + memset(image->bits(), 0, image->byteCount()); // ### size of the upcoming frame, should rather // be known before decoding it. @@ -393,7 +393,7 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, backingstore = QImage(qMax(backingstore.width(), w), qMax(backingstore.height(), h), QImage::Format_RGB32); - memset(image->bits(), 0, image->numBytes()); + memset(image->bits(), 0, image->byteCount()); } for (int ln=0; ln<h; ln++) { memcpy(backingstore.scanLine(ln), diff --git a/src/plugins/imageformats/ico/qicohandler.cpp b/src/plugins/imageformats/ico/qicohandler.cpp index e01b33a..4d819d1 100644 --- a/src/plugins/imageformats/ico/qicohandler.cpp +++ b/src/plugins/imageformats/ico/qicohandler.cpp @@ -379,7 +379,7 @@ void ICOReader::findColorInfo(QImage & image) void ICOReader::readColorTable(QImage & image) { if (iod) { - image.setNumColors(icoAttrib.ncolors); + image.setColorCount(icoAttrib.ncolors); uchar rgb[4]; for (int i=0; i<icoAttrib.ncolors; i++) { if (iod->read((char*)rgb, 4) != 4) { @@ -574,7 +574,7 @@ QImage ICOReader::iconAt(int index) if (!image.isNull()) { QImage mask(image.width(), image.height(), QImage::Format_Mono); if (!mask.isNull()) { - mask.setNumColors(2); + mask.setColorCount(2); mask.setColor(0, qRgba(255,255,255,0xff)); mask.setColor(1, qRgba(0 ,0 ,0 ,0xff)); read1BitBMP(mask); diff --git a/src/plugins/imageformats/jpeg/qjpeghandler.cpp b/src/plugins/imageformats/jpeg/qjpeghandler.cpp index 3b23e56..6b2f885 100644 --- a/src/plugins/imageformats/jpeg/qjpeghandler.cpp +++ b/src/plugins/imageformats/jpeg/qjpeghandler.cpp @@ -741,7 +741,7 @@ static bool ensureValidImage(QImage *dest, struct jpeg_decompress_struct *info, *dest = QImage(size, format); if (format == QImage::Format_Indexed8) { - dest->setNumColors(256); + dest->setColorCount(256); for (int i = 0; i < 256; i++) dest->setColor(i, qRgb(i,i,i)); } @@ -851,7 +851,7 @@ static bool read_jpeg_image(QIODevice *device, QImage *outImage, } else if (cinfo.output_components == 1) { if (outImage->size() != QSize(sWidth, sHeight) || outImage->format() != QImage::Format_Indexed8) *outImage = QImage(sWidth, sHeight, QImage::Format_Indexed8); - outImage->setNumColors(256); + outImage->setColorCount(256); for (int i = 0; i < 256; ++i) outImage->setColor(i, qRgb(i,i,i)); } else { @@ -1054,7 +1054,7 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s case QImage::Format_MonoLSB: case QImage::Format_Indexed8: gray = true; - for (int i = image.numColors(); gray && i--;) { + for (int i = image.colorCount(); gray && i--;) { gray = gray & (qRed(cmap[i]) == qGreen(cmap[i]) && qRed(cmap[i]) == qBlue(cmap[i])); } diff --git a/src/qt3support/painting/q3paintdevicemetrics.h b/src/qt3support/painting/q3paintdevicemetrics.h index 830dd90..4f1603b 100644 --- a/src/qt3support/painting/q3paintdevicemetrics.h +++ b/src/qt3support/painting/q3paintdevicemetrics.h @@ -63,7 +63,7 @@ public: int logicalDpiY() const { return pdev->logicalDpiY(); } int physicalDpiX() const { return pdev->physicalDpiX(); } int physicalDpiY() const { return pdev->physicalDpiY(); } - int numColors() const { return pdev->numColors(); } + int numColors() const { return pdev->colorCount(); } int depth() const { return pdev->depth(); } private: diff --git a/src/src.pro b/src/src.pro index 5307612..7cab6c9 100644 --- a/src/src.pro +++ b/src/src.pro @@ -8,17 +8,12 @@ wince*:{ } else:symbian { SRC_SUBDIRS += src_s60main src_corelib src_xml src_gui src_network src_sql src_testlib src_s60installs } else { - SRC_SUBDIRS += src_tools_bootstrap src_tools_moc src_tools_rcc src_tools_uic src_corelib src_xml src_network src_gui src_sql src_testlib + SRC_SUBDIRS += src_corelib src_xml src_network src_gui src_sql src_testlib !vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support + include(tools/tools.pro) contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus - !cross_compile { - contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_tools_uic3 - } -} -win32:{ - SRC_SUBDIRS += src_activeqt - !wince*: SRC_SUBDIRS += src_tools_idc } +win32:SRC_SUBDIRS += src_activeqt contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2): SRC_SUBDIRS += src_opengl contains(QT_CONFIG, openvg): SRC_SUBDIRS += src_openvg @@ -41,14 +36,6 @@ src_s60installs.subdir = $$QT_SOURCE_TREE/src/s60installs src_s60installs.target = sub-s60installs src_winmain.subdir = $$QT_SOURCE_TREE/src/winmain src_winmain.target = sub-winmain -src_tools_bootstrap.subdir = $$QT_SOURCE_TREE/src/tools/bootstrap -src_tools_bootstrap.target = sub-tools-bootstrap -src_tools_moc.subdir = $$QT_SOURCE_TREE/src/tools/moc -src_tools_moc.target = sub-moc -src_tools_rcc.subdir = $$QT_SOURCE_TREE/src/tools/rcc -src_tools_rcc.target = sub-rcc -src_tools_uic.subdir = $$QT_SOURCE_TREE/src/tools/uic -src_tools_uic.target = sub-uic src_corelib.subdir = $$QT_SOURCE_TREE/src/corelib src_corelib.target = sub-corelib src_xml.subdir = $$QT_SOURCE_TREE/src/xml @@ -79,12 +66,8 @@ src_phonon.subdir = $$QT_SOURCE_TREE/src/phonon src_phonon.target = sub-phonon src_multimedia.subdir = $$QT_SOURCE_TREE/src/multimedia src_multimedia.target = sub-multimedia -src_tools_uic3.subdir = $$QT_SOURCE_TREE/src/tools/uic3 -src_tools_uic3.target = sub-uic3 src_activeqt.subdir = $$QT_SOURCE_TREE/src/activeqt src_activeqt.target = sub-activeqt -src_tools_idc.subdir = $$QT_SOURCE_TREE/src/tools/idc -src_tools_idc.target = sub-idc src_plugins.subdir = $$QT_SOURCE_TREE/src/plugins src_plugins.target = sub-plugins src_testlib.subdir = $$QT_SOURCE_TREE/src/testlib @@ -98,9 +81,6 @@ src_declarative.target = sub-declarative #CONFIG += ordered !wince*:!symbian:!ordered { - src_tools_moc.depends = src_tools_bootstrap - src_tools_rcc.depends = src_tools_bootstrap - src_tools_uic.depends = src_tools_bootstrap src_corelib.depends = src_tools_moc src_tools_rcc src_gui.depends = src_corelib src_tools_uic embedded: src_gui.depends += src_network @@ -116,10 +96,10 @@ src_declarative.target = sub-declarative src_sql.depends = src_corelib src_testlib.depends = src_corelib src_qt3support.depends = src_gui src_xml src_network src_sql + src_tools_idc.depends = src_corelib # target defined in tools.pro + src_tools_uic3.depends = src_qt3support src_xml # target defined in tools.pro src_phonon.depends = src_gui src_multimedia.depends = src_gui - src_tools_uic3.depends = src_qt3support src_xml - src_tools_idc.depends = src_corelib src_tools_activeqt.depends = src_tools_idc src_gui src_declarative.depends = src_xml src_gui src_script src_network src_svg src_plugins.depends = src_gui src_sql src_svg @@ -146,8 +126,6 @@ sub_src_target.recurse_target = QMAKE_EXTRA_TARGETS += sub_src_target # This gives us a top level debug/release -EXTRA_DEBUG_TARGETS = -EXTRA_RELEASE_TARGETS = for(subname, SRC_SUBDIRS) { subdir = $$subname !isEmpty($${subname}.subdir):subdir = $$eval($${subname}.subdir) @@ -189,4 +167,3 @@ QMAKE_EXTRA_TARGETS += debug release } SUBDIRS += $$SRC_SUBDIRS - diff --git a/src/testlib/qbenchmarkvalgrind.cpp b/src/testlib/qbenchmarkvalgrind.cpp index 3398737..88cb37f 100644 --- a/src/testlib/qbenchmarkvalgrind.cpp +++ b/src/testlib/qbenchmarkvalgrind.cpp @@ -114,7 +114,7 @@ qint64 QBenchmarkValgrindUtils::extractResult(const QString &fileName) while (!file.atEnd()) { const QString line(QLatin1String(file.readLine())); if (rxValue.indexIn(line) != -1) { - Q_ASSERT(rxValue.numCaptures() == 1); + Q_ASSERT(rxValue.captureCount() == 1); bool ok; val = rxValue.cap(1).toLongLong(&ok); Q_ASSERT(ok); diff --git a/src/tools/tools.pro b/src/tools/tools.pro new file mode 100644 index 0000000..7c8fb47 --- /dev/null +++ b/src/tools/tools.pro @@ -0,0 +1,70 @@ +TEMPLATE = subdirs + +TOOLS_SUBDIRS = src_tools_bootstrap src_tools_moc src_tools_rcc src_tools_uic +!cross_compile { + contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_tools_uic3 + win32:!wince*: SRC_SUBDIRS += src_tools_idc +} + +# Set subdir and respective target name +src_tools_bootstrap.subdir = $$QT_SOURCE_TREE/src/tools/bootstrap +src_tools_bootstrap.target = sub-tools-bootstrap +src_tools_moc.subdir = $$QT_SOURCE_TREE/src/tools/moc +src_tools_moc.target = sub-moc +src_tools_rcc.subdir = $$QT_SOURCE_TREE/src/tools/rcc +src_tools_rcc.target = sub-rcc +src_tools_uic.subdir = $$QT_SOURCE_TREE/src/tools/uic +src_tools_uic.target = sub-uic +src_tools_uic3.subdir = $$QT_SOURCE_TREE/src/tools/uic3 +src_tools_uic3.target = sub-uic3 +src_tools_idc.subdir = $$QT_SOURCE_TREE/src/tools/idc +src_tools_idc.target = sub-idc + +# Set dependencies for each subdir +src_tools_moc.depends = src_tools_bootstrap +src_tools_rcc.depends = src_tools_bootstrap +src_tools_uic.depends = src_tools_bootstrap + +# Special handling, depending on type of project, if it used debug/release or only has one configuration +EXTRA_DEBUG_TARGETS = +EXTRA_RELEASE_TARGETS = +!symbian { + for(subname, TOOLS_SUBDIRS) { + subdir = $$subname + !isEmpty($${subname}.subdir):subdir = $$eval($${subname}.subdir) + subpro = $$subdir/$${basename(subdir)}.pro + !exists($$subpro):next() + subtarget = $$replace(subdir, [^A-Za-z0-9], _) + reg_src = $$replace(QT_SOURCE_TREE, \\\\, \\\\) + subdir = $$replace(subdir, $$reg_src, $$QT_BUILD_TREE) + subdir = $$replace(subdir, /, $$QMAKE_DIR_SEP) + subdir = $$replace(subdir, \\\\, $$QMAKE_DIR_SEP) + SUB_TEMPLATE = $$list($$fromfile($$subpro, TEMPLATE)) + !isEqual(subname, src_tools_bootstrap):if(isEqual($$SUB_TEMPLATE, lib) | isEqual($$SUB_TEMPLATE, subdirs) | isEqual(subname, src_tools_idc) | isEqual(subname, src_tools_uic3)):!separate_debug_info { + #debug + eval(debug-$${subtarget}.depends = $${subdir}\$${QMAKE_DIR_SEP}$(MAKEFILE) $$EXTRA_DEBUG_TARGETS) + eval(debug-$${subtarget}.commands = (cd $$subdir && $(MAKE) -f $(MAKEFILE) debug)) + EXTRA_DEBUG_TARGETS += debug-$${subtarget} + QMAKE_EXTRA_TARGETS += debug-$${subtarget} + #release + eval(release-$${subtarget}.depends = $${subdir}\$${QMAKE_DIR_SEP}$(MAKEFILE) $$EXTRA_RELEASE_TARGETS) + eval(release-$${subtarget}.commands = (cd $$subdir && $(MAKE) -f $(MAKEFILE) release)) + EXTRA_RELEASE_TARGETS += release-$${subtarget} + QMAKE_EXTRA_TARGETS += release-$${subtarget} + } else { #do not have a real debug target/release + #debug + eval(debug-$${subtarget}.depends = $${subdir}\$${QMAKE_DIR_SEP}$(MAKEFILE) $$EXTRA_DEBUG_TARGETS) + eval(debug-$${subtarget}.commands = (cd $$subdir && $(MAKE) -f $(MAKEFILE) first)) + EXTRA_DEBUG_TARGETS += debug-$${subtarget} + QMAKE_EXTRA_TARGETS += debug-$${subtarget} + #release + eval(release-$${subtarget}.depends = $${subdir}\$${QMAKE_DIR_SEP}$(MAKEFILE) $$EXTRA_RELEASE_TARGETS) + eval(release-$${subtarget}.commands = (cd $$subdir && $(MAKE) -f $(MAKEFILE) first)) + EXTRA_RELEASE_TARGETS += release-$${subtarget} + QMAKE_EXTRA_TARGETS += release-$${subtarget} + } + } +} + +SUBDIRS = $$TOOLS_SUBDIRS $$SUBDIRS +isEqual(TARGET,tools): SUBDIRS += $$SRC_SUBDIRS diff --git a/src/tools/uic3/embed.cpp b/src/tools/uic3/embed.cpp index d699623..2eb4dd5 100644 --- a/src/tools/uic3/embed.cpp +++ b/src/tools/uic3/embed.cpp @@ -177,7 +177,7 @@ void Ui3Reader::embed(const char *project, const QStringList &images) e->width = img.width(); e->height = img.height(); e->depth = img.depth(); - e->numColors = img.numColors(); + e->numColors = img.colorCount(); e->colorTable = new QRgb[e->numColors]; e->alpha = img.hasAlphaBuffer(); QVector<QRgb> ct = img.colorTable(); @@ -195,7 +195,7 @@ void Ui3Reader::embed(const char *project, const QStringList &images) #ifndef QT_NO_IMAGE_COLLECTION_COMPRESSION e->compressed = #endif - embedData( out, img.bits(), img.numBytes() ); + embedData( out, img.bits(), img.byteCount() ); out << "\n};\n\n"; if ( e->numColors ) { out << s.sprintf( "static const QRgb %s_ctable[] = {", diff --git a/src/xmlpatterns/functions/qpatternmatchingfns.cpp b/src/xmlpatterns/functions/qpatternmatchingfns.cpp index cb421cb..a7275f6 100644 --- a/src/xmlpatterns/functions/qpatternmatchingfns.cpp +++ b/src/xmlpatterns/functions/qpatternmatchingfns.cpp @@ -82,7 +82,7 @@ Item ReplaceFN::evaluateSingleton(const DynamicContext::Ptr &context) const if(arg) input = arg.stringValue(); - const QString replacement(m_replacementString.isNull() ? parseReplacement(regexp.numCaptures(), context) + const QString replacement(m_replacementString.isNull() ? parseReplacement(regexp.captureCount(), context) : m_replacementString); diff --git a/src/xmlpatterns/functions/qpatternplatform_p.h b/src/xmlpatterns/functions/qpatternplatform_p.h index e007381..a85cd0c 100644 --- a/src/xmlpatterns/functions/qpatternplatform_p.h +++ b/src/xmlpatterns/functions/qpatternplatform_p.h @@ -180,7 +180,7 @@ namespace QPatternist inline int PatternPlatform::captureCount() const { if(m_compiledParts.testFlag(PatternPrecompiled)) - return m_pattern.numCaptures(); + return m_pattern.captureCount(); else return -1; } diff --git a/tests/arthur/common/paintcommands.cpp b/tests/arthur/common/paintcommands.cpp index 44deb0e..feabaed 100644 --- a/tests/arthur/common/paintcommands.cpp +++ b/tests/arthur/common/paintcommands.cpp @@ -587,10 +587,10 @@ void PaintCommands::staticInit() "^image_setColor\\s+([\\w.:\\/]*)\\s+([0-9]*)\\s+#([0-9]*)$", "image_setColor <imageName> <index> <color>", "image_setColor myImage 0 black"); - DECL_PAINTCOMMAND("image_setNumColors", command_image_setNumColors, - "^image_setNumColors\\s+([\\w.:\\/]*)\\s+([0-9]*)$", - "image_setNumColors <imageName> <nbColors>", - "image_setNumColors myImage 128"); + DECL_PAINTCOMMAND("image_setColorCount", command_image_setColorCount, + "^image_setColorCount\\s+([\\w.:\\/]*)\\s+([0-9]*)$", + "image_setColorCount <imageName> <nbColors>", + "image_setColorCount myImage 128"); DECL_PAINTCOMMANDSECTION("transformations"); DECL_PAINTCOMMAND("resetMatrix", command_resetMatrix, @@ -2245,7 +2245,7 @@ void PaintCommands::command_image_load(QRegExp re) } /***************************************************************************************************/ -void PaintCommands::command_image_setNumColors(QRegExp re) +void PaintCommands::command_image_setColorCount(QRegExp re) { QStringList caps = re.capturedTexts(); @@ -2253,10 +2253,10 @@ void PaintCommands::command_image_setNumColors(QRegExp re) int count = convertToInt(caps.at(2)); if (m_verboseMode) - printf(" -(lance) image_setNumColors(%s), %d -> %d\n", - qPrintable(name), m_imageMap[name].numColors(), count); + printf(" -(lance) image_setColorCount(%s), %d -> %d\n", + qPrintable(name), m_imageMap[name].colorCount(), count); - m_imageMap[name].setNumColors(count); + m_imageMap[name].setColorCount(count); } /***************************************************************************************************/ diff --git a/tests/arthur/common/paintcommands.h b/tests/arthur/common/paintcommands.h index ba91a92..e2c4d67 100644 --- a/tests/arthur/common/paintcommands.h +++ b/tests/arthur/common/paintcommands.h @@ -239,7 +239,7 @@ private: void command_image_convertToFormat(QRegExp re); void command_image_load(QRegExp re); void command_image_setColor(QRegExp re); - void command_image_setNumColors(QRegExp re); + void command_image_setColorCount(QRegExp re); // commands: transformation void command_resetMatrix(QRegExp re); diff --git a/tests/auto/qdatastream/tst_qdatastream.cpp b/tests/auto/qdatastream/tst_qdatastream.cpp index 56fc53a..7535645 100644 --- a/tests/auto/qdatastream/tst_qdatastream.cpp +++ b/tests/auto/qdatastream/tst_qdatastream.cpp @@ -1461,7 +1461,7 @@ void tst_QDataStream::readQImage(QDataStream *s) QVERIFY(d12.width() == ref.width()); QVERIFY(d12.height() == ref.height()); QVERIFY(d12.depth() == ref.depth()); - QVERIFY(d12.numColors() == ref.numColors()); + QVERIFY(d12.colorCount() == ref.colorCount()); #ifdef QT3_SUPPORT QVERIFY(d12.hasAlphaBuffer() == ref.hasAlphaBuffer()); #else diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp index 55cc286..b3d6fd9 100644 --- a/tests/auto/qfile/tst_qfile.cpp +++ b/tests/auto/qfile/tst_qfile.cpp @@ -91,6 +91,10 @@ #define STDERR_FILENO 2 #endif +#ifndef QT_OPEN_BINARY +#define QT_OPEN_BINARY 0 +#endif + Q_DECLARE_METATYPE(QFile::FileError) //TESTED_CLASS= @@ -211,6 +215,81 @@ public: // disabled this test for the moment... it hangs void invalidFile_data(); void invalidFile(); + +private: + enum FileType { OpenQFile, OpenFd, OpenStream }; + + bool openFd(QFile &file, QIODevice::OpenMode mode) + { + int fdMode = QT_OPEN_LARGEFILE | QT_OPEN_BINARY; + + // File will be truncated if in Write mode. + if (mode & QIODevice::WriteOnly) + fdMode |= QT_OPEN_WRONLY | QT_OPEN_TRUNC; + if (mode & QIODevice::ReadOnly) + fdMode |= QT_OPEN_RDONLY; + + fd_ = QT_OPEN(qPrintable(file.fileName()), fdMode); + + return (-1 != fd_) && file.open(fd_, mode); + } + + bool openStream(QFile &file, QIODevice::OpenMode mode) + { + char const *streamMode = ""; + + // File will be truncated if in Write mode. + if (mode & QIODevice::WriteOnly) + streamMode = "wb+"; + else if (mode & QIODevice::ReadOnly) + streamMode = "rb"; + + stream_ = QT_FOPEN(qPrintable(file.fileName()), streamMode); + + return stream_ && file.open(stream_, mode); + } + + bool openFile(QFile &file, QIODevice::OpenMode mode, FileType type = OpenQFile) + { + if (mode & QIODevice::WriteOnly && !file.exists()) + { + // Make sure the file exists + QFile createFile(file.fileName()); + if (!createFile.open(QIODevice::ReadWrite)) + return false; + } + + // Note: openFd and openStream will truncate the file if write mode. + switch (type) + { + case OpenQFile: + return file.open(mode); + + case OpenFd: + return openFd(file, mode); + + case OpenStream: + return openStream(file, mode); + } + + return false; + } + + void closeFile(QFile &file) + { + file.close(); + + if (-1 != fd_) + QT_CLOSE(fd_); + if (stream_) + ::fclose(stream_); + + fd_ = -1; + stream_ = 0; + } + + int fd_; + FILE *stream_; }; tst_QFile::tst_QFile() @@ -226,6 +305,8 @@ void tst_QFile::init() { // TODO: Add initialization code here. // This will be executed immediately before each test is run. + fd_ = -1; + stream_ = 0; } void tst_QFile::cleanup() @@ -254,6 +335,11 @@ void tst_QFile::cleanup() QFile::remove("existing-file.txt"); QFile::remove("file-renamed-once.txt"); QFile::remove("file-renamed-twice.txt"); + + if (-1 != fd_) + QT_CLOSE(fd_); + if (stream_) + ::fclose(stream_); } void tst_QFile::initTestCase() @@ -1958,53 +2044,71 @@ void tst_QFile::fullDisk() void tst_QFile::writeLargeDataBlock_data() { QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("type"); + + QTest::newRow("localfile-QFile") << "./largeblockfile.txt" << (int)OpenQFile; + QTest::newRow("localfile-Fd") << "./largeblockfile.txt" << (int)OpenFd; + QTest::newRow("localfile-Stream") << "./largeblockfile.txt" << (int)OpenStream; - QTest::newRow("localfile") << QString("./largeblockfile.txt"); #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) // Some semi-randomness to avoid collisions. QTest::newRow("unc file") << QString("//" + QtNetworkSettings::winServerName() + "/TESTSHAREWRITABLE/largefile-%1-%2.txt") .arg(QHostInfo::localHostName()) - .arg(QTime::currentTime().msec()); + .arg(QTime::currentTime().msec()) << (int)OpenQFile; #endif } -void tst_QFile::writeLargeDataBlock() +static QByteArray getLargeDataBlock() { - QFETCH(QString, fileName); + static QByteArray array; - // Generate a 64MB array with well defined contents. - QByteArray array; + if (array.isNull()) + { #if defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN) - int resizeSize = 1024 * 1024; // WinCE and Symbian do not have much space + int resizeSize = 1024 * 1024; // WinCE and Symbian do not have much space #else - int resizeSize = 64 * 1024 * 1024; + int resizeSize = 64 * 1024 * 1024; #endif - array.resize(resizeSize); - for (int i = 0; i < array.size(); ++i) - array[i] = uchar(i); + array.resize(resizeSize); + for (int i = 0; i < array.size(); ++i) + array[i] = uchar(i); + } - // Remove and open the target file - QFile file(fileName); - file.remove(); - if (file.open(QFile::WriteOnly)) { - QCOMPARE(file.write(array), qint64(array.size())); - file.close(); - QVERIFY(file.open(QFile::ReadOnly)); - array.clear(); - array = file.readAll(); - file.remove(); - } else { - QFAIL(qPrintable(QString("Couldn't open file for writing: [%1]").arg(fileName))); - } - // Check that we got the right content - QCOMPARE(array.size(), resizeSize); - for (int i = 0; i < array.size(); ++i) { - if (array[i] != char(i)) { - QFAIL(qPrintable(QString("Wrong contents! Char at %1 = %2, expected %3") - .arg(i).arg(int(uchar(array[i]))).arg(int(uchar(i))))); - } + return array; +} + +void tst_QFile::writeLargeDataBlock() +{ + QFETCH(QString, fileName); + QFETCH( int, type ); + + QByteArray const originalData = getLargeDataBlock(); + + { + QFile file(fileName); + + QVERIFY2( openFile(file, QIODevice::WriteOnly, (FileType)type), + qPrintable(QString("Couldn't open file for writing: [%1]").arg(fileName)) ); + QCOMPARE( file.write(originalData), (qint64)originalData.size() ); + QVERIFY( file.flush() ); + + closeFile(file); + } + + QByteArray readData; + + { + QFile file(fileName); + + QVERIFY2( openFile(file, QIODevice::ReadOnly, (FileType)type), + qPrintable(QString("Couldn't open file for reading: [%1]").arg(fileName)) ); + readData = file.readAll(); + closeFile(file); } + + QCOMPARE( readData, originalData ); + QVERIFY( QFile::remove(fileName) ); } void tst_QFile::readFromWriteOnlyFile() diff --git a/tests/auto/qimage/tst_qimage.cpp b/tests/auto/qimage/tst_qimage.cpp index e15ae8a..da4e85d 100644 --- a/tests/auto/qimage/tst_qimage.cpp +++ b/tests/auto/qimage/tst_qimage.cpp @@ -104,7 +104,7 @@ private slots: void setPixel_data(); void setPixel(); - void setNumColors(); + void setColorCount(); void setColor(); void rasterClipping(); @@ -155,7 +155,7 @@ void tst_QImage::create() #endif //QImage image(7000000, 7000000, 8, 256, QImage::IgnoreEndian); QImage image(7000000, 7000000, QImage::Format_Indexed8); - image.setNumColors(256); + image.setColorCount(256); cr = !image.isNull(); #if !defined(Q_WS_QWS) && !defined(Q_OS_WINCE) } catch (...) { @@ -242,7 +242,7 @@ void tst_QImage::convertBitOrder() QSKIP("Qt compiled without Qt3Support", SkipAll); #else QImage i(9,5,1,2,QImage::LittleEndian); - qMemSet(i.bits(), 0, i.numBytes()); + qMemSet(i.bits(), 0, i.byteCount()); i.setDotsPerMeterX(9); i.setDotsPerMeterY(5); @@ -258,7 +258,7 @@ void tst_QImage::convertBitOrder() QVERIFY(i.dotsPerMeterY() == ni.dotsPerMeterY()); QVERIFY(i.depth() == ni.depth()); QVERIFY(i.size() == ni.size()); - QVERIFY(i.numColors() == ni.numColors()); + QVERIFY(i.colorCount() == ni.colorCount()); #endif } @@ -365,7 +365,7 @@ void tst_QImage::setAlphaChannel() QImage alphaChannel; if (gray) { alphaChannel = QImage(width, height, QImage::Format_Indexed8); - alphaChannel.setNumColors(256); + alphaChannel.setColorCount(256); for (int i=0; i<256; ++i) alphaChannel.setColor(i, qRgb(i, i, i)); alphaChannel.fill(alpha); @@ -927,7 +927,7 @@ void tst_QImage::rotate() original.fill(qRgb(255,255,255)); if (format == QImage::Format_Indexed8) { - original.setNumColors(256); + original.setColorCount(256); for (int i = 0; i < 255; ++i) original.setColor(i, qRgb(0, i, i)); } @@ -1196,23 +1196,23 @@ void tst_QImage::convertToFormatPreserveText() } #endif // QT_NO_IMAGE_TEXT -void tst_QImage::setNumColors() +void tst_QImage::setColorCount() { QImage img(0, 0, QImage::Format_Indexed8); - QTest::ignoreMessage(QtWarningMsg, "QImage::setNumColors: null image"); - img.setNumColors(256); - QCOMPARE(img.numColors(), 0); + QTest::ignoreMessage(QtWarningMsg, "QImage::setColorCount: null image"); + img.setColorCount(256); + QCOMPARE(img.colorCount(), 0); } void tst_QImage::setColor() { QImage img(0, 0, QImage::Format_Indexed8); img.setColor(0, qRgba(18, 219, 108, 128)); - QCOMPARE(img.numColors(), 0); + QCOMPARE(img.colorCount(), 0); QImage img2(1, 1, QImage::Format_Indexed8); img2.setColor(0, qRgba(18, 219, 108, 128)); - QCOMPARE(img2.numColors(), 1); + QCOMPARE(img2.colorCount(), 1); } /* Just some sanity checking that we don't draw outside the buffer of diff --git a/tests/auto/qimagewriter/tst_qimagewriter.cpp b/tests/auto/qimagewriter/tst_qimagewriter.cpp index 584a060..ab5572d 100644 --- a/tests/auto/qimagewriter/tst_qimagewriter.cpp +++ b/tests/auto/qimagewriter/tst_qimagewriter.cpp @@ -546,7 +546,7 @@ void tst_QImageWriter::saveWithNoFormat() QFETCH(QImageWriter::ImageWriterError, error); QImage niceImage(64, 64, QImage::Format_ARGB32); - qMemSet(niceImage.bits(), 0, niceImage.numBytes()); + qMemSet(niceImage.bits(), 0, niceImage.byteCount()); QImageWriter writer(fileName /* , 0 - no format! */); if (error != 0) { diff --git a/tests/auto/qitemdelegate/tst_qitemdelegate.cpp b/tests/auto/qitemdelegate/tst_qitemdelegate.cpp index 426887d..a2770d4 100644 --- a/tests/auto/qitemdelegate/tst_qitemdelegate.cpp +++ b/tests/auto/qitemdelegate/tst_qitemdelegate.cpp @@ -877,7 +877,7 @@ void tst_QItemDelegate::decoration() } case QVariant::Image: { QImage img(size, QImage::Format_Mono); - qMemSet(img.bits(), 0, img.numBytes()); + qMemSet(img.bits(), 0, img.byteCount()); value = img; break; } diff --git a/tests/auto/qlcdnumber/tst_qlcdnumber.cpp b/tests/auto/qlcdnumber/tst_qlcdnumber.cpp index c18ce24..3f52c70 100644 --- a/tests/auto/qlcdnumber/tst_qlcdnumber.cpp +++ b/tests/auto/qlcdnumber/tst_qlcdnumber.cpp @@ -74,14 +74,14 @@ tst_QLCDNumber::~tst_QLCDNumber() void tst_QLCDNumber::getSetCheck() { QLCDNumber obj1; - // int QLCDNumber::numDigits() - // void QLCDNumber::setNumDigits(int) - obj1.setNumDigits(0); - QCOMPARE(0, obj1.numDigits()); - obj1.setNumDigits(INT_MIN); - QCOMPARE(0, obj1.numDigits()); // Range<0, 99> - obj1.setNumDigits(INT_MAX); - QCOMPARE(99, obj1.numDigits()); // Range<0, 99> + // int QLCDNumber::digitCount() + // void QLCDNumber::setDigitCount(int) + obj1.setDigitCount(0); + QCOMPARE(0, obj1.digitCount()); + obj1.setDigitCount(INT_MIN); + QCOMPARE(0, obj1.digitCount()); // Range<0, 99> + obj1.setDigitCount(INT_MAX); + QCOMPARE(99, obj1.digitCount()); // Range<0, 99> } QTEST_MAIN(tst_QLCDNumber) diff --git a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp index ab7b0ac..5ead049 100644 --- a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp +++ b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp @@ -587,14 +587,16 @@ void tst_QLocalSocket::readBufferOverflow() char buffer[dataBufferSize]; memset(buffer, 0, dataBufferSize); serverSocket->write(buffer, dataBufferSize); - serverSocket->flush(); + serverSocket->waitForBytesWritten(); + // wait until the first 128 bytes are ready to read QVERIFY(client.waitForReadyRead()); QCOMPARE(client.read(buffer, readBufferSize), qint64(readBufferSize)); -#if defined(QT_LOCALSOCKET_TCP) || defined(Q_OS_SYMBIAN) - QTest::qWait(250); -#endif + // wait until the second 128 bytes are ready to read + QVERIFY(client.waitForReadyRead()); QCOMPARE(client.read(buffer, readBufferSize), qint64(readBufferSize)); + // no more bytes available + QVERIFY(client.bytesAvailable() == 0); } // QLocalSocket/Server can take a name or path, check that it works as expected diff --git a/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp b/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp index 3c4ddd4..94857d7 100644 --- a/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp +++ b/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp @@ -234,7 +234,7 @@ void tst_QNetworkCookie::parseSingleCookie_data() QTest::newRow("path-with-utf8-2") << "a=b;path=/R%C3%A9sum%C3%A9" << cookie; cookie.setPath(QString()); - cookie.setDomain(".qt.nokia.com"); + cookie.setDomain("qt.nokia.com"); QTest::newRow("plain-domain1") << "a=b;domain=qt.nokia.com" << cookie; QTest::newRow("plain-domain2") << "a=b; domain=qt.nokia.com " << cookie; QTest::newRow("plain-domain3") << "a=b;domain=QT.NOKIA.COM" << cookie; @@ -247,32 +247,25 @@ void tst_QNetworkCookie::parseSingleCookie_data() QTest::newRow("dot-domain4") << "a=b; Domain = .QT.NOKIA.COM" << cookie; cookie.setDomain(QString::fromUtf8(".d\303\270gn\303\245pent.troll.no")); - QTest::newRow("idn-domain1") << "a=b;domain=xn--dgnpent-gxa2o.troll.no" << cookie; - QTest::newRow("idn-domain2") << "a=b;domain=d\303\270gn\303\245pent.troll.no" << cookie; - QTest::newRow("idn-domain3") << "a=b;domain=XN--DGNPENT-GXA2O.TROLL.NO" << cookie; - QTest::newRow("idn-domain4") << "a=b;domain=D\303\230GN\303\205PENT.troll.NO" << cookie; - QTest::newRow("idn-domain5") << "a=b;domain = D\303\230GN\303\205PENT.troll.NO" << cookie; - - cookie.setDomain(QString::fromUtf8(".d\303\270gn\303\245pent.troll.no")); - QTest::newRow("dot-idn-domain1") << "a=b;domain=.xn--dgnpent-gxa2o.troll.no" << cookie; - QTest::newRow("dot-idn-domain2") << "a=b;domain=.d\303\270gn\303\245pent.troll.no" << cookie; - QTest::newRow("dot-idn-domain3") << "a=b;domain=.XN--DGNPENT-GXA2O.TROLL.NO" << cookie; - QTest::newRow("dot-idn-domain4") << "a=b;domain=.D\303\230GN\303\205PENT.troll.NO" << cookie; + QTest::newRow("idn-domain1") << "a=b;domain=.xn--dgnpent-gxa2o.troll.no" << cookie; + QTest::newRow("idn-domain2") << "a=b;domain=.d\303\270gn\303\245pent.troll.no" << cookie; + QTest::newRow("idn-domain3") << "a=b;domain=.XN--DGNPENT-GXA2O.TROLL.NO" << cookie; + QTest::newRow("idn-domain4") << "a=b;domain=.D\303\230GN\303\205PENT.troll.NO" << cookie; cookie.setDomain(".qt.nokia.com"); cookie.setPath("/"); - QTest::newRow("two-fields") << "a=b;domain=qt.nokia.com;path=/" << cookie; - QTest::newRow("two-fields2") << "a=b; domain=qt.nokia.com; path=/" << cookie; - QTest::newRow("two-fields3") << "a=b; domain=qt.nokia.com ; path=/ " << cookie; - QTest::newRow("two-fields4") << "a=b;path=/; domain=qt.nokia.com" << cookie; - QTest::newRow("two-fields5") << "a=b; path=/ ; domain=qt.nokia.com" << cookie; - QTest::newRow("two-fields6") << "a=b; path= / ; domain =qt.nokia.com" << cookie; + QTest::newRow("two-fields") << "a=b;domain=.qt.nokia.com;path=/" << cookie; + QTest::newRow("two-fields2") << "a=b; domain=.qt.nokia.com; path=/" << cookie; + QTest::newRow("two-fields3") << "a=b; domain=.qt.nokia.com ; path=/ " << cookie; + QTest::newRow("two-fields4") << "a=b;path=/; domain=.qt.nokia.com" << cookie; + QTest::newRow("two-fields5") << "a=b; path=/ ; domain=.qt.nokia.com" << cookie; + QTest::newRow("two-fields6") << "a=b; path= / ; domain =.qt.nokia.com" << cookie; cookie.setSecure(true); - QTest::newRow("three-fields") << "a=b;domain=qt.nokia.com;path=/;secure" << cookie; - QTest::newRow("three-fields2") << "a=b;secure;path=/;domain=qt.nokia.com" << cookie; - QTest::newRow("three-fields3") << "a=b;secure;domain=qt.nokia.com; path=/" << cookie; - QTest::newRow("three-fields4") << "a = b;secure;domain=qt.nokia.com; path=/" << cookie; + QTest::newRow("three-fields") << "a=b;domain=.qt.nokia.com;path=/;secure" << cookie; + QTest::newRow("three-fields2") << "a=b;secure;path=/;domain=.qt.nokia.com" << cookie; + QTest::newRow("three-fields3") << "a=b;secure;domain=.qt.nokia.com; path=/" << cookie; + QTest::newRow("three-fields4") << "a = b;secure;domain=.qt.nokia.com; path=/" << cookie; cookie = QNetworkCookie(); cookie.setName("a"); @@ -664,7 +657,7 @@ void tst_QNetworkCookie::parseMultipleCookies_data() cookie.setName("baz"); cookie.setDomain(".qt.nokia.com"); list.prepend(cookie); - QTest::newRow("complex-2") << "baz=bar; path=/; domain=qt.nokia.com, c=d,a=,foo=bar; path=/" << list; + QTest::newRow("complex-2") << "baz=bar; path=/; domain=.qt.nokia.com, c=d,a=,foo=bar; path=/" << list; // cookies obtained from the network: cookie = QNetworkCookie("id", "51706646077999719"); diff --git a/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp index 9b9c56a..ff7e78e 100644 --- a/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp +++ b/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp @@ -120,7 +120,7 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data() cookie.setName("a"); cookie.setPath("/"); - cookie.setDomain("www.foo.tld"); + cookie.setDomain(".foo.tld"); result += cookie; QTest::newRow("just-add") << preset << cookie << "http://www.foo.tld" << result << true; @@ -148,6 +148,20 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data() cookie.setPath("/"); QTest::newRow("diff-path-order") << preset << cookie << "http://www.foo.tld" << result << true; + preset.clear(); + result.clear(); + QNetworkCookie finalCookie = cookie; + cookie.setDomain("foo.tld"); + finalCookie.setDomain(".foo.tld"); + result += finalCookie; + QTest::newRow("should-add-dot-prefix") << preset << cookie << "http://www.foo.tld" << result << true; + + result.clear(); + cookie.setDomain(""); + finalCookie.setDomain("www.foo.tld"); + result += finalCookie; + QTest::newRow("should-set-default-domain") << preset << cookie << "http://www.foo.tld" << result << true; + // security test: result.clear(); preset.clear(); @@ -159,7 +173,7 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data() QTest::newRow("security-path-1") << preset << cookie << "http://www.foo.tld" << result << false; // setting the defaults: - QNetworkCookie finalCookie = cookie; + finalCookie = cookie; finalCookie.setPath("/something/"); cookie.setPath(""); cookie.setDomain(""); diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 7adb67f..0b61dcd 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -227,12 +227,6 @@ private Q_SLOTS: void rateControl_data(); void rateControl(); - void downloadPerformance(); - void uploadPerformance(); - void performanceControlRate(); - void httpUploadPerformance(); - void httpDownloadPerformance_data(); - void httpDownloadPerformance(); void downloadProgress_data(); void downloadProgress(); @@ -413,93 +407,6 @@ public slots: } }; -class FixedSizeDataGenerator : public QIODevice -{ - Q_OBJECT - enum { Idle, Started, Stopped } state; -public: - FixedSizeDataGenerator(qint64 size) : state(Idle) - { open(ReadOnly | Unbuffered); - toBeGeneratedTotalCount = toBeGeneratedCount = size; - } - - virtual qint64 bytesAvailable() const - { - return state == Started ? toBeGeneratedCount + QIODevice::bytesAvailable() : 0; - } - - virtual bool isSequential() const{ - return false; - } - - virtual bool reset() const{ - return false; - } - - qint64 size() const { - return toBeGeneratedTotalCount; - } - -public slots: - void start() { state = Started; emit readyRead(); } - -protected: - virtual qint64 readData(char *data, qint64 maxlen) - { - memset(data, '@', maxlen); - - if (toBeGeneratedCount <= 0) { - return -1; - } - - qint64 n = qMin(maxlen, toBeGeneratedCount); - toBeGeneratedCount -= n; - - if (toBeGeneratedCount <= 0) { - // make sure this is a queued connection! - emit readChannelFinished(); - } - - return n; - } - virtual qint64 writeData(const char *, qint64) - { return -1; } - - qint64 toBeGeneratedCount; - qint64 toBeGeneratedTotalCount; -}; - - -class DataGenerator: public QIODevice -{ - Q_OBJECT - enum { Idle, Started, Stopped } state; -public: - DataGenerator() : state(Idle) - { open(ReadOnly); } - - virtual bool isSequential() const { return true; } - virtual qint64 bytesAvailable() const { return state == Started ? 1024*1024 : 0; } - -public slots: - void start() { state = Started; emit readyRead(); } - void stop() { state = Stopped; emit readyRead(); } - -protected: - virtual qint64 readData(char *data, qint64 maxlen) - { - if (state == Stopped) - return -1; // EOF - - // return as many bytes as are wanted - memset(data, '@', maxlen); - return maxlen; - } - virtual qint64 writeData(const char *, qint64) - { return -1; } -}; - - class SocketPair: public QObject { @@ -692,255 +599,6 @@ protected: } }; -class TimedSender: public QThread -{ - Q_OBJECT - qint64 totalBytes; - QSemaphore ready; - QByteArray dataToSend; - QTcpSocket *client; - int timeout; - int port; -public: - int transferRate; - TimedSender(int ms) - : totalBytes(0), timeout(ms), port(-1), transferRate(-1) - { - dataToSend = QByteArray(16*1024, '@'); - start(); - ready.acquire(); - } - - inline int serverPort() const { return port; } - -private slots: - void writeMore() - { - while (client->bytesToWrite() < 128 * 1024) { - writePacket(dataToSend); - } - } - -protected: - void run() - { - QTcpServer server; - server.listen(); - port = server.serverPort(); - ready.release(); - - server.waitForNewConnection(-1); - client = server.nextPendingConnection(); - - writeMore(); - connect(client, SIGNAL(bytesWritten(qint64)), SLOT(writeMore()), Qt::DirectConnection); - - QEventLoop eventLoop; - QTimer::singleShot(timeout, &eventLoop, SLOT(quit())); - - QTime timer; - timer.start(); - eventLoop.exec(); - disconnect(client, SIGNAL(bytesWritten(qint64)), this, 0); - - // wait for the connection to shut down - client->disconnectFromHost(); - if (!client->waitForDisconnected(10000)) - return; - - transferRate = totalBytes * 1000 / timer.elapsed(); - qDebug() << "TimedSender::run" << "receive rate:" << (transferRate / 1024) << "kB/s in" - << timer.elapsed() << "ms"; - } - - void writePacket(const QByteArray &array) - { - client->write(array); - totalBytes += array.size(); - } -}; - -class ThreadedDataReader: public QThread -{ - Q_OBJECT - // used to make the constructor only return after the tcp server started listening - QSemaphore ready; - QTcpSocket *client; - int timeout; - int port; -public: - qint64 transferRate; - ThreadedDataReader() - : port(-1), transferRate(-1) - { - start(); - ready.acquire(); - } - - inline int serverPort() const { return port; } - -protected: - void run() - { - QTcpServer server; - server.listen(); - port = server.serverPort(); - ready.release(); - - server.waitForNewConnection(-1); - client = server.nextPendingConnection(); - - QEventLoop eventLoop; - DataReader reader(client, false); - QObject::connect(client, SIGNAL(disconnected()), &eventLoop, SLOT(quit())); - - QTime timer; - timer.start(); - eventLoop.exec(); - qint64 elapsed = timer.elapsed(); - - transferRate = reader.totalBytes * 1000 / elapsed; - qDebug() << "ThreadedDataReader::run" << "send rate:" << (transferRate / 1024) << "kB/s in" << elapsed << "msec"; - } -}; - -class ThreadedDataReaderHttpServer: public QThread -{ - Q_OBJECT - // used to make the constructor only return after the tcp server started listening - QSemaphore ready; - QTcpSocket *client; - int timeout; - int port; -public: - qint64 transferRate; - ThreadedDataReaderHttpServer() - : port(-1), transferRate(-1) - { - start(); - ready.acquire(); - } - - inline int serverPort() const { return port; } - -protected: - void run() - { - QTcpServer server; - server.listen(); - port = server.serverPort(); - ready.release(); - - server.waitForNewConnection(-1); - client = server.nextPendingConnection(); - client->write("HTTP/1.0 200 OK\r\n"); - client->write("Content-length: 0\r\n"); - client->write("\r\n"); - client->flush(); - - QCoreApplication::processEvents(); - - QEventLoop eventLoop; - DataReader reader(client, false); - QObject::connect(client, SIGNAL(disconnected()), &eventLoop, SLOT(quit())); - - QTime timer; - timer.start(); - eventLoop.exec(); - qint64 elapsed = timer.elapsed(); - - transferRate = reader.totalBytes * 1000 / elapsed; - qDebug() << "ThreadedDataReaderHttpServer::run" << "send rate:" << (transferRate / 1024) << "kB/s in" << elapsed << "msec"; - } -}; - -class HttpDownloadPerformanceClient : QObject { - Q_OBJECT; - QIODevice *device; - public: - HttpDownloadPerformanceClient (QIODevice *dev) : device(dev){ - connect(dev, SIGNAL(readyRead()), this, SLOT(readyReadSlot())); - } - - public slots: - void readyReadSlot() { - device->readAll(); - } - -}; - -class HttpDownloadPerformanceServer : QObject { - Q_OBJECT; - qint64 dataSize; - qint64 dataSent; - QTcpServer server; - QTcpSocket *client; - bool serverSendsContentLength; - bool chunkedEncoding; - -public: - HttpDownloadPerformanceServer (qint64 ds, bool sscl, bool ce) : dataSize(ds), dataSent(0), - client(0), serverSendsContentLength(sscl), chunkedEncoding(ce) { - server.listen(); - connect(&server, SIGNAL(newConnection()), this, SLOT(newConnectionSlot())); - } - - int serverPort() { - return server.serverPort(); - } - -public slots: - - void newConnectionSlot() { - client = server.nextPendingConnection(); - client->setParent(this); - connect(client, SIGNAL(readyRead()), this, SLOT(readyReadSlot())); - connect(client, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWrittenSlot(qint64))); - } - - void readyReadSlot() { - client->readAll(); - client->write("HTTP/1.0 200 OK\n"); - if (serverSendsContentLength) - client->write(QString("Content-Length: " + QString::number(dataSize) + "\n").toAscii()); - if (chunkedEncoding) - client->write(QString("Transfer-Encoding: chunked\n").toAscii()); - client->write("Connection: close\n\n"); - } - - void bytesWrittenSlot(qint64 amount) { - Q_UNUSED(amount); - if (dataSent == dataSize && client) { - // close eventually - - // chunked encoding: we have to send a last "empty" chunk - if (chunkedEncoding) - client->write(QString("0\r\n\r\n").toAscii()); - - client->disconnectFromHost(); - server.close(); - client = 0; - return; - } - - // send data - if (client && client->bytesToWrite() < 100*1024 && dataSent < dataSize) { - qint64 amount = qMin(qint64(16*1024), dataSize - dataSent); - QByteArray data(amount, '@'); - - if (chunkedEncoding) { - client->write(QString(QString("%1").arg(amount,0,16).toUpper() + "\r\n").toAscii()); - client->write(data.constData(), amount); - client->write(QString("\r\n").toAscii()); - } else { - client->write(data.constData(), amount); - } - - dataSent += amount; - } - } -}; - tst_QNetworkReply::tst_QNetworkReply() { @@ -3311,7 +2969,6 @@ void tst_QNetworkReply::ioPostToHttpEmtpyUploadProgress() server.close(); } - void tst_QNetworkReply::rateControl_data() { QTest::addColumn<int>("rate"); @@ -3365,142 +3022,6 @@ void tst_QNetworkReply::rateControl() QVERIFY(sender.transferRate <= maxRate); } -void tst_QNetworkReply::downloadPerformance() -{ - // unlike the above function, this one tries to send as fast as possible - // and measures how fast it was. - TimedSender sender(5000); - QNetworkRequest request("debugpipe://127.0.0.1:" + QString::number(sender.serverPort()) + "/?bare=1"); - QNetworkReplyPtr reply = manager.get(request); - DataReader reader(reply, false); - - QTime loopTime; - connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); - loopTime.start(); - QTestEventLoop::instance().enterLoop(40); - int elapsedTime = loopTime.elapsed(); - sender.wait(); - - qint64 receivedBytes = reader.totalBytes; - qDebug() << "tst_QNetworkReply::downloadPerformance" << "receive rate:" << (receivedBytes * 1000 / elapsedTime / 1024) << "kB/s and" - << elapsedTime << "ms"; -} - -void tst_QNetworkReply::uploadPerformance() -{ - ThreadedDataReader reader; - DataGenerator generator; - - - QNetworkRequest request("debugpipe://127.0.0.1:" + QString::number(reader.serverPort()) + "/?bare=1"); - QNetworkReplyPtr reply = manager.put(request, &generator); - generator.start(); - connect(&reader, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); - QTimer::singleShot(5000, &generator, SLOT(stop())); - - QTestEventLoop::instance().enterLoop(30); - QCOMPARE(reply->error(), QNetworkReply::NoError); - QVERIFY(!QTestEventLoop::instance().timeout()); -} - -void tst_QNetworkReply::httpUploadPerformance() -{ -#ifdef Q_OS_SYMBIAN - // SHow some mercy for non-desktop platform/s - enum {UploadSize = 4*1024*1024}; // 4 MB -#else - enum {UploadSize = 128*1024*1024}; // 128 MB -#endif - ThreadedDataReaderHttpServer reader; - FixedSizeDataGenerator generator(UploadSize); - - QNetworkRequest request(QUrl("http://127.0.0.1:" + QString::number(reader.serverPort()) + "/?bare=1")); - request.setHeader(QNetworkRequest::ContentLengthHeader,UploadSize); - - QNetworkReplyPtr reply = manager.put(request, &generator); - - connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); - - QTime time; - generator.start(); - time.start(); - QTestEventLoop::instance().enterLoop(40); - QCOMPARE(reply->error(), QNetworkReply::NoError); - QVERIFY(!QTestEventLoop::instance().timeout()); - - qint64 elapsed = time.elapsed(); - qDebug() << "tst_QNetworkReply::httpUploadPerformance" << elapsed << "msec, " - << ((UploadSize/1024.0)/(elapsed/1000.0)) << " kB/sec"; - - reader.exit(); - reader.wait(); -} - - -void tst_QNetworkReply::performanceControlRate() -{ - // this is a control comparison for the other two above - // it does the same thing, but instead bypasses the QNetworkAccess system - qDebug() << "The following are the maximum transfer rates that we can get in this system" - " (bypassing QNetworkAccess)"; - - TimedSender sender(5000); - QTcpSocket sink; - sink.connectToHost("127.0.0.1", sender.serverPort()); - DataReader reader(&sink, false); - - QTime loopTime; - connect(&sink, SIGNAL(disconnected()), &QTestEventLoop::instance(), SLOT(exitLoop())); - loopTime.start(); - QTestEventLoop::instance().enterLoop(40); - int elapsedTime = loopTime.elapsed(); - sender.wait(); - - qint64 receivedBytes = reader.totalBytes; - qDebug() << "tst_QNetworkReply::performanceControlRate" << "receive rate:" << (receivedBytes * 1000 / elapsedTime / 1024) << "kB/s and" - << elapsedTime << "ms"; -} - -void tst_QNetworkReply::httpDownloadPerformance_data() -{ - QTest::addColumn<bool>("serverSendsContentLength"); - QTest::addColumn<bool>("chunkedEncoding"); - - QTest::newRow("Server sends no Content-Length") << false << false; - QTest::newRow("Server sends Content-Length") << true << false; - QTest::newRow("Server uses chunked encoding") << false << true; - -} - -void tst_QNetworkReply::httpDownloadPerformance() -{ - QFETCH(bool, serverSendsContentLength); - QFETCH(bool, chunkedEncoding); -#ifdef Q_OS_SYMBIAN - // Show some mercy to non-desktop platform/s - enum {UploadSize = 4*1024*1024}; // 4 MB -#else - enum {UploadSize = 128*1024*1024}; // 128 MB -#endif - HttpDownloadPerformanceServer server(UploadSize, serverSendsContentLength, chunkedEncoding); - - QNetworkRequest request(QUrl("http://127.0.0.1:" + QString::number(server.serverPort()) + "/?bare=1")); - QNetworkReplyPtr reply = manager.get(request); - - connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection); - HttpDownloadPerformanceClient client(reply); - - QTime time; - time.start(); - QTestEventLoop::instance().enterLoop(40); - QCOMPARE(reply->error(), QNetworkReply::NoError); - QVERIFY(!QTestEventLoop::instance().timeout()); - - qint64 elapsed = time.elapsed(); - qDebug() << "tst_QNetworkReply::httpDownloadPerformance" << elapsed << "msec, " - << ((UploadSize/1024.0)/(elapsed/1000.0)) << " kB/sec"; -} - void tst_QNetworkReply::downloadProgress_data() { QTest::addColumn<int>("loopCount"); diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp index 02c73c0..8b71349 100644 --- a/tests/auto/qpainter/tst_qpainter.cpp +++ b/tests/auto/qpainter/tst_qpainter.cpp @@ -2932,7 +2932,7 @@ void tst_QPainter::monoImages() QImage img(2, 2, format); - if (img.numColors() > 0) { + if (img.colorCount() > 0) { img.setColor(0, QColor(colorPairs[j][0]).rgba()); img.setColor(1, QColor(colorPairs[j][1]).rgba()); } @@ -2954,7 +2954,7 @@ void tst_QPainter::monoImages() // should not change the image QCOMPARE(original, img); - if (img.numColors() == 0) + if (img.colorCount() == 0) continue; for (int k = 0; k < 2; ++k) { diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp index 8e02c74..d7f042e 100644 --- a/tests/auto/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/qpixmap/tst_qpixmap.cpp @@ -293,7 +293,7 @@ void tst_QPixmap::setAlphaChannel() QRgb expected = alpha == 0 ? 0 : qRgba(red, green, blue, alpha); for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { - if (result.numColors() > 0) { + if (result.colorCount() > 0) { ok &= result.pixelIndex(x, y) == expected; } else { ok &= result.pixel(x, y) == expected; @@ -330,7 +330,7 @@ void tst_QPixmap::fromImage() QImage image(37, 16, format); - if (image.numColors() == 2) { + if (image.colorCount() == 2) { image.setColor(0, QColor(Qt::color0).rgba()); image.setColor(1, QColor(Qt::color1).rgba()); } @@ -731,7 +731,7 @@ void tst_QPixmap::testMetrics() void tst_QPixmap::createMaskFromColor() { QImage image(3, 3, QImage::Format_Indexed8); - image.setNumColors(10); + image.setColorCount(10); image.setColor(0, 0xffffffff); image.setColor(1, 0xff000000); image.setColor(2, 0xffff0000); diff --git a/tests/auto/qregexp/tst_qregexp.cpp b/tests/auto/qregexp/tst_qregexp.cpp index 86d831e..e305386 100644 --- a/tests/auto/qregexp/tst_qregexp.cpp +++ b/tests/auto/qregexp/tst_qregexp.cpp @@ -628,7 +628,7 @@ void tst_QRegExp::capturedTexts() QRegExp rx7("([A-Za-z_])([A-Za-z_0-9]*)"); rx7.setCaseSensitivity(Qt::CaseSensitive); rx7.setPatternSyntax(QRegExp::RegExp); - QCOMPARE(rx7.numCaptures(), 2); + QCOMPARE(rx7.captureCount(), 2); int pos = rx7.indexIn("(10 + delta4) * 32"); QCOMPARE(pos, 6); @@ -1177,36 +1177,36 @@ void tst_QRegExp::prepareEngineOptimization() QCOMPARE(rx1.capturedTexts(), QStringList() << "" << "" << "" << ""); QCOMPARE(rx1.matchedLength(), -1); QCOMPARE(rx1.matchedLength(), -1); - QCOMPARE(rx1.numCaptures(), 3); + QCOMPARE(rx1.captureCount(), 3); QCOMPARE(rx1.exactMatch("foo"), true); QCOMPARE(rx1.matchedLength(), 3); QCOMPARE(rx1.capturedTexts(), QStringList() << "foo" << "f" << "o" << "o"); - QCOMPARE(rx1.numCaptures(), 3); + QCOMPARE(rx1.captureCount(), 3); QCOMPARE(rx1.matchedLength(), 3); QCOMPARE(rx1.capturedTexts(), QStringList() << "foo" << "f" << "o" << "o"); QCOMPARE(rx1.pos(3), 2); QCOMPARE(rx1.exactMatch("foo"), true); - QCOMPARE(rx1.numCaptures(), 3); + QCOMPARE(rx1.captureCount(), 3); QCOMPARE(rx1.matchedLength(), 3); QCOMPARE(rx1.capturedTexts(), QStringList() << "foo" << "f" << "o" << "o"); QCOMPARE(rx1.pos(3), 2); QRegExp rx2 = rx1; - QCOMPARE(rx1.numCaptures(), 3); + QCOMPARE(rx1.captureCount(), 3); QCOMPARE(rx1.matchedLength(), 3); QCOMPARE(rx1.capturedTexts(), QStringList() << "foo" << "f" << "o" << "o"); QCOMPARE(rx1.pos(3), 2); - QCOMPARE(rx2.numCaptures(), 3); + QCOMPARE(rx2.captureCount(), 3); QCOMPARE(rx2.matchedLength(), 3); QCOMPARE(rx2.capturedTexts(), QStringList() << "foo" << "f" << "o" << "o"); QCOMPARE(rx2.pos(3), 2); QCOMPARE(rx1.exactMatch("fo"), true); - QCOMPARE(rx1.numCaptures(), 3); + QCOMPARE(rx1.captureCount(), 3); QCOMPARE(rx1.matchedLength(), 2); QCOMPARE(rx1.capturedTexts(), QStringList() << "fo" << "f" << "o" << ""); QCOMPARE(rx1.pos(2), 1); @@ -1245,25 +1245,25 @@ void tst_QRegExp::prepareEngineOptimization() rx11.setPatternSyntax(QRegExp::Wildcard); QVERIFY(!rx11.isValid()); - QCOMPARE(rx11.numCaptures(), 0); + QCOMPARE(rx11.captureCount(), 0); QCOMPARE(rx11.matchedLength(), -1); rx11.setPatternSyntax(QRegExp::RegExp); QVERIFY(!rx11.isValid()); - QCOMPARE(rx11.numCaptures(), 0); + QCOMPARE(rx11.captureCount(), 0); QCOMPARE(rx11.matchedLength(), -1); rx11.setPattern("(foo)"); QVERIFY(rx11.isValid()); - QCOMPARE(rx11.numCaptures(), 1); + QCOMPARE(rx11.captureCount(), 1); QCOMPARE(rx11.matchedLength(), -1); QCOMPARE(rx11.indexIn("ofoo"), 1); - QCOMPARE(rx11.numCaptures(), 1); + QCOMPARE(rx11.captureCount(), 1); QCOMPARE(rx11.matchedLength(), 3); rx11.setPatternSyntax(QRegExp::RegExp); - QCOMPARE(rx11.numCaptures(), 1); + QCOMPARE(rx11.captureCount(), 1); QCOMPARE(rx11.matchedLength(), 3); /* @@ -1278,11 +1278,11 @@ void tst_QRegExp::prepareEngineOptimization() QCOMPARE(rx11.matchedLength(), 3); rx11.setPatternSyntax(QRegExp::Wildcard); - QCOMPARE(rx11.numCaptures(), 0); + QCOMPARE(rx11.captureCount(), 0); QCOMPARE(rx11.matchedLength(), -1); rx11.setPatternSyntax(QRegExp::RegExp); - QCOMPARE(rx11.numCaptures(), 1); + QCOMPARE(rx11.captureCount(), 1); QCOMPARE(rx11.matchedLength(), -1); } diff --git a/tests/auto/qregion/tst_qregion.cpp b/tests/auto/qregion/tst_qregion.cpp index e5a3151..582b5e8 100644 --- a/tests/auto/qregion/tst_qregion.cpp +++ b/tests/auto/qregion/tst_qregion.cpp @@ -88,8 +88,8 @@ private slots: void operator_xor_data(); void operator_xor(); - void numRects_data(); - void numRects(); + void rectCount_data(); + void rectCount(); void isEmpty_data(); void isEmpty(); @@ -554,7 +554,7 @@ void tst_QRegion::operator_plus() qDebug() << "expected" << expected; } QCOMPARE(r1 + r2, expected); - if (r2.numRects() == 1) { + if (r2.rectCount() == 1) { if (r1 + r2.boundingRect() != expected) { qDebug() << "r1 + QRect(r2)" << (r1 + r2.boundingRect()); qDebug() << "expected" << expected; @@ -567,7 +567,7 @@ void tst_QRegion::operator_plus() qDebug() << "expected" << expected; } QCOMPARE(r2 + r1, expected); - if (r1.numRects() == 1) { + if (r1.rectCount() == 1) { if (r1 + r2.boundingRect() != expected) { qDebug() << "r2 + QRect(r1)" << (r2 + r1.boundingRect()); qDebug() << "expected" << expected; @@ -582,7 +582,7 @@ void tst_QRegion::operator_plus() qDebug() << "expected" << expected; } QCOMPARE(result1, expected); - if (r2.numRects() == 1) { + if (r2.rectCount() == 1) { result1 = r1; result1 += r2.boundingRect(); if (result1 != expected) { @@ -599,7 +599,7 @@ void tst_QRegion::operator_plus() qDebug() << "expected" << expected; } QCOMPARE(result2, expected); - if (r1.numRects() == 1) { + if (r1.rectCount() == 1) { result2 = r2; result2 += r1.boundingRect(); if (result2 != expected) { @@ -802,7 +802,7 @@ void tst_QRegion::operator_xor() QCOMPARE(dest, expected); } -void tst_QRegion::numRects_data() +void tst_QRegion::rectCount_data() { QTest::addColumn<QRegion>("region"); QTest::addColumn<int>("expected"); @@ -818,12 +818,12 @@ void tst_QRegion::numRects_data() QTest::newRow("2 rects") << dest << rects.size(); } -void tst_QRegion::numRects() +void tst_QRegion::rectCount() { QFETCH(QRegion, region); QFETCH(int, expected); - QCOMPARE(region.numRects(), expected); + QCOMPARE(region.rectCount(), expected); } void tst_QRegion::isEmpty_data() @@ -850,7 +850,7 @@ void tst_QRegion::isEmpty() QVERIFY(region.isEmpty()); QCOMPARE(region, QRegion()); - QCOMPARE(region.numRects(), 0); + QCOMPARE(region.rectCount(), 0); QCOMPARE(region.boundingRect(), QRect()); QVERIFY(region.rects().isEmpty()); } diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp index 804534f..8eaad78 100644 --- a/tests/auto/qscriptengine/tst_qscriptengine.cpp +++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp @@ -4485,7 +4485,7 @@ void tst_QScriptEngine::qRegExpInport() QScriptValue result = func.call(QScriptValue(), QScriptValueList() << string << rexp); rx.indexIn(string); - for (int i = 0; i <= rx.numCaptures(); i++) { + for (int i = 0; i <= rx.captureCount(); i++) { QCOMPARE(result.property(i).toString(), rx.cap(i)); } } diff --git a/tests/auto/qtextdocument/tst_qtextdocument.cpp b/tests/auto/qtextdocument/tst_qtextdocument.cpp index 5237438..1d54409 100644 --- a/tests/auto/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/qtextdocument/tst_qtextdocument.cpp @@ -1721,21 +1721,21 @@ void tst_QTextDocument::capitalizationHtmlInExport() const QString smallcaps = doc->toHtml(); QVERIFY(re.exactMatch(doc->toHtml())); - QCOMPARE(re.numCaptures(), 1); + QCOMPARE(re.captureCount(), 1); QCOMPARE(re.cap(1).trimmed(), QString("font-variant:small-caps;")); cf.setFontCapitalization(QFont::AllUppercase); cursor.mergeCharFormat(cf); const QString uppercase = doc->toHtml(); QVERIFY(re.exactMatch(doc->toHtml())); - QCOMPARE(re.numCaptures(), 1); + QCOMPARE(re.captureCount(), 1); QCOMPARE(re.cap(1).trimmed(), QString("text-transform:uppercase;")); cf.setFontCapitalization(QFont::AllLowercase); cursor.mergeCharFormat(cf); const QString lowercase = doc->toHtml(); QVERIFY(re.exactMatch(doc->toHtml())); - QCOMPARE(re.numCaptures(), 1); + QCOMPARE(re.captureCount(), 1); QCOMPARE(re.cap(1).trimmed(), QString("text-transform:lowercase;")); doc->setHtml(smallcaps); @@ -1761,14 +1761,14 @@ void tst_QTextDocument::wordspacingHtmlExport() cursor.mergeCharFormat(cf); QVERIFY(re.exactMatch(doc->toHtml())); - QCOMPARE(re.numCaptures(), 1); + QCOMPARE(re.captureCount(), 1); QCOMPARE(re.cap(1).trimmed(), QString("word-spacing:4px;")); cf.setFontWordSpacing(-8.5); cursor.mergeCharFormat(cf); QVERIFY(re.exactMatch(doc->toHtml())); - QCOMPARE(re.numCaptures(), 1); + QCOMPARE(re.captureCount(), 1); QCOMPARE(re.cap(1).trimmed(), QString("word-spacing:-8.5px;")); } diff --git a/tests/benchmarks/qnetworkreply/tst_qnetworkreply.cpp b/tests/benchmarks/qnetworkreply/tst_qnetworkreply.cpp index 993db52..1d50013 100644 --- a/tests/benchmarks/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/benchmarks/qnetworkreply/tst_qnetworkreply.cpp @@ -46,11 +46,397 @@ #include <QtNetwork/qnetworkreply.h> #include <QtNetwork/qnetworkrequest.h> #include <QtNetwork/qnetworkaccessmanager.h> +#include <QtNetwork/qtcpsocket.h> +#include <QtNetwork/qtcpserver.h> #include "../../auto/network-settings.h" + +class TimedSender: public QThread +{ + Q_OBJECT + qint64 totalBytes; + QSemaphore ready; + QByteArray dataToSend; + QTcpSocket *client; + int timeout; + int port; +public: + int transferRate; + TimedSender(int ms) + : totalBytes(0), timeout(ms), port(-1), transferRate(-1) + { + dataToSend = QByteArray(16*1024, '@'); + start(); + ready.acquire(); + } + + inline int serverPort() const { return port; } + +private slots: + void writeMore() + { + while (client->bytesToWrite() < 128 * 1024) { + writePacket(dataToSend); + } + } + +protected: + void run() + { + QTcpServer server; + server.listen(); + port = server.serverPort(); + ready.release(); + + server.waitForNewConnection(-1); + client = server.nextPendingConnection(); + + writeMore(); + connect(client, SIGNAL(bytesWritten(qint64)), SLOT(writeMore()), Qt::DirectConnection); + + QEventLoop eventLoop; + QTimer::singleShot(timeout, &eventLoop, SLOT(quit())); + + QTime timer; + timer.start(); + eventLoop.exec(); + disconnect(client, SIGNAL(bytesWritten(qint64)), this, 0); + + // wait for the connection to shut down + client->disconnectFromHost(); + if (!client->waitForDisconnected(10000)) + return; + + transferRate = totalBytes * 1000 / timer.elapsed(); + qDebug() << "TimedSender::run" << "receive rate:" << (transferRate / 1024) << "kB/s in" + << timer.elapsed() << "ms"; + } + + void writePacket(const QByteArray &array) + { + client->write(array); + totalBytes += array.size(); + } +}; + + +class QNetworkReplyPtr: public QSharedPointer<QNetworkReply> +{ +public: + inline QNetworkReplyPtr(QNetworkReply *ptr = 0) + : QSharedPointer<QNetworkReply>(ptr) + { } + + inline operator QNetworkReply *() const { return data(); } +}; + + +class DataReader: public QObject +{ + Q_OBJECT +public: + qint64 totalBytes; + QByteArray data; + QIODevice *device; + bool accumulate; + DataReader(QIODevice *dev, bool acc = true) : totalBytes(0), device(dev), accumulate(acc) + { + connect(device, SIGNAL(readyRead()), SLOT(doRead())); + } + +public slots: + void doRead() + { + QByteArray buffer; + buffer.resize(device->bytesAvailable()); + qint64 bytesRead = device->read(buffer.data(), device->bytesAvailable()); + if (bytesRead == -1) { + QTestEventLoop::instance().exitLoop(); + return; + } + buffer.truncate(bytesRead); + totalBytes += bytesRead; + + if (accumulate) + data += buffer; + } +}; + +class ThreadedDataReader: public QThread +{ + Q_OBJECT + // used to make the constructor only return after the tcp server started listening + QSemaphore ready; + QTcpSocket *client; + int timeout; + int port; +public: + qint64 transferRate; + ThreadedDataReader() + : port(-1), transferRate(-1) + { + start(); + ready.acquire(); + } + + inline int serverPort() const { return port; } + +protected: + void run() + { + QTcpServer server; + server.listen(); + port = server.serverPort(); + ready.release(); + + server.waitForNewConnection(-1); + client = server.nextPendingConnection(); + + QEventLoop eventLoop; + DataReader reader(client, false); + QObject::connect(client, SIGNAL(disconnected()), &eventLoop, SLOT(quit())); + + QTime timer; + timer.start(); + eventLoop.exec(); + qint64 elapsed = timer.elapsed(); + + transferRate = reader.totalBytes * 1000 / elapsed; + qDebug() << "ThreadedDataReader::run" << "send rate:" << (transferRate / 1024) << "kB/s in" << elapsed << "msec"; + } +}; + +class DataGenerator: public QIODevice +{ + Q_OBJECT + enum { Idle, Started, Stopped } state; +public: + DataGenerator() : state(Idle) + { open(ReadOnly); } + + virtual bool isSequential() const { return true; } + virtual qint64 bytesAvailable() const { return state == Started ? 1024*1024 : 0; } + +public slots: + void start() { state = Started; emit readyRead(); } + void stop() { state = Stopped; emit readyRead(); } + +protected: + virtual qint64 readData(char *data, qint64 maxlen) + { + if (state == Stopped) + return -1; // EOF + + // return as many bytes as are wanted + memset(data, '@', maxlen); + return maxlen; + } + virtual qint64 writeData(const char *, qint64) + { return -1; } +}; + +class ThreadedDataReaderHttpServer: public QThread +{ + Q_OBJECT + // used to make the constructor only return after the tcp server started listening + QSemaphore ready; + QTcpSocket *client; + int timeout; + int port; +public: + qint64 transferRate; + ThreadedDataReaderHttpServer() + : port(-1), transferRate(-1) + { + start(); + ready.acquire(); + } + + inline int serverPort() const { return port; } + +protected: + void run() + { + QTcpServer server; + server.listen(); + port = server.serverPort(); + ready.release(); + + server.waitForNewConnection(-1); + client = server.nextPendingConnection(); + client->write("HTTP/1.0 200 OK\r\n"); + client->write("Content-length: 0\r\n"); + client->write("\r\n"); + client->flush(); + + QCoreApplication::processEvents(); + + QEventLoop eventLoop; + DataReader reader(client, false); + QObject::connect(client, SIGNAL(disconnected()), &eventLoop, SLOT(quit())); + + QTime timer; + timer.start(); + eventLoop.exec(); + qint64 elapsed = timer.elapsed(); + + transferRate = reader.totalBytes * 1000 / elapsed; + qDebug() << "ThreadedDataReaderHttpServer::run" << "send rate:" << (transferRate / 1024) << "kB/s in" << elapsed << "msec"; + } +}; + + +class FixedSizeDataGenerator : public QIODevice +{ + Q_OBJECT + enum { Idle, Started, Stopped } state; +public: + FixedSizeDataGenerator(qint64 size) : state(Idle) + { open(ReadOnly | Unbuffered); + toBeGeneratedTotalCount = toBeGeneratedCount = size; + } + + virtual qint64 bytesAvailable() const + { + return state == Started ? toBeGeneratedCount + QIODevice::bytesAvailable() : 0; + } + + virtual bool isSequential() const{ + return false; + } + + virtual bool reset() const{ + return false; + } + + qint64 size() const { + return toBeGeneratedTotalCount; + } + +public slots: + void start() { state = Started; emit readyRead(); } + +protected: + virtual qint64 readData(char *data, qint64 maxlen) + { + memset(data, '@', maxlen); + + if (toBeGeneratedCount <= 0) { + return -1; + } + + qint64 n = qMin(maxlen, toBeGeneratedCount); + toBeGeneratedCount -= n; + + if (toBeGeneratedCount <= 0) { + // make sure this is a queued connection! + emit readChannelFinished(); + } + + return n; + } + virtual qint64 writeData(const char *, qint64) + { return -1; } + + qint64 toBeGeneratedCount; + qint64 toBeGeneratedTotalCount; +}; + +class HttpDownloadPerformanceServer : QObject { + Q_OBJECT; + qint64 dataSize; + qint64 dataSent; + QTcpServer server; + QTcpSocket *client; + bool serverSendsContentLength; + bool chunkedEncoding; + +public: + HttpDownloadPerformanceServer (qint64 ds, bool sscl, bool ce) : dataSize(ds), dataSent(0), + client(0), serverSendsContentLength(sscl), chunkedEncoding(ce) { + server.listen(); + connect(&server, SIGNAL(newConnection()), this, SLOT(newConnectionSlot())); + } + + int serverPort() { + return server.serverPort(); + } + +public slots: + + void newConnectionSlot() { + client = server.nextPendingConnection(); + client->setParent(this); + connect(client, SIGNAL(readyRead()), this, SLOT(readyReadSlot())); + connect(client, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWrittenSlot(qint64))); + } + + void readyReadSlot() { + client->readAll(); + client->write("HTTP/1.0 200 OK\n"); + if (serverSendsContentLength) + client->write(QString("Content-Length: " + QString::number(dataSize) + "\n").toAscii()); + if (chunkedEncoding) + client->write(QString("Transfer-Encoding: chunked\n").toAscii()); + client->write("Connection: close\n\n"); + } + + void bytesWrittenSlot(qint64 amount) { + Q_UNUSED(amount); + if (dataSent == dataSize && client) { + // close eventually + + // chunked encoding: we have to send a last "empty" chunk + if (chunkedEncoding) + client->write(QString("0\r\n\r\n").toAscii()); + + client->disconnectFromHost(); + server.close(); + client = 0; + return; + } + + // send data + if (client && client->bytesToWrite() < 100*1024 && dataSent < dataSize) { + qint64 amount = qMin(qint64(16*1024), dataSize - dataSent); + QByteArray data(amount, '@'); + + if (chunkedEncoding) { + client->write(QString(QString("%1").arg(amount,0,16).toUpper() + "\r\n").toAscii()); + client->write(data.constData(), amount); + client->write(QString("\r\n").toAscii()); + } else { + client->write(data.constData(), amount); + } + + dataSent += amount; + } + } +}; + +class HttpDownloadPerformanceClient : QObject { + Q_OBJECT; + QIODevice *device; + public: + HttpDownloadPerformanceClient (QIODevice *dev) : device(dev){ + connect(dev, SIGNAL(readyRead()), this, SLOT(readyReadSlot())); + } + + public slots: + void readyReadSlot() { + device->readAll(); + } + +}; + + + + class tst_qnetworkreply : public QObject { Q_OBJECT + + QNetworkAccessManager manager; private slots: void httpLatency(); @@ -58,6 +444,14 @@ private slots: void echoPerformance_data(); void echoPerformance(); #endif + + void downloadPerformance(); + void uploadPerformance(); + void performanceControlRate(); + void httpUploadPerformance(); + void httpDownloadPerformance_data(); + void httpDownloadPerformance(); + }; void tst_qnetworkreply::httpLatency() @@ -107,6 +501,142 @@ void tst_qnetworkreply::echoPerformance() } #endif +void tst_qnetworkreply::downloadPerformance() +{ + // unlike the above function, this one tries to send as fast as possible + // and measures how fast it was. + TimedSender sender(5000); + QNetworkRequest request("debugpipe://127.0.0.1:" + QString::number(sender.serverPort()) + "/?bare=1"); + QNetworkReplyPtr reply = manager.get(request); + DataReader reader(reply, false); + + QTime loopTime; + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + loopTime.start(); + QTestEventLoop::instance().enterLoop(40); + int elapsedTime = loopTime.elapsed(); + sender.wait(); + + qint64 receivedBytes = reader.totalBytes; + qDebug() << "tst_QNetworkReply::downloadPerformance" << "receive rate:" << (receivedBytes * 1000 / elapsedTime / 1024) << "kB/s and" + << elapsedTime << "ms"; +} + +void tst_qnetworkreply::uploadPerformance() +{ + ThreadedDataReader reader; + DataGenerator generator; + + + QNetworkRequest request("debugpipe://127.0.0.1:" + QString::number(reader.serverPort()) + "/?bare=1"); + QNetworkReplyPtr reply = manager.put(request, &generator); + generator.start(); + connect(&reader, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + QTimer::singleShot(5000, &generator, SLOT(stop())); + + QTestEventLoop::instance().enterLoop(30); + QCOMPARE(reply->error(), QNetworkReply::NoError); + QVERIFY(!QTestEventLoop::instance().timeout()); +} + +void tst_qnetworkreply::httpUploadPerformance() +{ +#ifdef Q_OS_SYMBIAN + // SHow some mercy for non-desktop platform/s + enum {UploadSize = 4*1024*1024}; // 4 MB +#else + enum {UploadSize = 128*1024*1024}; // 128 MB +#endif + ThreadedDataReaderHttpServer reader; + FixedSizeDataGenerator generator(UploadSize); + + QNetworkRequest request(QUrl("http://127.0.0.1:" + QString::number(reader.serverPort()) + "/?bare=1")); + request.setHeader(QNetworkRequest::ContentLengthHeader,UploadSize); + + QNetworkReplyPtr reply = manager.put(request, &generator); + + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + + QTime time; + generator.start(); + time.start(); + QTestEventLoop::instance().enterLoop(40); + QCOMPARE(reply->error(), QNetworkReply::NoError); + QVERIFY(!QTestEventLoop::instance().timeout()); + + qint64 elapsed = time.elapsed(); + qDebug() << "tst_QNetworkReply::httpUploadPerformance" << elapsed << "msec, " + << ((UploadSize/1024.0)/(elapsed/1000.0)) << " kB/sec"; + + reader.exit(); + reader.wait(); +} + + +void tst_qnetworkreply::performanceControlRate() +{ + // this is a control comparison for the other two above + // it does the same thing, but instead bypasses the QNetworkAccess system + qDebug() << "The following are the maximum transfer rates that we can get in this system" + " (bypassing QNetworkAccess)"; + + TimedSender sender(5000); + QTcpSocket sink; + sink.connectToHost("127.0.0.1", sender.serverPort()); + DataReader reader(&sink, false); + + QTime loopTime; + connect(&sink, SIGNAL(disconnected()), &QTestEventLoop::instance(), SLOT(exitLoop())); + loopTime.start(); + QTestEventLoop::instance().enterLoop(40); + int elapsedTime = loopTime.elapsed(); + sender.wait(); + + qint64 receivedBytes = reader.totalBytes; + qDebug() << "tst_QNetworkReply::performanceControlRate" << "receive rate:" << (receivedBytes * 1000 / elapsedTime / 1024) << "kB/s and" + << elapsedTime << "ms"; +} + +void tst_qnetworkreply::httpDownloadPerformance_data() +{ + QTest::addColumn<bool>("serverSendsContentLength"); + QTest::addColumn<bool>("chunkedEncoding"); + + QTest::newRow("Server sends no Content-Length") << false << false; + QTest::newRow("Server sends Content-Length") << true << false; + QTest::newRow("Server uses chunked encoding") << false << true; + +} + +void tst_qnetworkreply::httpDownloadPerformance() +{ + QFETCH(bool, serverSendsContentLength); + QFETCH(bool, chunkedEncoding); +#ifdef Q_OS_SYMBIAN + // Show some mercy to non-desktop platform/s + enum {UploadSize = 4*1024*1024}; // 4 MB +#else + enum {UploadSize = 128*1024*1024}; // 128 MB +#endif + HttpDownloadPerformanceServer server(UploadSize, serverSendsContentLength, chunkedEncoding); + + QNetworkRequest request(QUrl("http://127.0.0.1:" + QString::number(server.serverPort()) + "/?bare=1")); + QNetworkReplyPtr reply = manager.get(request); + + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection); + HttpDownloadPerformanceClient client(reply); + + QTime time; + time.start(); + QTestEventLoop::instance().enterLoop(40); + QCOMPARE(reply->error(), QNetworkReply::NoError); + QVERIFY(!QTestEventLoop::instance().timeout()); + + qint64 elapsed = time.elapsed(); + qDebug() << "tst_QNetworkReply::httpDownloadPerformance" << elapsed << "msec, " + << ((UploadSize/1024.0)/(elapsed/1000.0)) << " kB/sec"; +} + QTEST_MAIN(tst_qnetworkreply) #include "tst_qnetworkreply.moc" diff --git a/tools/assistant/lib/qhelpsearchengine.cpp b/tools/assistant/lib/qhelpsearchengine.cpp index cb18142..893495d 100644 --- a/tools/assistant/lib/qhelpsearchengine.cpp +++ b/tools/assistant/lib/qhelpsearchengine.cpp @@ -95,12 +95,11 @@ private: delete indexWriter; } - - int hitsCount() const + int hitCount() const { int count = 0; if (indexReader) - count = indexReader->hitsCount(); + count = indexReader->hitCount(); return count; } @@ -366,11 +365,22 @@ QHelpSearchResultWidget* QHelpSearchEngine::resultWidget() } /*! + \obsolete Returns the amount of hits the search engine found. + \sa hitCount() */ int QHelpSearchEngine::hitsCount() const { - return d->hitsCount(); + return d->hitCount(); +} + +/*! + \since 4.6 + Returns the amount of hits the search engine found. +*/ +int QHelpSearchEngine::hitCount() const +{ + return d->hitCount(); } /*! diff --git a/tools/assistant/lib/qhelpsearchengine.h b/tools/assistant/lib/qhelpsearchengine.h index 1d53411..21f04c5 100644 --- a/tools/assistant/lib/qhelpsearchengine.h +++ b/tools/assistant/lib/qhelpsearchengine.h @@ -86,7 +86,8 @@ public: QHelpSearchQueryWidget* queryWidget(); QHelpSearchResultWidget* resultWidget(); - int hitsCount() const; + QT_DEPRECATED int hitsCount() const; + int hitCount() const; typedef QPair<QString, QString> SearchHit; QList<SearchHit> hits(int start, int end) const; diff --git a/tools/assistant/lib/qhelpsearchindexreader.cpp b/tools/assistant/lib/qhelpsearchindexreader.cpp index 20d181b..b134605 100644 --- a/tools/assistant/lib/qhelpsearchindexreader.cpp +++ b/tools/assistant/lib/qhelpsearchindexreader.cpp @@ -83,7 +83,7 @@ void QHelpSearchIndexReader::search(const QString &collectionFile, const QString start(QThread::NormalPriority); } -int QHelpSearchIndexReader::hitsCount() const +int QHelpSearchIndexReader::hitCount() const { QMutexLocker lock(&mutex); return hitList.count(); diff --git a/tools/assistant/lib/qhelpsearchindexreader_p.h b/tools/assistant/lib/qhelpsearchindexreader_p.h index 31c392f..adbcdc2 100644 --- a/tools/assistant/lib/qhelpsearchindexreader_p.h +++ b/tools/assistant/lib/qhelpsearchindexreader_p.h @@ -81,7 +81,7 @@ public: void search(const QString &collectionFile, const QString &indexFilesFolder, const QList<QHelpSearchQuery> &queryList); - int hitsCount() const; + int hitCount() const; QList<QHelpSearchEngine::SearchHit> hits(int start, int end) const; signals: diff --git a/tools/assistant/lib/qhelpsearchresultwidget.cpp b/tools/assistant/lib/qhelpsearchresultwidget.cpp index a2f0021..c0d17dd 100644 --- a/tools/assistant/lib/qhelpsearchresultwidget.cpp +++ b/tools/assistant/lib/qhelpsearchresultwidget.cpp @@ -169,13 +169,13 @@ private slots: void showNextResultPage() { if (!searchEngine.isNull() - && resultLastToShow < searchEngine->hitsCount()) { + && resultLastToShow < searchEngine->hitCount()) { resultLastToShow += 20; resultFirstToShow += 20; resultTextBrowser->showResultPage(searchEngine->hits(resultFirstToShow, resultLastToShow), isIndexing); - if (resultLastToShow >= searchEngine->hitsCount()) + if (resultLastToShow >= searchEngine->hitCount()) updateNextButtonState(false); } updateHitRange(); @@ -184,7 +184,7 @@ private slots: void showLastResultPage() { if (!searchEngine.isNull()) { - resultLastToShow = searchEngine->hitsCount(); + resultLastToShow = searchEngine->hitCount(); resultFirstToShow = resultLastToShow - (resultLastToShow % 20); if (resultFirstToShow == resultLastToShow) @@ -214,7 +214,7 @@ private slots: { if (!searchEngine.isNull()) { int count = resultLastToShow % 20; - if (count == 0 || resultLastToShow != searchEngine->hitsCount()) + if (count == 0 || resultLastToShow != searchEngine->hitCount()) count = 20; resultLastToShow -= count; @@ -298,7 +298,7 @@ private: int count = 0; if (!searchEngine.isNull()) { - count = searchEngine->hitsCount(); + count = searchEngine->hitCount(); if (count > 0) { first = resultFirstToShow +1; last = resultLastToShow > count ? count : resultLastToShow; diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 265bc5c..735e030 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3402,10 +3402,7 @@ void Configure::buildHostTools() QString pwd = QDir::currentPath(); QStringList hostToolsDirs; hostToolsDirs - << "src/tools/bootstrap" - << "src/tools/moc" - << "src/tools/rcc" - << "src/tools/uic"; + << "src/tools"; if(dictionary["XQMAKESPEC"].startsWith("wince")) hostToolsDirs << "tools/checksdk"; diff --git a/tools/designer/src/designer/qdesigner_formwindow.cpp b/tools/designer/src/designer/qdesigner_formwindow.cpp index b2af257..05937cd 100644 --- a/tools/designer/src/designer/qdesigner_formwindow.cpp +++ b/tools/designer/src/designer/qdesigner_formwindow.cpp @@ -182,7 +182,7 @@ int QDesignerFormWindow::getNumberOfUntitledWindows() const if (rx.indexIn(title) != -1) { if (maxUntitled == 0) ++maxUntitled; - if (rx.numCaptures() > 1) { + if (rx.captureCount() > 1) { const QString numberCapture = rx.cap(2); if (!numberCapture.isEmpty()) maxUntitled = qMax(numberCapture.toInt(), maxUntitled); diff --git a/tools/makeqpf/mainwindow.cpp b/tools/makeqpf/mainwindow.cpp index 8fa372b..45ea0a3 100644 --- a/tools/makeqpf/mainwindow.cpp +++ b/tools/makeqpf/mainwindow.cpp @@ -269,7 +269,7 @@ void MainWindow::populateCharacterRanges() if (line.isEmpty() || line.startsWith(QLatin1Char('#'))) continue; - if (!rangeExpr.exactMatch(line) || rangeExpr.numCaptures() != 3) + if (!rangeExpr.exactMatch(line) || rangeExpr.captureCount() != 3) continue; QPF::CharacterRange range; diff --git a/tools/makeqpf/qpf2.cpp b/tools/makeqpf/qpf2.cpp index 23006f0..a0af1a0 100644 --- a/tools/makeqpf/qpf2.cpp +++ b/tools/makeqpf/qpf2.cpp @@ -519,7 +519,7 @@ void QPF::addGlyphs(QFontEngine *fe, const QList<CharacterRange> &ranges) glyph_metrics_t metrics = fe->boundingBox(glyphIndex); const quint32 oldSize = glyphs.size(); - glyphs.resize(glyphs.size() + sizeof(QFontEngineQPF::Glyph) + img.numBytes()); + glyphs.resize(glyphs.size() + sizeof(QFontEngineQPF::Glyph) + img.byteCount()); uchar *data = reinterpret_cast<uchar *>(glyphs.data() + oldSize); uchar *gmapPtr = reinterpret_cast<uchar *>(gmap.data() + glyphIndex * sizeof(quint32)); @@ -543,7 +543,7 @@ void QPF::addGlyphs(QFontEngine *fe, const QList<CharacterRange> &ranges) ; } - qMemCopy(data, img.bits(), img.numBytes()); + qMemCopy(data, img.bits(), img.byteCount()); } } } diff --git a/tools/qvfb/qvfbview.cpp b/tools/qvfb/qvfbview.cpp index 8cab641..69817bd 100644 --- a/tools/qvfb/qvfbview.cpp +++ b/tools/qvfb/qvfbview.cpp @@ -596,7 +596,7 @@ QImage QVFbView::getBuffer(const QRect &r, int &leading) const r.width(), r.height(), mView->linestep(), QImage::Format_Indexed8); img.setColorTable(mView->clut()); - if (img.numColors() <= 0) + if (img.colorCount() <= 0) img = QImage(); break; } @@ -613,10 +613,10 @@ QImage QVFbView::getBuffer(const QRect &r, int &leading) const if ( img.format() != QImage::Format_ARGB32_Premultiplied ) img = img.convertToFormat(QImage::Format_RGB32); - // NOTE: calling bits() may change numBytes(), so do not + // NOTE: calling bits() may change byteCount(), so do not // pass them as parameters (which are evaluated right-to-left). QRgb *b = (QRgb*)img.bits(); - int n = img.numBytes()/4; + int n = img.byteCount()/4; dim(b,n,brightness); } } |