diff options
210 files changed, 25944 insertions, 1304 deletions
@@ -5,16 +5,16 @@ 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.5/qtcore.html -QtGui - http://doc.trolltech.com/4.5/qtgui.html -QtNetwork - http://doc.trolltech.com/4.5/qtnetwork.html -QtScript - http://doc.trolltech.com/4.5/qtscript.html -QtSql - http://doc.trolltech.com/4.5/qtsql.html -QtSvg - http://doc.trolltech.com/4.5/qtsvg.html -QtTest - http://doc.trolltech.com/4.5/qttest.html -QtWebKit - http://doc.trolltech.com/4.5/qtwebkit.html -QtXml - http://doc.trolltech.com/4.5/qtxml.html -Phonon - http://doc.trolltech.com/4.5/phonon-module.html +QtCore - http://doc.trolltech.com/4.6/qtcore.html +QtGui - http://doc.trolltech.com/4.6/qtgui.html +QtNetwork - http://doc.trolltech.com/4.6/qtnetwork.html +QtScript - http://doc.trolltech.com/4.6/qtscript.html +QtSql - http://doc.trolltech.com/4.6/qtsql.html +QtSvg - http://doc.trolltech.com/4.6/qtsvg.html +QtTest - http://doc.trolltech.com/4.6/qttest.html +QtWebKit - http://doc.trolltech.com/4.6/qtwebkit.html +QtXml - http://doc.trolltech.com/4.6/qtxml.html +Phonon - http://doc.trolltech.com/4.6/phonon-module.html INSTALLING Qt @@ -23,7 +23,7 @@ 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.5/index.html +directory or at http://doc.trolltech.com/4.6/index.html SUPPORTED PLATFORMS @@ -67,7 +67,7 @@ such a program can be created with some minor changes to one of the many example programs in Qt's examples directory. - INSTALLING Qt/S60 Version %VERSION% + INSTALLING Qt for S60 Version %VERSION% 1. Install needed IDE and SDKs @@ -86,7 +86,10 @@ many example programs in Qt's examples directory. - 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 libraries for real device requires RVCT 2.2 [build 616] or later: + - 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 @@ -132,21 +135,21 @@ many example programs in Qt's examples directory. To configure Qt for S60, do: cd \Qt\%VERSION% - configure -platform win32-mwc -xplatform symbian-abld + 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 device, type: - - make release-armv5 - 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 @@ -156,7 +159,7 @@ many example programs in Qt's examples directory. a real device, you first have to install the Qt libraries on the device: cd src\s60installs - createpackage -i qt_libs_armv5_urel.pkg <certificate file> <certificate key file> + 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. @@ -164,9 +167,9 @@ many example programs in Qt's examples directory. Similarly, install fluidlauncher to the device: cd embedded\fluidlauncher - createpackage -i fluidlauncher_armv5_urel.pkg + createpackage -i fluidlauncher_template.pkg release-armv5 - This will create a self-signed fluidlauncher_armv5_urel.sisx and install it to your device. + 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: @@ -2232,16 +2232,6 @@ if [ "$OPT_SHADOW" = "yes" ]; then ln -s "$relpath/tools/porting/src/q3porting.xml" "$outpath/tools/porting/src" fi -# symlink files from src/gui/embedded neccessary to build qvfb -if [ "$CFG_DEV" = "yes" ]; then - mkdir -p "$outpath/tools/qvfb" - for f in qvfbhdr.h qlock_p.h qlock.cpp qwssignalhandler_p.h qwssignalhandler.cpp; do - dest="${outpath}/tools/qvfb/${f}" - rm -f "$dest" - ln -s "${relpath}/src/gui/embedded/${f}" "${dest}" - done -fi - # symlink fonts to be able to run application from build directory if [ "$PLATFORM_QWS" = "yes" ] && [ ! -e "${outpath}/lib/fonts" ]; then if [ "$PLATFORM" = "$XPLATFORM" ]; then diff --git a/configure.exe b/configure.exe Binary files differindex 12e8431..aa254f3 100755 --- a/configure.exe +++ b/configure.exe diff --git a/demos/embedded/anomaly/anomaly.pro b/demos/embedded/anomaly/anomaly.pro index 8fb1265..f7c11b6 100644 --- a/demos/embedded/anomaly/anomaly.pro +++ b/demos/embedded/anomaly/anomaly.pro @@ -24,7 +24,7 @@ RESOURCES += src/anomaly.qrc symbian { include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) HEADERS += $$QT_SOURCE_TREE/examples/network/ftp/sym_iap_util.h - LIBS += -lesock -lconnmon + LIBS += -lesock -linsock -lconnmon TARGET.CAPABILITY = NetworkServices TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 TARGET.UID3 = 0xA000CF71 diff --git a/demos/embedded/fluidlauncher/config_s60/config.xml b/demos/embedded/fluidlauncher/config_s60/config.xml index 192a2e3..acd14cb 100644 --- a/demos/embedded/fluidlauncher/config_s60/config.xml +++ b/demos/embedded/fluidlauncher/config_s60/config.xml @@ -20,6 +20,7 @@ <example filename="weatherinfo" name="Weather Info" image="screenshots/weatherinfo.png"/> <example filename="flickable" name="Kinetic Scrolling" image="screenshots/flickable.png"/> <example filename="digiflip" name="Flipping Clock" image="screenshots/digiflip.png"/> + <example filename="qmediaplayer" name="Media Player" image="screenshots/mediaplayer.png"/> </demos> <slideshow timeout="60000" interval="10000"> <imagedir dir="slides"/> diff --git a/demos/embedded/fluidlauncher/fluidlauncher.pro b/demos/embedded/fluidlauncher/fluidlauncher.pro index 3ed4f31..408bf53 100644 --- a/demos/embedded/fluidlauncher/fluidlauncher.pro +++ b/demos/embedded/fluidlauncher/fluidlauncher.pro @@ -96,6 +96,11 @@ symbian { $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/lightmaps_reg.rsc \ $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/flightinfo_reg.rsc + contains(QT_CONFIG, phonon) { + reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/qmediaplayer_reg.rsc + } + + reg_resource.path = $$REG_RESOURCE_IMPORT_DIR resource.sources = \ @@ -136,6 +141,12 @@ symbian { reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/anomaly_reg.rsc resource.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/anomaly.rsc } + + contains(QT_CONFIG, phonon) { + executables.sources += qmediaplayer.exe + resource.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/qmediaplayer.rsc + } + contains(QT_CONFIG, script) { executables.sources += context2d.exe reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/context2d_reg.rsc diff --git a/demos/mediaplayer/mediaplayer.pro b/demos/mediaplayer/mediaplayer.pro index 49a652e..8f9ec82 100644 --- a/demos/mediaplayer/mediaplayer.pro +++ b/demos/mediaplayer/mediaplayer.pro @@ -3,7 +3,7 @@ ###################################################################### TEMPLATE = app -TARGET = +TARGET = qmediaplayer DEPENDPATH += . build src ui QT += phonon diff --git a/demos/qtdemo/xml/examples.xml b/demos/qtdemo/xml/examples.xml index b545e1d..3f0cd25 100644 --- a/demos/qtdemo/xml/examples.xml +++ b/demos/qtdemo/xml/examples.xml @@ -16,7 +16,7 @@ <example filename="embeddeddialogs" name="Embedded Dialogs" /> <example filename="interview" name="Interview" /> <example filename="browser" name="Browser" /> - <example filename="mediaplayer" name="Media Player" /> + <example filename="qmediaplayer" name="Media Player" /> <example filename="boxes" name="Boxes" /> <example filename="sub-attaq" name="Sub-attaq" /> </demos> diff --git a/demos/sub-attaq/states.cpp b/demos/sub-attaq/states.cpp index 10c173e..7443ae7 100644 --- a/demos/sub-attaq/states.cpp +++ b/demos/sub-attaq/states.cpp @@ -67,6 +67,8 @@ PlayState::PlayState(GraphicsScene *scene, QState *parent) PlayState::~PlayState() { + if (machine) + delete machine; } void PlayState::onEntry(QEvent *) @@ -74,13 +76,15 @@ void PlayState::onEntry(QEvent *) //We are now playing? if (machine) { machine->stop(); + //we hide the information + scene->textInformationItem->hide(); scene->clearScene(); currentLevel = 0; score = 0; delete machine; } - machine = new QStateMachine(this); + machine = new QStateMachine; //This state is when player is playing LevelState *levelState = new LevelState(scene, this, machine); diff --git a/demos/sub-attaq/sub-attaq.pro b/demos/sub-attaq/sub-attaq.pro index ba2b54b..8677ff5 100644 --- a/demos/sub-attaq/sub-attaq.pro +++ b/demos/sub-attaq/sub-attaq.pro @@ -31,13 +31,13 @@ SOURCES += boat.cpp \ RESOURCES += subattaq.qrc # install -target.path = $$[QT_INSTALL_DEMOS]/animation/sub-attaq +target.path = $$[QT_INSTALL_DEMOS]/sub-attaq sources.files = $$SOURCES \ $$HEADERS \ $$RESOURCES \ $$FORMS \ sub-attaq.pro \ pics -sources.path = $$[QT_INSTALL_DEMOS]/animation/sub-attaq +sources.path = $$[QT_INSTALL_DEMOS]/sub-attaq INSTALLS += target \ sources diff --git a/demos/sub-attaq/textinformationitem.cpp b/demos/sub-attaq/textinformationitem.cpp index 453fd24..1b0c831 100644 --- a/demos/sub-attaq/textinformationitem.cpp +++ b/demos/sub-attaq/textinformationitem.cpp @@ -44,7 +44,7 @@ TextInformationItem::TextInformationItem (QGraphicsItem * parent) : QGraphicsTextItem(parent) { - setFont(QFont("Comic Sans MS", 25)); + setFont(QFont("Comic Sans MS", 15)); } #include <QDebug> void TextInformationItem::setMessage(const QString& text) diff --git a/dist/changes-4.5.3 b/dist/changes-4.5.3 index 1edacac..189baee 100644 --- a/dist/changes-4.5.3 +++ b/dist/changes-4.5.3 @@ -30,6 +30,19 @@ information about a particular change. - QDoubleSpinBox * [255019] Fixed a crash when using large value for decimals. +- QFileDialog + * [None] Fix a bug when activating HideNameFilterDetails on Windows filedialog. + * [258084] QFileDialog static functions doesn't honor the DontUseNativeDialog flag. + +- QGraphicsItem + * [258956] Fix ancestor flags that are not correctly update when reparenting. + +- QGraphicsView + * [258356] Fix the hand scrolling in QGraphicsView that will stop unexpectedly. + +- QGraphicsWidget + * [257232] Fix regression in clip path calculation for QGraphicsWidget. + - QInputDialog * [255502] Fixed bug in getDouble(). diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index 1a20be9..539c1d5 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -599,14 +599,14 @@ If you are using pre-built binaries, follow the instructions \o Build Qt - To build Qt for the device, type: - - \snippet doc/src/snippets/code/doc_src_installation.qdoc 28 - To build Qt for the emulator, type: \snippet doc/src/snippets/code/doc_src_installation.qdoc 24 + To build Qt for the device, type: + + \snippet doc/src/snippets/code/doc_src_installation.qdoc 28 + Congratulations, Qt is now ready to use. \o Running Qt demos diff --git a/doc/src/images/graphicseffect-bloom.png b/doc/src/images/graphicseffect-bloom.png Binary files differnew file mode 100644 index 0000000..dace7eb --- /dev/null +++ b/doc/src/images/graphicseffect-bloom.png diff --git a/doc/src/images/graphicseffect-effects.png b/doc/src/images/graphicseffect-effects.png Binary files differindex 3709014..609bef9 100644 --- a/doc/src/images/graphicseffect-effects.png +++ b/doc/src/images/graphicseffect-effects.png diff --git a/doc/src/platforms/platform-notes.qdoc b/doc/src/platforms/platform-notes.qdoc index d455463..5be66f8 100644 --- a/doc/src/platforms/platform-notes.qdoc +++ b/doc/src/platforms/platform-notes.qdoc @@ -411,6 +411,24 @@ For information about mixing exceptions with symbian leaves, see \l{Exception Safety with Symbian} + + \section1 Multimedia and Phonon Support + + Qt provides a backend for Qt's multimedia module, Phonon, which supports + video and sound playback through Symbian's Multimedia Framework, MMF. + + In this release the support is experimental. Video playback may have + flickering issues, and support for effects and playback queueing is + incomplete. + + The audio and video formats that Phonon supports depends on what support + the platform provides for MMF. The emulator is known to have limited + codec support. + + In addition, there exists a backend for the Helix framework. However, due + to it not shipping with Qt, its availability depends on the Symbian + platform in use. If available, it is loaded instead of the MMF plugin. + */ /*! diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc index 03d9b29..eafae14 100644 --- a/doc/src/qt4-intro.qdoc +++ b/doc/src/qt4-intro.qdoc @@ -605,21 +605,12 @@ functions to query audio devices for which audio formats they support. - \section1 Classes and Functions Introduced in 4.6 + \section1 Classes, functions, and other items introduced in 4.6 - Links to class, function, and macro documentation. + Links to classes, function, and other items that were added in + 4.6. - \section2 Classes - - Classes introduced in Qt 4.6. - - \sincelist classes - - \section2 Functions & Macros - - Fuctions and macros introduced in Qt 4.6. - - \sincelist functions + \sincelist 4.6 */ diff --git a/doc/src/s60-introduction.qdoc b/doc/src/s60-introduction.qdoc index 045d740..d0a1976 100644 --- a/doc/src/s60-introduction.qdoc +++ b/doc/src/s60-introduction.qdoc @@ -90,7 +90,7 @@ \row \o \c debug-armv5 \o Build debug binaries for hardware using RVCT. \row \o \c release-armv5 \o Build release binaries for hardware using RVCT. \row \o \c run \o Run the emulator binaries from the build directory. - \row \o \c sis \o Create signed \c .sis file for project. + \row \o \c sis \o Create signed \c .sis file for project. \endtable The following lines perform a debug build for the emulator @@ -106,7 +106,7 @@ To install your own applications on hardware, you need signed \c .sis file. The signed \c .sis file can be created with \c make \c sis target. \c sis target is only supported for executables or projects with \c DEPLOYMENT statements. - By default the \c sis target will create signed \.sis file for last build + By default the \c sis target will create signed \c .sis file for last build target. For example, the following sequence will generate the needed makefiles, build the project for \c debug-winscw and \c release-armv5, and create self-signed \c .sis file for \c release-armv5 target: @@ -119,8 +119,10 @@ \table \row \o \c QT_SIS_OPTIONS \o Options accepted by \c .sis creation. - Currently only -i, install the package right away - using PC suite, is supported. + -i, install the package right away using PC suite. + -c=<file>, read certificate information from a file. + Execute \c{perl createpackage.pl} for more information + about options. By default no otions are given. \row \o \c QT_SIS_TARGET \o Target for which \c .sis file is created. Accepted values are build targets listed in @@ -133,13 +135,13 @@ By default empty. \endtable - The environment variables for \c make can be given as an parameters. For example: - - \snippet doc/src/snippets/code/doc_src_s60-introduction.qdoc 3 - - The above example is identical to: + For example: \snippet doc/src/snippets/code/doc_src_s60-introduction.qdoc 4 + + The environment variables for \c make can also be given as parameters: + + \snippet doc/src/snippets/code/doc_src_s60-introduction.qdoc 3 If you want to install the program immediately, make sure that the device is connected to the computer in "PC Suite" mode, and run \c sis target diff --git a/examples/activeqt/activeqt.pro b/examples/activeqt/activeqt.pro index db63104..262e1a1 100644 --- a/examples/activeqt/activeqt.pro +++ b/examples/activeqt/activeqt.pro @@ -18,5 +18,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS activeqt.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/activeqt/comapp/comapp.pro b/examples/activeqt/comapp/comapp.pro index 99b8933..84ce072 100644 --- a/examples/activeqt/comapp/comapp.pro +++ b/examples/activeqt/comapp/comapp.pro @@ -11,5 +11,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/comapp sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS comapp.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt/comapp INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/activeqt/hierarchy/hierarchy.pro b/examples/activeqt/hierarchy/hierarchy.pro index cd1d754..abe5f1b 100644 --- a/examples/activeqt/hierarchy/hierarchy.pro +++ b/examples/activeqt/hierarchy/hierarchy.pro @@ -14,5 +14,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/hierarchy sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS hierarchy.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt/hierarchy INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/activeqt/menus/menus.pro b/examples/activeqt/menus/menus.pro index f197833..c962b6b 100644 --- a/examples/activeqt/menus/menus.pro +++ b/examples/activeqt/menus/menus.pro @@ -12,5 +12,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/menus sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS menus.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt/menus INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/activeqt/multiple/multiple.pro b/examples/activeqt/multiple/multiple.pro index 9c95921..7b86950 100644 --- a/examples/activeqt/multiple/multiple.pro +++ b/examples/activeqt/multiple/multiple.pro @@ -14,5 +14,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/multiple sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS multiple.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt/multiple INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/activeqt/opengl/opengl.pro b/examples/activeqt/opengl/opengl.pro index 978bd66..8eb81be 100644 --- a/examples/activeqt/opengl/opengl.pro +++ b/examples/activeqt/opengl/opengl.pro @@ -17,5 +17,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/opengl sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS opengl.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt/opengl INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/activeqt/qutlook/qutlook.pro b/examples/activeqt/qutlook/qutlook.pro index 0387735..c1154e0 100644 --- a/examples/activeqt/qutlook/qutlook.pro +++ b/examples/activeqt/qutlook/qutlook.pro @@ -21,5 +21,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/qutlook sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS qutlook.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt/qutlook INSTALLS += target sources - -include($$QT_SOURCE_TREE/examples/examplebase.pri) diff --git a/examples/activeqt/simple/simple.pro b/examples/activeqt/simple/simple.pro index 243d06a..d0f2019 100644 --- a/examples/activeqt/simple/simple.pro +++ b/examples/activeqt/simple/simple.pro @@ -11,5 +11,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/simple sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS simple.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt/simple INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/activeqt/webbrowser/webbrowser.pro b/examples/activeqt/webbrowser/webbrowser.pro index 13b1983..32eac71 100644 --- a/examples/activeqt/webbrowser/webbrowser.pro +++ b/examples/activeqt/webbrowser/webbrowser.pro @@ -15,5 +15,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/webbrowser sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS webbrowser.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt/webbrowser INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/activeqt/wrapper/wrapper.pro b/examples/activeqt/wrapper/wrapper.pro index a207f2e..4eb6baf 100644 --- a/examples/activeqt/wrapper/wrapper.pro +++ b/examples/activeqt/wrapper/wrapper.pro @@ -13,5 +13,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/wrapper sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS wrapper.pro sources.path = $$[QT_INSTALL_EXAMPLES]/activeqt/wrapper INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/qws/ahigl/ahigl.pro b/examples/qws/ahigl/ahigl.pro index c831335..1ee8e6e 100644 --- a/examples/qws/ahigl/ahigl.pro +++ b/examples/qws/ahigl/ahigl.pro @@ -7,8 +7,6 @@ TARGET = qahiglscreen target.path = $$[QT_INSTALL_PLUGINS]/gfxdrivers INSTALLS += target -include($$QT_SOURCE_TREE/examples/examplebase.pri) - HEADERS = qwindowsurface_ahigl_p.h \ qscreenahigl_qws.h diff --git a/examples/qws/dbscreen/dbscreen.pro b/examples/qws/dbscreen/dbscreen.pro index 86152ab..172a02a 100644 --- a/examples/qws/dbscreen/dbscreen.pro +++ b/examples/qws/dbscreen/dbscreen.pro @@ -5,8 +5,6 @@ TARGET = dbscreen target.path += $$[QT_INSTALL_PLUGINS]/gfxdrivers INSTALLS += target -include($$QT_SOURCE_TREE/examples/examplebase.pri) - HEADERS = dbscreen.h SOURCES = dbscreendriverplugin.cpp \ dbscreen.cpp diff --git a/examples/qws/framebuffer/framebuffer.pro b/examples/qws/framebuffer/framebuffer.pro index 3fd0975..f9fe850 100644 --- a/examples/qws/framebuffer/framebuffer.pro +++ b/examples/qws/framebuffer/framebuffer.pro @@ -9,5 +9,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/qws/framebuffer sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS framebuffer.pro sources.path = $$[QT_INSTALL_EXAMPLES]/qws/framebuffer INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/qws/mousecalibration/mousecalibration.pro b/examples/qws/mousecalibration/mousecalibration.pro index fc1c469..bd31853 100644 --- a/examples/qws/mousecalibration/mousecalibration.pro +++ b/examples/qws/mousecalibration/mousecalibration.pro @@ -9,5 +9,3 @@ target.path = $$[QT_INSTALL_EXAMPLES]/qws/mousecalibration sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro sources.path = $$[QT_INSTALL_EXAMPLES]/qws/mousecalibration INSTALLS += target sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/qws/qws.pro b/examples/qws/qws.pro index 48c59c1..95e1b44 100644 --- a/examples/qws/qws.pro +++ b/examples/qws/qws.pro @@ -7,5 +7,3 @@ SUBDIRS += mousecalibration simpledecoration sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS README *.pro sources.path = $$[QT_INSTALL_EXAMPLES]/qws INSTALLS += sources - -symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/qws/svgalib/svgalib.pro b/examples/qws/svgalib/svgalib.pro index 3ab5a19..8a47c1d 100644 --- a/examples/qws/svgalib/svgalib.pro +++ b/examples/qws/svgalib/svgalib.pro @@ -7,8 +7,6 @@ TARGET = svgalibscreen target.path = $$[QT_INSTALL_PLUGINS]/gfxdrivers INSTALLS += target -include($$QT_SOURCE_TREE/examples/examplebase.pri) - HEADERS = svgalibscreen.h \ svgalibpaintengine.h \ svgalibsurface.h \ diff --git a/examples/script/qsdbg/qsdbg.pro b/examples/script/qsdbg/qsdbg.pro index 77b55a2..424e0fb 100644 --- a/examples/script/qsdbg/qsdbg.pro +++ b/examples/script/qsdbg/qsdbg.pro @@ -16,6 +16,4 @@ sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS qsdbg.pro sources.path = $$[QT_INSTALL_EXAMPLES]/script/qsdbg INSTALLS += target sources -include($$QT_SOURCE_TREE/examples/examplebase.pri) - - +symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/statemachine/pingpong/main.cpp b/examples/statemachine/pingpong/main.cpp index 7e3d8b1..358c499 100644 --- a/examples/statemachine/pingpong/main.cpp +++ b/examples/statemachine/pingpong/main.cpp @@ -86,7 +86,7 @@ protected: } virtual void onTransition(QEvent *) { - machine()->postEvent(new PingEvent(), 500); + machine()->postDelayedEvent(new PingEvent(), 500); fprintf(stdout, "ping?\n"); } }; @@ -104,7 +104,7 @@ protected: } virtual void onTransition(QEvent *) { - machine()->postEvent(new PongEvent(), 500); + machine()->postDelayedEvent(new PongEvent(), 500); fprintf(stdout, "pong!\n"); } }; diff --git a/examples/webkit/googlechat/googlechat.cpp b/examples/webkit/googlechat/googlechat.cpp index a4a19a4..d2307d9 100644 --- a/examples/webkit/googlechat/googlechat.cpp +++ b/examples/webkit/googlechat/googlechat.cpp @@ -41,6 +41,7 @@ #include <QtGui> #include <QtWebKit> +#include <QSslSocket> #include "googlechat.h" @@ -117,6 +118,11 @@ void GoogleChat::doLogin() { } void GoogleChat::initialPage(bool ok) { + if (!QSslSocket::supportsSsl()) { + showError("This example requires SSL support."); + return; + } + if (ok) { QString s1 = evalJS("document.getElementById('Email').name"); QString s2 = evalJS("document.getElementById('Passwd').name"); diff --git a/examples/webkit/webkit.pro b/examples/webkit/webkit.pro index 9ad6789..0a1d6bd 100644 --- a/examples/webkit/webkit.pro +++ b/examples/webkit/webkit.pro @@ -1,8 +1,9 @@ TEMPLATE = subdirs SUBDIRS += formextractor \ previewer \ - fancybrowser \ - googlechat + fancybrowser + +contains(QT_CONFIG, openssl):SUBDIRS += googlechat # install target.path = $$[QT_INSTALL_EXAMPLES]/webkit diff --git a/mkspecs/features/debug_and_release.prf b/mkspecs/features/debug_and_release.prf index 19031ef..ef33789 100644 --- a/mkspecs/features/debug_and_release.prf +++ b/mkspecs/features/debug_and_release.prf @@ -1 +1 @@ -!macx-xcode:!symbian-abld:addExclusiveBuilds(debug, Debug, release, Release) +!macx-xcode:!symbian:addExclusiveBuilds(debug, Debug, release, Release) diff --git a/mkspecs/features/symbian/qt.prf b/mkspecs/features/symbian/qt.prf index dd4a4d5..3b24355 100644 --- a/mkspecs/features/symbian/qt.prf +++ b/mkspecs/features/symbian/qt.prf @@ -6,6 +6,21 @@ CONFIG += qtmain load(qt) +# Allow .pro files to specify include path(s) to be prepended to the list. +# +# This allows the project to override the default ordering, whereby paths +# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause +# problems when both the epoc32/include tree and a Qt include directory +# contain a header of the same name - in this case, the Qt header is always +# included by virtue of its path appearing first in the SYSTEMINCLUDE +# directives in the generated MMP file. +# +# To work around this situation, the following line can be added to the .pro +# file: +# PREPEND_INCLUDEPATH = /epoc32/include +# +INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH + # Add dependency to QtLibs package to all other projects besides QtLibs. # Note: QtLibs with full capabilities has UID3 of 0x2001E61C, # while self-signed version typically has temporary UID3 of 0xE001E61C. diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/interpreter/Interpreter.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/interpreter/Interpreter.cpp index 4200023..76c8510 100644 --- a/src/3rdparty/javascriptcore/JavaScriptCore/interpreter/Interpreter.cpp +++ b/src/3rdparty/javascriptcore/JavaScriptCore/interpreter/Interpreter.cpp @@ -3084,6 +3084,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi #else newCallFrame->init(0, vPC + 5, scopeChain, callFrame, dst, argCount, asObject(v)); #endif + Register* thisRegister = newCallFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount; ArgList args(thisRegister + 1, argCount - 1); @@ -3242,7 +3243,6 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi newCallFrame->init(0, vPC + 5, scopeChain, callFrame, dst, argCount, asObject(v)); #endif - Register* thisRegister = newCallFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount; ArgList args(thisRegister + 1, argCount - 1); diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp index 0b147df..08a4493 100644 --- a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp +++ b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp @@ -2429,8 +2429,13 @@ DEFINE_STUB_FUNCTION(int, op_eq) goto start; } - if (src2.isObject()) - return asObject(cell1) == asObject(src2); + if (src2.isObject()) { + return asObject(cell1) == asObject(src2) +#ifdef QT_BUILD_SCRIPT_LIB + || asObject(cell1)->compareToObject(stackFrame.callFrame, asObject(src2)) +#endif + ; + } src1 = asObject(cell1)->toPrimitive(stackFrame.callFrame); CHECK_FOR_EXCEPTION(); goto start; diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.h b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.h index 1a55bb5..0ecff19 100644 --- a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.h +++ b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.h @@ -181,7 +181,7 @@ namespace JSC { #endif template<> struct CellSize<sizeof(uint64_t)> { static const size_t m_value = 64; }; -#if PLATFORM(WINCE) +#if PLATFORM(WINCE) || PLATFORM(SYMBIAN) const size_t BLOCK_SIZE = 64 * 1024; // 64k #else const size_t BLOCK_SIZE = 64 * 4096; // 256k diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Structure.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Structure.cpp index 05e3d7b..f7bda9e 100644 --- a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Structure.cpp +++ b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Structure.cpp @@ -46,7 +46,6 @@ #define DO_PROPERTYMAP_CONSTENCY_CHECK 0 #endif -using namespace std; using namespace WTF; namespace JSC { diff --git a/src/3rdparty/javascriptcore/VERSION b/src/3rdparty/javascriptcore/VERSION index ae70d26..edcf898 100644 --- a/src/3rdparty/javascriptcore/VERSION +++ b/src/3rdparty/javascriptcore/VERSION @@ -4,8 +4,8 @@ This is a snapshot of JavaScriptCore from The commit imported was from the - jsc-for-qtscript-4.6-staging-28092009 branch/tag + jsc-for-qtscript-4.6-staging-30092009 branch/tag and has the sha1 checksum - b98dec961e9389ddd5e10d7c4086de9a297cb984 + e8f42cf0203bee0ba89a05e0e773d713782129b4 diff --git a/src/3rdparty/phonon/mmf/TODO.txt b/src/3rdparty/phonon/mmf/TODO.txt new file mode 100644 index 0000000..a2b1865 --- /dev/null +++ b/src/3rdparty/phonon/mmf/TODO.txt @@ -0,0 +1,29 @@ +TODO list for MMF Phonon backend +-------------------------------- + +The following items are in rough order of priority. + +* Activating full-screen video playback in qmediaplayer causes the app to crash +This may be symptomatic of more general problems with re-sizing / re-positioning video while playing. + +* Implement audio effects + +* Support for playing "file:" URLs + +* Support for network streaming playback +The main question here is how best to implement the MIME type detection for streams. The OpenUrlL functions only take a URL, whereas the corresponding OpenFileL functions have overloads for filenames and for open RFile handles. This is because files support random access whereas streams do not. A naieve approach to MIME type detection for streams is as follows; is there a more efficient approach? + 1. Open network connection + 2. Download header + 3. Detect MIME type and create AbstractMediaPlayer instance + 4. Close network connection + 5. Pass URL to MMF client utility, which will then re-open the stream +An alternative approach is to always create a VideoPlayer when passed an RTSP URL, and then modify VideoPlayer::hasVideo to check CVideoPlayerUtility::VideoMimeTypeL before returning. This way, we would always use CVideoPlayerUtility for RTSP streaming, whether the source is audio or video. Well-behaved client apps, however, should check MediaObject::hasVideo before creating the UI - and therefore the VideoWidget would only be connected if the source is actually a video stream. + +* Performance analysis +Compare video frame rate obtained using default S60 media player and Qt demo apps + +* Implement MMF::Backend::disconnectNodes +This should probably be left for now, particularly until audio effects have been implemented. This is because the node connection mechanism may need to be refactored slightly once we start building up longer graphs (e.g. MediaObject -> Effect -> Effect -> AudioOutput). + +* Metadata is not implemented. + diff --git a/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp b/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp new file mode 100644 index 0000000..b3155a6 --- /dev/null +++ b/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp @@ -0,0 +1,74 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "mediaobject.h" + +#include "abstractaudioeffect.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +AbstractAudioEffect::AbstractAudioEffect(QObject *parent, + const QList<EffectParameter> ¶ms) : MediaNode::MediaNode(parent) + , m_params(params) +{ +} + +bool AbstractAudioEffect::disconnectMediaNode(MediaNode *target) +{ + MediaNode::disconnectMediaNode(target); + m_effect.reset(); + return true; +} + +QList<EffectParameter> AbstractAudioEffect::parameters() const +{ + return m_params; +} + +QVariant AbstractAudioEffect::parameterValue(const EffectParameter &queriedParam) const +{ + const QVariant &val = m_values.value(queriedParam.id()); + + if (val.isNull()) + return queriedParam.defaultValue(); + else + return val; +} + +bool AbstractAudioEffect::activateOnMediaObject(MediaObject *mo) +{ + AudioPlayer *const ap = qobject_cast<AudioPlayer *>(mo->abstractPlayer()); + + if (ap) + return activateOn(ap->player()); + else + return true; +} + +void AbstractAudioEffect::setParameterValue(const EffectParameter ¶m, + const QVariant &newValue) +{ + m_values.insert(param.id(), newValue); + parameterChanged(param.id(), newValue); +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/abstractaudioeffect.h b/src/3rdparty/phonon/mmf/abstractaudioeffect.h new file mode 100644 index 0000000..01542c9 --- /dev/null +++ b/src/3rdparty/phonon/mmf/abstractaudioeffect.h @@ -0,0 +1,105 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_ABSTRACTEFFECT_H +#define PHONON_MMF_ABSTRACTEFFECT_H + +#include "mmf_medianode.h" + +#include <QScopedPointer> + +#include <AudioEffectBase.h> + +#include <Phonon/EffectInterface> +#include <Phonon/EffectParameter> +#include "audioplayer.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ + +/** + * @short Base class for all effects for MMF. + * + * Adhering to Phonon with MMF is cumbersome because of a number of reasons: + * + * - MMF has no concept of effect chaining. Simply, an effect is a applied + * to PlayerUtility, that's it. This means that the order of effects is + * undefined. + * - We apply an effect to a PlayerUtility, and MediaObject has that one. + * However, effects might be created before MediaObject, but nevertheless + * needs to work. We solve this by that we are aware of the whole connection + * chain, and whenever a connection happens, we walk the chain, find effects + * that aren't applied, and apply it if we have a media object. + * - There are plenty of corner cases which we don't handle and where behavior + * are undefined. For instance, graphs with more than one MediaObject. + */ +class AbstractAudioEffect : public MediaNode + , public EffectInterface +{ + Q_OBJECT + Q_INTERFACES(Phonon::EffectInterface) +public: + AbstractAudioEffect(QObject *parent, + const QList<EffectParameter> ¶ms); + + virtual QList<EffectParameter> parameters() const; + virtual QVariant parameterValue(const EffectParameter ¶m) const; + virtual void setParameterValue(const EffectParameter &, + const QVariant &newValue); + + virtual bool disconnectMediaNode(MediaNode *target); + + enum Type + { + EffectAudioEqualizer = 1, + EffectBassBoost, + EffectDistanceAttenuation, + EffectEnvironmentalReverb, + EffectListenerOrientation, + EffectLoudness, + EffectSourceOrientation, + EffectStereoWidening + }; + +protected: + virtual bool activateOn(CPlayerType *player) = 0; + virtual void parameterChanged(const int id, + const QVariant &value) = 0; + + /** + * Part of the implementation of AbstractAudioEffect. Forwards the call to + * activateOn(), essentially. + */ + virtual bool activateOnMediaObject(MediaObject *mo); + + QScopedPointer<CAudioEffect> m_effect; +private: + const QList<EffectParameter> m_params; + QHash<int, QVariant> m_values; +}; +} +} + +QT_END_NAMESPACE + +#endif + diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp new file mode 100644 index 0000000..8fe1e4d --- /dev/null +++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp @@ -0,0 +1,404 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <QUrl> + +#include "abstractmediaplayer.h" +#include "defs.h" +#include "utils.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- + +const int NullMaxVolume = -1; + + +//----------------------------------------------------------------------------- +// Constructor / destructor +//----------------------------------------------------------------------------- + +MMF::AbstractMediaPlayer::AbstractMediaPlayer() : + m_playPending(false) + , m_tickTimer(new QTimer(this)) + , m_mmfMaxVolume(NullMaxVolume) +{ + connect(m_tickTimer.data(), SIGNAL(timeout()), this, SLOT(tick())); +} + +MMF::AbstractMediaPlayer::AbstractMediaPlayer(const AbstractPlayer& player) : + AbstractPlayer(player) + , m_playPending(false) + , m_tickTimer(new QTimer(this)) + , m_mmfMaxVolume(NullMaxVolume) +{ + connect(m_tickTimer.data(), SIGNAL(timeout()), this, SLOT(tick())); +} + +//----------------------------------------------------------------------------- +// MediaObjectInterface +//----------------------------------------------------------------------------- + +void MMF::AbstractMediaPlayer::play() +{ + TRACE_CONTEXT(AbstractMediaPlayer::play, EAudioApi); + TRACE_ENTRY("state %d", privateState()); + + switch (privateState()) { + case GroundState: + setError(NormalError); + break; + + case LoadingState: + m_playPending = true; + break; + + case StoppedState: + case PausedState: + doPlay(); + startTickTimer(); + changeState(PlayingState); + break; + + case PlayingState: + case BufferingState: + case ErrorState: + // Do nothing + break; + + // Protection against adding new states and forgetting to update this switch + default: + TRACE_PANIC(InvalidStatePanic); + } + + TRACE_EXIT("state %d", privateState()); +} + +void MMF::AbstractMediaPlayer::pause() +{ + TRACE_CONTEXT(AbstractMediaPlayer::pause, EAudioApi); + TRACE_ENTRY("state %d", privateState()); + + m_playPending = false; + + switch (privateState()) { + case GroundState: + case LoadingState: + case PausedState: + case ErrorState: + // Do nothing + break; + + case StoppedState: + case PlayingState: + case BufferingState: + doPause(); + stopTickTimer(); + changeState(PausedState); + break; + + // Protection against adding new states and forgetting to update this switch + default: + TRACE_PANIC(InvalidStatePanic); + } + + TRACE_EXIT("state %d", privateState()); +} + +void MMF::AbstractMediaPlayer::stop() +{ + TRACE_CONTEXT(AbstractMediaPlayer::stop, EAudioApi); + TRACE_ENTRY("state %d", privateState()); + + m_playPending = false; + + switch (privateState()) { + case GroundState: + case LoadingState: + case StoppedState: + case ErrorState: + // Do nothing + break; + + case PlayingState: + case BufferingState: + case PausedState: + doStop(); + stopTickTimer(); + changeState(StoppedState); + break; + + // Protection against adding new states and forgetting to update this switch + default: + TRACE_PANIC(InvalidStatePanic); + } + + TRACE_EXIT("state %d", privateState()); +} + +void MMF::AbstractMediaPlayer::seek(qint64 ms) +{ + TRACE_CONTEXT(AbstractMediaPlayer::seek, EAudioApi); + TRACE_ENTRY("state %d pos %Ld", state(), ms); + + switch (privateState()) { + // Fallthrough all these + case GroundState: + case StoppedState: + case PausedState: + case PlayingState: + case LoadingState: + { + const bool tickTimerWasRunning = m_tickTimer->isActive(); + stopTickTimer(); + + doSeek(ms); + + if (tickTimerWasRunning) { + startTickTimer(); + } + break; + } + case BufferingState: + // Fallthrough + case ErrorState: + // Do nothing + break; + } + + TRACE_EXIT_0(); +} + +bool MMF::AbstractMediaPlayer::isSeekable() const +{ + return true; +} + +void MMF::AbstractMediaPlayer::doSetTickInterval(qint32 interval) +{ + TRACE_CONTEXT(AbstractMediaPlayer::doSetTickInterval, EAudioApi); + TRACE_ENTRY("state %d m_interval %d interval %d", privateState(), tickInterval(), interval); + + m_tickTimer->setInterval(interval); + + TRACE_EXIT_0(); +} + +MediaSource MMF::AbstractMediaPlayer::source() const +{ + return m_source; +} + +void MMF::AbstractMediaPlayer::setFileSource(const MediaSource &source, RFile& file) +{ + TRACE_CONTEXT(AbstractMediaPlayer::setFileSource, EAudioApi); + TRACE_ENTRY("state %d source.type %d", privateState(), source.type()); + + close(); + changeState(GroundState); + + // TODO: is it correct to assign even if the media type is not supported in + // the switch statement below? + m_source = source; + + TInt symbianErr = KErrNone; + + switch (m_source.type()) { + case MediaSource::LocalFile: { + symbianErr = openFile(file); + break; + } + + case MediaSource::Url: { + const QUrl url(source.url()); + + if (url.scheme() == QLatin1String("file")) { + symbianErr = openFile(file); + } + else { + TRACE_0("Source type not supported"); + // TODO: support network URLs + symbianErr = KErrNotSupported; + } + + break; + } + + case MediaSource::Invalid: + case MediaSource::Disc: + case MediaSource::Stream: + TRACE_0("Source type not supported"); + symbianErr = KErrNotSupported; + break; + + case MediaSource::Empty: + TRACE_0("Empty source - doing nothing"); + TRACE_EXIT_0(); + return; + + // Protection against adding new media types and forgetting to update this switch + default: + TRACE_PANIC(InvalidMediaTypePanic); + } + + if (KErrNone == symbianErr) { + changeState(LoadingState); + } else { + TRACE("error %d", symbianErr) + setError(NormalError); + } + + TRACE_EXIT_0(); +} + +void MMF::AbstractMediaPlayer::setNextSource(const MediaSource &source) +{ + TRACE_CONTEXT(AbstractMediaPlayer::setNextSource, EAudioApi); + TRACE_ENTRY("state %d", privateState()); + + // TODO: handle 'next source' + + m_nextSource = source; + Q_UNUSED(source); + + TRACE_EXIT_0(); +} + + +//----------------------------------------------------------------------------- +// VolumeObserver +//----------------------------------------------------------------------------- + +void MMF::AbstractMediaPlayer::volumeChanged(qreal volume) +{ + TRACE_CONTEXT(AbstractMediaPlayer::volumeChanged, EAudioInternal); + TRACE_ENTRY("state %d", privateState()); + + AbstractPlayer::volumeChanged(volume); + doVolumeChanged(); + + TRACE_EXIT_0(); +} + + +void MMF::AbstractMediaPlayer::doVolumeChanged() +{ + switch (privateState()) { + case GroundState: + case LoadingState: + case ErrorState: + // Do nothing + break; + + case StoppedState: + case PausedState: + case PlayingState: + case BufferingState: { + const int err = setDeviceVolume(m_volume * m_mmfMaxVolume); + + if (KErrNone != err) { + setError(NormalError); + } + break; + } + + // Protection against adding new states and forgetting to update this + // switch + default: + Utils::panic(InvalidStatePanic); + } +} + + +//----------------------------------------------------------------------------- +// Protected functions +//----------------------------------------------------------------------------- + +void MMF::AbstractMediaPlayer::startTickTimer() +{ + m_tickTimer->start(tickInterval()); +} + +void MMF::AbstractMediaPlayer::stopTickTimer() +{ + m_tickTimer->stop(); +} + +void MMF::AbstractMediaPlayer::maxVolumeChanged(int mmfMaxVolume) +{ + m_mmfMaxVolume = mmfMaxVolume; + doVolumeChanged(); +} + +qint64 MMF::AbstractMediaPlayer::toMilliSeconds(const TTimeIntervalMicroSeconds &in) +{ + return in.Int64() / 1000; +} + +void MMF::AbstractMediaPlayer::changeState(PrivateState newState) +{ + TRACE_CONTEXT(AbstractPlayer::changeState, EAudioInternal); + TRACE_ENTRY("state %d newState %d", privateState(), newState); + + // TODO: add some invariants to check that the transition is valid + + const Phonon::State oldPhononState = phononState(privateState()); + const Phonon::State newPhononState = phononState(newState); + if (oldPhononState != newPhononState) { + TRACE("emit stateChanged(%d, %d)", newPhononState, oldPhononState); + emit stateChanged(newPhononState, oldPhononState); + } + + setState(newState); + + if ( + LoadingState == oldPhononState + and StoppedState == newPhononState + ) { + // Ensure initial volume is set on MMF API before starting playback + doVolumeChanged(); + + // Check whether play() was called while clip was being loaded. If so, + // playback should be started now + if (m_playPending) { + TRACE_0("play was called while loading; starting playback now"); + m_playPending = false; + play(); + } + } + + TRACE_EXIT_0(); +} + +//----------------------------------------------------------------------------- +// Slots +//----------------------------------------------------------------------------- + +void MMF::AbstractMediaPlayer::tick() +{ + // For the MWC compiler, we need to qualify the base class. + emit MMF::AbstractPlayer::tick(currentTime()); +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.h b/src/3rdparty/phonon/mmf/abstractmediaplayer.h new file mode 100644 index 0000000..698b899 --- /dev/null +++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.h @@ -0,0 +1,119 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_ABSTRACTMEDIAPLAYER_H +#define PHONON_MMF_ABSTRACTMEDIAPLAYER_H + +#include <QTimer> +#include <QScopedPointer> +#include <e32std.h> +#include "abstractplayer.h" + +class RFile; + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +class AudioOutput; + +/** + * Interface via which MMF client APIs for both audio and video can be + * accessed. + */ +class AbstractMediaPlayer : public AbstractPlayer +{ + Q_OBJECT + +protected: + AbstractMediaPlayer(); + explicit AbstractMediaPlayer(const AbstractPlayer& player); + +public: + // MediaObjectInterface + virtual void play(); + virtual void pause(); + virtual void stop(); + virtual void seek(qint64 milliseconds); + virtual bool isSeekable() const; + virtual MediaSource source() const; + virtual void setFileSource(const Phonon::MediaSource&, RFile&); + virtual void setNextSource(const MediaSource &source); + + // VolumeObserver + virtual void volumeChanged(qreal volume); + +protected: + // AbstractPlayer + virtual void doSetTickInterval(qint32 interval); + + virtual void doPlay() = 0; + virtual void doPause() = 0; + virtual void doStop() = 0; + virtual void doSeek(qint64 pos) = 0; + virtual int setDeviceVolume(int mmfVolume) = 0; + virtual int openFile(RFile& file) = 0; + virtual void close() = 0; + + /** + * Changes state and emits stateChanged() + */ + virtual void changeState(PrivateState newState); + +protected: + bool tickTimerRunning() const; + void startTickTimer(); + void stopTickTimer(); + void maxVolumeChanged(int maxVolume); + + static qint64 toMilliSeconds(const TTimeIntervalMicroSeconds &); + +private: + void doVolumeChanged(); + +private Q_SLOTS: + /** + * Receives signal from m_tickTimer + */ + void tick(); + +private: + /** + * This flag is set to true if play is called when the object is + * in a Loading state. Once loading is complete, playback will + * be started. + */ + bool m_playPending; + + QScopedPointer<QTimer> m_tickTimer; + + int m_mmfMaxVolume; + + MediaSource m_source; + MediaSource m_nextSource; + +}; +} +} + +QT_END_NAMESPACE + +#endif + diff --git a/src/3rdparty/phonon/mmf/abstractplayer.cpp b/src/3rdparty/phonon/mmf/abstractplayer.cpp new file mode 100644 index 0000000..24ef20a --- /dev/null +++ b/src/3rdparty/phonon/mmf/abstractplayer.cpp @@ -0,0 +1,174 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "abstractplayer.h" +#include "defs.h" +#include "utils.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + + +//----------------------------------------------------------------------------- +// Constructor / destructor +//----------------------------------------------------------------------------- + +MMF::AbstractPlayer::AbstractPlayer() + : m_videoOutput(0) + , m_volume(InitialVolume) + , m_state(GroundState) + , m_error(NoError) + , m_tickInterval(DefaultTickInterval) + , m_transitionTime(0) + , m_prefinishMark(0) +{ + +} + +MMF::AbstractPlayer::AbstractPlayer(const AbstractPlayer& player) + : m_videoOutput(player.m_videoOutput) + , m_volume(player.m_volume) + , m_state(GroundState) + , m_error(NoError) + , m_tickInterval(player.tickInterval()) + , m_transitionTime(player.transitionTime()) + , m_prefinishMark(player.prefinishMark()) +{ + +} + +//----------------------------------------------------------------------------- +// MediaObjectInterface +//----------------------------------------------------------------------------- + +qint32 MMF::AbstractPlayer::tickInterval() const +{ + return m_tickInterval; +} + +void MMF::AbstractPlayer::setTickInterval(qint32 interval) +{ + m_tickInterval = interval; + doSetTickInterval(interval); +} + +qint32 MMF::AbstractPlayer::prefinishMark() const +{ + return m_prefinishMark; +} + +void MMF::AbstractPlayer::setPrefinishMark(qint32 mark) +{ + m_prefinishMark = mark; +} + +qint32 MMF::AbstractPlayer::transitionTime() const +{ + return m_transitionTime; +} + +void MMF::AbstractPlayer::setTransitionTime(qint32 time) +{ + m_transitionTime = time; +} + + +//----------------------------------------------------------------------------- +// VolumeObserver +//----------------------------------------------------------------------------- + +void MMF::AbstractPlayer::volumeChanged(qreal volume) +{ + m_volume = volume; +} + + +//----------------------------------------------------------------------------- +// Video output +//----------------------------------------------------------------------------- + +void MMF::AbstractPlayer::setVideoOutput(VideoOutput* videoOutput) +{ + m_videoOutput = videoOutput; + videoOutputChanged(); +} + +void MMF::AbstractPlayer::videoOutputChanged() +{ + // Default behaviour is empty - overridden by VideoPlayer +} + +void MMF::AbstractPlayer::setError(Phonon::ErrorType error) +{ + TRACE_CONTEXT(AbstractPlayer::setError, EAudioInternal); + TRACE_ENTRY("state %d error %d", m_state, error); + + m_error = error; + changeState(ErrorState); + + TRACE_EXIT_0(); +} + +Phonon::ErrorType MMF::AbstractPlayer::errorType() const +{ + const Phonon::ErrorType result = (ErrorState == m_state) + ? errorType() : NoError; + return result; +} + +QString MMF::AbstractPlayer::errorString() const +{ + // TODO: put in proper error strings + QString result; + return result; +} + +Phonon::State MMF::AbstractPlayer::phononState() const +{ + return phononState(m_state); +} + +Phonon::State MMF::AbstractPlayer::phononState(PrivateState state) +{ + const Phonon::State phononState = + GroundState == state + ? Phonon::LoadingState + : static_cast<Phonon::State>(state); + + return phononState; +} + +AbstractPlayer::PrivateState AbstractPlayer::privateState() const +{ + return m_state; +} + +Phonon::State MMF::AbstractPlayer::state() const +{ + return phononState(m_state); +} + +void MMF::AbstractPlayer::setState(PrivateState newState) +{ + m_state = newState; +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/abstractplayer.h b/src/3rdparty/phonon/mmf/abstractplayer.h new file mode 100644 index 0000000..ec39ab1 --- /dev/null +++ b/src/3rdparty/phonon/mmf/abstractplayer.h @@ -0,0 +1,166 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_ABSTRACTPLAYER_H +#define PHONON_MMF_ABSTRACTPLAYER_H + +#include <Phonon/phononnamespace.h> +#include <Phonon/MediaSource.h> + +#include <QObject> + +#include "volumeobserver.h" + +#include "videooutput.h" + +class RFile; + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +class VideoOutput; + +/** + * @short Interface which abstracts from MediaObject the current + * media type + * + * This may be: + * - Nothing, in which case this interface is implemented by + * DummyPlayer + * - Audio, in which case the implementation is AudioPlayer + * - Video, in which case the implementation is VideoPlayer + */ +class AbstractPlayer : public QObject + , public VolumeObserver +{ + // Required although this class has no signals or slots + // Without this, qobject_cast will fail + Q_OBJECT + +public: + AbstractPlayer(); + explicit AbstractPlayer(const AbstractPlayer& player); + + // MediaObjectInterface (implemented) + qint32 tickInterval() const; + void setTickInterval(qint32); + void setTransitionTime(qint32); + qint32 transitionTime() const; + void setPrefinishMark(qint32); + qint32 prefinishMark() const; + + // MediaObjectInterface (abstract) + virtual void play() = 0; + virtual void pause() = 0; + virtual void stop() = 0; + virtual void seek(qint64 milliseconds) = 0; + virtual bool hasVideo() const = 0; + virtual bool isSeekable() const = 0; + virtual qint64 currentTime() const = 0; + virtual Phonon::ErrorType errorType() const; + virtual QString errorString() const; + virtual qint64 totalTime() const = 0; + virtual Phonon::MediaSource source() const = 0; + // This is a temporary hack to work around KErrInUse from MMF + // client utility OpenFileL calls + //virtual void setSource(const Phonon::MediaSource &) = 0; + virtual void setFileSource(const Phonon::MediaSource&, RFile&) = 0; + virtual void setNextSource(const Phonon::MediaSource &) = 0; + + // VolumeObserver + virtual void volumeChanged(qreal volume); + + void setVideoOutput(VideoOutput* videoOutput); + + /** + * Records error and changes state to ErrorState + */ + void setError(Phonon::ErrorType error); + + Phonon::State state() const; +Q_SIGNALS: + void totalTimeChanged(qint64 length); + void finished(); + void tick(qint64 time); + void stateChanged(Phonon::State oldState, + Phonon::State newState); + + +protected: + /** + * Defined private state enumeration in order to add GroundState + */ + enum PrivateState { + LoadingState = Phonon::LoadingState, + StoppedState = Phonon::StoppedState, + PlayingState = Phonon::PlayingState, + BufferingState = Phonon::BufferingState, + PausedState = Phonon::PausedState, + ErrorState = Phonon::ErrorState, + GroundState + }; + + /** + * Converts PrivateState into the corresponding Phonon::State + */ + Phonon::State phononState() const; + + /** + * Converts PrivateState into the corresponding Phonon::State + */ + static Phonon::State phononState(PrivateState state); + + virtual void videoOutputChanged(); + + PrivateState privateState() const; + + virtual void changeState(PrivateState newState) = 0; + + /** + * Modifies m_state directly. Typically you want to call changeState(), + * which performs the business logic. + */ + void setState(PrivateState newState); + +private: + virtual void doSetTickInterval(qint32 interval) = 0; + +protected: + // Not owned + VideoOutput* m_videoOutput; + + qreal m_volume; + +private: + PrivateState m_state; + Phonon::ErrorType m_error; + qint32 m_tickInterval; + qint32 m_transitionTime; + qint32 m_prefinishMark; + +}; +} +} + +QT_END_NAMESPACE + +#endif + diff --git a/src/3rdparty/phonon/mmf/audioequalizer.cpp b/src/3rdparty/phonon/mmf/audioequalizer.cpp new file mode 100644 index 0000000..78c6ff7 --- /dev/null +++ b/src/3rdparty/phonon/mmf/audioequalizer.cpp @@ -0,0 +1,85 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "audioequalizer.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +AudioEqualizer::AudioEqualizer(QObject *parent) : AbstractAudioEffect::AbstractAudioEffect(parent, createParams()) +{ +} + +void AudioEqualizer::parameterChanged(const int pid, + const QVariant &value) +{ + // There is no way to return an error from this function, so we just + // have to trap and ignore exceptions. + TRAP_IGNORE(eq()->SetBandLevelL(pid, value.toInt())); +} + +bool AudioEqualizer::activateOn(CPlayerType *player) +{ + m_effect.reset(CAudioEqualizer::NewL(*player)); + return true; +} + +CAudioEqualizer *AudioEqualizer::eq() const +{ + return static_cast<CAudioEqualizer *>(m_effect.data()); +} + +QList<EffectParameter> AudioEqualizer::createParams() +{ + QList<EffectParameter> retval; + + // We temporarily create an AudioPlayer, and run the effect on it, so + // we can extract the readonly data we need. + AudioPlayer dummyPlayer; + activateOn(dummyPlayer.player()); + + TInt32 dbMin; + TInt32 dbMax; + eq()->DbLevelLimits(dbMin, dbMax); + + const int bandCount = eq()->NumberOfBands(); + + for (int i = 0; i < bandCount; ++i) { + const qint32 hz = eq()->CenterFrequency(i); + + const qint32 defVol = eq()->BandLevel(i); + + retval.append(EffectParameter(i, + tr("Frequency band, %1 Hz").arg(hz), + EffectParameter::LogarithmicHint, + QVariant(qint32(defVol)), + QVariant(qint32(dbMin)), + QVariant(qint32(dbMax)), + QVariantList(), + QString())); + } + + m_effect.reset(); + + return retval; +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/audioequalizer.h b/src/3rdparty/phonon/mmf/audioequalizer.h new file mode 100644 index 0000000..6415411 --- /dev/null +++ b/src/3rdparty/phonon/mmf/audioequalizer.h @@ -0,0 +1,62 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_AUDIOEQUALIZER_H +#define PHONON_MMF_AUDIOEQUALIZER_H + +#include <AudioEqualizerBase.h> +#include "abstractaudioeffect.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +/** + * @short A classic equalizer. + * + * The equalizer has a number of bands, and each band has a frequency, and a + * volume. With Phonon's API, this is modeled such that each band is one + * Phonon::EffectParameter, where Phonon::EffectParameter::id() is the band + * number, and the setting is the volume level. + */ +class AudioEqualizer : public AbstractAudioEffect +{ + Q_OBJECT +public: + AudioEqualizer(QObject *parent); + +protected: + virtual void parameterChanged(const int id, + const QVariant &value); + + virtual bool activateOn(CPlayerType *player); + +private: + inline CAudioEqualizer *eq() const; + QList<EffectParameter> createParams(); + QScopedPointer<CAudioEqualizer> m_bassBoost; +}; +} +} + +QT_END_NAMESPACE + +#endif + diff --git a/src/3rdparty/phonon/mmf/audiooutput.cpp b/src/3rdparty/phonon/mmf/audiooutput.cpp new file mode 100644 index 0000000..8c8c330 --- /dev/null +++ b/src/3rdparty/phonon/mmf/audiooutput.cpp @@ -0,0 +1,101 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <e32debug.h> + +#include "audiooutput.h" +#include "defs.h" +#include "mediaobject.h" +#include "utils.h" +#include "volumeobserver.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + + +//----------------------------------------------------------------------------- +// Constructor / destructor +//----------------------------------------------------------------------------- + +MMF::AudioOutput::AudioOutput(Backend *, QObject *parent) : MediaNode(parent) + , m_volume(InitialVolume) + , m_observer(0) +{ + +} + + +//----------------------------------------------------------------------------- +// Public API +//----------------------------------------------------------------------------- + +qreal MMF::AudioOutput::volume() const +{ + return m_volume; +} + +void MMF::AudioOutput::setVolume(qreal volume) +{ + TRACE_CONTEXT(AudioOutput::setVolume, EAudioApi); + TRACE_ENTRY("observer 0x%08x volume %f", m_observer, volume); + + if (volume != m_volume) { + if (m_observer) { + m_observer->volumeChanged(volume); + } + + m_volume = volume; + TRACE("emit volumeChanged(%f)", volume) + emit volumeChanged(volume); + } + + TRACE_EXIT_0(); +} + +int MMF::AudioOutput::outputDevice() const +{ + return 0; +} + +bool MMF::AudioOutput::setOutputDevice(int) +{ + return true; +} + +bool MMF::AudioOutput::setOutputDevice(const Phonon::AudioOutputDevice &) +{ + return true; +} + +void MMF::AudioOutput::setVolumeObserver(VolumeObserver* observer) +{ + m_observer = observer; + if (m_observer) { + m_observer->volumeChanged(m_volume); + } +} + +bool MMF::AudioOutput::activateOnMediaObject(MediaObject *mo) +{ + setVolumeObserver(mo); + return true; +} + +QT_END_NAMESPACE diff --git a/src/3rdparty/phonon/mmf/audiooutput.h b/src/3rdparty/phonon/mmf/audiooutput.h new file mode 100644 index 0000000..0a962a9 --- /dev/null +++ b/src/3rdparty/phonon/mmf/audiooutput.h @@ -0,0 +1,93 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_AUDIOOUTPUT_H +#define PHONON_MMF_AUDIOOUTPUT_H + +#include "mmf_medianode.h" +#include <phonon/audiooutputinterface.h> + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +class Backend; +class VolumeObserver; + +/** + * @short AudioOutputInterface implementation for MMF. + * + * Forwards volume commands to the VolumeObserver instance, + * which is provided by the backend when MediaNode objects are + * connected. + * + * \section volume Volume + * + * Phonon's concept on volume is from 0.0 to 1.0, and from 1< it does + * voltage multiplication. CDrmPlayerUtility goes from 1 to + * CDrmPlayerUtility::MaxVolume(). We apply some basic math to convert + * between the two. + * + * @author Frans Englich<frans.englich@nokia.com> + */ +class AudioOutput : public MediaNode + , public AudioOutputInterface +{ + Q_OBJECT + Q_INTERFACES(Phonon::AudioOutputInterface) + +public: + AudioOutput(Backend *backend, QObject *parent); + virtual qreal volume() const; + virtual void setVolume(qreal volume); + + virtual int outputDevice() const; + + /** + * Has no effect. + */ + virtual bool setOutputDevice(int); + + /** + * Has no effect. + */ + virtual bool setOutputDevice(const Phonon::AudioOutputDevice &); + +protected: + virtual bool activateOnMediaObject(MediaObject *mo); + +Q_SIGNALS: + void volumeChanged(qreal volume); + void audioDeviceFailed(); + +private: + void setVolumeObserver(VolumeObserver* observer); + + qreal m_volume; + + // Not owned + VolumeObserver* m_observer; +}; +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/audioplayer.cpp b/src/3rdparty/phonon/mmf/audioplayer.cpp new file mode 100644 index 0000000..3a4e04b --- /dev/null +++ b/src/3rdparty/phonon/mmf/audioplayer.cpp @@ -0,0 +1,254 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <QUrl> + +#include "audioplayer.h" +#include "utils.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +//----------------------------------------------------------------------------- +// Constructor / destructor +//----------------------------------------------------------------------------- + +MMF::AudioPlayer::AudioPlayer() : m_player(0) +{ + construct(); +} + +MMF::AudioPlayer::AudioPlayer(const AbstractPlayer& player) + : AbstractMediaPlayer(player) + , m_player(0) +{ + construct(); +} + +void MMF::AudioPlayer::construct() +{ + TRACE_CONTEXT(AudioPlayer::AudioPlayer, EAudioApi); + TRACE_ENTRY_0(); + + TRAPD(err, m_player = CPlayerType::NewL(*this, 0, EMdaPriorityPreferenceNone)); + if (KErrNone != err) { + changeState(ErrorState); + } + + TRACE_EXIT_0(); +} + +MMF::AudioPlayer::~AudioPlayer() +{ + TRACE_CONTEXT(AudioPlayer::~AudioPlayer, EAudioApi); + TRACE_ENTRY_0(); + + delete m_player; + + TRACE_EXIT_0(); +} + +//----------------------------------------------------------------------------- +// Public API +//----------------------------------------------------------------------------- + +void MMF::AudioPlayer::doPlay() +{ + m_player->Play(); +} + +void MMF::AudioPlayer::doPause() +{ + m_player->Pause(); +} + +void MMF::AudioPlayer::doStop() +{ + m_player->Stop(); +} + +void MMF::AudioPlayer::doSeek(qint64 ms) +{ + m_player->SetPosition(TTimeIntervalMicroSeconds(ms * 1000)); +} + +int MMF::AudioPlayer::setDeviceVolume(int mmfVolume) +{ + /* In SDK 3.1, SetVolume() returns void. If we're compiling against + * 3.1, we handle it with ifdefs. However, if we compile against a later + * SDK but are _running_ against 3.1, we avoid returning from an undefined + * stack by doing a runtime check of the SDK version. */ +#if !defined(__SERIES60_31__) + const int err = m_player->SetVolume(mmfVolume); + if (QSysInfo::s60Version() > QSysInfo::SV_S60_3_1) + return err; + else + return KErrNone; + #else + m_player->SetVolume(mmfVolume); + return KErrNone; +#endif +} + +int MMF::AudioPlayer::openFile(RFile& file) +{ + TRAPD(err, m_player->OpenFileL(file)); + +#ifdef QT_PHONON_MMF_AUDIO_DRM + if (KErrNone == err) { + // There appears to be a bug in the CDrmPlayerUtility implementation (at least + // in S60 5.x) whereby the player does not check whether the loading observer + // pointer is null before dereferencing it. Therefore we must register for + // loading notification, even though we do nothing in the callback functions. + m_player->RegisterForAudioLoadingNotification(*this); + } +#endif + + return err; +} + +void MMF::AudioPlayer::close() +{ + m_player->Close(); +} + +bool MMF::AudioPlayer::hasVideo() const +{ + return false; +} + +qint64 MMF::AudioPlayer::currentTime() const +{ + TRACE_CONTEXT(AudioPlayer::currentTime, EAudioApi); + + TTimeIntervalMicroSeconds us; + const TInt err = m_player->GetPosition(us); + + qint64 result = 0; + + if (KErrNone == err) { + result = toMilliSeconds(us); + } else { + TRACE("GetPosition err %d", err); + + // If we don't cast away constness here, we simply have to ignore + // the error. + const_cast<AudioPlayer*>(this)->setError(NormalError); + } + + return result; +} + +qint64 MMF::AudioPlayer::totalTime() const +{ + return toMilliSeconds(m_player->Duration()); +} + + +//----------------------------------------------------------------------------- +// Symbian multimedia client observer callbacks +//----------------------------------------------------------------------------- + +#ifdef QT_PHONON_MMF_AUDIO_DRM +void MMF::AudioPlayer::MdapcInitComplete(TInt aError, + const TTimeIntervalMicroSeconds &) +#else +void MMF::AudioPlayer::MapcInitComplete(TInt aError, + const TTimeIntervalMicroSeconds &) +#endif +{ + TRACE_CONTEXT(AudioPlayer::MapcInitComplete, EAudioInternal); + TRACE_ENTRY("state %d error %d", state(), aError); + + __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic)); + + if (KErrNone == aError) { + maxVolumeChanged(m_player->MaxVolume()); + + emit totalTimeChanged(totalTime()); + changeState(StoppedState); + } else { + // TODO: set different error states according to value of aError? + setError(NormalError); + } + + TRACE_EXIT_0(); +} + +#ifdef QT_PHONON_MMF_AUDIO_DRM +void MMF::AudioPlayer::MdapcPlayComplete(TInt aError) +#else +void MMF::AudioPlayer::MapcPlayComplete(TInt aError) +#endif +{ + TRACE_CONTEXT(AudioPlayer::MapcPlayComplete, EAudioInternal); + TRACE_ENTRY("state %d error %d", state(), aError); + + stopTickTimer(); + + if (KErrNone == aError) { + changeState(StoppedState); + // TODO: move on to m_nextSource + } else { + // TODO: do something with aError? + setError(NormalError); + } + + /* + if(aError == KErrNone) { + if(m_nextSource.type() == MediaSource::Empty) { + emit finished(); + } else { + setSource(m_nextSource); + m_nextSource = MediaSource(); + } + + changeState(StoppedState); + } + else { + m_error = NormalError; + changeState(ErrorState); + } + */ + + TRACE_EXIT_0(); +} + +CPlayerType *MMF::AudioPlayer::player() const +{ + return m_player; +} + + +#ifdef QT_PHONON_MMF_AUDIO_DRM +void MMF::AudioPlayer::MaloLoadingStarted() +{ + +} + +void MMF::AudioPlayer::MaloLoadingComplete() +{ + +} +#endif // QT_PHONON_MMF_AUDIO_DRM + + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/audioplayer.h b/src/3rdparty/phonon/mmf/audioplayer.h new file mode 100644 index 0000000..f16de1d --- /dev/null +++ b/src/3rdparty/phonon/mmf/audioplayer.h @@ -0,0 +1,106 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_AUDIOPLAYER_H +#define PHONON_MMF_AUDIOPLAYER_H + +#include "abstractmediaplayer.h" + +class CDrmPlayerUtility; +class TTimeIntervalMicroSeconds; + +#ifdef QT_PHONON_MMF_AUDIO_DRM +#include <drmaudiosampleplayer.h> +typedef CDrmPlayerUtility CPlayerType; +typedef MDrmAudioPlayerCallback MPlayerObserverType; +#else +#include <mdaaudiosampleplayer.h> +typedef CMdaAudioPlayerUtility CPlayerType; +typedef MMdaAudioPlayerCallback MPlayerObserverType; +#endif + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +/** + * @short Wrapper over MMF audio client utility + */ +class AudioPlayer : public AbstractMediaPlayer + , public MPlayerObserverType // typedef +#ifdef QT_PHONON_MMF_AUDIO_DRM + , public MAudioLoadingObserver +#endif +{ + Q_OBJECT + +public: + AudioPlayer(); + explicit AudioPlayer(const AbstractPlayer& player); + virtual ~AudioPlayer(); + + // AbstractMediaPlayer + virtual void doPlay(); + virtual void doPause(); + virtual void doStop(); + virtual void doSeek(qint64 milliseconds); + virtual int setDeviceVolume(int mmfVolume); + virtual int openFile(RFile& file); + virtual void close(); + + // MediaObjectInterface + virtual bool hasVideo() const; + virtual qint64 currentTime() const; + virtual qint64 totalTime() const; + +#ifdef QT_PHONON_MMF_AUDIO_DRM + // MDrmAudioPlayerCallback + virtual void MdapcInitComplete(TInt aError, + const TTimeIntervalMicroSeconds &aDuration); + virtual void MdapcPlayComplete(TInt aError); + + // MAudioLoadingObserver + virtual void MaloLoadingStarted(); + virtual void MaloLoadingComplete(); +#else + // MMdaAudioPlayerCallback + virtual void MapcInitComplete(TInt aError, + const TTimeIntervalMicroSeconds &aDuration); + virtual void MapcPlayComplete(TInt aError); +#endif + + CPlayerType *player() const; + +private: + void construct(); + +private: + /** + * Using CPlayerType typedef in order to be able to easily switch between + * CMdaAudioPlayerUtility and CDrmPlayerUtility + */ + CPlayerType* m_player; +}; +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/backend.cpp b/src/3rdparty/phonon/mmf/backend.cpp new file mode 100644 index 0000000..0a9130c --- /dev/null +++ b/src/3rdparty/phonon/mmf/backend.cpp @@ -0,0 +1,194 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <QStringList> +#include <QtPlugin> + +#include <apgcli.h> // for RApaLsSession +#include <apmrec.h> // for CDataTypeArray +#include <apmstd.h> // for TDataType + +#include "abstractaudioeffect.h" +#include "audiooutput.h" +#include "audioplayer.h" +#include "backend.h" +#include "effectfactory.h" +#include "mediaobject.h" +#include "utils.h" +#include "videowidget.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +Backend::Backend(QObject *parent) : QObject(parent) +{ + TRACE_CONTEXT(Backend::Backend, EBackend); + TRACE_ENTRY_0(); + + setProperty("identifier", QLatin1String("phonon_mmf")); + setProperty("backendName", QLatin1String("MMF")); + setProperty("backendComment", QLatin1String("Backend using Symbian Multimedia Framework (MMF)")); + setProperty("backendVersion", QLatin1String("0.1")); + setProperty("backendWebsite", QLatin1String("http://qt.nokia.com/")); + + TRACE_EXIT_0(); +} + +QObject *Backend::createObject(BackendInterface::Class c, QObject *parent, const QList<QVariant> &args) +{ + TRACE_CONTEXT(Backend::createObject, EBackend); + TRACE_ENTRY("class %d", c); + + QObject* result = 0; + + switch (c) { + case AudioOutputClass: + result = new AudioOutput(this, parent); + break; + + case MediaObjectClass: + result = new MediaObject(parent); + break; + + case VolumeFaderEffectClass: + case VisualizationClass: + case VideoDataOutputClass: + case EffectClass: + { + Q_ASSERT(args.count() == 1); + Q_ASSERT(args.first().type() == QVariant::Int); + const AbstractAudioEffect::Type effect = AbstractAudioEffect::Type(args.first().toInt()); + + return EffectFactory::createAudioEffect(effect, parent); + } + case VideoWidgetClass: + result = new VideoWidget(qobject_cast<QWidget *>(parent)); + break; + + default: + TRACE_PANIC(InvalidBackendInterfaceClass); + } + + TRACE_RETURN("0x%08x", result); +} + +QList<int> Backend::objectDescriptionIndexes(ObjectDescriptionType type) const +{ + TRACE_CONTEXT(Backend::objectDescriptionIndexes, EAudioApi); + TRACE_ENTRY_0(); + QList<int> retval; + + switch(type) + { + case EffectType: + retval.append(EffectFactory::effectIndexes()); + default: + ; + } + + TRACE_EXIT_0(); + return retval; +} + +QHash<QByteArray, QVariant> Backend::objectDescriptionProperties(ObjectDescriptionType type, int index) const +{ + TRACE_CONTEXT(Backend::connectNodes, EBackend); + + if (type == EffectType) + return EffectFactory::audioEffectDescriptions(AbstractAudioEffect::Type(index)); + else + return QHash<QByteArray, QVariant>(); +} + +bool Backend::startConnectionChange(QSet<QObject *>) +{ + return true; +} + +bool Backend::connectNodes(QObject *source, QObject *target) +{ + TRACE_CONTEXT(Backend::connectNodes, EBackend); + TRACE_ENTRY("source 0x%08x target 0x%08x", source, target); + Q_ASSERT(qobject_cast<MediaNode *>(source)); + Q_ASSERT(qobject_cast<MediaNode *>(target)); + + MediaNode *const mediaSource = static_cast<MediaNode *>(source); + MediaNode *const mediaTarget = static_cast<MediaNode *>(target); + + return mediaSource->connectMediaNode(mediaTarget); +} + +bool Backend::disconnectNodes(QObject *source, QObject *target) +{ + TRACE_CONTEXT(Backend::disconnectNodes, EBackend); + TRACE_ENTRY("source 0x%08x target 0x%08x", source, target); + Q_ASSERT(qobject_cast<MediaNode *>(source)); + Q_ASSERT(qobject_cast<MediaNode *>(target)); + + const bool result = static_cast<MediaNode *>(source)->disconnectMediaNode(static_cast<MediaNode *>(target)); + + TRACE_RETURN("%d", result); +} + +bool Backend::endConnectionChange(QSet<QObject *>) +{ + return true; +} + +void getAvailableMimeTypesL(QStringList& result) +{ + RApaLsSession apaSession; + User::LeaveIfError(apaSession.Connect()); + CleanupClosePushL(apaSession); + + static const TInt DataTypeArrayGranularity = 8; + CDataTypeArray* array = new(ELeave) CDataTypeArray(DataTypeArrayGranularity); + CleanupStack::PushL(array); + + apaSession.GetSupportedDataTypesL(*array); + + for (TInt i = 0; i < array->Count(); ++i) { + const TPtrC mimeType = array->At(i).Des(); + const MediaType mediaType = Utils::mimeTypeToMediaType(mimeType); + if (MediaTypeAudio == mediaType or MediaTypeVideo == mediaType) { + result.append(qt_TDesC2QString(mimeType)); + } + } + + CleanupStack::PopAndDestroy(2); // apaSession, array +} + +QStringList Backend::availableMimeTypes() const +{ + QStringList result; + + // There is no way to return an error from this function, so we just + // have to trap and ignore exceptions... + TRAP_IGNORE(getAvailableMimeTypesL(result)); + + result.sort(); + + return result; +} + +Q_EXPORT_PLUGIN2(phonon_mmf, Phonon::MMF::Backend); + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/backend.h b/src/3rdparty/phonon/mmf/backend.h new file mode 100644 index 0000000..1886ae6 --- /dev/null +++ b/src/3rdparty/phonon/mmf/backend.h @@ -0,0 +1,56 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_BACKEND_H +#define PHONON_MMF_BACKEND_H + +#include <Phonon/MediaSource> +#include <Phonon/BackendInterface> + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +class Backend : public QObject + , public BackendInterface +{ + Q_OBJECT + Q_INTERFACES(Phonon::BackendInterface) +public: + Backend(QObject *parent = 0); + + virtual QObject *createObject(BackendInterface::Class c, QObject *parent, const QList<QVariant> &args); + virtual QList<int> objectDescriptionIndexes(ObjectDescriptionType type) const; + virtual QHash<QByteArray, QVariant> objectDescriptionProperties(ObjectDescriptionType type, int index) const; + virtual bool startConnectionChange(QSet<QObject *>); + virtual bool connectNodes(QObject *, QObject *); + virtual bool disconnectNodes(QObject *, QObject *); + virtual bool endConnectionChange(QSet<QObject *>); + virtual QStringList availableMimeTypes() const; + +Q_SIGNALS: + void objectDescriptionChanged(ObjectDescriptionType); +}; +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/bassboost.cpp b/src/3rdparty/phonon/mmf/bassboost.cpp new file mode 100644 index 0000000..fc88d03 --- /dev/null +++ b/src/3rdparty/phonon/mmf/bassboost.cpp @@ -0,0 +1,44 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "bassboost.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +BassBoost::BassBoost(QObject *parent) : AbstractAudioEffect::AbstractAudioEffect(parent, + QList<EffectParameter>()) +{ +} + +void BassBoost::parameterChanged(const int, + const QVariant &) +{ + // We should never be called, because we have no parameters. +} + +bool BassBoost::activateOn(CPlayerType *player) +{ + m_effect.reset(CBassBoost::NewL(*player, true)); + return true; +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/bassboost.h b/src/3rdparty/phonon/mmf/bassboost.h new file mode 100644 index 0000000..c16393a --- /dev/null +++ b/src/3rdparty/phonon/mmf/bassboost.h @@ -0,0 +1,58 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_BASSBOOST_H +#define PHONON_MMF_BASSBOOST_H + +#include <BassBoostBase.h> +#include "abstractaudioeffect.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +/** + * @short An "bass boost" effect. + * + * The documentation does not say what "bass boost" is, neither has it anykind + * of setting. It's an on or off thing. + */ +class BassBoost : public AbstractAudioEffect +{ + Q_OBJECT +public: + BassBoost(QObject *parent); + +protected: + virtual void parameterChanged(const int id, + const QVariant &value); + + virtual bool activateOn(CPlayerType *player); + +private: + QScopedPointer<CBassBoost> m_bassBoost; +}; +} +} + +QT_END_NAMESPACE + +#endif + diff --git a/src/3rdparty/phonon/mmf/defs.h b/src/3rdparty/phonon/mmf/defs.h new file mode 100644 index 0000000..1a93aa9 --- /dev/null +++ b/src/3rdparty/phonon/mmf/defs.h @@ -0,0 +1,43 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_DEFS_H +#define PHONON_MMF_DEFS_H + +#include <QtGlobal> + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +static const qint32 DefaultTickInterval = 10; +static const qreal InitialVolume = 0.5; + +enum MediaType { + MediaTypeUnknown, + MediaTypeAudio, + MediaTypeVideo +}; +} +} + +QT_END_NAMESPACE + +#endif // PHONON_MMF_DEFS_H diff --git a/src/3rdparty/phonon/mmf/dummyplayer.cpp b/src/3rdparty/phonon/mmf/dummyplayer.cpp new file mode 100644 index 0000000..4c059c4 --- /dev/null +++ b/src/3rdparty/phonon/mmf/dummyplayer.cpp @@ -0,0 +1,131 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "dummyplayer.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +//----------------------------------------------------------------------------- +// Constructor / destructor +//----------------------------------------------------------------------------- + +MMF::DummyPlayer::DummyPlayer() +{ + +} + +MMF::DummyPlayer::DummyPlayer(const AbstractPlayer& player) + : AbstractPlayer(player) +{ + +} + + +//----------------------------------------------------------------------------- +// MediaObjectInterface +//----------------------------------------------------------------------------- + +void MMF::DummyPlayer::play() +{ + +} + +void MMF::DummyPlayer::pause() +{ + +} + +void MMF::DummyPlayer::stop() +{ + +} + +void MMF::DummyPlayer::seek(qint64) +{ + +} + +bool MMF::DummyPlayer::hasVideo() const +{ + return false; +} + +bool MMF::DummyPlayer::isSeekable() const +{ + return false; +} + +Phonon::State MMF::DummyPlayer::state() const +{ + return Phonon::LoadingState; +} + +qint64 MMF::DummyPlayer::currentTime() const +{ + return 0; +} + +QString MMF::DummyPlayer::errorString() const +{ + return QString(); +} + +Phonon::ErrorType MMF::DummyPlayer::errorType() const +{ + return Phonon::NoError; +} + +qint64 MMF::DummyPlayer::totalTime() const +{ + return 0; +} + +MediaSource MMF::DummyPlayer::source() const +{ + return MediaSource(); +} + +void MMF::DummyPlayer::setFileSource(const Phonon::MediaSource &, RFile &) +{ + +} + +void MMF::DummyPlayer::setNextSource(const MediaSource &) +{ + +} + + +//----------------------------------------------------------------------------- +// AbstractPlayer +//----------------------------------------------------------------------------- + +void MMF::DummyPlayer::doSetTickInterval(qint32) +{ + +} + +void MMF::DummyPlayer::changeState(PrivateState) +{ +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/dummyplayer.h b/src/3rdparty/phonon/mmf/dummyplayer.h new file mode 100644 index 0000000..9ff9f78 --- /dev/null +++ b/src/3rdparty/phonon/mmf/dummyplayer.h @@ -0,0 +1,76 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_DUMMYPLAYER_H +#define PHONON_MMF_DUMMYPLAYER_H + +#include "abstractplayer.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +class AudioOutput; + +/** + * @short Stub implementation of AbstractPlayer. + * + * The functions of this class are: + * - Allow MediaObject to call a subset of the MediaObjectInterface + * API, before SetSource has been called. + * - Cache any parameters which are set in this state (e.g. + * prefinish mark), so that they can be copied into the 'real' + * AbstractPlayer implementation once a source has been loaded. + */ +class DummyPlayer : public AbstractPlayer +{ +public: + DummyPlayer(); + DummyPlayer(const AbstractPlayer& player); + + // MediaObjectInterface + virtual void play(); + virtual void pause(); + virtual void stop(); + virtual void seek(qint64 milliseconds); + virtual bool hasVideo() const; + virtual bool isSeekable() const; + virtual qint64 currentTime() const; + virtual Phonon::State state() const; + virtual QString errorString() const; + virtual Phonon::ErrorType errorType() const; + virtual qint64 totalTime() const; + virtual MediaSource source() const; + // virtual void setSource(const MediaSource &); + virtual void setFileSource(const Phonon::MediaSource&, RFile&); + virtual void setNextSource(const MediaSource &source); + + // AbstractPlayer + virtual void doSetTickInterval(qint32 interval); + +protected: + virtual void changeState(PrivateState newState); +}; +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/effectfactory.cpp b/src/3rdparty/phonon/mmf/effectfactory.cpp new file mode 100644 index 0000000..9843a6c --- /dev/null +++ b/src/3rdparty/phonon/mmf/effectfactory.cpp @@ -0,0 +1,151 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <QObject> +#include <QCoreApplication> + +#include <AudioEqualizerBase.h> +#include <BassBoostBase.h> +#include <DistanceAttenuationBase.h> +#include <DopplerBase.h> +#include <EnvironmentalReverbBase.h> +#include <ListenerOrientationBase.h> +#include <LocationBase.h> +#include <LoudnessBase.h> +#include <SourceOrientationBase.h> +#include <StereoWideningBase.h> + +#include "audioequalizer.h" +#include "bassboost.h" + +#include "effectfactory.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +QHash<QByteArray, QVariant> EffectFactory::constructEffectDescription(const QString &name, + const QString &description) +{ + QHash<QByteArray, QVariant> retval; + + retval.insert("name", name); + retval.insert("description", description); + retval.insert("available", true); + + return retval; +} + + +QHash<QByteArray, QVariant> EffectFactory::audioEffectDescriptions(AbstractAudioEffect::Type type) +{ + switch (type) + { + case AbstractAudioEffect::EffectAudioEqualizer: + return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "audio equalizer"), "Audio equalizer."); + case AbstractAudioEffect::EffectBassBoost: + return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Bass boost"), "Bass boost."); + case AbstractAudioEffect::EffectDistanceAttenuation: + return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Distance Attenuation"), "Distance Attenuation."); + case AbstractAudioEffect::EffectEnvironmentalReverb: + return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Environmental Reverb"), "Environmental Reverb."); + case AbstractAudioEffect::EffectListenerOrientation: + return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Environmental Reverb"), "Environmental Reverb."); + case AbstractAudioEffect::EffectLoudness: + return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Loudness"), "Loudness."); + case AbstractAudioEffect::EffectSourceOrientation: + return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Source Orientation"), "Source Orientation."); + case AbstractAudioEffect::EffectStereoWidening: + return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Stereo Widening"), "Stereo Widening."); + } + + Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown effect type."); + return QHash<QByteArray, QVariant>(); +} + +AbstractAudioEffect *EffectFactory::createAudioEffect(AbstractAudioEffect::Type type, + QObject *parent) +{ + Q_ASSERT(parent); + + switch (type) + { + case AbstractAudioEffect::EffectBassBoost: + return new BassBoost(parent); + case AbstractAudioEffect::EffectAudioEqualizer: + return new AudioEqualizer(parent); + case AbstractAudioEffect::EffectDistanceAttenuation: + case AbstractAudioEffect::EffectEnvironmentalReverb: + case AbstractAudioEffect::EffectListenerOrientation: + case AbstractAudioEffect::EffectLoudness: + case AbstractAudioEffect::EffectSourceOrientation: + case AbstractAudioEffect::EffectStereoWidening: + ; + } + + Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown effect."); + return 0; +} + +template<typename TEffect> +bool isEffectSupported() +{ + AudioPlayer audioPlayer; + + QScopedPointer<TEffect> eff; + TRAPD(errorCode, eff.reset(TEffect::NewL(*audioPlayer.player()))); + + return errorCode != KErrNone; +} + +QList<int> EffectFactory::effectIndexes() +{ + QList<int> retval; + + if (isEffectSupported<CAudioEqualizer>()) + retval.append(AbstractAudioEffect::EffectAudioEqualizer); + + if (isEffectSupported<CBassBoost>()) + retval.append(AbstractAudioEffect::EffectBassBoost); + + /* We haven't implemented these yet. + if (isEffectSupported<CDistanceAttenuation>()) + retval.append(AbstractAudioEffect::EffectDistanceAttenuation); + + if (isEffectSupported<CEnvironmentalReverb>()) + retval.append(AbstractAudioEffect::EffectEnvironmentalReverb); + + if (isEffectSupported<CLoudness>()) + retval.append(AbstractAudioEffect::EffectLoudness); + + if (isEffectSupported<CListenerOrientation>()) + retval.append(AbstractAudioEffect::EffectListenerOrientation); + + if (isEffectSupported<CSourceOrientation>()) + retval.append(AbstractAudioEffect::EffectSourceOrientation); + + if (isEffectSupported<CStereoWidening>()) + retval.append(AbstractAudioEffect::EffectStereoWidening); + */ + + return retval; +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/effectfactory.h b/src/3rdparty/phonon/mmf/effectfactory.h new file mode 100644 index 0000000..e83ad15 --- /dev/null +++ b/src/3rdparty/phonon/mmf/effectfactory.h @@ -0,0 +1,76 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_EFFECTFACTORY_H +#define PHONON_MMF_EFFECTFACTORY_H + +#include "abstractaudioeffect.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ + +/** + * @short Contains utility functions related to effects. + */ +class EffectFactory +{ +public: + /** + * @short Creates an audio effect of type @p type. + */ + static AbstractAudioEffect *createAudioEffect(AbstractAudioEffect::Type type, + QObject *parent); + + /** + * @short Return the properties for effect @p type. + * + * This handles the effects for + * BackendInterface::objectDescriptionProperties(). + */ + static QHash<QByteArray, QVariant> audioEffectDescriptions(AbstractAudioEffect::Type type); + + /** + * @short Returns the indexes for the supported effects. + * + * This handles the effects for + * BackendInterface::objectDescriptionIndexes(). + */ + static QList<int> effectIndexes(); + +private: + static inline QHash<QByteArray, QVariant> constructEffectDescription(const QString &name, + const QString &description); + + /** + * This class is not supposed to be instantiated, so disable + * the default constructor. + */ + inline EffectFactory(); + Q_DISABLE_COPY(EffectFactory) +}; +} +} + +QT_END_NAMESPACE + +#endif + diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp new file mode 100644 index 0000000..0591e05 --- /dev/null +++ b/src/3rdparty/phonon/mmf/mediaobject.cpp @@ -0,0 +1,385 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "audiooutput.h" +#include "audioplayer.h" +#include "defs.h" +#include "dummyplayer.h" +#include "utils.h" +#include "utils.h" +#include "mmf_videoplayer.h" +#include "videowidget.h" + +#include "mediaobject.h" + +#include <QDir> +#include <QUrl> + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +//----------------------------------------------------------------------------- +// Constructor / destructor +//----------------------------------------------------------------------------- + +MMF::MediaObject::MediaObject(QObject *parent) : MMF::MediaNode::MediaNode(parent) + , m_recognizerOpened(false) +{ + m_player.reset(new DummyPlayer()); + + TRACE_CONTEXT(MediaObject::MediaObject, EAudioApi); + TRACE_ENTRY_0(); + + Q_UNUSED(parent); + + TRACE_EXIT_0(); +} + +MMF::MediaObject::~MediaObject() +{ + TRACE_CONTEXT(MediaObject::~MediaObject, EAudioApi); + TRACE_ENTRY_0(); + + m_file.Close(); + m_fileServer.Close(); + m_recognizer.Close(); + + TRACE_EXIT_0(); +} + + +//----------------------------------------------------------------------------- +// Recognizer +//----------------------------------------------------------------------------- + +bool MMF::MediaObject::openRecognizer() +{ + TRACE_CONTEXT(MediaObject::openRecognizer, EAudioInternal); + + if (!m_recognizerOpened) { + TInt err = m_recognizer.Connect(); + if (KErrNone != err) { + TRACE("RApaLsSession::Connect error %d", err); + return false; + } + + err = m_fileServer.Connect(); + if (KErrNone != err) { + TRACE("RFs::Connect error %d", err); + return false; + } + + // This must be called in order to be able to share file handles with + // the recognizer server (see fileMediaType function). + err = m_fileServer.ShareProtected(); + if (KErrNone != err) { + TRACE("RFs::ShareProtected error %d", err); + return false; + } + + m_recognizerOpened = true; + } + + return true; +} + +MMF::MediaType MMF::MediaObject::fileMediaType +(const QString& fileName) +{ + TRACE_CONTEXT(MediaObject::fileMediaType, EAudioInternal); + + MediaType result = MediaTypeUnknown; + + if (openRecognizer()) { + + const QHBufC fileNameSymbian(QDir::toNativeSeparators(fileName)); + + m_file.Close(); + TInt err = m_file.Open(m_fileServer, *fileNameSymbian, EFileRead | EFileShareReadersOnly); + + if (KErrNone == err) { + TDataRecognitionResult recognizerResult; + err = m_recognizer.RecognizeData(m_file, recognizerResult); + if (KErrNone == err) { + const TPtrC mimeType = recognizerResult.iDataType.Des(); + result = Utils::mimeTypeToMediaType(mimeType); + } else { + TRACE("RApaLsSession::RecognizeData filename %S error %d", fileNameSymbian.data(), err); + } + } else { + TRACE("RFile::Open filename %S error %d", fileNameSymbian.data(), err); + } + } + + return result; +} + + +//----------------------------------------------------------------------------- +// MediaObjectInterface +//----------------------------------------------------------------------------- + +void MMF::MediaObject::play() +{ + m_player->play(); +} + +void MMF::MediaObject::pause() +{ + m_player->pause(); +} + +void MMF::MediaObject::stop() +{ + m_player->stop(); +} + +void MMF::MediaObject::seek(qint64 ms) +{ + m_player->seek(ms); + + if (state() == PausedState or state() == PlayingState) { + emit tick(currentTime()); + } +} + +qint32 MMF::MediaObject::tickInterval() const +{ + return m_player->tickInterval(); +} + +void MMF::MediaObject::setTickInterval(qint32 interval) +{ + m_player->setTickInterval(interval); +} + +bool MMF::MediaObject::hasVideo() const +{ + return m_player->hasVideo(); +} + +bool MMF::MediaObject::isSeekable() const +{ + return m_player->isSeekable(); +} + +Phonon::State MMF::MediaObject::state() const +{ + return m_player->state(); +} + +qint64 MMF::MediaObject::currentTime() const +{ + return m_player->currentTime(); +} + +QString MMF::MediaObject::errorString() const +{ + return m_player->errorString(); +} + +Phonon::ErrorType MMF::MediaObject::errorType() const +{ + return m_player->errorType(); +} + +qint64 MMF::MediaObject::totalTime() const +{ + return m_player->totalTime(); +} + +MediaSource MMF::MediaObject::source() const +{ + return m_player->source(); +} + +void MMF::MediaObject::setSource(const MediaSource &source) +{ + createPlayer(source); + + // This is a hack to work around KErrInUse from MMF client utility + // OpenFileL calls + m_player->setFileSource(source, m_file); + + emit currentSourceChanged(source); +} + +void MMF::MediaObject::createPlayer(const MediaSource &source) +{ + TRACE_CONTEXT(MediaObject::createPlayer, EAudioApi); + TRACE_ENTRY("state %d source.type %d", state(), source.type()); + TRACE_ENTRY("source.type %d", source.type()); + + MediaType mediaType = MediaTypeUnknown; + + AbstractPlayer* oldPlayer = m_player.data(); + + const bool oldPlayerHasVideo = oldPlayer->hasVideo(); + const bool oldPlayerSeekable = oldPlayer->isSeekable(); + + Phonon::ErrorType error = NoError; + + // Determine media type + switch (source.type()) { + case MediaSource::LocalFile: + mediaType = fileMediaType(source.fileName()); + break; + + case MediaSource::Url: + { + const QUrl url(source.url()); + if (url.scheme() == QLatin1String("file")) { + mediaType = fileMediaType(url.toLocalFile()); + } + else { + TRACE_0("Network streaming not supported yet"); + error = NormalError; + } + } + break; + + case MediaSource::Invalid: + case MediaSource::Disc: + case MediaSource::Stream: + TRACE_0("Unsupported media type"); + error = NormalError; + break; + + case MediaSource::Empty: + TRACE_0("Empty media source"); + break; + } + + AbstractPlayer* newPlayer = 0; + + // Construct newPlayer using oldPlayer (if not 0) in order to copy + // parameters (volume, prefinishMark, transitionTime) which may have + // been set on oldPlayer. + + switch (mediaType) { + case MediaTypeUnknown: + TRACE_0("Media type could not be determined"); + if (oldPlayer) { + newPlayer = new DummyPlayer(*oldPlayer); + } else { + newPlayer = new DummyPlayer(); + } + + newPlayer->setError(NormalError); + break; + + case MediaTypeAudio: + if (oldPlayer) { + newPlayer = new AudioPlayer(*oldPlayer); + } else { + newPlayer = new AudioPlayer(); + } + break; + + case MediaTypeVideo: + if (oldPlayer) { + newPlayer = new VideoPlayer(*oldPlayer); + } else { + newPlayer = new VideoPlayer(); + } + break; + } + + m_player.reset(newPlayer); + + if (oldPlayerHasVideo != hasVideo()) { + emit hasVideoChanged(hasVideo()); + } + + if (oldPlayerSeekable != isSeekable()) { + emit seekableChanged(isSeekable()); + } + + connect(m_player.data(), SIGNAL(totalTimeChanged(qint64)), SIGNAL(totalTimeChanged(qint64))); + connect(m_player.data(), SIGNAL(stateChanged(Phonon::State, Phonon::State)), SIGNAL(stateChanged(Phonon::State, Phonon::State))); + connect(m_player.data(), SIGNAL(finished()), SIGNAL(finished())); + connect(m_player.data(), SIGNAL(tick(qint64)), SIGNAL(tick(qint64))); + + if (error != NoError ) { + newPlayer = new DummyPlayer(); + newPlayer->setError(error); + } + + TRACE_EXIT_0(); +} + +void MMF::MediaObject::setNextSource(const MediaSource &source) +{ + m_player->setNextSource(source); +} + +qint32 MMF::MediaObject::prefinishMark() const +{ + return m_player->prefinishMark(); +} + +void MMF::MediaObject::setPrefinishMark(qint32 mark) +{ + m_player->setPrefinishMark(mark); +} + +qint32 MMF::MediaObject::transitionTime() const +{ + return m_player->transitionTime(); +} + +void MMF::MediaObject::setTransitionTime(qint32 time) +{ + m_player->setTransitionTime(time); +} + + +//----------------------------------------------------------------------------- +// VolumeObserver +//----------------------------------------------------------------------------- + +void MMF::MediaObject::volumeChanged(qreal volume) +{ + m_player->volumeChanged(volume); +} + +//----------------------------------------------------------------------------- +// Video output +//----------------------------------------------------------------------------- + +void MMF::MediaObject::setVideoOutput(VideoOutput* videoOutput) +{ + m_player->setVideoOutput(videoOutput); +} + + +AbstractPlayer *MMF::MediaObject::abstractPlayer() const +{ + return m_player.data(); +} + +bool MMF::MediaObject::activateOnMediaObject(MediaObject *) +{ + // Guess what, we do nothing. + return true; +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/mediaobject.h b/src/3rdparty/phonon/mmf/mediaobject.h new file mode 100644 index 0000000..409918d --- /dev/null +++ b/src/3rdparty/phonon/mmf/mediaobject.h @@ -0,0 +1,140 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_MEDIAOBJECT_H +#define PHONON_MMF_MEDIAOBJECT_H + +#include <Phonon/MediaSource> +#include <Phonon/MediaObjectInterface> +#include <QScopedPointer> +#include <QTimer> + +// For recognizer +#include <apgcli.h> + +#include "abstractplayer.h" +#include "mmf_medianode.h" +#include "defs.h" +#include "volumeobserver.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +class AbstractPlayer; +class VideoOutput; + +/** + * @short Facade class which wraps MMF client utility instance + */ +class MediaObject : public MediaNode + , public MediaObjectInterface + , public VolumeObserver +{ + Q_OBJECT + Q_INTERFACES(Phonon::MediaObjectInterface) + +public: + MediaObject(QObject *parent); + virtual ~MediaObject(); + + // MediaObjectInterface + virtual void play(); + virtual void pause(); + virtual void stop(); + virtual void seek(qint64 milliseconds); + virtual qint32 tickInterval() const; + virtual void setTickInterval(qint32 interval); + virtual bool hasVideo() const; + virtual bool isSeekable() const; + virtual qint64 currentTime() const; + virtual Phonon::State state() const; + virtual QString errorString() const; + virtual Phonon::ErrorType errorType() const; + virtual qint64 totalTime() const; + virtual MediaSource source() const; + virtual void setSource(const MediaSource &); + virtual void setNextSource(const MediaSource &source); + virtual qint32 prefinishMark() const; + virtual void setPrefinishMark(qint32); + virtual qint32 transitionTime() const; + virtual void setTransitionTime(qint32); + + // VolumeObserver + void volumeChanged(qreal volume); + + /** + * This class owns the AbstractPlayer, and will delete it upon + * destruction. + */ + AbstractPlayer *abstractPlayer() const; + + void setVideoOutput(VideoOutput* videoOutput); + + virtual bool activateOnMediaObject(MediaObject *); + +Q_SIGNALS: + void totalTimeChanged(qint64 length); + void hasVideoChanged(bool hasVideo); + void seekableChanged(bool seekable); + // TODO: emit bufferStatus from MediaObject + void bufferStatus(int); + // TODO: emit aboutToFinish from MediaObject + void aboutToFinish(); + // TODO: emit prefinishMarkReached from MediaObject + void prefinishMarkReached(qint32); + // TODO: emit metaDataChanged from MediaObject + void metaDataChanged(const QMultiMap<QString, QString>& metaData); + void currentSourceChanged(const MediaSource& source); + void stateChanged(Phonon::State oldState, + Phonon::State newState); + void finished(); + void tick(qint64 time); + +private: + void createPlayer(const MediaSource &source); + bool openRecognizer(); + + // Audio / video media type recognition + MediaType fileMediaType(const QString& fileName); + // TODO: urlMediaType function + + static qint64 toMilliSeconds(const TTimeIntervalMicroSeconds &); + +private: + + // Audio / video media type recognition + bool m_recognizerOpened; + RApaLsSession m_recognizer; + RFs m_fileServer; + + // Storing the file handle here to work around KErrInUse error + // from MMF player utility OpenFileL functions + RFile m_file; + + QScopedPointer<AbstractPlayer> m_player; + +}; +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/mmf_medianode.cpp b/src/3rdparty/phonon/mmf/mmf_medianode.cpp new file mode 100644 index 0000000..a9eee58 --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmf_medianode.cpp @@ -0,0 +1,117 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "mediaobject.h" + +#include "mmf_medianode.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +MMF::MediaNode::MediaNode(QObject *parent) : QObject::QObject(parent) + , m_source(0) + , m_target(0) + , m_isApplied(false) +{ +} + +bool MMF::MediaNode::connectMediaNode(MediaNode *target) +{ + m_target = target; + m_target->setSource(this); + + return applyNodesOnMediaObject(target); +} + +bool MMF::MediaNode::disconnectMediaNode(MediaNode *target) +{ + Q_UNUSED(target); + m_target = 0; + m_isApplied = false; + return false; +} + +void MMF::MediaNode::setSource(MediaNode *source) +{ + m_source = source; +} + +MMF::MediaNode *MMF::MediaNode::source() const +{ + return m_source; +} + +MMF::MediaNode *MMF::MediaNode::target() const +{ + return m_target; +} + +bool MMF::MediaNode::applyNodesOnMediaObject(MediaNode *) +{ + // Algorithmically, this can be expressed in a more efficient way by + // exercising available assumptions, but it complicates code for input + // data(length of the graph) which typically is very small. + + // First, we go to the very beginning of the graph. + MMF::MediaNode *current = this; + do { + MediaNode *const candidate = current->source(); + if (candidate) + current = candidate; + else + break; + } + while (current); + + // Now we do two things, while walking to the other end: + // 1. Find the MediaObject, if present + // 2. Collect a list of all unapplied MediaNodes + + QList<MediaNode *> unapplied; + MMF::MediaObject *mo = 0; + + do { + if (!current->m_isApplied) + unapplied.append(current); + + if (!mo) + mo = qobject_cast<MMF::MediaObject *>(current); + + current = current->target(); + } + while (current); + + // Now, lets activate all the objects, if we found the MediaObject. + + if (mo) { + for (int i = 0; i < unapplied.count(); ++i) { + MediaNode *const at = unapplied.at(i); + + // We don't want to apply MediaObject on itself. + if (at != mo) + at->activateOnMediaObject(mo); + } + } + + return true; +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/mmf_medianode.h b/src/3rdparty/phonon/mmf/mmf_medianode.h new file mode 100644 index 0000000..4616ff1 --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmf_medianode.h @@ -0,0 +1,100 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_MEDIANODE_H +#define PHONON_MMF_MEDIANODE_H + +#include <QObject> +#include <Phonon/EffectInterface> +#include "audioplayer.h" + +QT_BEGIN_NAMESPACE + +/** + * @file mmf_medianode.h mmf_medianode.cpp + * + * This file starts with mmf_ in order to avoid clash with Phonon's + * medianode.h. The GStreamer backend has a file named medianode.h, but it + * isn't compiled with ABLD build system, which have problems with separating + * user and system include paths. + */ + +namespace Phonon +{ +namespace MMF +{ +class MediaObject; + +/** + * @short Base class for all nodes in the MMF backend. + * + * MediaNode is the base class for all nodes in the chain for MMF. Currently + * they are: + * + * - MediaObject: a source of media + * - AbstractEffect: supplying audio effects + * - AudioOutput: pretty much a dummy interface, but is also MediaNode in order + * to simplify connection/disconnection. + * + * MediaNode provides spectatability into the chain, and also allows the + * connection code to be written in a polymorphic manner, instead of putting it + * all in the Backend class. Due to that MMF has no concept of chaining, the + * order of the nodes in the graph has no meaning. + */ +class MediaNode : public QObject +{ + Q_OBJECT +public: + MediaNode(QObject *parent); + + virtual bool connectMediaNode(MediaNode *target); + virtual bool disconnectMediaNode(MediaNode *target); + void setSource(MediaNode *source); + + MediaNode *source() const; + MediaNode *target() const; + +protected: + /** + * When connectMediaNode() is called and a MediaObject is part of + * the its graph, this function will be called for each MediaNode in the + * graph for which it hasn't been called yet. + * + * The caller guarantees that @p mo is always non-null. + */ + virtual bool activateOnMediaObject(MediaObject *mo) = 0; + +private: + /** + * Finds a MediaObject anywhere in the graph @p target is apart of, and + * calls activateOnMediaObject() for all MediaNodes in the graph for which + * it hasn't been applied to already. + */ + bool applyNodesOnMediaObject(MediaNode *target); + + MediaNode * m_source; + MediaNode * m_target; + bool m_isApplied; +}; +} +} + +QT_END_NAMESPACE + +#endif + diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp new file mode 100644 index 0000000..64e6568 --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp @@ -0,0 +1,448 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <QUrl> +#include <QTimer> +#include <QWidget> + +#include <coemain.h> // For CCoeEnv +#include <coecntrl.h> + +#include "mmf_videoplayer.h" +#include "utils.h" + +#ifdef _DEBUG +#include "objectdump.h" +#endif + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +//----------------------------------------------------------------------------- +// Constructor / destructor +//----------------------------------------------------------------------------- + +MMF::VideoPlayer::VideoPlayer() + : m_wsSession(0) + , m_screenDevice(0) + , m_window(0) + , m_totalTime(0) + , m_mmfOutputChangePending(false) +{ + construct(); +} + +MMF::VideoPlayer::VideoPlayer(const AbstractPlayer& player) + : AbstractMediaPlayer(player) + , m_wsSession(0) + , m_screenDevice(0) + , m_window(0) + , m_totalTime(0) + , m_mmfOutputChangePending(false) +{ + construct(); +} + +void MMF::VideoPlayer::construct() +{ + TRACE_CONTEXT(VideoPlayer::VideoPlayer, EVideoApi); + TRACE_ENTRY_0(); + + if (!m_videoOutput) { + m_dummyVideoOutput.reset(new VideoOutput(0)); + } + + videoOutput().setObserver(this); + + const TInt priority = 0; + const TMdaPriorityPreference preference = EMdaPriorityPreferenceNone; + + getNativeWindowSystemHandles(); + + // TODO: is this the correct way to handle errors which occur when + // creating a Symbian object in the constructor of a Qt object? + + // TODO: check whether videoOutput is visible? If not, then the + // corresponding window will not be active, meaning that the + // clipping region will be set to empty and the video will not be + // visible. If this is the case, we should set m_mmfOutputChangePending + // and respond to future showEvents from the videoOutput widget. + + TRAPD(err, + m_player.reset(CVideoPlayerUtility::NewL + ( + *this, + priority, preference, + *m_wsSession, *m_screenDevice, + *m_window, + m_windowRect, m_clipRect + )) + ); + + if (KErrNone != err) { + changeState(ErrorState); + } + + TRACE_EXIT_0(); +} + +MMF::VideoPlayer::~VideoPlayer() +{ + TRACE_CONTEXT(VideoPlayer::~VideoPlayer, EVideoApi); + TRACE_ENTRY_0(); + + TRACE_EXIT_0(); +} + +//----------------------------------------------------------------------------- +// Public API +//----------------------------------------------------------------------------- + +void MMF::VideoPlayer::doPlay() +{ + TRACE_CONTEXT(VideoPlayer::doPlay, EVideoApi); + + // See comment in updateMmfOutput + if(m_mmfOutputChangePending) { + TRACE_0("MMF output change pending - pushing now"); + updateMmfOutput(); + } + + m_player->Play(); +} + +void MMF::VideoPlayer::doPause() +{ + TRACE_CONTEXT(VideoPlayer::doPause, EVideoApi); + + TRAPD(err, m_player->PauseL()); + if (KErrNone != err) { + TRACE("PauseL error %d", err); + setError(NormalError); + } +} + +void MMF::VideoPlayer::doStop() +{ + m_player->Stop(); +} + +void MMF::VideoPlayer::doSeek(qint64 ms) +{ + TRACE_CONTEXT(VideoPlayer::doSeek, EVideoApi); + + bool wasPlaying = false; + if(state() == PlayingState) { + // The call to SetPositionL does not have any effect if playback is + // ongoing, so we pause before seeking. + doPause(); + wasPlaying = true; + } + + TRAPD(err, m_player->SetPositionL(TTimeIntervalMicroSeconds(ms * 1000))); + + if(KErrNone == err) { + if(wasPlaying) + doPlay(); + } + else { + TRACE("SetPositionL error %d", err); + setError(NormalError); + } +} + +int MMF::VideoPlayer::setDeviceVolume(int mmfVolume) +{ + TRAPD(err, m_player->SetVolumeL(mmfVolume)); + return err; +} + +int MMF::VideoPlayer::openFile(RFile& file) +{ + TRAPD(err, m_player->OpenFileL(file)); + return err; +} + +void MMF::VideoPlayer::close() +{ + m_player->Close(); +} + +bool MMF::VideoPlayer::hasVideo() const +{ + return true; +} + +qint64 MMF::VideoPlayer::currentTime() const +{ + TRACE_CONTEXT(VideoPlayer::currentTime, EVideoApi); + + TTimeIntervalMicroSeconds us; + TRAPD(err, us = m_player->PositionL()) + + qint64 result = 0; + + if (KErrNone == err) { + result = toMilliSeconds(us); + } else { + TRACE("PositionL error %d", err); + + // If we don't cast away constness here, we simply have to ignore + // the error. + const_cast<VideoPlayer*>(this)->setError(NormalError); + } + + return result; +} + +qint64 MMF::VideoPlayer::totalTime() const +{ + return m_totalTime; +} + + +//----------------------------------------------------------------------------- +// MVideoPlayerUtilityObserver callbacks +//----------------------------------------------------------------------------- + +void MMF::VideoPlayer::MvpuoOpenComplete(TInt aError) +{ + TRACE_CONTEXT(VideoPlayer::MvpuoOpenComplete, EVideoApi); + TRACE_ENTRY("state %d error %d", state(), aError); + + __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic)); + + if (KErrNone == aError) + m_player->Prepare(); + else + setError(NormalError); + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::MvpuoPrepareComplete(TInt aError) +{ + TRACE_CONTEXT(VideoPlayer::MvpuoPrepareComplete, EVideoApi); + TRACE_ENTRY("state %d error %d", state(), aError); + + __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic)); + + TRAPD(err, doPrepareCompleteL(aError)); + + if (KErrNone == err) { + maxVolumeChanged(m_player->MaxVolume()); + + videoOutput().setFrameSize(m_frameSize); + + // See comment in updateMmfOutput + if(m_mmfOutputChangePending) { + TRACE_0("MMF output change pending - pushing now"); + updateMmfOutput(); + } + + emit totalTimeChanged(totalTime()); + changeState(StoppedState); + } else { + setError(NormalError); + } + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::doPrepareCompleteL(TInt aError) +{ + User::LeaveIfError(aError); + + // Get frame size + TSize size; + m_player->VideoFrameSizeL(size); + m_frameSize = QSize(size.iWidth, size.iHeight); + + // Get duration + m_totalTime = toMilliSeconds(m_player->DurationL()); +} + + +void MMF::VideoPlayer::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError) +{ + TRACE_CONTEXT(VideoPlayer::MvpuoFrameReady, EVideoApi); + TRACE_ENTRY("state %d error %d", state(), aError); + + // TODO + Q_UNUSED(aFrame); + Q_UNUSED(aError); // suppress warnings in release builds + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::MvpuoPlayComplete(TInt aError) +{ + TRACE_CONTEXT(VideoPlayer::MvpuoPlayComplete, EVideoApi) + TRACE_ENTRY("state %d error %d", state(), aError); + + // TODO + Q_UNUSED(aError); // suppress warnings in release builds + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::MvpuoEvent(const TMMFEvent &aEvent) +{ + TRACE_CONTEXT(VideoPlayer::MvpuoEvent, EVideoApi); + TRACE_ENTRY("state %d", state()); + + // TODO + Q_UNUSED(aEvent); + + TRACE_EXIT_0(); +} + + +//----------------------------------------------------------------------------- +// VideoOutputObserver +//----------------------------------------------------------------------------- + +void MMF::VideoPlayer::videoOutputRegionChanged() +{ + TRACE_CONTEXT(VideoPlayer::videoOutputRegionChanged, EVideoInternal); + TRACE_ENTRY("state %d", state()); + + getNativeWindowSystemHandles(); + + // See comment in updateMmfOutput + if(state() == LoadingState) + m_mmfOutputChangePending = true; + else + updateMmfOutput(); + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::updateMmfOutput() +{ + TRACE_CONTEXT(VideoPlayer::updateMmfOutput, EVideoInternal); + TRACE_ENTRY_0(); + + // Calling SetDisplayWindowL is a no-op unless the MMF controller has + // been loaded, so we shouldn't do it. Instead, the + // m_mmfOutputChangePending flag is used to record the fact that we + // need to call SetDisplayWindowL, and this is checked in + // MvpuoPrepareComplete, at which point the MMF controller has been + // loaded. + + // TODO: check whether videoOutput is visible? If not, then the + // corresponding window will not be active, meaning that the + // clipping region will be set to empty and the video will not be + // visible. If this is the case, we should set m_mmfOutputChangePending + // and respond to future showEvents from the videoOutput widget. + + getNativeWindowSystemHandles(); + + TRAPD(err, + m_player->SetDisplayWindowL + ( + *m_wsSession, *m_screenDevice, + *m_window, + m_windowRect, m_clipRect + ) + ); + + if (KErrNone != err) { + TRACE("SetDisplayWindowL error %d", err); + setError(NormalError); + } + + m_mmfOutputChangePending = false; + + TRACE_EXIT_0(); +} + + +//----------------------------------------------------------------------------- +// Private functions +//----------------------------------------------------------------------------- + +VideoOutput& MMF::VideoPlayer::videoOutput() +{ + TRACE_CONTEXT(VideoPlayer::videoOutput, EVideoInternal); + TRACE("videoOutput 0x%08x dummy 0x%08x", m_videoOutput, m_dummyVideoOutput.data()); + + return m_videoOutput ? *m_videoOutput : *m_dummyVideoOutput; +} + +void MMF::VideoPlayer::videoOutputChanged() +{ + TRACE_CONTEXT(VideoPlayer::videoOutputChanged, EVideoInternal); + TRACE_ENTRY_0(); + + // Lazily construct a dummy output if needed here + if (!m_videoOutput and m_dummyVideoOutput.isNull()) { + m_dummyVideoOutput.reset(new VideoOutput(0)); + } + + videoOutput().setObserver(this); + + videoOutput().setFrameSize(m_frameSize); + + videoOutputRegionChanged(); + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::getNativeWindowSystemHandles() +{ + TRACE_CONTEXT(VideoPlayer::getNativeWindowSystemHandles, EVideoInternal); + TRACE_ENTRY_0(); + + VideoOutput& output = videoOutput(); + CCoeControl* const control = output.winId(); + + CCoeEnv* const coeEnv = control->ControlEnv(); + m_wsSession = &(coeEnv->WsSession()); + m_screenDevice = coeEnv->ScreenDevice(); + m_window = control->DrawableWindow(); + +#ifdef _DEBUG + QScopedPointer<ObjectDump::QDumper> dumper(new ObjectDump::QDumper); + dumper->setPrefix("Phonon::MMF"); // to aid searchability of logs + ObjectDump::addDefaultAnnotators(*dumper); + TRACE_0("Dumping VideoOutput:"); + dumper->dumpObject(output); +#endif + + m_windowRect = TRect( + control->DrawableWindow()->AbsPosition(), + control->DrawableWindow()->Size()); + + m_clipRect = m_windowRect; + + TRACE("windowRect %d %d - %d %d", + m_windowRect.iTl.iX, m_windowRect.iTl.iY, + m_windowRect.iBr.iX, m_windowRect.iBr.iY); + TRACE("clipRect %d %d - %d %d", + m_clipRect.iTl.iX, m_clipRect.iTl.iY, + m_clipRect.iBr.iX, m_clipRect.iBr.iY); + + TRACE_EXIT_0(); +} + + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.h b/src/3rdparty/phonon/mmf/mmf_videoplayer.h new file mode 100644 index 0000000..a805135 --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.h @@ -0,0 +1,111 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_VIDEOPLAYER_H +#define PHONON_MMF_VIDEOPLAYER_H + +#include <videoplayer.h> // from epoc32/include + +#include "abstractmediaplayer.h" +#include "videooutput.h" +#include "videooutputobserver.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +/** + * @short Wrapper over MMF video client utility + * + * See + * <a href="http://wiki.forum.nokia.com/index.php/How_to_play_a_video_file_using_CVideoPlayerUtility">How to + * play a video file using CVideoPlayerUtility</a> + */ +class VideoPlayer : public AbstractMediaPlayer + , public MVideoPlayerUtilityObserver + , public VideoOutputObserver +{ + Q_OBJECT + +public: + VideoPlayer(); + explicit VideoPlayer(const AbstractPlayer& player); + virtual ~VideoPlayer(); + + // AbstractPlayer + virtual void doPlay(); + virtual void doPause(); + virtual void doStop(); + virtual void doSeek(qint64 milliseconds); + virtual int setDeviceVolume(int mmfVolume); + virtual int openFile(RFile& file); + virtual void close(); + + // MediaObjectInterface + virtual bool hasVideo() const; + virtual qint64 currentTime() const; + virtual qint64 totalTime() const; + + // MVideoPlayerUtilityObserver + virtual void MvpuoOpenComplete(TInt aError); + virtual void MvpuoPrepareComplete(TInt aError); + virtual void MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError); + virtual void MvpuoPlayComplete(TInt aError); + virtual void MvpuoEvent(const TMMFEvent &aEvent); + + // VideoOutputObserver + virtual void videoOutputRegionChanged(); + +private: + void construct(); + VideoOutput& videoOutput(); + + void doPrepareCompleteL(TInt aError); + + // AbstractPlayer + virtual void videoOutputChanged(); + + void getNativeWindowSystemHandles(); + void updateMmfOutput(); + +private: + QScopedPointer<CVideoPlayerUtility> m_player; + QScopedPointer<VideoOutput> m_dummyVideoOutput; + + // Not owned + RWsSession* m_wsSession; + CWsScreenDevice* m_screenDevice; + RWindowBase* m_window; + TRect m_windowRect; + TRect m_clipRect; + + QSize m_frameSize; + qint64 m_totalTime; + + bool m_mmfOutputChangePending; + +}; + +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.cpp b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.cpp new file mode 100644 index 0000000..ef2b81c --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.cpp @@ -0,0 +1,527 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <QByteArray> +#include <QDebug> +#include <QHash> +#include <QTextStream> +#include <QWidget> + +#include "objectdump.h" +#include "objecttree.h" + +QT_BEGIN_NAMESPACE + +namespace ObjectDump +{ + +//----------------------------------------------------------------------------- +// QObjectAnnotator +//----------------------------------------------------------------------------- + +QAnnotator::~QAnnotator() +{ + +} + + +//----------------------------------------------------------------------------- +// Annotators +//----------------------------------------------------------------------------- + +QList<QByteArray> QAnnotatorBasic::annotation(const QObject& object) +{ + QList<QByteArray> result; + + QByteArray array; + QTextStream stream(&array); + + stream << '[' << &object << ']'; + stream << ' '; + stream << object.metaObject()->className(); + + if(object.objectName() != "") + stream << " \"" << object.objectName() << '"'; + + if(object.isWidgetType()) + stream << " isWidget"; + + stream.flush(); + result.append(array); + return result; +} + +QList<QByteArray> QAnnotatorWidget::annotation(const QObject& object) +{ + QList<QByteArray> result; + + const QWidget* widget = qobject_cast<const QWidget*>(&object); + if(widget) { + + QByteArray array; + QTextStream stream(&array); + + stream << "widget: "; + + if(widget->isVisible()) + stream << "visible "; + else + stream << "invisible "; + + stream << widget->x() << ',' << widget->y() << ' '; + stream << widget->size().width() << 'x'<< widget->size().height() << ' '; + + stream << "hint " << widget->sizeHint().width() << 'x' << widget->sizeHint().height(); + + stream.flush(); + result.append(array); + } + + return result; +} + + +//----------------------------------------------------------------------------- +// Base class for QDumperPrivate, QVisitorPrivate +//----------------------------------------------------------------------------- + +class QDumperBase +{ +public: + QDumperBase(); + ~QDumperBase(); + + void setPrefix(const QString& prefix); + void addAnnotator(QAnnotator* annotator); + +protected: + QByteArray m_prefix; + QList<QAnnotator*> m_annotators; + +}; + +QDumperBase::QDumperBase() +{ + +} + +QDumperBase::~QDumperBase() +{ + QAnnotator* annotator; + foreach(annotator, m_annotators) + delete annotator; +} + +void QDumperBase::setPrefix(const QString& prefix) +{ + m_prefix = prefix.count() + ? (prefix + " ").toAscii() + : prefix.toAscii(); +} + +void QDumperBase::addAnnotator(QAnnotator* annotator) +{ + // Protect against an exception occurring during QList::append + QScopedPointer<QAnnotator> holder(annotator); + m_annotators.append(annotator); + holder.take(); +} + + +//----------------------------------------------------------------------------- +// QDumper +//----------------------------------------------------------------------------- + +class QDumperPrivate : public QDumperBase +{ +public: + QDumperPrivate(); + ~QDumperPrivate(); + + void dumpObject(const QObject& object); + +}; + + +QDumperPrivate::QDumperPrivate() +{ + +} + +QDumperPrivate::~QDumperPrivate() +{ + +} + +void QDumperPrivate::dumpObject(const QObject& object) +{ + QAnnotator* annotator; + foreach(annotator, m_annotators) { + + const QList<QByteArray> annotations = annotator->annotation(object); + QByteArray annotation; + foreach(annotation, annotations) { + QByteArray buffer(m_prefix); + buffer.append(annotation); + qDebug() << buffer.constData(); + } + } +} + + +QDumper::QDumper() + : d_ptr(new QDumperPrivate) +{ + +} + +QDumper::~QDumper() +{ + +} + +void QDumper::setPrefix(const QString& prefix) +{ + d_func()->setPrefix(prefix); +} + +void QDumper::addAnnotator(QAnnotator* annotator) +{ + d_func()->addAnnotator(annotator); +} + +void QDumper::dumpObject(const QObject& object) +{ + d_func()->dumpObject(object); +} + + +//----------------------------------------------------------------------------- +// QVisitor +//----------------------------------------------------------------------------- + +class QVisitorPrivate : public QDumperBase +{ +public: + QVisitorPrivate(); + ~QVisitorPrivate(); + + void setIndent(unsigned indent); + + void visitNode(const QObject& object); + void visitComplete(); + +private: + class Node + { + public: + Node(); + ~Node(); + + QList<QByteArray> m_annotation; + QList<Node*> m_children; + + typedef QList<Node*>::const_iterator child_iterator; + }; + +private: + Node* findNode(const QObject* object) const; + QByteArray branchBuffer(const QList<bool>& branches, bool isNodeLine, bool isLastChild) const; + void dumpRecursive(const Node& node, QList<bool> branches, bool isLastChild); + void dumpNode(const Node& node, const QList<bool>& branches, bool isLastChild); + +private: + unsigned m_indent; + + QScopedPointer<Node> m_root; + + // Hash table used to associate internal nodes with QObjects + typedef QHash<const QObject*, Node*> Hash; + Hash m_hash; +}; + +static const unsigned DefaultIndent = 2; + +QVisitorPrivate::QVisitorPrivate() + : m_indent(DefaultIndent) +{ + +} + +QVisitorPrivate::~QVisitorPrivate() +{ + +} + +void QVisitorPrivate::setIndent(unsigned indent) +{ + m_indent = indent; +} + +// Builds up a mirror of the object tree, rooted in m_root, with each node +// storing annotations generated by +void QVisitorPrivate::visitNode(const QObject& object) +{ + QObject* const objectParent = object.parent(); + Node* const nodeParent = objectParent ? findNode(objectParent) : 0; + + // Create a new node and store in scoped pointer for exception safety + Node* node = new Node; + QScopedPointer<Node> nodePtr(node); + + // Associate node with QObject + m_hash.insert(&object, node); + + // Insert node into internal tree + if(nodeParent) + { + nodeParent->m_children.append(nodePtr.take()); + } + else + { + Q_ASSERT(m_root.isNull()); + m_root.reset(nodePtr.take()); + } + + // Generate and store annotations + QAnnotator* annotator; + foreach(annotator, m_annotators) + node->m_annotation.append( annotator->annotation(object) ); +} + +void QVisitorPrivate::visitComplete() +{ + QList<bool> branches; + static const bool isLastChild = true; + dumpRecursive(*m_root, branches, isLastChild); + m_root.reset(0); +} + +QVisitorPrivate::Node* QVisitorPrivate::findNode(const QObject* object) const +{ + Hash::const_iterator i = m_hash.find(object); + return (m_hash.end() == i) ? 0 : *i; +} + +QByteArray QVisitorPrivate::branchBuffer + (const QList<bool>& branches, bool isNodeLine, bool isLastChild) const +{ + const int depth = branches.count(); + + const QByteArray indent(m_indent, ' '); + const QByteArray horiz(m_indent, '-'); + + QByteArray buffer; + QTextStream stream(&buffer); + + for (int i=0; i<depth-1; ++i) { + if(branches[i]) + stream << '|'; + else + stream << ' '; + stream << indent; + } + + if(depth) { + if(isNodeLine) + stream << '+' << horiz; + else { + if(!isLastChild) + stream << '|'; + else + stream << ' '; + stream << indent; + } + } + + stream.flush(); + buffer.push_front(m_prefix); + + return buffer; +} + +void QVisitorPrivate::dumpRecursive + (const Node& node, QList<bool> branches, bool isLastChild) +{ + dumpNode(node, branches, isLastChild); + + // Recurse down tree + const Node::child_iterator begin = node.m_children.begin(); + const Node::child_iterator end = node.m_children.end(); + for(Node::child_iterator i = begin; end != i; ++i) { + + isLastChild = (end == i + 1); + + if(begin == i) + branches.push_back(!isLastChild); + else + branches.back() = !isLastChild; + + static const bool isNodeLine = false; + const QByteArray buffer = branchBuffer(branches, isNodeLine, false); + qDebug() << buffer.constData(); + + dumpRecursive(**i, branches, isLastChild); + } +} + +void QVisitorPrivate::dumpNode + (const Node& node, const QList<bool>& branches, bool isLastChild) +{ + const QList<QByteArray>::const_iterator + begin = node.m_annotation.begin(), end = node.m_annotation.end(); + + if(begin == end) { + // No annotations - just dump the object pointer + const bool isNodeLine = true; + QByteArray buffer = branchBuffer(branches, isNodeLine, isLastChild); + qDebug() << 0; // TODO + } + else { + // Dump annotations + for(QList<QByteArray>::const_iterator i = begin; end != i; ++i) { + const bool isNodeLine = (begin == i); + QByteArray buffer = branchBuffer(branches, isNodeLine, isLastChild); + buffer.append(*i); + qDebug() << buffer.constData(); + } + } +} + + +// QVisitorPrivate::Node + +QVisitorPrivate::Node::Node() +{ + +} + +QVisitorPrivate::Node::~Node() +{ + Node* child; + foreach(child, m_children) + delete child; +} + + +// QVisitor + +QVisitor::QVisitor() + : d_ptr(new QVisitorPrivate) +{ + +} + +QVisitor::~QVisitor() +{ + +} + +void QVisitor::setPrefix(const QString& prefix) +{ + d_func()->setPrefix(prefix); +} + +void QVisitor::setIndent(unsigned indent) +{ + d_func()->setIndent(indent); +} + +void QVisitor::addAnnotator(QAnnotator* annotator) +{ + d_func()->addAnnotator(annotator); +} + +void QVisitor::visitPrepare() +{ + // Do nothing +} + +void QVisitor::visitNode(const QObject& object) +{ + d_func()->visitNode(object); +} + +void QVisitor::visitComplete() +{ + d_func()->visitComplete(); +} + + +//----------------------------------------------------------------------------- +// Utility functions +//----------------------------------------------------------------------------- + +void addDefaultAnnotators_sys(QDumper& visitor); +void addDefaultAnnotators_sys(QVisitor& visitor); + +void addDefaultAnnotators(QDumper& dumper) +{ + dumper.addAnnotator(new QAnnotatorBasic); + dumper.addAnnotator(new QAnnotatorWidget); + + // Add platform-specific annotators + addDefaultAnnotators_sys(dumper); +} + +void addDefaultAnnotators(QVisitor& visitor) +{ + visitor.addAnnotator(new QAnnotatorBasic); + visitor.addAnnotator(new QAnnotatorWidget); + + // Add platform-specific annotators + addDefaultAnnotators_sys(visitor); +} + +void dumpTreeFromRoot(const QObject& root, QVisitor& visitor) +{ + // Set up iteration range + ObjectTree::DepthFirstConstIterator begin(root), end; + + // Invoke generic visitor algorithm + ObjectTree::visit(begin, end, visitor); +} + +void dumpTreeFromLeaf(const QObject& leaf, QVisitor& visitor) +{ + // Walk up to root + const QObject* root = &leaf; + while(root->parent()) + { + root = root->parent(); + } + + dumpTreeFromRoot(*root, visitor); +} + +void dumpAncestors(const QObject& leaf, QVisitor& visitor) +{ + // Set up iteration range + ObjectTree::AncestorConstIterator begin(leaf), end; + + // Invoke generic visitor algorithm + ObjectTree::visit(begin, end, visitor); +} + + +} // namespace ObjectDump + +QT_END_NAMESPACE + + + diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.h b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.h new file mode 100644 index 0000000..cbd9bea --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.h @@ -0,0 +1,166 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef OBJECTDUMP_H +#define OBJECTDUMP_H + +#include "objectdump_global.h" + +#include <QObject> +#include <QList> +#include <QByteArray> +#include <QScopedPointer> + +QT_BEGIN_NAMESPACE + +namespace ObjectDump +{ + +/** + * Abstract base for annotator classes invoked by QVisitor. + */ +class OBJECTDUMP_EXPORT QAnnotator : public QObject +{ + Q_OBJECT +public: + virtual ~QAnnotator(); + virtual QList<QByteArray> annotation(const QObject& object) = 0; +}; + +/** + * Annotator which replicates QObject::dumpObjectTree functionality. + */ +class OBJECTDUMP_EXPORT QAnnotatorBasic : public QAnnotator +{ + Q_OBJECT +public: + QList<QByteArray> annotation(const QObject& object); +}; + +/** + * Annotator which returns widget information. + */ +class OBJECTDUMP_EXPORT QAnnotatorWidget : public QAnnotator +{ + Q_OBJECT +public: + QList<QByteArray> annotation(const QObject& object); +}; + + +class QDumperPrivate; + +/** + * Class used to dump information about individual QObjects. + */ +class OBJECTDUMP_EXPORT QDumper : public QObject +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QDumper) + +public: + QDumper(); + ~QDumper(); + + /** + * Specify a prefix, to be printed on each line of output. + */ + void setPrefix(const QString& prefix); + + /** + * Takes ownership of annotator. + */ + void addAnnotator(QAnnotator* annotator); + + /** + * Invoke each annotator on the object and write to debug output. + */ + void dumpObject(const QObject& object); + +private: + QScopedPointer<QDumperPrivate> d_ptr; + +}; + + +class QVisitorPrivate; + +/** + * Visitor class which dumps information about nodes in the object tree. + */ +class OBJECTDUMP_EXPORT QVisitor : public QObject +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QVisitor) + +public: + QVisitor(); + ~QVisitor(); + + /** + * Specify a prefix, to be printed on each line of output. + */ + void setPrefix(const QString& prefix); + + /** + * Set number of spaces by which each level of the tree is indented. + */ + void setIndent(unsigned indent); + + /** + * Called by the visitor algorithm before starting the visit. + */ + void visitPrepare(); + + /** + * Called by the visitor algorithm as each node is visited. + */ + void visitNode(const QObject& object); + + /** + * Called by the visitor algorithm when the visit is complete. + */ + void visitComplete(); + + /** + * Takes ownership of annotator. + */ + void addAnnotator(QAnnotator* annotator); + +private: + QScopedPointer<QVisitorPrivate> d_ptr; + +}; + + +//----------------------------------------------------------------------------- +// Utility functions +//----------------------------------------------------------------------------- + +void OBJECTDUMP_EXPORT addDefaultAnnotators(QDumper& dumper); +void OBJECTDUMP_EXPORT addDefaultAnnotators(QVisitor& visitor); + +void OBJECTDUMP_EXPORT dumpTreeFromRoot(const QObject& root, QVisitor& visitor); +void OBJECTDUMP_EXPORT dumpTreeFromLeaf(const QObject& leaf, QVisitor& visitor); +void OBJECTDUMP_EXPORT dumpAncestors(const QObject& leaf, QVisitor& visitor); + +} // namespace ObjectDump + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_global.h b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_global.h new file mode 100644 index 0000000..b8987e0 --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_global.h @@ -0,0 +1,30 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef OBJECTDUMP_GLOBAL_H +#define OBJECTDUMP_GLOBAL_H + +#include <QtCore/QtGlobal> + +#if defined(OBJECTDUMP_LIBRARY) +# define OBJECTDUMP_EXPORT +#else +# define OBJECTDUMP_EXPORT +#endif + +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_stub.cpp b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_stub.cpp new file mode 100644 index 0000000..6207dac --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_stub.cpp @@ -0,0 +1,40 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "objectdump.h" + +QT_BEGIN_NAMESPACE + +namespace ObjectDump +{ + +void addDefaultAnnotators_sys(QDumper& /*dumper*/) +{ + +} + +void addDefaultAnnotators_sys(QVisitor& /*visitor*/) +{ + +} + +} // namespace ObjectDump + +QT_END_NAMESPACE + + diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.cpp b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.cpp new file mode 100644 index 0000000..f8adcd5 --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.cpp @@ -0,0 +1,135 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <QTextStream> +#include <QWidget> +#include <coecntrl.h> +#include "objectdump_symbian.h" + +QT_BEGIN_NAMESPACE + +namespace ObjectDump +{ +namespace Symbian +{ + +QList<QByteArray> QAnnotatorControl::annotation(const QObject& object) +{ + QList<QByteArray> result; + + const QWidget* widget = qobject_cast<const QWidget*>(&object); + if(widget) { + + const CCoeControl* control = widget->effectiveWinId(); + if(control) { + + QByteArray array; + QTextStream stream(&array); + + stream << "control: " << control << ' '; + stream << "parent " << control->Parent() << ' '; + + if(control->IsVisible()) + stream << "visible "; + else + stream << "invisible "; + + stream << control->Position().iX << ',' << control->Position().iY << ' '; + stream << control->Size().iWidth << 'x' << control->Size().iHeight; + + if(control->OwnsWindow()) + stream << " ownsWindow "; + + stream.flush(); + result.append(array); + } + } + + return result; +} + +QList<QByteArray> QAnnotatorWindow::annotation(const QObject& object) +{ + QList<QByteArray> result; + + const QWidget* widget = qobject_cast<const QWidget*>(&object); + if(widget) { + + const CCoeControl* control = widget->effectiveWinId(); + if(control) { + + RDrawableWindow& window = *(control->DrawableWindow()); + + QByteArray array; + QTextStream stream(&array); + + stream << "window: "; + + // ClientHandle() is available first in 5.0. +#if !defined(__SERIES60_31__) && !defined(__S60_32__) + // Client-side window handle + // Cast to a void pointer so that log output is in hexadecimal format. + stream << "cli " << reinterpret_cast<const void*>(window.ClientHandle()) << ' '; +#endif + + // Server-side address of CWsWindow object + // This is useful for correlation with the window tree dumped by the window + // server (see RWsSession::LogCommand). + // Cast to a void pointer so that log output is in hexadecimal format. + stream << "srv " << reinterpret_cast<const void*>(window.WsHandle()) << ' '; + + stream << "group " << window.WindowGroupId() << ' '; + + // Client-side handle to the parent window. + // Cast to a void pointer so that log output is in hexadecimal format. + stream << "parent " << reinterpret_cast<const void*>(window.Parent()) << ' '; + + stream << window.Position().iX << ',' << window.Position().iY << ' '; + stream << '(' << window.AbsPosition().iX << ',' << window.AbsPosition().iY << ") "; + stream << window.Size().iWidth << 'x' << window.Size().iHeight << ' '; + + const TDisplayMode displayMode = window.DisplayMode(); + stream << "mode " << displayMode; + + stream.flush(); + result.append(array); + } + } + + return result; +} + +} // namespace Symbian + +void addDefaultAnnotators_sys(QDumper& dumper) +{ + dumper.addAnnotator(new Symbian::QAnnotatorControl); + dumper.addAnnotator(new Symbian::QAnnotatorWindow); +} + +void addDefaultAnnotators_sys(QVisitor& visitor) +{ + visitor.addAnnotator(new Symbian::QAnnotatorControl); + visitor.addAnnotator(new Symbian::QAnnotatorWindow); +} + +} // namespace ObjectDump + +QT_END_NAMESPACE + + diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.h b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.h new file mode 100644 index 0000000..26ab308 --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.h @@ -0,0 +1,56 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef OBJECTDUMP_SYMBIAN_H +#define OBJECTDUMP_SYMBIAN_H + +#include "objectdump.h" + +QT_BEGIN_NAMESPACE + +namespace ObjectDump +{ +namespace Symbian +{ + +/** + * Annotator which returns control information + */ +class QAnnotatorControl : public QAnnotator +{ + Q_OBJECT +public: + QList<QByteArray> annotation(const QObject& object); +}; + +/** + * Annotator which returns window information + */ +class QAnnotatorWindow : public QAnnotator +{ + Q_OBJECT +public: + QList<QByteArray> annotation(const QObject& object); +}; + +} // namespace Symbian +} // namespace ObjectDump + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.cpp b/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.cpp new file mode 100644 index 0000000..5053b2d --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.cpp @@ -0,0 +1,102 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <QTextStream> +#include <QWidget> +#include "objecttree.h" + +QT_BEGIN_NAMESPACE + +namespace ObjectTree +{ + +DepthFirstConstIterator::DepthFirstConstIterator() + : m_pointee(0) +{ + +} + +DepthFirstConstIterator::DepthFirstConstIterator + (const QObject& root) + : m_pointee(&root) +{ + +} + +DepthFirstConstIterator& + DepthFirstConstIterator::operator++() +{ + const QObjectList& children = m_pointee->children(); + + if (children.count() == 0) { + backtrack(); + } + else { + m_history.push(0); + m_pointee = children.first(); + } + + return *this; +} + +void DepthFirstConstIterator::backtrack() +{ + if (m_history.count()) { + const int index = m_history.top(); + m_history.pop(); + + const QObjectList& siblings = m_pointee->parent()->children(); + if (siblings.count() > index + 1) { + m_history.push(index + 1); + m_pointee = siblings[index + 1]; + } + else { + m_pointee = m_pointee->parent(); + backtrack(); + } + } + else { + // Reached end of search + m_pointee = 0; + } +} + + + +AncestorConstIterator::AncestorConstIterator() +{ + +} + +AncestorConstIterator::AncestorConstIterator(const QObject& leaf) +{ + m_ancestors.push(&leaf); + QObject* ancestor = leaf.parent(); + while(ancestor) + { + m_ancestors.push(ancestor); + ancestor = ancestor->parent(); + } +} + +} // namespace ObjectTree + +QT_END_NAMESPACE + + + diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.h b/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.h new file mode 100644 index 0000000..f2729fa --- /dev/null +++ b/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.h @@ -0,0 +1,117 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef OBJECTTREE_H +#define OBJECTTREE_H + +#include "objectdump_global.h" + +#include <QObject> +#include <QStack> + +QT_BEGIN_NAMESPACE + +namespace ObjectTree +{ + +/** + * Depth-first iterator for QObject tree + */ +class OBJECTDUMP_EXPORT DepthFirstConstIterator +{ +public: + DepthFirstConstIterator(); + DepthFirstConstIterator(const QObject& root); + + DepthFirstConstIterator& operator++(); + + inline bool operator==(const DepthFirstConstIterator& other) const + { return other.m_pointee == m_pointee; } + + inline bool operator!=(const DepthFirstConstIterator& other) const + { return other.m_pointee != m_pointee; } + + inline const QObject* operator->() const { return m_pointee; } + inline const QObject& operator*() const { return *m_pointee; } + +private: + void backtrack(); + +private: + const QObject* m_pointee; + QStack<int> m_history; +}; + +/** + * Ancestor iterator for QObject tree + */ +class OBJECTDUMP_EXPORT AncestorConstIterator +{ +public: + AncestorConstIterator(); + AncestorConstIterator(const QObject& root); + + inline AncestorConstIterator& operator++() + { m_ancestors.pop(); return *this; } + + inline bool operator==(const AncestorConstIterator& other) const + { return other.m_ancestors == m_ancestors; } + + inline bool operator!=(const AncestorConstIterator& other) const + { return other.m_ancestors != m_ancestors; } + + inline const QObject* operator->() const { return m_ancestors.top(); } + inline const QObject& operator*() const { return *m_ancestors.top(); } + +private: + QStack<const QObject*> m_ancestors; + +}; + +/** + * Generic algorithm for visiting nodes in an object tree. Nodes in the + * tree are visited in a const context, therefore they are not modified + * by this algorithm. + * + * Visitor must provide functions with the following signatures: + * + * Called before visit begins + * void visitPrepare() + * + * Called on each node visited + * void visitNode(const QObject& object) + * + * Called when visit is complete + * void visitComplete() + */ +template <class Iterator, class Visitor> +void visit(Iterator begin, Iterator end, Visitor& visitor) +{ + visitor.visitPrepare(); + + for( ; begin != end; ++begin) + visitor.visitNode(*begin); + + visitor.visitComplete(); +} + +} // namespace ObjectTree + +QT_END_NAMESPACE + +#endif // OBJECTTREE_H diff --git a/src/3rdparty/phonon/mmf/utils.cpp b/src/3rdparty/phonon/mmf/utils.cpp new file mode 100644 index 0000000..2956722 --- /dev/null +++ b/src/3rdparty/phonon/mmf/utils.cpp @@ -0,0 +1,142 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "utils.h" +#include <e32std.h> + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +_LIT(PanicCategory, "Phonon::MMF"); + +void MMF::Utils::panic(PanicCode code) +{ + User::Panic(PanicCategory, code); +} + + +static const TInt KMimePrefixLength = 6; // either "audio/" or "video/" +_LIT(KMimePrefixAudio, "audio/"); +_LIT(KMimePrefixVideo, "video/"); + +MMF::MediaType MMF::Utils::mimeTypeToMediaType(const TDesC& mimeType) +{ + MediaType result = MediaTypeUnknown; + + if (mimeType.Left(KMimePrefixLength).Compare(KMimePrefixAudio) == 0) { + result = MediaTypeAudio; + } else if (mimeType.Left(KMimePrefixLength).Compare(KMimePrefixVideo) == 0) { + result = MediaTypeVideo; + } + + return result; +} + + +#ifdef _DEBUG + +#include <hal.h> +#include <hal_data.h> +#include <gdi.h> +#include <eikenv.h> + +struct TScreenInfo +{ + int width; + int height; + int bpp; + const char* address; + int initialOffset; + int lineOffset; + TDisplayMode displayMode; +}; + +static void getScreenInfoL(TScreenInfo& info) +{ + info.displayMode = CEikonEnv::Static()->ScreenDevice()->DisplayMode(); + + // Then we must set these as the input parameter + info.width = info.displayMode; + info.height = info.displayMode; + info.initialOffset = info.displayMode; + info.lineOffset = info.displayMode; + info.bpp = info.displayMode; + + User::LeaveIfError( HAL::Get(HALData::EDisplayXPixels, info.width) ); + User::LeaveIfError( HAL::Get(HALData::EDisplayYPixels, info.width) ); + + int address; + User::LeaveIfError( HAL::Get(HALData::EDisplayMemoryAddress, address) ); + info.address = reinterpret_cast<const char*>(address); + + User::LeaveIfError( HAL::Get(HALData::EDisplayOffsetToFirstPixel, info.initialOffset) ); + + User::LeaveIfError( HAL::Get(HALData::EDisplayOffsetBetweenLines, info.lineOffset) ); + + User::LeaveIfError( HAL::Get(HALData::EDisplayBitsPerPixel, info.bpp) ); +} + + +QColor MMF::Utils::getScreenPixel(const QPoint& pos) +{ + TScreenInfo info; + TRAPD(err, getScreenInfoL(info)); + QColor pixel; + if(err == KErrNone and pos.x() < info.width and pos.y() < info.height) + { + const int bytesPerPixel = info.bpp / 8; + Q_ASSERT(bytesPerPixel >= 3); + + const int stride = (info.width * bytesPerPixel) + info.lineOffset; + + const char* ptr = + info.address + + info.initialOffset + + pos.y() * stride + + pos.x() * bytesPerPixel; + + // BGRA + pixel.setBlue(*ptr++); + pixel.setGreen(*ptr++); + pixel.setRed(*ptr++); + + if(bytesPerPixel == 4) + pixel.setAlpha(*ptr++); + } + return pixel; +} + +// Debugging: for debugging video visibility +void MMF::Utils::dumpScreenPixelSample() +{ + for(int i=0; i<20; ++i) { + const QPoint pos(i*10, i*10); + const QColor pixel = Utils::getScreenPixel(pos); + RDebug::Printf( + "Phonon::MMF::Utils::dumpScreenPixelSample %d %d = %d %d %d %d", + pos.x(), pos.y(), pixel.red(), pixel.green(), pixel.blue(), pixel.alpha() + ); + } +} + +#endif // _DEBUG + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/utils.h b/src/3rdparty/phonon/mmf/utils.h new file mode 100644 index 0000000..38964d0 --- /dev/null +++ b/src/3rdparty/phonon/mmf/utils.h @@ -0,0 +1,167 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_UTILS_H +#define PHONON_MMF_UTILS_H + +#include <private/qcore_symbian_p.h> +#include <e32debug.h> // for RDebug + +#include <QColor> + +#include "defs.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +/** + * Panic codes for fatal errors + */ +enum PanicCode { + InvalidStatePanic = 1, + InvalidMediaTypePanic = 2, + InvalidBackendInterfaceClass = 3 +}; + +namespace Utils +{ +/** + * Raise a fatal exception + */ +void panic(PanicCode code); + +/** + * Determines whether the provided MIME type is an audio or video + * type. If it is neither, the function returns MediaTypeUnknown. + */ +MediaType mimeTypeToMediaType(const TDesC& mimeType); + +#ifdef _DEBUG +/** + * Retrieve color of specified pixel from the screen. + */ +QColor getScreenPixel(const QPoint& pos); + +/** + * Samples a small number of pixels from the screen, and dumps their + * colors to the debug log. + */ +void dumpScreenPixelSample(); +#endif +} + +/** + * Available trace categories; + */ +enum TTraceCategory { + /** + * Backend + */ + EBackend = 0x00000001, + + /** + * Functions which map directly to the public Phonon audio API + */ + EAudioApi = 0x00000010, + + /** + * Internal functions in the audio implementation + */ + EAudioInternal = 0x00000020, + + /** + * Functions which map directly to the public Phonon video API + */ + EVideoApi = 0x00010000, + + /** + * Internal functions in the video implementation + */ + EVideoInternal = 0x00020000 +}; + +/** + * Mask indicating which trace categories are enabled + * + * Note that, at the moment, this is a compiled static constant. For + * runtime control over enabled trace categories, this could be replaced + * by a per-thread singleton object which owns the trace mask, and which + * exposes an API allowing it to be modified. + */ +static const TUint KTraceMask = 0xffffffff; + +/** + * Data structure used by tracing macros + */ +class TTraceContext +{ +public: + TTraceContext(const TText* aFunction, const TUint aAddr, + const TUint aCategory = 0) + : iFunction(aFunction), + iAddr(aAddr), + iCategory(aCategory) { } + + /** + * Check whether iCategory appears in the trace mask + */ + TBool Enabled() const { + return (iCategory == 0) or(iCategory & KTraceMask); + } + + const TText* iFunction; // Name of function + const TUint iAddr; // 'this' pointer + const TUint iCategory; +}; + +// Macros used internally by the trace system +#define _TRACE_PRINT RDebug::Print +#define _TRACE_TEXT(x) (TPtrC((const TText *)(x))) +#define _TRACE_MODULE Phonon::MMF + +// Macros available for use by implementation code +#ifdef _DEBUG +#define TRACE_CONTEXT(_fn, _cat) const ::Phonon::MMF::TTraceContext _tc((TText*)L ## #_fn, (TUint)this, _cat); +#define TRACE_ENTRY_0() { if(_tc.Enabled()) _TRACE_PRINT(_TRACE_TEXT(L ## "+ Phonon::MMF::%s [0x%08x]"), _tc.iFunction, _tc.iAddr); } +#define TRACE_ENTRY(string, args...) { if(_tc.Enabled()) _TRACE_PRINT(_TRACE_TEXT(L ## "+ Phonon::MMF::%s [0x%08x] " L ## string), _tc.iFunction, _tc.iAddr, args); } +#define TRACE_EXIT_0() { if(_tc.Enabled()) _TRACE_PRINT(_TRACE_TEXT(L ## "- Phonon::MMF::%s [0x%08x]"), _tc.iFunction, _tc.iAddr); } +#define TRACE_EXIT(string, args...) { if(_tc.Enabled()) _TRACE_PRINT(_TRACE_TEXT(L ## "- Phonon::MMF::%s [0x%08x] " L ## string), _tc.iFunction, _tc.iAddr, args); } +#define TRACE_RETURN(string, result) { if(_tc.Enabled()) _TRACE_PRINT(_TRACE_TEXT(L ## "r Phonon::MMF::%s [0x%08x] " L ## string), _tc.iFunction, _tc.iAddr, result); } return result; +#define TRACE_PANIC(code) { _TRACE_PRINT(_TRACE_TEXT(L ## "! Phonon::MMF::%s [0x%08x] panic %d"), _tc.iFunction, _tc.iAddr, code); } Utils::panic(code); +#define TRACE_0(string) { if(_tc.Enabled()) _TRACE_PRINT(_TRACE_TEXT(L ## " Phonon::MMF::%s [0x%08x] " L ## string), _tc.iFunction, _tc.iAddr); } +#define TRACE(string, args...) { if(_tc.Enabled()) _TRACE_PRINT(_TRACE_TEXT(L ## " Phonon::MMF::%s [0x%08x] " L ## string), _tc.iFunction, _tc.iAddr, args); } +#else +#define TRACE_CONTEXT(_fn, _cat) +#define TRACE_ENTRY_0() +#define TRACE_ENTRY(string, args...) +#define TRACE_EXIT_0() +#define TRACE_EXIT(string, args...) +#define TRACE_RETURN(string, result) return result; +#define TRACE_PANIC(code) Utils::panic(code); +#define TRACE_0(string) +#define TRACE(string, args...) +#endif +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/videooutput.cpp b/src/3rdparty/phonon/mmf/videooutput.cpp new file mode 100644 index 0000000..e51fbcf --- /dev/null +++ b/src/3rdparty/phonon/mmf/videooutput.cpp @@ -0,0 +1,173 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "utils.h" +#include "videooutput.h" +#include "videooutputobserver.h" + +#ifdef _DEBUG +#include "objectdump.h" +#endif + +#include <QPaintEvent> +#include <QPainter> +#include <QMoveEvent> +#include <QResizeEvent> + +#include <QtGui/private/qwidget_p.h> // to access QWExtra + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +//----------------------------------------------------------------------------- +// Constructor / destructor +//----------------------------------------------------------------------------- + +MMF::VideoOutput::VideoOutput(QWidget* parent) + : QWidget(parent) + , m_observer(0) +{ + TRACE_CONTEXT(VideoOutput::VideoOutput, EVideoInternal); + TRACE_ENTRY("parent 0x%08x", parent); + + setPalette(QPalette(Qt::black)); + setAttribute(Qt::WA_OpaquePaintEvent, true); + setAttribute(Qt::WA_NoSystemBackground, true); + setAutoFillBackground(false); + + // Causes QSymbianControl::Draw not to BitBlt this widget's region of the + // backing store. Since the backing store is (by default) a 16MU bitmap, + // blitting it results in this widget's screen region in the final + // framebuffer having opaque alpha values. This in turn causes the video + // to be invisible when running on the target device. + qt_widget_private(this)->extraData()->disableBlit = true; + + dump(); + + TRACE_EXIT_0(); +} + +MMF::VideoOutput::~VideoOutput() +{ + TRACE_CONTEXT(VideoOutput::~VideoOutput, EVideoInternal); + TRACE_ENTRY_0(); + + TRACE_EXIT_0(); +} + +void MMF::VideoOutput::setFrameSize(const QSize& frameSize) +{ + TRACE_CONTEXT(VideoOutput::setFrameSize, EVideoInternal); + TRACE("oldSize %d %d newSize %d %d", + m_frameSize.width(), m_frameSize.height(), + frameSize.width(), frameSize.height()); + + if (frameSize != m_frameSize) { + m_frameSize = frameSize; + updateGeometry(); + } +} + +void MMF::VideoOutput::setObserver(VideoOutputObserver* observer) +{ + TRACE_CONTEXT(VideoOutput::setObserver, EVideoInternal); + TRACE("observer 0x%08x", observer); + + m_observer = observer; +} + + +//----------------------------------------------------------------------------- +// QWidget +//----------------------------------------------------------------------------- + +QSize MMF::VideoOutput::sizeHint() const +{ + // TODO: replace this with a more sensible default + QSize result(320, 240); + + if (!m_frameSize.isNull()) { + result = m_frameSize; + } + + return result; +} + +void MMF::VideoOutput::paintEvent(QPaintEvent* event) +{ + TRACE_CONTEXT(VideoOutput::paintEvent, EVideoInternal); + 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("type %d", event->type()); + + dump(); + + // Do not paint anything +} + +void MMF::VideoOutput::resizeEvent(QResizeEvent* event) +{ + TRACE_CONTEXT(VideoOutput::resizeEvent, EVideoInternal); + TRACE("%d %d -> %d %d", + event->oldSize().width(), event->oldSize().height(), + event->size().width(), event->size().height()); + + QWidget::resizeEvent(event); + + if (m_observer) + m_observer->videoOutputRegionChanged(); +} + +void MMF::VideoOutput::moveEvent(QMoveEvent* event) +{ + TRACE_CONTEXT(VideoOutput::moveEvent, EVideoInternal); + TRACE("%d %d -> %d %d", + event->oldPos().x(), event->oldPos().y(), + event->pos().x(), event->pos().y()); + + QWidget::moveEvent(event); + + if (m_observer) + m_observer->videoOutputRegionChanged(); +} + + +//----------------------------------------------------------------------------- +// Private functions +//----------------------------------------------------------------------------- + +void VideoOutput::dump() const +{ +#ifdef _DEBUG + TRACE_CONTEXT(VideoOutput::dump, EVideoInternal); + QScopedPointer<ObjectDump::QVisitor> visitor(new ObjectDump::QVisitor); + visitor->setPrefix("Phonon::MMF"); // to aid searchability of logs + ObjectDump::addDefaultAnnotators(*visitor); + TRACE("Dumping tree from leaf 0x%08x:", this); + //ObjectDump::dumpAncestors(*this, *visitor); + ObjectDump::dumpTreeFromLeaf(*this, *visitor); +#endif +} + + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/videooutput.h b/src/3rdparty/phonon/mmf/videooutput.h new file mode 100644 index 0000000..639a5ed --- /dev/null +++ b/src/3rdparty/phonon/mmf/videooutput.h @@ -0,0 +1,67 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_VIDEOOUTPUT_H +#define PHONON_MMF_VIDEOOUTPUT_H + +#include <QtGui/QWidget> +#include <QVector> +#include <QRect> +#include "defs.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +class VideoOutputObserver; + +class VideoOutput : public QWidget +{ + Q_OBJECT + +public: + explicit VideoOutput(QWidget* parent); + ~VideoOutput(); + + void setFrameSize(const QSize& size); + void setObserver(VideoOutputObserver* observer); + +protected: + // Override QWidget functions + QSize sizeHint() const; + void paintEvent(QPaintEvent* event); + void resizeEvent(QResizeEvent* event); + void moveEvent(QMoveEvent* event); + +private: + void dump() const; + +private: + QSize m_frameSize; + + // Not owned + VideoOutputObserver* m_observer; +}; +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/videooutputobserver.h b/src/3rdparty/phonon/mmf/videooutputobserver.h new file mode 100644 index 0000000..e3ba305 --- /dev/null +++ b/src/3rdparty/phonon/mmf/videooutputobserver.h @@ -0,0 +1,44 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_VIDEOOUTPUTOBSERVER_H +#define PHONON_MMF_VIDEOOUTPUTOBSERVER_H + +#include <QtGlobal> + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +/** + * Interface via which VideoOutput notifies VideoPlayer of changes to the + * video output screen region. + */ +class VideoOutputObserver +{ +public: + virtual void videoOutputRegionChanged() = 0; +}; +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/videowidget.cpp b/src/3rdparty/phonon/mmf/videowidget.cpp new file mode 100644 index 0000000..ac93929 --- /dev/null +++ b/src/3rdparty/phonon/mmf/videowidget.cpp @@ -0,0 +1,173 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "mediaobject.h" +#include "utils.h" +#include "videooutput.h" + +#include "videowidget.h" + +QT_BEGIN_NAMESPACE + +using namespace Phonon; +using namespace Phonon::MMF; + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- + +static const Phonon::VideoWidget::AspectRatio DefaultAspectRatio = + Phonon::VideoWidget::AspectRatioAuto; +static const qreal DefaultBrightness = 1.0; +static const Phonon::VideoWidget::ScaleMode DefaultScaleMode = + Phonon::VideoWidget::FitInView; +static const qreal DefaultContrast = 1.0; +static const qreal DefaultHue = 1.0; +static const qreal DefaultSaturation = 1.0; + + +//----------------------------------------------------------------------------- +// Constructor / destructor +//----------------------------------------------------------------------------- + +MMF::VideoWidget::VideoWidget(QWidget* parent) + : MediaNode(parent) + , m_widget(new VideoOutput(parent)) + , m_aspectRatio(DefaultAspectRatio) + , m_brightness(DefaultBrightness) + , m_scaleMode(DefaultScaleMode) + , m_contrast(DefaultContrast) + , m_hue(DefaultHue) + , m_saturation(DefaultSaturation) +{ + TRACE_CONTEXT(VideoWidget::VideoWidget, EVideoApi); + TRACE_ENTRY_0(); + + TRACE_EXIT_0(); +} + +MMF::VideoWidget::~VideoWidget() +{ + TRACE_CONTEXT(VideoWidget::~VideoWidget, EVideoApi); + TRACE_ENTRY_0(); + + TRACE_EXIT_0(); +} + + +//----------------------------------------------------------------------------- +// VideoWidgetInterface +//----------------------------------------------------------------------------- + +Phonon::VideoWidget::AspectRatio MMF::VideoWidget::aspectRatio() const +{ + return m_aspectRatio; +} + +void MMF::VideoWidget::setAspectRatio +(Phonon::VideoWidget::AspectRatio aspectRatio) +{ + TRACE_CONTEXT(VideoWidget::setAspectRatio, EVideoApi); + TRACE("aspectRatio %d", aspectRatio); + + m_aspectRatio = aspectRatio; +} + +qreal MMF::VideoWidget::brightness() const +{ + return m_brightness; +} + +void MMF::VideoWidget::setBrightness(qreal brightness) +{ + TRACE_CONTEXT(VideoWidget::setBrightness, EVideoApi); + TRACE("brightness %f", brightness); + + m_brightness = brightness; +} + +Phonon::VideoWidget::ScaleMode MMF::VideoWidget::scaleMode() const +{ + return m_scaleMode; +} + +void MMF::VideoWidget::setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode) +{ + TRACE_CONTEXT(VideoWidget::setScaleMode, EVideoApi); + TRACE("setScaleMode %d", setScaleMode); + + m_scaleMode = scaleMode; +} + +qreal MMF::VideoWidget::contrast() const +{ + return m_contrast; +} + +void MMF::VideoWidget::setContrast(qreal contrast) +{ + TRACE_CONTEXT(VideoWidget::setContrast, EVideoApi); + TRACE("contrast %f", contrast); + + m_contrast = contrast; +} + +qreal MMF::VideoWidget::hue() const +{ + return m_hue; +} + +void MMF::VideoWidget::setHue(qreal hue) +{ + TRACE_CONTEXT(VideoWidget::setHue, EVideoApi); + TRACE("hue %f", hue); + + m_hue = hue; +} + +qreal MMF::VideoWidget::saturation() const +{ + return m_saturation; +} + +void MMF::VideoWidget::setSaturation(qreal saturation) +{ + TRACE_CONTEXT(VideoWidget::setSaturation, EVideoApi); + TRACE("saturation %f", saturation); + + m_saturation = saturation; +} + +QWidget* MMF::VideoWidget::widget() +{ + return m_widget.data(); +} + +VideoOutput& MMF::VideoWidget::videoOutput() +{ + return *static_cast<VideoOutput*>(widget()); +} + +bool MMF::VideoWidget::activateOnMediaObject(MediaObject *mo) +{ + mo->setVideoOutput(&videoOutput()); + return true; +} + +QT_END_NAMESPACE + diff --git a/src/3rdparty/phonon/mmf/videowidget.h b/src/3rdparty/phonon/mmf/videowidget.h new file mode 100644 index 0000000..970f749 --- /dev/null +++ b/src/3rdparty/phonon/mmf/videowidget.h @@ -0,0 +1,82 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_VIDEOWIDGET_H +#define PHONON_MMF_VIDEOWIDGET_H + +#include "mmf_medianode.h" + +#include <QtGui/QWidget> +#include <Phonon/VideoWidget> +#include <Phonon/VideoWidgetInterface> + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +class VideoOutput; + +class VideoWidget : public MediaNode + , public Phonon::VideoWidgetInterface +{ + Q_OBJECT + Q_INTERFACES(Phonon::VideoWidgetInterface) + +public: + VideoWidget(QWidget* parent); + ~VideoWidget(); + + // VideoWidgetInterface + virtual Phonon::VideoWidget::AspectRatio aspectRatio() const; + virtual void setAspectRatio(Phonon::VideoWidget::AspectRatio aspectRatio); + virtual qreal brightness() const; + virtual void setBrightness(qreal brightness); + virtual Phonon::VideoWidget::ScaleMode scaleMode() const; + virtual void setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode); + virtual qreal contrast() const; + virtual void setContrast(qreal constrast); + virtual qreal hue() const; + virtual void setHue(qreal hue); + virtual qreal saturation() const; + virtual void setSaturation(qreal saturation); + virtual QWidget *widget(); + + VideoOutput& videoOutput(); + +protected: + virtual bool activateOnMediaObject(MediaObject *mo); + +private: + QScopedPointer<QWidget> m_widget; + + Phonon::VideoWidget::AspectRatio m_aspectRatio; + qreal m_brightness; + Phonon::VideoWidget::ScaleMode m_scaleMode; + qreal m_contrast; + qreal m_hue; + qreal m_saturation; + +}; +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/mmf/volumeobserver.h b/src/3rdparty/phonon/mmf/volumeobserver.h new file mode 100644 index 0000000..bedd3de --- /dev/null +++ b/src/3rdparty/phonon/mmf/volumeobserver.h @@ -0,0 +1,44 @@ +/* This file is part of the KDE project. + +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + +This library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 or 3 of the License. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this library. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef PHONON_MMF_VOLUMEOBSERVER_H +#define PHONON_MMF_VOLUMEOBSERVER_H + +#include <QtGlobal> + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace MMF +{ +/** + * Interface used by AudioOutput to pass volume control commands + * back along the audio path to the MediaObject. + */ +class VolumeObserver +{ +public: + virtual void volumeChanged(qreal volume) = 0; +}; +} +} + +QT_END_NAMESPACE + +#endif diff --git a/src/3rdparty/phonon/phonon/factory.cpp b/src/3rdparty/phonon/phonon/factory.cpp index fef88f0..5c3752a 100644 --- a/src/3rdparty/phonon/phonon/factory.cpp +++ b/src/3rdparty/phonon/phonon/factory.cpp @@ -133,9 +133,30 @@ bool FactoryPrivate::createBackend() continue; } - const QStringList files = dir.entryList(QDir::Files); - for (int i = 0; i < files.count(); ++i) { - QPluginLoader pluginLoader(libPath + files.at(i)); + QStringList plugins(dir.entryList(QDir::Files)); + +#ifdef Q_OS_SYMBIAN + /* On Symbian OS we might have two plugins, one which uses Symbian + * MMF framework("phonon_mmf"), and one which uses Real Networks's + * Helix("hxphonon"). We prefer the latter because it's more + * sophisticated, so we make sure the Helix backend is attempted + * to be loaded first, and the MMF backend is used for backup. */ + { + + const int hxphonon = plugins.indexOf(QLatin1String("hxphonon")); + if (hxphonon != -1) + plugins.move(hxphonon, 0); + + // Code for debugging the MMF backend. + if(hxphonon != -1) { + qDebug() << "Found hxphonon backend and removed it from the lookup list."; + plugins.removeAll(QLatin1String("hxphonon")); + } + } +#endif + + for (int i = 0; i < plugins.count(); ++i) { + QPluginLoader pluginLoader(libPath + plugins.at(i)); if (!pluginLoader.load()) { pDebug() << Q_FUNC_INFO << " load failed:" << pluginLoader.errorString(); diff --git a/src/3rdparty/phonon/phonon/path.cpp b/src/3rdparty/phonon/phonon/path.cpp index aec8d05..ef3530c 100644 --- a/src/3rdparty/phonon/phonon/path.cpp +++ b/src/3rdparty/phonon/phonon/path.cpp @@ -310,8 +310,8 @@ bool PathPrivate::executeTransaction( const QList<QObjectPair> &disconnections, if (!transaction) return false; - QList<QObjectPair>::const_iterator it = disconnections.begin(); - for(;it != disconnections.end();++it) { + QList<QObjectPair>::const_iterator it = disconnections.constBegin(); + for(;it != disconnections.constEnd();++it) { const QObjectPair &pair = *it; if (!backend->disconnectNodes(pair.first, pair.second)) { @@ -327,8 +327,8 @@ bool PathPrivate::executeTransaction( const QList<QObjectPair> &disconnections, } } - for(it = connections.begin(); it != connections.end();++it) { - const QObjectPair &pair = *it; + for(it = connections.constBegin(); it != connections.constEnd(); ++it) { + const QObjectPair pair = *it; if (!backend->connectNodes(pair.first, pair.second)) { //Error: a connection failed QList<QObjectPair>::const_iterator it2 = connections.begin(); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.h b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.h index 1a55bb5..0ecff19 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.h @@ -181,7 +181,7 @@ namespace JSC { #endif template<> struct CellSize<sizeof(uint64_t)> { static const size_t m_value = 64; }; -#if PLATFORM(WINCE) +#if PLATFORM(WINCE) || PLATFORM(SYMBIAN) const size_t BLOCK_SIZE = 64 * 1024; // 64k #else const size_t BLOCK_SIZE = 64 * 4096; // 256k diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 741c06f..473398b 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1627,6 +1627,11 @@ public: NavigationModeCursorAuto, NavigationModeCursorForceVisible }; + + enum RenderHint { + QualityHint, + PerformanceHint + }; } #ifdef Q_MOC_RUN ; diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index 40dd1d2..684ebca 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -2776,6 +2776,19 @@ */ /*! + \enum Qt::CoordinateSystem + \since 4.6 + + This enum specifies the coordinate system. + + \value DeviceCoordinates Coordinates are relative to the upper-left corner + of the object's paint device. + + \value LogicalCoordinates Coordinates are relative to the upper-left corner + of the object. +*/ + +/*! \enum Qt::GestureState \since 4.6 @@ -2814,3 +2827,18 @@ \sa QApplication::setNavigationMode() \sa QApplication::navigationMode() */ + +/*! + \enum Qt::RenderHint + \since 4.6 + + This enum describes the possible hints that can be used to control various + rendering operations. + + \value QualityHint Indicates that rendering quality is the most important factor, + at the potential cost of lower performance. + + \value PerformanceHint Indicates that rendering performance is the most important factor, + at the potential cost of lower quality. +*/ + diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri index e58e4ad..02a1586 100644 --- a/src/corelib/io/io.pri +++ b/src/corelib/io/io.pri @@ -5,6 +5,7 @@ HEADERS += \ io/qabstractfileengine_p.h \ io/qbuffer.h \ io/qdatastream.h \ + io/qdatastream_p.h \ io/qdebug.h \ io/qdir.h \ io/qdiriterator.h \ @@ -89,6 +90,7 @@ win32 { symbian { SOURCES += io/qfilesystemwatcher_symbian.cpp HEADERS += io/qfilesystemwatcher_symbian_p.h + INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE contains(QT_CONFIG, s60): LIBS += -lplatformenv } } diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index 9339b8e..cc62201 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qdatastream.h" +#include "qdatastream_p.h" #ifndef QT_NO_DATASTREAM #include "qbuffer.h" @@ -193,6 +194,21 @@ QT_BEGIN_NAMESPACE */ /*! + \enum QDataStream::FloatingPointPrecision + + The precision of floating point numbers used for reading/writing the data. This will only have + an effect if the version of the data stream is Qt_4_6 or higher. + + \warning The floating point precision must be set to the same value on the object that writes + and the object that reads the data stream. + + \value SinglePrecision All floating point numbers in the data stream have 32-bit precision. + \value DoublePrecision All floating point numbers in the data stream have 64-bit precision. + + \sa setFloatingPointPrecision(), floatingPointPrecision() +*/ + +/*! \enum QDataStream::Status This enum describes the current status of the data stream. @@ -222,7 +238,7 @@ QT_BEGIN_NAMESPACE #endif enum { - DefaultStreamVersion = QDataStream::Qt_4_5 + DefaultStreamVersion = QDataStream::Qt_4_6 }; // ### 5.0: when streaming invalid QVariants, just the type should @@ -414,6 +430,42 @@ bool QDataStream::atEnd() const } /*! + Returns the floating point precision of the data stream. + + \since 4.6 + + \sa FloatingPointPrecision setFloatingPointPrecision() +*/ +QDataStream::FloatingPointPrecision QDataStream::floatingPointPrecision() const +{ + return d == 0 ? QDataStream::DoublePrecision : d->floatingPointPrecision; +} + +/*! + Sets the floating point precision of the data stream. If the floating point precision is + DoublePrecision and the version of the data stream is Qt_4_6 or higher, all floating point + numbers will be written and read with 64-bit precision. If the floating point precision is + SinglePrecision and the version is Qt_4_6 or higher, all floating point numbers will be written + and read with 32-bit precision. + + For versions prior to Qt_4_6, the precision of floating point numbers in the data stream depends + on the stream operator called. + + The default is DoublePrecision. + + \warning This property must be set to the same value on the object that writes and the object + that reads the data stream. + + \since 4.6 +*/ +void QDataStream::setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision) +{ + if (d == 0) + d.reset(new QDataStreamPrivate()); + d->floatingPointPrecision = precision; +} + +/*! Returns the status of the data stream. \sa Status setStatus() resetStatus() @@ -517,7 +569,7 @@ void QDataStream::setByteOrder(ByteOrder bo) \value Qt_4_3 Version 9 (Qt 4.3) \value Qt_4_4 Version 10 (Qt 4.4) \value Qt_4_5 Version 11 (Qt 4.5) - \omitvalue Qt_4_6 + \value Qt_4_6 Version 12 (Qt 4.6) \sa setVersion(), version() */ @@ -754,13 +806,23 @@ QDataStream &QDataStream::operator>>(bool &i) /*! \overload - Reads a 32-bit floating point number from the stream into \a f, + Reads a floating point number from the stream into \a f, using the standard IEEE 754 format. Returns a reference to the stream. + + \sa setFloatingPointPrecision() */ QDataStream &QDataStream::operator>>(float &f) -{ +{ + if (version() >= QDataStream::Qt_4_6 + && floatingPointPrecision() == QDataStream::DoublePrecision) { + double d; + *this >> d; + f = d; + return *this; + } + f = 0.0f; CHECK_STREAM_PRECOND(*this) if (noswap) { @@ -796,13 +858,23 @@ QDataStream &QDataStream::operator>>(float &f) /*! \overload - Reads a 64-bit floating point number from the stream into \a f, + Reads a floating point number from the stream into \a f, using the standard IEEE 754 format. Returns a reference to the stream. + + \sa setFloatingPointPrecision() */ QDataStream &QDataStream::operator>>(double &f) { + if (version() >= QDataStream::Qt_4_6 + && floatingPointPrecision() == QDataStream::SinglePrecision) { + float d; + *this >> d; + f = d; + return *this; + } + f = 0.0; CHECK_STREAM_PRECOND(*this) #ifndef Q_DOUBLE_FORMAT @@ -1115,12 +1187,20 @@ QDataStream &QDataStream::operator<<(bool i) /*! \overload - Writes a 32-bit floating point number, \a f, to the stream using + Writes a floating point number, \a f, to the stream using the standard IEEE 754 format. Returns a reference to the stream. + + \sa setFloatingPointPrecision() */ QDataStream &QDataStream::operator<<(float f) { + if (version() >= QDataStream::Qt_4_6 + && floatingPointPrecision() == QDataStream::DoublePrecision) { + *this << double(f); + return *this; + } + CHECK_STREAM_PRECOND(*this) float g = f; // fixes float-on-stack problem if (noswap) { // no conversion needed @@ -1146,12 +1226,20 @@ QDataStream &QDataStream::operator<<(float f) /*! \overload - Writes a 64-bit floating point number, \a f, to the stream using + Writes a floating point number, \a f, to the stream using the standard IEEE 754 format. Returns a reference to the stream. + + \sa setFloatingPointPrecision() */ QDataStream &QDataStream::operator<<(double f) { + if (version() >= QDataStream::Qt_4_6 + && floatingPointPrecision() == QDataStream::SinglePrecision) { + *this << float(f); + return *this; + } + CHECK_STREAM_PRECOND(*this) #ifndef Q_DOUBLE_FORMAT if (noswap) { diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h index 7a930c4..f8e0608 100644 --- a/src/corelib/io/qdatastream.h +++ b/src/corelib/io/qdatastream.h @@ -42,6 +42,7 @@ #ifndef QDATASTREAM_H #define QDATASTREAM_H +#include <QtCore/qscopedpointer.h> #include <QtCore/qiodevice.h> #include <QtCore/qglobal.h> @@ -83,7 +84,7 @@ public: Qt_4_3 = 9, Qt_4_4 = 10, Qt_4_5 = 11, - Qt_4_6 = Qt_4_5, + Qt_4_6 = 12, Qt_4_7 = Qt_4_6 #if QT_VERSION >= 0x040800 #error Add the datastream version for this Qt version @@ -102,6 +103,11 @@ public: ReadCorruptData }; + enum FloatingPointPrecision { + SinglePrecision, + DoublePrecision + }; + QDataStream(); explicit QDataStream(QIODevice *); #ifdef QT3_SUPPORT @@ -124,6 +130,9 @@ public: void setStatus(Status status); void resetStatus(); + FloatingPointPrecision floatingPointPrecision() const; + void setFloatingPointPrecision(FloatingPointPrecision precision); + ByteOrder byteOrder() const; void setByteOrder(ByteOrder); @@ -177,7 +186,7 @@ public: private: Q_DISABLE_COPY(QDataStream) - QDataStreamPrivate *d; + QScopedPointer<QDataStreamPrivate> d; QIODevice *dev; bool owndev; diff --git a/src/corelib/io/qdatastream_p.h b/src/corelib/io/qdatastream_p.h new file mode 100644 index 0000000..157fee9 --- /dev/null +++ b/src/corelib/io/qdatastream_p.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** 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 QtCore module 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$ +** +****************************************************************************/ + +#ifndef QDATASTREAM_P_H +#define QDATASTREAM_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <qdatastream.h> + +QT_BEGIN_NAMESPACE + +#ifndef QT_NO_DATASTREAM +class QDataStreamPrivate +{ +public: + QDataStreamPrivate() : floatingPointPrecision(QDataStream::DoublePrecision) { } + + QDataStream::FloatingPointPrecision floatingPointPrecision; +}; +#endif + +QT_END_NAMESPACE + +#endif // QDATASTREAM_P_H diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index 4ec5772..114da3b 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -595,7 +595,7 @@ QString QFSFileEngine::rootPath() return QDir::cleanPath(QDir::fromNativeSeparators(qt_TDesC2QString(symbianPath))); # else # warning No fallback implementation of QFSFileEngine::rootPath() - return QLatin1String(); + return QString(); # endif #else return QLatin1String("/"); @@ -614,7 +614,7 @@ QString QFSFileEngine::tempPath() QT_MKDIR(QFile::encodeName(temp), 0777); # else # warning No fallback implementation of QFSFileEngine::tempPath() - return QString(); + QString temp; # endif #else QString temp = QFile::decodeName(qgetenv("TMPDIR")); diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index 5931267..594718e 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -241,6 +241,7 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384; #include "private/qlocale_p.h" #include <stdlib.h> +#include <limits.h> #include <new> #if defined QTEXTSTREAM_DEBUG @@ -375,10 +376,10 @@ public: enum TokenDelimiter { Space, NotSpace, - EndOfLine, - EndOfFile + EndOfLine }; + QString read(int maxlen); bool scan(const QChar **ptr, int *tokenLength, int maxlen, TokenDelimiter delimiter); inline const QChar *readPtr() const; @@ -704,6 +705,25 @@ bool QTextStreamPrivate::flushWriteBuffer() return flushed && bytesWritten == qint64(data.size()); } +QString QTextStreamPrivate::read(int maxlen) +{ + QString ret; + if (string) { + lastTokenSize = qMin(maxlen, string->size() - stringOffset); + ret = string->mid(stringOffset, lastTokenSize); + } else { + while (readBuffer.size() - readBufferOffset < maxlen && fillReadBuffer()) ; + lastTokenSize = qMin(maxlen, readBuffer.size() - readBufferOffset); + ret = readBuffer.mid(readBufferOffset, lastTokenSize); + } + consumeLastToken(); + +#if defined (QTEXTSTREAM_DEBUG) + qDebug("QTextStreamPrivate::read() maxlen = %d, token length = %d", maxlen, ret.length()); +#endif + return ret; +} + /*! \internal Scans no more than \a maxlen QChars in the current buffer for the @@ -736,19 +756,28 @@ bool QTextStreamPrivate::scan(const QChar **ptr, int *length, int maxlen, TokenD const QChar ch = *chPtr++; ++totalSize; - if (delimiter == Space && ch.isSpace()) { - foundToken = true; - delimSize = 1; - } else if (delimiter == NotSpace && !ch.isSpace()) { - foundToken = true; - delimSize = 1; - } else if (delimiter == EndOfLine && ch == QLatin1Char('\n')) { - foundToken = true; - delimSize = (lastChar == QLatin1Char('\r')) ? 2 : 1; - consumeDelimiter = true; + switch (delimiter) { + case Space: + if (ch.isSpace()) { + foundToken = true; + delimSize = 1; + } + break; + case NotSpace: + if (!ch.isSpace()) { + foundToken = true; + delimSize = 1; + } + break; + case EndOfLine: + if (ch == QLatin1Char('\n')) { + foundToken = true; + delimSize = (lastChar == QLatin1Char('\r')) ? 2 : 1; + consumeDelimiter = true; + } + lastChar = ch; + break; } - - lastChar = ch; } } while (!foundToken && (!maxlen || totalSize < maxlen) @@ -769,7 +798,7 @@ bool QTextStreamPrivate::scan(const QChar **ptr, int *length, int maxlen, TokenD // if we find a '\r' at the end of the data when reading lines, // don't make it part of the line. - if (totalSize > 0 && !foundToken && delimiter == EndOfLine) { + if (delimiter == EndOfLine && totalSize > 0 && !foundToken) { if (((string && stringOffset + totalSize == string->size()) || (device && device->atEnd())) && lastChar == QLatin1Char('\r')) { consumeDelimiter = true; @@ -1603,14 +1632,7 @@ QString QTextStream::readAll() Q_D(QTextStream); CHECK_VALID_STREAM(QString()); - const QChar *readPtr; - int length; - if (!d->scan(&readPtr, &length, /* maxlen = */ 0, QTextStreamPrivate::EndOfFile)) - return QString(); - - QString tmp = QString(readPtr, length); - d->consumeLastToken(); - return tmp; + return d->read(INT_MAX); } /*! @@ -1662,14 +1684,7 @@ QString QTextStream::read(qint64 maxlen) if (maxlen <= 0) return QString::fromLatin1(""); // empty, not null - const QChar *readPtr; - int length; - if (!d->scan(&readPtr, &length, int(maxlen), QTextStreamPrivate::EndOfFile)) - return QString(); - - QString tmp = QString(readPtr, length); - d->consumeLastToken(); - return tmp; + return d->read(int(maxlen)); } /*! \internal diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index face923..c9a4cf1 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -172,6 +172,8 @@ #include "private/qunicodetables_p.h" #include "qatomic.h" #include "qbytearray.h" +#include "qdir.h" +#include "qfile.h" #include "qlist.h" #ifndef QT_NO_REGEXP #include "qregexp.h" @@ -5547,6 +5549,79 @@ QUrl QUrl::fromEncoded(const QByteArray &input, ParsingMode parsingMode) } /*! + Returns a valid URL from a user supplied \a userInput string if one can be + deducted. In the case that is not possible, an invalid QUrl() is returned. + + \since 4.6 + + Most applications that can browse the web, allow the user to input a URL + in the form of a plain string. This string can be manually typed into + a location bar, obtained from the clipboard, or passed in via command + line arguments. + + When the string is not already a valid URL, a best guess is performed, + making various web related assumptions. + + In the case the string corresponds to a valid file path on the system, + a file:// URL is constructed, using QUrl::fromLocalFile(). + + If that is not the case, an attempt is made to turn the string into a + http:// or ftp:// URL. The latter in the case the string starts with + 'ftp'. The result is then passed through QUrl's tolerant parser, and + in the case or success, a valid QUrl is returned, or else a QUrl(). + + \section1 Examples: + + \list + \o qt.nokia.com becomes http://qt.nokia.com + \o ftp.qt.nokia.com becomes ftp://ftp.qt.nokia.com + \o localhost becomes http://localhost + \o /home/user/test.html becomes file:///home/user/test.html (if exists) + \endlist + + \section2 Tips to avoid erroneous character conversion when dealing with + URLs and strings: + + \list + \o When creating an URL QString from a QByteArray or a char*, always use + QString::fromUtf8(). + \o Favor the use of QUrl::fromEncoded() and QUrl::toEncoded() instead of + QUrl(string) and QUrl::toString() when converting QUrl to/from string. + \endlist +*/ +QUrl QUrl::fromUserInput(const QString &userInput) +{ + QString trimmedString = userInput.trimmed(); + + // Absolute files + if (QDir::isAbsolutePath(trimmedString)) + return QUrl::fromLocalFile(trimmedString); + + // Check the most common case of a valid url with scheme and host first + QUrl url = QUrl::fromEncoded(trimmedString.toUtf8(), QUrl::TolerantMode); + if (url.isValid() && !url.scheme().isEmpty() && !url.host().isEmpty()) + return url; + + // If the string is missing the scheme or the scheme is not valid, prepend a scheme + QString scheme = url.scheme(); + if (scheme.isEmpty() || scheme.contains(QLatin1Char('.')) || scheme == QLatin1String("localhost")) { + // Do not do anything for strings such as "foo", only "foo.com" + int dotIndex = trimmedString.indexOf(QLatin1Char('.')); + if (dotIndex != -1 || trimmedString.startsWith(QLatin1String("localhost"))) { + const QString hostscheme = trimmedString.left(dotIndex).toLower(); + QByteArray scheme = (hostscheme == QLatin1String("ftp")) ? "ftp" : "http"; + trimmedString = QLatin1String(scheme) + QLatin1String("://") + trimmedString; + } + url = QUrl::fromEncoded(trimmedString.toUtf8(), QUrl::TolerantMode); + } + + if (url.isValid()) + return url; + + return QUrl(); +} + +/*! Returns a decoded copy of \a input. \a input is first decoded from percent encoding, then converted from UTF-8 to unicode. */ diff --git a/src/corelib/io/qurl.h b/src/corelib/io/qurl.h index b00074a..f76d345 100644 --- a/src/corelib/io/qurl.h +++ b/src/corelib/io/qurl.h @@ -189,6 +189,8 @@ public: static QUrl fromEncoded(const QByteArray &url, ParsingMode mode); // ### Qt 5: merge the two fromEncoded() functions, with mode = TolerantMode + static QUrl fromUserInput(const QString &userInput); + void detach(); bool isDetached() const; diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index 185c305..3bef0d4 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -270,7 +270,6 @@ QT_BEGIN_NAMESPACE \omitvalue NetworkReplyUpdated \omitvalue FutureCallOut \omitvalue CocoaRequestModal - \omitvalue SymbianDeferredFocusChanged \omitvalue UpdateSoftKeys \omitvalue NativeGesture */ diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h index bc96918..be25b41 100644 --- a/src/corelib/kernel/qcoreevent.h +++ b/src/corelib/kernel/qcoreevent.h @@ -281,9 +281,7 @@ public: RequestSoftwareInputPanel = 199, CloseSoftwareInputPanel = 200, - SymbianDeferredFocusChanged = 201, // Internal for generating asynchronous focus events on Symbian - - UpdateSoftKeys = 202, // Internal for compressing soft key updates + UpdateSoftKeys = 201, // Internal for compressing soft key updates // 512 reserved for Qt Jambi's MetaCall event // 513 reserved for Qt Jambi's DeleteOnMainThread event diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index 8d50870c..c7144e4 100644 --- a/src/corelib/statemachine/qstatemachine.cpp +++ b/src/corelib/statemachine/qstatemachine.cpp @@ -1265,11 +1265,13 @@ void QStateMachinePrivate::_q_process() break; case Finished: state = NotRunning; + cancelAllDelayedEvents(); unregisterAllTransitions(); emit q->finished(); break; case Stopped: state = NotRunning; + cancelAllDelayedEvents(); unregisterAllTransitions(); emit q->stopped(); break; @@ -1291,6 +1293,19 @@ void QStateMachinePrivate::processEvents(EventProcessingMode processingMode) } } +void QStateMachinePrivate::cancelAllDelayedEvents() +{ + Q_Q(QStateMachine); + QHash<int, QEvent*>::const_iterator it; + for (it = delayedEvents.constBegin(); it != delayedEvents.constEnd(); ++it) { + int id = it.key(); + QEvent *e = it.value(); + q->killTimer(id); + delete e; + } + delayedEvents.clear(); +} + namespace { class GoToStateTransition : public QAbstractTransition @@ -1587,6 +1602,18 @@ QStateMachine::~QStateMachine() { } +/*! + \enum QStateMachine::EventPriority + + This enum type specifies the priority of an event posted to the state + machine using postEvent(). + + Events of high priority are processed before events of normal priority. + + \value NormalPriority The event has normal priority. + \value HighPriority The event has high priority. +*/ + /*! \enum QStateMachine::Error This enum type defines errors that can occur in the state machine at run time. When the state @@ -1798,47 +1825,99 @@ void QStateMachine::stop() } /*! - Posts the given \a event for processing by this state machine, with a delay - of \a delay milliseconds. + Posts the given \a event of the given \a priority for processing by this + state machine. This function returns immediately. The event is added to the state machine's event queue. Events are processed in the order posted. The state machine takes ownership of the event and deletes it once it has been processed. You can only post events when the state machine is running. + + \sa postDelayedEvent() */ -void QStateMachine::postEvent(QEvent *event, int delay) +void QStateMachine::postEvent(QEvent *event, EventPriority priority) { Q_D(QStateMachine); if (d->state != QStateMachinePrivate::Running) { qWarning("QStateMachine::postEvent: cannot post event when the state machine is not running"); return; } + if (!event) { + qWarning("QStateMachine::postEvent: cannot post null event"); + return; + } #ifdef QSTATEMACHINE_DEBUG - qDebug() << this << ": posting external event" << event << "with delay" << delay; + qDebug() << this << ": posting event" << event; #endif - if (delay) { - int tid = startTimer(delay); - d->delayedEvents[tid] = event; - } else { + switch (priority) { + case NormalPriority: d->externalEventQueue.append(event); - d->processEvents(QStateMachinePrivate::QueuedProcessing); + break; + case HighPriority: + d->internalEventQueue.append(event); + break; } + d->processEvents(QStateMachinePrivate::QueuedProcessing); } /*! - \internal + Posts the given \a event for processing by this state machine, with the + given \a delay in milliseconds. Returns an identifier associated with the + delayed event, or -1 if the event could not be posted. - Posts the given internal \a event for processing by this state machine. + This function returns immediately. When the delay has expired, the event + will be added to the state machine's event queue for processing. The state + machine takes ownership of the event and deletes it once it has been + processed. + + You can only post events when the state machine is running. + + \sa cancelDelayedEvent(), postEvent() */ -void QStateMachine::postInternalEvent(QEvent *event) +int QStateMachine::postDelayedEvent(QEvent *event, int delay) { Q_D(QStateMachine); + if (d->state != QStateMachinePrivate::Running) { + qWarning("QStateMachine::postDelayedEvent: cannot post event when the state machine is not running"); + return -1; + } + if (!event) { + qWarning("QStateMachine::postDelayedEvent: cannot post null event"); + return -1; + } + if (delay < 0) { + qWarning("QStateMachine::postDelayedEvent: delay cannot be negative"); + return -1; + } #ifdef QSTATEMACHINE_DEBUG - qDebug() << this << ": posting internal event" << event; + qDebug() << this << ": posting event" << event << "with delay" << delay; #endif - d->internalEventQueue.append(event); - d->processEvents(QStateMachinePrivate::QueuedProcessing); + int tid = startTimer(delay); + d->delayedEvents[tid] = event; + return tid; +} + +/*! + Cancels the delayed event identified by the given \a id. The id should be a + value returned by a call to postDelayedEvent(). Returns true if the event + was successfully cancelled, otherwise returns false. + + \sa postDelayedEvent() +*/ +bool QStateMachine::cancelDelayedEvent(int id) +{ + Q_D(QStateMachine); + if (d->state != QStateMachinePrivate::Running) { + qWarning("QStateMachine::cancelDelayedEvent: the machine is not running"); + return false; + } + QEvent *e = d->delayedEvents.take(id); + if (!e) + return false; + killTimer(id); + delete e; + return true; } /*! @@ -1882,9 +1961,14 @@ bool QStateMachine::event(QEvent *e) if (e->type() == QEvent::Timer) { QTimerEvent *te = static_cast<QTimerEvent*>(e); int tid = te->timerId(); - if (d->delayedEvents.contains(tid)) { + if (d->state != QStateMachinePrivate::Running) { + // This event has been cancelled already + Q_ASSERT(!d->delayedEvents.contains(tid)); + return true; + } + QEvent *ee = d->delayedEvents.take(tid); + if (ee != 0) { killTimer(tid); - QEvent *ee = d->delayedEvents.take(tid); d->externalEventQueue.append(ee); d->processEvents(QStateMachinePrivate::DirectProcessing); return true; diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h index a0b2b14..321a05c 100644 --- a/src/corelib/statemachine/qstatemachine.h +++ b/src/corelib/statemachine/qstatemachine.h @@ -102,6 +102,11 @@ public: QEvent *m_event; }; + enum EventPriority { + NormalPriority, + HighPriority + }; + enum RestorePolicy { DoNotRestoreProperties, RestoreProperties @@ -138,7 +143,9 @@ public: QStateMachine::RestorePolicy globalRestorePolicy() const; void setGlobalRestorePolicy(QStateMachine::RestorePolicy restorePolicy); - void postEvent(QEvent *event, int delay = 0); + void postEvent(QEvent *event, EventPriority priority = NormalPriority); + int postDelayedEvent(QEvent *event, int delay); + bool cancelDelayedEvent(int id); QSet<QAbstractState*> configuration() const; @@ -158,8 +165,6 @@ protected: void onEntry(QEvent *event); void onExit(QEvent *event); - void postInternalEvent(QEvent *event); - virtual void beginSelectTransitions(QEvent *event); virtual void endSelectTransitions(QEvent *event); diff --git a/src/corelib/statemachine/qstatemachine_p.h b/src/corelib/statemachine/qstatemachine_p.h index 141bc5c..cf7a073 100644 --- a/src/corelib/statemachine/qstatemachine_p.h +++ b/src/corelib/statemachine/qstatemachine_p.h @@ -160,6 +160,7 @@ public: void handleTransitionSignal(QObject *sender, int signalIndex, void **args); void processEvents(EventProcessingMode processingMode); + void cancelAllDelayedEvents(); #ifndef QT_NO_PROPERTIES typedef QPair<QObject *, QByteArray> RestorableId; diff --git a/src/corelib/tools/qstringbuilder.h b/src/corelib/tools/qstringbuilder.h index e1a0e06..efa39b5 100644 --- a/src/corelib/tools/qstringbuilder.h +++ b/src/corelib/tools/qstringbuilder.h @@ -198,6 +198,17 @@ template <int N> struct QConcatenable<char[N]> } }; +template <int N> struct QConcatenable<const char[N]> +{ + typedef const char type[N]; + static int size(const char[N]) { return N - 1; } + static inline void appendTo(const char a[N], QChar *&out) + { + for (int i = 0; i < N - 1; ++i) + *out++ = QLatin1Char(a[i]); + } +}; + template <> struct QConcatenable<const char *> { typedef char const *type; @@ -241,7 +252,7 @@ template <typename A, typename B> QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type> operator%(const A &a, const B &b) { - return QStringBuilder<A, B>(a, b); + return QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type>(a, b); } #ifdef QT_USE_FAST_OPERATOR_PLUS @@ -249,7 +260,7 @@ template <typename A, typename B> QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type> operator+(const A &a, const B &b) { - return QStringBuilder<A, B>(a, b); + return QStringBuilder<typename QConcatenable<A>::type, typename QConcatenable<B>::type>(a, b); } #endif diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index 14f19f2..297c900 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -317,6 +317,7 @@ QFileDialog::QFileDialog(QWidget *parent, Qt::WindowFlags f) { Q_D(QFileDialog); d->init(); + d->lineEdit()->selectAll(); } /*! @@ -334,6 +335,7 @@ QFileDialog::QFileDialog(QWidget *parent, { Q_D(QFileDialog); d->init(directory, filter, caption); + d->lineEdit()->selectAll(); } /*! diff --git a/src/gui/dialogs/qfontdialog.cpp b/src/gui/dialogs/qfontdialog.cpp index ca882c5..60fae27 100644 --- a/src/gui/dialogs/qfontdialog.cpp +++ b/src/gui/dialogs/qfontdialog.cpp @@ -602,6 +602,8 @@ void QFontDialogPrivate::updateStyles() } if (!found) styleList->setCurrentItem(0); + } else { + styleList->setCurrentItem(0); } styleEdit->setText(styleList->currentText()); diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp index eee9bbf..e971fd8 100644 --- a/src/gui/effects/qgraphicseffect.cpp +++ b/src/gui/effects/qgraphicseffect.cpp @@ -67,6 +67,7 @@ \o QGraphicsOpacityEffect - renders the item with an opacity \o QGraphicsPixelizeEffect - pixelizes the item with any pixel size \o QGraphicsGrayscaleEffect - renders the item in shades of gray + \o QGraphicsBloomEffect - applies a blooming / glowing effect \endlist \img graphicseffect-effects.png @@ -795,7 +796,7 @@ QGraphicsBlurEffect::QGraphicsBlurEffect(QObject *parent) : QGraphicsEffect(*new QGraphicsBlurEffectPrivate, parent) { Q_D(QGraphicsBlurEffect); - d->filter->setBlurHint(QPixmapBlurFilter::PerformanceHint); + d->filter->setBlurHint(Qt::PerformanceHint); } /*! @@ -839,48 +840,34 @@ void QGraphicsBlurEffect::setBlurRadius(int radius) */ /*! - \enum QGraphicsBlurEffect::BlurHint - - \since 4.6 - - This enum describes the hint of a blur graphics effect. - - \value PerformanceHint Using this value hints that performance is the - most important factor, at the potential cost of lower quality. - - \value QualityHint Using this value hints that a higher quality blur is - preferred over a fast blur. -*/ - -/*! \property QGraphicsBlurEffect::blurHint \brief the blur hint of the effect. - Use the PerformanceHint blur hint to say that you want a faster blur, - and the QualityHint blur hint to say that you prefer a higher quality blur. + Use the Qt::PerformanceHint hint to say that you want a faster blur, + and the Qt::QualityHint hint to say that you prefer a higher quality blur. - When animating the blur radius it's recommended to use the PerformanceHint. + When animating the blur radius it's recommended to use Qt::PerformanceHint. - By default, the blur hint is PerformanceHint. + By default, the blur hint is Qt::PerformanceHint. */ -QGraphicsBlurEffect::BlurHint QGraphicsBlurEffect::blurHint() const +Qt::RenderHint QGraphicsBlurEffect::blurHint() const { Q_D(const QGraphicsBlurEffect); - return BlurHint(d->filter->blurHint()); + return d->filter->blurHint(); } -void QGraphicsBlurEffect::setBlurHint(QGraphicsBlurEffect::BlurHint hint) +void QGraphicsBlurEffect::setBlurHint(Qt::RenderHint hint) { Q_D(QGraphicsBlurEffect); - if (BlurHint(d->filter->blurHint()) == hint) + if (d->filter->blurHint() == hint) return; - d->filter->setBlurHint(QPixmapBlurFilter::BlurHint(hint)); + d->filter->setBlurHint(hint); emit blurHintChanged(hint); } /*! - \fn void QGraphicsBlurEffect::blurHintChanged(QGraphicsBlurEffect::BlurHint hint) + \fn void QGraphicsBlurEffect::blurHintChanged(Qt::RenderHint hint) This signal is emitted whenever the effect's blur hint changes. The \a hint parameter holds the effect's new blur hint. @@ -1305,5 +1292,237 @@ void QGraphicsOpacityEffect::draw(QPainter *painter, QGraphicsEffectSource *sour painter->restore(); } +/*! + \class QGraphicsBloomEffect + \brief The QGraphicsBloomEffect class provides a bloom/glow effect. + \since 4.6 + + A bloom/glow effect adds fringes of light around bright areas in the source. + + \img graphicseffect-bloom.png + + \sa QGraphicsDropShadowEffect, QGraphicsBlurEffect, QGraphicsPixelizeEffect, + QGraphicsGrayscaleEffect, QGraphicsColorizeEffect +*/ + +/*! + Constructs a new QGraphicsBloomEffect instance. + The \a parent parameter is passed to QGraphicsEffect's constructor. +*/ +QGraphicsBloomEffect::QGraphicsBloomEffect(QObject *parent) + : QGraphicsEffect(*new QGraphicsBloomEffectPrivate, parent) +{ + Q_D(QGraphicsBloomEffect); + for (int i = 0; i < 256; ++i) + d->colorTable[i] = qMin(i + d->brightness, 255); +} + +/*! + Destroys the effect. +*/ +QGraphicsBloomEffect::~QGraphicsBloomEffect() +{ +} + +/*! + \reimp +*/ +QRectF QGraphicsBloomEffect::boundingRectFor(const QRectF &rect) const +{ + Q_D(const QGraphicsBloomEffect); + const qreal delta = d->blurFilter.radius() * 2; + return rect.adjusted(-delta, -delta, delta, delta); +} + +/*! + \property QGraphicsBloomEffect::blurRadius + \brief the blur radius in pixels of the effect. + + Using a smaller radius results in a sharper appearance, whereas a bigger + radius results in a more blurred appearance. + + By default, the blur radius is 5 pixels. + + \sa strength(), brightness() +*/ +int QGraphicsBloomEffect::blurRadius() const +{ + Q_D(const QGraphicsBloomEffect); + return d->blurFilter.radius(); +} + +void QGraphicsBloomEffect::setBlurRadius(int radius) +{ + Q_D(QGraphicsBloomEffect); + if (d->blurFilter.radius() == radius) + return; + + d->blurFilter.setRadius(radius); + updateBoundingRect(); + emit blurRadiusChanged(radius); +} + +/*! + \fn void QGraphicsBloomEffect::blurRadiusChanged(int blurRadius) + + This signal is emitted whenever the effect's blur radius changes. + The \a blurRadius parameter holds the effect's new blur radius. +*/ + +/*! + \property QGraphicsBloomEffect::blurHint + \brief the blur hint of the effect. + + Use the Qt::PerformanceHint hint to say that you want a faster blur, + and the Qt::QualityHint hint to say that you prefer a higher quality blur. + + When animating the blur radius it's recommended to use Qt::PerformanceHint. + + By default, the blur hint is Qt::PerformanceHint. +*/ +Qt::RenderHint QGraphicsBloomEffect::blurHint() const +{ + Q_D(const QGraphicsBloomEffect); + return d->blurFilter.blurHint(); +} + +void QGraphicsBloomEffect::setBlurHint(Qt::RenderHint hint) +{ + Q_D(QGraphicsBloomEffect); + if (d->blurFilter.blurHint() == hint) + return; + + d->blurFilter.setBlurHint(hint); + emit blurHintChanged(hint); +} + +/*! + \fn void QGraphicsBloomEffect::blurHintChanged(Qt::RenderHint hint) + + This signal is emitted whenever the effect's blur hint changes. + The \a hint parameter holds the effect's new blur hint. +*/ + +/*! + \property QGraphicsBloomEffect::brightness + \brief the brightness of the glow. + + The value should be in the range of 0 to 255, where 0 is dark + and 255 is bright. + + By default, the brightness is 70. + + \sa strength(), blurRadius() +*/ +int QGraphicsBloomEffect::brightness() const +{ + Q_D(const QGraphicsBloomEffect); + return d->brightness; +} + +void QGraphicsBloomEffect::setBrightness(int brightness) +{ + Q_D(QGraphicsBloomEffect); + brightness = qBound(0, brightness, 255); + if (d->brightness == brightness) + return; + + d->brightness = brightness; + for (int i = 0; i < 256; ++i) + d->colorTable[i] = qMin(i + brightness, 255); + + update(); + emit brightnessChanged(brightness); +} + +/*! + \fn void QGraphicsBloomEffect::brightnessChanged(int brightness) + + This signal is emitted whenever the effect's brightness changes. + The \a brightness parameter holds the effect's new brightness. +*/ + +/*! + \property QGraphicsBloomEffect::strength + \brief the strength of the effect. + + A strength 0.0 equals to no effect, while 1.0 means maximum glow. + + By default, the strength is 0.7. +*/ +qreal QGraphicsBloomEffect::strength() const +{ + Q_D(const QGraphicsBloomEffect); + return d->strength; +} + +void QGraphicsBloomEffect::setStrength(qreal strength) +{ + Q_D(QGraphicsBloomEffect); + strength = qBound(qreal(0.0), strength, qreal(1.0)); + if (qFuzzyCompare(d->strength, strength)) + return; + + d->strength = strength; + update(); + emit strengthChanged(strength); +} + +/*! + \fn void QGraphicsBloomEffect::strengthChanged(qreal strength) + + This signal is emitted whenever the effect's strength changes. + The \a strength parameter holds the effect's new strength. +*/ + +/*! + \reimp +*/ +void QGraphicsBloomEffect::draw(QPainter *painter, QGraphicsEffectSource *source) +{ + Q_D(QGraphicsBloomEffect); + if (d->strength < 0.001) { + source->draw(painter); + return; + } + + const Qt::CoordinateSystem system = source->isPixmap() + ? Qt::LogicalCoordinates : Qt::DeviceCoordinates; + QPoint offset; + QPixmap pixmap = source->pixmap(system, &offset); + QImage result = pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied); + + // Blur. + QPainter blurPainter(&pixmap); + d->blurFilter.draw(&blurPainter, QPointF(), pixmap); + blurPainter.end(); + + // Brighten. + QImage overlay = pixmap.toImage().convertToFormat(QImage::Format_ARGB32); + const int numBits = overlay.width() * overlay.height(); + QRgb *bits = reinterpret_cast<QRgb *>(overlay.bits()); + for (int i = 0; i < numBits; ++i) { + const QRgb bit = bits[i]; + bits[i] = qRgba(d->colorTable[qRed(bit)], d->colorTable[qGreen(bit)], + d->colorTable[qBlue(bit)], qAlpha(bit)); + } + + // Composite. + QPainter compPainter(&result); + compPainter.setCompositionMode(QPainter::CompositionMode_Overlay); + compPainter.setOpacity(d->strength); + compPainter.drawImage(0, 0, overlay); + compPainter.end(); + + if (system == Qt::DeviceCoordinates) { + QTransform restoreTransform = painter->worldTransform(); + painter->setWorldTransform(QTransform()); + painter->drawImage(offset, result); + painter->setWorldTransform(restoreTransform); + } else { + painter->drawImage(offset, result); + } +} + QT_END_NAMESPACE diff --git a/src/gui/effects/qgraphicseffect.h b/src/gui/effects/qgraphicseffect.h index c256381..c5d3ede 100644 --- a/src/gui/effects/qgraphicseffect.h +++ b/src/gui/effects/qgraphicseffect.h @@ -224,27 +224,22 @@ class Q_GUI_EXPORT QGraphicsBlurEffect: public QGraphicsEffect { Q_OBJECT Q_PROPERTY(int blurRadius READ blurRadius WRITE setBlurRadius NOTIFY blurRadiusChanged) - Q_PROPERTY(BlurHint blurHint READ blurHint WRITE setBlurHint NOTIFY blurHintChanged) + Q_PROPERTY(Qt::RenderHint blurHint READ blurHint WRITE setBlurHint NOTIFY blurHintChanged) public: - enum BlurHint { - PerformanceHint, - QualityHint - }; - QGraphicsBlurEffect(QObject *parent = 0); ~QGraphicsBlurEffect(); QRectF boundingRectFor(const QRectF &rect) const; int blurRadius() const; - BlurHint blurHint() const; + Qt::RenderHint blurHint() const; public Q_SLOTS: void setBlurRadius(int blurRadius); - void setBlurHint(BlurHint blurHint); + void setBlurHint(Qt::RenderHint hint); Q_SIGNALS: void blurRadiusChanged(int blurRadius); - void blurHintChanged(BlurHint blurHint); + void blurHintChanged(Qt::RenderHint hint); protected: void draw(QPainter *painter, QGraphicsEffectSource *source); @@ -339,6 +334,44 @@ private: Q_DISABLE_COPY(QGraphicsOpacityEffect) }; +class QGraphicsBloomEffectPrivate; +class Q_GUI_EXPORT QGraphicsBloomEffect: public QGraphicsEffect +{ + Q_OBJECT + Q_PROPERTY(int blurRadius READ blurRadius WRITE setBlurRadius NOTIFY blurRadiusChanged) + Q_PROPERTY(Qt::RenderHint blurHint READ blurHint WRITE setBlurHint NOTIFY blurHintChanged) + Q_PROPERTY(int brightness READ brightness WRITE setBrightness NOTIFY brightnessChanged) + Q_PROPERTY(qreal strength READ strength WRITE setStrength NOTIFY strengthChanged) +public: + QGraphicsBloomEffect(QObject *parent = 0); + ~QGraphicsBloomEffect(); + + QRectF boundingRectFor(const QRectF &rect) const; + int blurRadius() const; + Qt::RenderHint blurHint() const; + int brightness() const; + qreal strength() const; + +public Q_SLOTS: + void setBlurRadius(int blurRadius); + void setBlurHint(Qt::RenderHint hint); + void setBrightness(int brightness); + void setStrength(qreal strength); + +Q_SIGNALS: + void blurRadiusChanged(int blurRadius); + void blurHintChanged(Qt::RenderHint hint); + void brightnessChanged(int brightness); + void strengthChanged(qreal strength); + +protected: + void draw(QPainter *painter, QGraphicsEffectSource *source); + +private: + Q_DECLARE_PRIVATE(QGraphicsBloomEffect) + Q_DISABLE_COPY(QGraphicsBloomEffect) +}; + QT_END_NAMESPACE QT_END_HEADER diff --git a/src/gui/effects/qgraphicseffect_p.h b/src/gui/effects/qgraphicseffect_p.h index e109790..96eda0e 100644 --- a/src/gui/effects/qgraphicseffect_p.h +++ b/src/gui/effects/qgraphicseffect_p.h @@ -185,6 +185,18 @@ public: uint hasOpacityMask : 1; }; +class QGraphicsBloomEffectPrivate : public QGraphicsEffectPrivate +{ + Q_DECLARE_PUBLIC(QGraphicsBlurEffect) +public: + QGraphicsBloomEffectPrivate() : brightness(70), strength(0.7) {} + + QPixmapBlurFilter blurFilter; + int colorTable[256]; + int brightness; + qreal strength; +}; + QT_END_NAMESPACE #endif // QGRAPHICSEFFECT_P_H diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 83ac5fe..7c24002 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -54,4 +54,4 @@ DEFINES += Q_INTERNAL_QAPP_SRC symbian:TARGET.UID3=0x2001B2DD # ro-section in gui can exceed default allocated space, so more rw-section little further -symbian-sbsv2: MMP_RULES += "LINKEROPTION armcc --rw-base 0x800000"
\ No newline at end of file +symbian-sbsv2: MMP_RULES += "LINKEROPTION armcc --rw-base 0x800000" diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp index ba9a1e2..749b8f3 100644 --- a/src/gui/image/qpixmapfilter.cpp +++ b/src/gui/image/qpixmapfilter.cpp @@ -504,10 +504,10 @@ void QPixmapConvolutionFilter::draw(QPainter *painter, const QPointF &p, const Q class QPixmapBlurFilterPrivate : public QPixmapFilterPrivate { public: - QPixmapBlurFilterPrivate() : radius(5), hint(QPixmapBlurFilter::PerformanceHint) {} + QPixmapBlurFilterPrivate() : radius(5), hint(Qt::PerformanceHint) {} int radius; - QPixmapBlurFilter::BlurHint hint; + Qt::RenderHint hint; }; @@ -561,7 +561,7 @@ int QPixmapBlurFilter::radius() const \internal */ -void QPixmapBlurFilter::setBlurHint(QPixmapBlurFilter::BlurHint hint) +void QPixmapBlurFilter::setBlurHint(Qt::RenderHint hint) { Q_D(QPixmapBlurFilter); d->hint = hint; @@ -572,7 +572,7 @@ void QPixmapBlurFilter::setBlurHint(QPixmapBlurFilter::BlurHint hint) \internal */ -QPixmapBlurFilter::BlurHint QPixmapBlurFilter::blurHint() const +Qt::RenderHint QPixmapBlurFilter::blurHint() const { Q_D(const QPixmapBlurFilter); return d->hint; diff --git a/src/gui/image/qpixmapfilter_p.h b/src/gui/image/qpixmapfilter_p.h index 92c8e56..8a2207a 100644 --- a/src/gui/image/qpixmapfilter_p.h +++ b/src/gui/image/qpixmapfilter_p.h @@ -126,19 +126,14 @@ class Q_GUI_EXPORT QPixmapBlurFilter : public QPixmapFilter Q_DECLARE_PRIVATE(QPixmapBlurFilter) public: - enum BlurHint { - PerformanceHint, - QualityHint - }; - QPixmapBlurFilter(QObject *parent = 0); ~QPixmapBlurFilter(); void setRadius(int radius); - void setBlurHint(BlurHint hint); + void setBlurHint(Qt::RenderHint hint); int radius() const; - BlurHint blurHint() const; + Qt::RenderHint blurHint() const; QRectF boundingRectFor(const QRectF &rect) const; void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const; diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 99d188e..27c7c94 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -91,6 +91,8 @@ extern QDesktopWidget *qt_desktopWidget; // qapplication.cpp QWidget *qt_button_down = 0; // widget got last button-down +QSymbianControl *QSymbianControl::lastFocusedControl = 0; + QS60Data* qGlobalS60Data() { return qt_s60Data(); @@ -320,13 +322,26 @@ QSymbianControl::QSymbianControl(QWidget *w) { } -void QSymbianControl::ConstructL(bool topLevel, bool desktop) +void QSymbianControl::ConstructL(bool isWindowOwning, bool desktop) { if (!desktop) { - if (topLevel) { + if (isWindowOwning or !qwidget->parentWidget()) CreateWindowL(S60->windowGroup()); - } + else + /** + * TODO: in order to avoid creating windows for all ancestors of + * this widget up to the root window, the parameter passed to + * CreateWindowL should be + * qwidget->parentWidget()->effectiveWinId(). However, if we do + * this, then we need to take care of re-parenting when a window + * is created for a widget between this one and the root window. + */ + CreateWindowL(qwidget->parentWidget()->winId()); + + // Necessary in order to be able to track the activation status of + // the control's window + qwidget->d_func()->createExtra(); SetFocusing(true); m_longTapDetector = QLongTapTimer::NewL(this); @@ -337,6 +352,7 @@ QSymbianControl::~QSymbianControl() { if (S60->curWin == this) S60->curWin = 0; + setFocusSafely(false); S60->appUi()->RemoveFromStack(this); delete m_longTapDetector; } @@ -767,19 +783,21 @@ TCoeInputCapabilities QSymbianControl::InputCapabilities() const void QSymbianControl::Draw(const TRect& r) const { QWindowSurface *surface = qwidget->windowSurface(); - if (!surface) - return; + QPaintEngine *engine = surface ? surface->paintDevice()->paintEngine() : NULL; - QPaintEngine *engine = surface->paintDevice()->paintEngine(); if (!engine) return; + if (engine->type() == QPaintEngine::Raster) { QS60WindowSurface *s60Surface = static_cast<QS60WindowSurface *>(qwidget->windowSurface()); CFbsBitmap *bitmap = s60Surface->symbianBitmap(); CWindowGc &gc = SystemGc(); - if (qwidget->d_func()->isOpaque) - gc.SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha); - gc.BitBlt(r.iTl, bitmap, r); + + if(!qwidget->d_func()->extraData()->disableBlit) { + if (qwidget->d_func()->isOpaque) + gc.SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha); + gc.BitBlt(r.iTl, bitmap, r); + } } else { surface->flush(qwidget, QRegion(qt_TRect2QRect(r)), QPoint()); } @@ -845,8 +863,23 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */) || (qwidget->windowType() & Qt::Popup) == Qt::Popup) return; - QEvent *deferredFocusEvent = new QEvent(QEvent::SymbianDeferredFocusChanged); - QApplication::postEvent(qwidget, deferredFocusEvent); + if (IsFocused() && IsVisible()) { + QApplication::setActiveWindow(qwidget->window()); +#ifdef Q_WS_S60 + // If widget is fullscreen, hide status pane and button container + // otherwise show them. + CEikStatusPane* statusPane = S60->statusPane(); + CEikButtonGroupContainer* buttonGroup = S60->buttonGroupContainer(); + bool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen; + if (statusPane && (statusPane->IsVisible() == isFullscreen)) + statusPane->MakeVisible(!isFullscreen); + if (buttonGroup && (buttonGroup->IsVisible() == isFullscreen)) + buttonGroup->MakeVisible(!isFullscreen); +#endif + } else if (QApplication::activeWindow() == qwidget->window()) { + QApplication::setActiveWindow(0); + } + // else { We don't touch the active window unless we were explicitly activated or deactivated } } void QSymbianControl::HandleResourceChange(int resourceType) @@ -890,6 +923,31 @@ TTypeUid::Ptr QSymbianControl::MopSupplyObject(TTypeUid id) return CCoeControl::MopSupplyObject(id); } +void QSymbianControl::setFocusSafely(bool focus) +{ + // The stack hack in here is very unfortunate, but it is the only way to ensure proper + // focus in Symbian. If this is not executed, the control which happens to be on + // the top of the stack may randomly be assigned focus by Symbian, for example + // when creating new windows (specifically in CCoeAppUi::HandleStackChanged()). + if (focus) { + S60->appUi()->RemoveFromStack(this); + // Symbian doesn't automatically remove focus from the last focused control, so we need to + // remember it and clear focus ourselves. + if (lastFocusedControl && lastFocusedControl != this) + lastFocusedControl->SetFocus(false); + QT_TRAP_THROWING(S60->appUi()->AddToStackL(this, + ECoeStackPriorityDefault + 1, ECoeStackFlagStandard)); // Note the + 1 + lastFocusedControl = this; + this->SetFocus(true); + } else { + S60->appUi()->RemoveFromStack(this); + QT_TRAP_THROWING(S60->appUi()->AddToStackL(this, + ECoeStackPriorityDefault, ECoeStackFlagStandard)); + lastFocusedControl = 0; + this->SetFocus(false); + } +} + /*! \typedef QApplication::QS60MainApplicationFactory @@ -1236,14 +1294,14 @@ QWidget * QApplication::topLevelAt(QPoint const& point) if (widget->geometry().adjusted(0,0,1,1).contains(point)) { // At this point we know there is a Qt widget under the point. // Now we need to make sure it is the top most in the z-order. - RDrawableWindow* rw = widget->d_func()->topData()->rwindow; - int z = rw->OrdinalPosition(); + RDrawableWindow *const window = widget->effectiveWinId()->DrawableWindow(); + int z = window->OrdinalPosition(); if (z < lowestZ) { lowestZ = z; found = widget; } } - } + } } return found; } @@ -1457,6 +1515,7 @@ bool QApplication::s60EventFilter(TWsEvent * /* aEvent */) */ void QApplication::symbianHandleCommand(int command) { + QScopedLoopLevelCounter counter(d_func()->threadData); switch (command) { #ifdef Q_WS_S60 case EAknSoftkeyExit: { diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 6ecd535..eb9e276 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -1752,79 +1752,18 @@ LRESULT CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam case APPCOMMAND_BASS_UP: key = Qt::Key_BassUp; break; - case APPCOMMAND_BROWSER_BACKWARD: - key = Qt::Key_Back; - break; - case APPCOMMAND_BROWSER_FAVORITES: - key = Qt::Key_Favorites; - break; - case APPCOMMAND_BROWSER_FORWARD: - key = Qt::Key_Forward; - break; - case APPCOMMAND_BROWSER_HOME: - key = Qt::Key_HomePage; - break; - case APPCOMMAND_BROWSER_REFRESH: - key = Qt::Key_Refresh; - break; - case APPCOMMAND_BROWSER_SEARCH: - key = Qt::Key_Search; - break; - case APPCOMMAND_BROWSER_STOP: - key = Qt::Key_Stop; - break; - case APPCOMMAND_LAUNCH_APP1: - key = Qt::Key_Launch0; - break; - case APPCOMMAND_LAUNCH_APP2: - key = Qt::Key_Launch1; - break; - case APPCOMMAND_LAUNCH_MAIL: - key = Qt::Key_LaunchMail; - break; - case APPCOMMAND_LAUNCH_MEDIA_SELECT: - key = Qt::Key_LaunchMedia; - break; - case APPCOMMAND_MEDIA_NEXTTRACK: - key = Qt::Key_MediaNext; - break; - case APPCOMMAND_MEDIA_PLAY_PAUSE: - key = Qt::Key_MediaPlay; - break; - case APPCOMMAND_MEDIA_PREVIOUSTRACK: - key = Qt::Key_MediaPrevious; - break; - case APPCOMMAND_MEDIA_STOP: - key = Qt::Key_MediaStop; - break; case APPCOMMAND_TREBLE_DOWN: key = Qt::Key_TrebleDown; break; case APPCOMMAND_TREBLE_UP: key = Qt::Key_TrebleUp; break; - case APPCOMMAND_VOLUME_DOWN: - key = Qt::Key_VolumeDown; - break; - case APPCOMMAND_VOLUME_MUTE: - key = Qt::Key_VolumeMute; - break; - case APPCOMMAND_VOLUME_UP: - key = Qt::Key_VolumeUp; - break; - // Commands new in Windows XP case APPCOMMAND_HELP: key = Qt::Key_Help; break; case APPCOMMAND_FIND: key = Qt::Key_Search; break; - case APPCOMMAND_PRINT: - key = Qt::Key_Print; - break; - case APPCOMMAND_MEDIA_PLAY: - key = Qt::Key_MediaPlay; - break; default: break; } diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index aec757f..b44ef7f 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -571,7 +571,7 @@ const QKeyBinding QKeySequencePrivate::keyBindings[] = { {QKeySequence::Close, 0, Qt::CTRL | Qt::Key_W, QApplicationPrivate::KB_Win | QApplicationPrivate::KB_X11}, {QKeySequence::Close, 1, Qt::CTRL | Qt::Key_W, QApplicationPrivate::KB_Mac}, {QKeySequence::Cut, 1, Qt::CTRL | Qt::Key_X, QApplicationPrivate::KB_All}, - {QKeySequence::Redo, 1, Qt::CTRL | Qt::Key_Y, QApplicationPrivate::KB_Win}, + {QKeySequence::Redo, 1, Qt::CTRL | Qt::Key_Y, QApplicationPrivate::KB_Win | QApplicationPrivate::KB_S60}, {QKeySequence::Redo, 0, Qt::CTRL | Qt::Key_Y, QApplicationPrivate::KB_Mac},//different priority from above {QKeySequence::Undo, 1, Qt::CTRL | Qt::Key_Z, QApplicationPrivate::KB_All}, {QKeySequence::Back, 1, Qt::CTRL | Qt::Key_BracketLeft, QApplicationPrivate::KB_Mac}, @@ -600,7 +600,7 @@ const QKeyBinding QKeySequencePrivate::keyBindings[] = { {QKeySequence::FindPrevious, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_G, QApplicationPrivate::KB_Win}, {QKeySequence::AddTab, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_N, QApplicationPrivate::KB_KDE}, {QKeySequence::SaveAs, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_S, QApplicationPrivate::KB_Gnome | QApplicationPrivate::KB_Mac}, - {QKeySequence::Redo, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Z, QApplicationPrivate::KB_Win | QApplicationPrivate::KB_X11}, + {QKeySequence::Redo, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Z, QApplicationPrivate::KB_Win | QApplicationPrivate::KB_X11 | QApplicationPrivate::KB_S60}, {QKeySequence::Redo, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_Z, QApplicationPrivate::KB_Mac}, //different priority from above {QKeySequence::PreviousChild, 1, Qt::CTRL | Qt::SHIFT | Qt::Key_Backtab, QApplicationPrivate::KB_Win | QApplicationPrivate::KB_X11}, {QKeySequence::PreviousChild, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_Backtab, QApplicationPrivate::KB_Mac },//different priority from above diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp index 91f4163..45695d9 100644 --- a/src/gui/kernel/qsoftkeymanager.cpp +++ b/src/gui/kernel/qsoftkeymanager.cpp @@ -238,7 +238,7 @@ void QSoftKeyManagerPrivate::updateSoftKeys_sys(const QList<QAction*> &softkeys) } if (needsExitButton) - QT_TRAP_THROWING(nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QObject::tr("Exit")))); + QT_TRAP_THROWING(nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QSoftKeyManager::tr("Exit")))); nativeContainer->DrawDeferred(); // 3.1 needs an extra invitation } diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index 0d48634..d33791b 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -141,7 +141,7 @@ public: public: QSymbianControl(QWidget *w); - void ConstructL(bool topLevel = false, bool desktop = false); + void ConstructL(bool isWindowOwning = false, bool desktop = false); ~QSymbianControl(); void HandleResourceChange(int resourceType); void HandlePointerEventL(const TPointerEvent& aPointerEvent); @@ -157,6 +157,8 @@ public: void setIgnoreFocusChanged(bool enabled) { m_ignoreFocusChanged = enabled; } void CancelLongTapTimer(); + void setFocusSafely(bool focus); + protected: void Draw(const TRect& aRect) const; void SizeChanged(); @@ -174,6 +176,9 @@ private: #endif private: + static QSymbianControl *lastFocusedControl; + +private: QWidget *qwidget; bool m_ignoreFocusChanged; QLongTapTimer* m_longTapDetector; diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 08fe5b9..83593ab 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -8336,12 +8336,6 @@ bool QWidget::event(QEvent *event) (void) QApplication::sendEvent(this, &mouseEvent); break; } - case QEvent::SymbianDeferredFocusChanged: { -#ifdef Q_OS_SYMBIAN - d->handleSymbianDeferredFocusChanged(); -#endif - break; - } #ifndef QT_NO_PROPERTIES case QEvent::DynamicPropertyChange: { const QByteArray &propName = static_cast<QDynamicPropertyChangeEvent *>(event)->propertyName(); @@ -11454,6 +11448,10 @@ QWidget *QWidgetPrivate::widgetInNavigationDirection(Direction direction) QWidget *targetWidget = 0; int shortestDistance = INT_MAX; foreach(QWidget *targetCandidate, QApplication::allWidgets()) { + + if (targetCandidate->focusProxy()) //skip if focus proxy set + continue; + const QRect targetCandidateRect = targetCandidate->rect().translated(targetCandidate->mapToGlobal(QPoint())); if ( targetCandidate != sourceWidget && targetCandidate->focusPolicy() & Qt::TabFocus diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 296c5b1..6c879be 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -169,9 +169,6 @@ struct QTLWExtra { #ifndef QT_NO_QWS_MANAGER QWSManager *qwsManager; #endif -#elif defined(Q_OS_SYMBIAN) // <--------------------------------------------------------- SYMBIAN - uint activated : 1; // RWindowBase::Activated has been called - RDrawableWindow *rwindow; #endif }; @@ -224,6 +221,15 @@ struct QWExtra { QImage maskBits; CGImageRef imageMask; #endif +#elif defined(Q_OS_SYMBIAN) // <----------------------------------------------------- Symbian + uint activated : 1; // RWindowBase::Activated has been called + + // If set, QSymbianControl::Draw does not blit this widget + // This is to allow, for use cases such as video, widgets which, from the Qt point + // of view, are just placeholders in the scene. For these widgets, any necessary + // drawing to the UI framebuffer is done by the relevant Symbian subsystem. For + // video rendering, this would be an MMF controller, or MDF post-processor. + uint disableBlit : 1; #endif }; @@ -287,7 +293,7 @@ public: void setMask_sys(const QRegion &); #ifdef Q_OS_SYMBIAN - void handleSymbianDeferredFocusChanged(); + void setSoftKeys_sys(const QList<QAction*> &softkeys); #endif void raise_sys(); diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index 6b5e9b7..05db8ca 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -78,14 +78,131 @@ static bool isEqual(const QList<QAction*>& a, const QList<QAction*>& b) return true; } -void QWidgetPrivate::setWSGeometry(bool /* dontShow */, const QRect & /* rect */) +void QWidgetPrivate::setWSGeometry(bool dontShow, const QRect &) { + // Note: based on x11 implementation + static const int XCOORD_MAX = 16383; + static const int WRECT_MAX = 16383; + + Q_Q(QWidget); + + Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); + + /* + There are up to four different coordinate systems here: + Qt coordinate system for this widget. + Symbian coordinate system for this widget (relative to wrect). + Qt coordinate system for parent + Symbian coordinate system for parent (relative to parent's wrect). + */ + + QRect validRange(-XCOORD_MAX,-XCOORD_MAX, 2*XCOORD_MAX, 2*XCOORD_MAX); + QRect wrectRange(-WRECT_MAX,-WRECT_MAX, 2*WRECT_MAX, 2*WRECT_MAX); + QRect wrect; + //xrect is the Symbian geometry of my widget. (starts out in parent's Qt coord sys, and ends up in parent's Symbian coord sys) + QRect xrect = data.crect; + + const QWidget *const parent = q->parentWidget(); + QRect parentWRect = parent->data->wrect; + + if (parentWRect.isValid()) { + // parent is clipped, and we have to clip to the same limit as parent + if (!parentWRect.contains(xrect)) { + xrect &= parentWRect; + wrect = xrect; + //translate from parent's to my Qt coord sys + wrect.translate(-data.crect.topLeft()); + } + //translate from parent's Qt coords to parent's X coords + xrect.translate(-parentWRect.topLeft()); + + } else { + // parent is not clipped, we may or may not have to clip + + if (data.wrect.isValid() && QRect(QPoint(),data.crect.size()).contains(data.wrect)) { + // This is where the main optimization is: we are already + // clipped, and if our clip is still valid, we can just + // move our window, and do not need to move or clip + // children + + QRect vrect = xrect & parent->rect(); + vrect.translate(-data.crect.topLeft()); //the part of me that's visible through parent, in my Qt coords + if (data.wrect.contains(vrect)) { + xrect = data.wrect; + xrect.translate(data.crect.topLeft()); + if (data.winid) + data.winid->SetExtent(TPoint(xrect.x(), xrect.y()), TSize(xrect.width(), xrect.height())); + return; + } + } + + if (!validRange.contains(xrect)) { + // we are too big, and must clip + xrect &=wrectRange; + wrect = xrect; + wrect.translate(-data.crect.topLeft()); + //parent's X coord system is equal to parent's Qt coord + //sys, so we don't need to map xrect. + } + } + + // unmap if we are outside the valid window system coord system + bool outsideRange = !xrect.isValid(); + bool mapWindow = false; + if (q->testAttribute(Qt::WA_OutsideWSRange) != outsideRange) { + q->setAttribute(Qt::WA_OutsideWSRange, outsideRange); + if (outsideRange) { + if (data.winid) + data.winid->DrawableWindow()->SetVisible(EFalse); + q->setAttribute(Qt::WA_Mapped, false); + } else if (!q->isHidden()) { + mapWindow = true; + } + } + + if (outsideRange) + return; + + bool jump = (data.wrect != wrect); + data.wrect = wrect; + + // and now recursively for all children... + for (int i = 0; i < children.size(); ++i) { + QObject *object = children.at(i); + if (object->isWidgetType()) { + QWidget *w = static_cast<QWidget *>(object); + if (!w->isWindow() && w->testAttribute(Qt::WA_WState_Created)) + w->d_func()->setWSGeometry(jump); + } + } + + if (data.winid) { + // move ourselves to the new position and map (if necessary) after + // the movement. Rationale: moving unmapped windows is much faster + // than moving mapped windows + if (!parent->internalWinId()) + xrect.translate(parent->mapTo(q->nativeParentWidget(), QPoint(0, 0))); + + data.winid->SetExtent(TPoint(xrect.x(), xrect.y()), TSize(xrect.width(), xrect.height())); + } + + if (mapWindow and !dontShow) { + q->setAttribute(Qt::WA_Mapped); + if (q->internalWinId()) + q->internalWinId()->DrawableWindow()->SetVisible(ETrue); + } + + if (jump && data.winid) { + RWindow *const window = static_cast<RWindow *>(data.winid->DrawableWindow()); + window->Invalidate(TRect(0, 0, wrect.width(), wrect.height())); + } } void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) { Q_Q(QWidget); + Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); if ((q->windowType() == Qt::Desktop)) @@ -129,7 +246,6 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) // put the window in its place and show it q->internalWinId()->SetRect(TRect(TPoint(x, y), TSize(w, h))); data.crect.setRect(x, y, w, h); - show_sys(); } else { QRect r = QRect(x, y, w, h); @@ -251,20 +367,22 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de } else { stackingFlags = ECoeStackFlagStandard; } + control->MakeVisible(false); QT_TRAP_THROWING(control->ControlEnv()->AppUi()->AddToStackL(control, ECoeStackPriorityDefault, stackingFlags)); + // Avoid keyboard focus to a hidden window. + control->setFocusSafely(false); - QTLWExtra *topExtra = topData(); - topExtra->rwindow = control->DrawableWindow(); + RDrawableWindow *const drawableWindow = control->DrawableWindow(); // Request mouse move events. - topExtra->rwindow->PointerFilter(EPointerFilterEnterExit + drawableWindow->PointerFilter(EPointerFilterEnterExit | EPointerFilterMove | EPointerFilterDrag, 0); - topExtra->rwindow->EnableVisibilityChangeEvents(); + drawableWindow->EnableVisibilityChangeEvents(); if (!isOpaque) { - RWindow *rwindow = static_cast<RWindow*>(topExtra->rwindow); - TDisplayMode gotDM = (TDisplayMode)rwindow->SetRequiredDisplayMode(EColor16MA); - if (rwindow->SetTransparencyAlphaChannel() == KErrNone) - rwindow->SetBackgroundColor(TRgb(255, 255, 255, 0)); + RWindow *const window = static_cast<RWindow *>(drawableWindow); + const TDisplayMode displayMode = static_cast<TDisplayMode>(window->SetRequiredDisplayMode(EColor16MA)); + if (window->SetTransparencyAlphaChannel() == KErrNone) + window->SetBackgroundColor(TRgb(255, 255, 255, 0)); } } @@ -284,10 +402,10 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de } else { stackingFlags = ECoeStackFlagStandard; } + control->MakeVisible(false); QT_TRAP_THROWING(control->ControlEnv()->AppUi()->AddToStackL(control, ECoeStackPriorityDefault, stackingFlags)); - - WId parentw = parentWidget->effectiveWinId(); - QT_TRAP_THROWING(control->SetContainerWindowL(*parentw)); + // Avoid keyboard focus to a hidden window. + control->setFocusSafely(false); q->setAttribute(Qt::WA_WState_Created); int x, y, w, h; @@ -308,7 +426,7 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de void QWidgetPrivate::show_sys() { Q_Q(QWidget); - + if (q->testAttribute(Qt::WA_OutsideWSRange)) return; @@ -321,20 +439,23 @@ void QWidgetPrivate::show_sys() return; } - if (q->isWindow() && q->internalWinId()) { - - WId id = q->internalWinId(); - if (!extra->topextra->activated) { + if (q->internalWinId()) { + + QSymbianControl *id = static_cast<QSymbianControl *>(q->internalWinId()); + if (!extra->activated) { QT_TRAP_THROWING(id->ActivateL()); - extra->topextra->activated = 1; + extra->activated = 1; } id->MakeVisible(true); - id->SetFocus(true); + + if(q->isWindow()) + id->setFocusSafely(true); // Force setting of the icon after window is made visible, // this is needed even WA_SetWindowIcon is not set, as in that case we need // to reset to the application level window icon - setWindowIcon_sys(true); + if(q->isWindow()) + setWindowIcon_sys(true); } invalidateBuffer(q->rect()); @@ -343,12 +464,14 @@ void QWidgetPrivate::show_sys() void QWidgetPrivate::hide_sys() { Q_Q(QWidget); + Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); deactivateWidgetCleanup(); - WId id = q->internalWinId(); - if (q->isWindow() && id) { - if (id->IsFocused()) // Avoid unnecessary calls to FocusChanged() - id->SetFocus(false); + QSymbianControl *id = static_cast<QSymbianControl *>(q->internalWinId()); + + if (id) { + if(id->IsFocused()) // Avoid unnecessary calls to FocusChanged() + id->setFocusSafely(false); id->MakeVisible(false); if (QWidgetBackingStore *bs = maybeBackingStore()) bs->releaseBuffer(); @@ -364,55 +487,26 @@ void QWidgetPrivate::setFocus_sys() Q_Q(QWidget); if (q->testAttribute(Qt::WA_WState_Created) && q->window()->windowType() != Qt::Popup) if (!q->effectiveWinId()->IsFocused()) // Avoid unnecessry calls to FocusChanged() - q->effectiveWinId()->SetFocus(true); -} - -void QWidgetPrivate::handleSymbianDeferredFocusChanged() -{ - Q_Q(QWidget); - WId control = q->internalWinId(); - if (!control) { - // This could happen if the widget was reparented, while the focuschange - // was in the event queue. - return; - } - - if (control->IsFocused()) { - QApplication::setActiveWindow(q); -#ifdef Q_WS_S60 - // If widget is fullscreen, hide status pane and button container - // otherwise show them. - CEikStatusPane* statusPane = S60->statusPane(); - CEikButtonGroupContainer* buttonGroup = S60->buttonGroupContainer(); - bool isFullscreen = q->windowState() & Qt::WindowFullScreen; - if (statusPane && (statusPane->IsVisible() == isFullscreen)) - statusPane->MakeVisible(!isFullscreen); - if (buttonGroup && (buttonGroup->IsVisible() == isFullscreen)) - buttonGroup->MakeVisible(!isFullscreen); -#endif - } else { - QApplication::setActiveWindow(0); - } + static_cast<QSymbianControl *>(q->effectiveWinId())->setFocusSafely(true); } void QWidgetPrivate::raise_sys() { Q_Q(QWidget); + Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); - QTLWExtra *tlwExtra = maybeTopData(); - if (q->internalWinId() && tlwExtra) { - tlwExtra->rwindow->SetOrdinalPosition(0); - } + if (q->internalWinId()) + q->internalWinId()->DrawableWindow()->SetOrdinalPosition(0); } void QWidgetPrivate::lower_sys() { Q_Q(QWidget); + Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); - QTLWExtra *tlwExtra = maybeTopData(); - if (q->internalWinId() && tlwExtra) { - tlwExtra->rwindow->SetOrdinalPosition(-1); - } + if (q->internalWinId()) + q->internalWinId()->DrawableWindow()->SetOrdinalPosition(-1); + if (!q->isWindow()) invalidateBuffer(q->rect()); } @@ -426,10 +520,13 @@ void QWidgetPrivate::stackUnder_sys(QWidget* w) { Q_Q(QWidget); Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); - QTLWExtra *tlwExtra = maybeTopData(); - QTLWExtra *tlwExtraSibling = w->d_func()->maybeTopData(); - if (q->internalWinId() && tlwExtra && w->internalWinId() && tlwExtraSibling) - tlwExtra->rwindow->SetOrdinalPosition(tlwExtraSibling->rwindow->OrdinalPosition() + 1); + + if (q->internalWinId() && w->internalWinId()) { + RDrawableWindow *const thisWindow = q->internalWinId()->DrawableWindow(); + RDrawableWindow *const otherWindow = w->internalWinId()->DrawableWindow(); + thisWindow->SetOrdinalPosition(otherWindow->OrdinalPosition() + 1); + } + if (!q->isWindow() || !w->internalWinId()) invalidateBuffer(q->rect()); } @@ -437,6 +534,7 @@ void QWidgetPrivate::stackUnder_sys(QWidget* w) void QWidgetPrivate::reparentChildren() { Q_Q(QWidget); + QObjectList chlist = q->children(); for (int i = 0; i < chlist.size(); ++i) { // reparent children QObject *obj = chlist.at(i); @@ -467,6 +565,7 @@ void QWidgetPrivate::reparentChildren() void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f) { Q_Q(QWidget); + bool wasCreated = q->testAttribute(Qt::WA_WState_Created); if (q->isVisible() && q->parentWidget() && parent != q->parentWidget()) @@ -475,7 +574,7 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f) if (q->testAttribute(Qt::WA_DropSiteRegistered)) q->setAttribute(Qt::WA_DropSiteRegistered, false); - WId old_winid = wasCreated ? data.winid : 0; + QSymbianControl *old_winid = static_cast<QSymbianControl *>(wasCreated ? data.winid : 0); if ((q->windowType() == Qt::Desktop)) old_winid = 0; setWinId(0); @@ -485,7 +584,7 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f) if (wasCreated && old_winid) { old_winid->MakeVisible(false); if (old_winid->IsFocused()) // Avoid unnecessary calls to FocusChanged() - old_winid->SetFocus(false); + old_winid->setFocusSafely(false); old_winid->SetParent(0); } @@ -536,17 +635,14 @@ void QWidgetPrivate::s60UpdateIsOpaque() if ((data.window_flags & Qt::FramelessWindowHint) == 0) return; + RWindow *const window = static_cast<RWindow *>(q->effectiveWinId()->DrawableWindow()); + if (!isOpaque) { - QTLWExtra *topExtra = topData(); - RWindow *rwindow = static_cast<RWindow*>(topExtra->rwindow); - TDisplayMode gotDM = (TDisplayMode)rwindow->SetRequiredDisplayMode(EColor16MA); - if (rwindow->SetTransparencyAlphaChannel() == KErrNone) - rwindow->SetBackgroundColor(TRgb(255, 255, 255, 0)); - } else { - QTLWExtra *topExtra = topData(); - RWindow *rwindow = static_cast<RWindow*>(topExtra->rwindow); - rwindow->SetTransparentRegion(TRegionFix<1>()); - } + const TDisplayMode displayMode = static_cast<TDisplayMode>(window->SetRequiredDisplayMode(EColor16MA)); + if (window->SetTransparencyAlphaChannel() == KErrNone) + window->SetBackgroundColor(TRgb(255, 255, 255, 0)); + } else + window->SetTransparentRegion(TRegionFix<1>()); } CFbsBitmap* qt_pixmapToNativeBitmap(QPixmap pixmap, bool invert) @@ -722,8 +818,8 @@ void QWidgetPrivate::scroll_sys(int dx, int dy) scrollRect(q->rect(), dx, dy); } else { Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); - RDrawableWindow* rw = topData()->rwindow; - rw->Scroll(TPoint(dx, dy)); + RDrawableWindow *const window = q->internalWinId()->DrawableWindow(); + window->Scroll(TPoint(dx, dy)); } } @@ -735,8 +831,8 @@ void QWidgetPrivate::scroll_sys(int dx, int dy, const QRect &r) scrollRect(r, dx, dy); } else { Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); - RDrawableWindow* rw = topData()->rwindow; - rw->Scroll(TPoint(dx, dy), qt_QRect2TRect(r)); + RDrawableWindow *const window = q->internalWinId()->DrawableWindow(); + window->Scroll(TPoint(dx, dy), qt_QRect2TRect(r)); } } @@ -768,8 +864,6 @@ void QWidgetPrivate::registerDropSite(bool /* on */) void QWidgetPrivate::createTLSysExtra() { extra->topextra->backingStore = 0; - extra->topextra->activated = 0; - extra->topextra->rwindow = 0; } void QWidgetPrivate::deleteTLSysExtra() @@ -780,7 +874,8 @@ void QWidgetPrivate::deleteTLSysExtra() void QWidgetPrivate::createSysExtra() { - + extra->activated = 0; + extra->disableBlit = 0; } void QWidgetPrivate::deleteSysExtra() @@ -903,9 +998,10 @@ QPoint QWidget::mapToGlobal(const QPoint &pos) const return pos + tp; } - // This is the native window case. Consider using CCoeControl::PositionRelativeToScreen() - // if we decide to go with CCoeControl - return QPoint(); + // Native window case + const TPoint widgetScreenOffset = internalWinId()->PositionRelativeToScreen(); + const QPoint globalPos = QPoint(widgetScreenOffset.iX, widgetScreenOffset.iY) + pos; + return globalPos; } QPoint QWidget::mapFromGlobal(const QPoint &pos) const @@ -919,13 +1015,16 @@ QPoint QWidget::mapFromGlobal(const QPoint &pos) const return pos - tp; } - // ### TODO native window - return QPoint(); + // Native window case + const TPoint widgetScreenOffset = internalWinId()->PositionRelativeToScreen(); + const QPoint widgetPos = pos - QPoint(widgetScreenOffset.iX, widgetScreenOffset.iY); + return widgetPos; } void QWidget::setWindowState(Qt::WindowStates newstate) { Q_D(QWidget); + Qt::WindowStates oldstate = windowState(); if (oldstate == newstate) return; @@ -1002,17 +1101,17 @@ void QWidget::setWindowState(Qt::WindowStates newstate) if ((oldstate & Qt::WindowMinimized) != (newstate & Qt::WindowMinimized)) { if (newstate & Qt::WindowMinimized) { if (isVisible()) { - WId id = effectiveWinId(); + QSymbianControl *id = static_cast<QSymbianControl *>(effectiveWinId()); if (id->IsFocused()) // Avoid unnecessary calls to FocusChanged() - id->SetFocus(false); + id->setFocusSafely(false); id->MakeVisible(false); } } else { if (isVisible()) { - WId id = effectiveWinId(); + QSymbianControl *id = static_cast<QSymbianControl *>(effectiveWinId()); id->MakeVisible(true); if (!id->IsFocused()) // Avoid unnecessary calls to FocusChanged() - id->SetFocus(true); + id->setFocusSafely(true); } const QRect normalGeometry = geometry(); const QRect r = top->normalGeometry; @@ -1039,7 +1138,7 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) if (!isWindow() && parentWidget()) parentWidget()->d_func()->invalidateBuffer(geometry()); d->deactivateWidgetCleanup(); - WId id = internalWinId(); + QSymbianControl *id = static_cast<QSymbianControl *>(internalWinId()); if (testAttribute(Qt::WA_WState_Created)) { #ifndef QT_NO_IM @@ -1067,7 +1166,7 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) } if (destroyWindow && !(windowType() == Qt::Desktop) && id) { if (id->IsFocused()) // Avoid unnecessry calls to FocusChanged() - id->SetFocus(false); + id->setFocusSafely(false); id->ControlEnv()->AppUi()->RemoveFromStack(id); // Hack to activate window under destroyed one. With this activation @@ -1173,11 +1272,12 @@ void QWidget::releaseMouse() void QWidget::activateWindow() { Q_D(QWidget); + QWidget *tlw = window(); if (tlw->isVisible()) { window()->createWinId(); - WId id = tlw->internalWinId(); - id->SetFocus(true); + QSymbianControl *id = static_cast<QSymbianControl *>(tlw->internalWinId()); + id->setFocusSafely(true); } } diff --git a/src/gui/s60framework/qs60mainapplication.h b/src/gui/s60framework/qs60mainapplication.h index 457764c..5f621e0 100644 --- a/src/gui/s60framework/qs60mainapplication.h +++ b/src/gui/s60framework/qs60mainapplication.h @@ -42,7 +42,7 @@ #ifndef QS60MAINAPPLICATION_H #define QS60MAINAPPLICATION_H -#include <qglobal.h> +#include <QtCore/qglobal.h> #ifdef Q_WS_S60 diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 1e57167..6bdb79e 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -2397,8 +2397,6 @@ QRect QS60Style::subControlRect(ComplexControl control, const QStyleOptionComple // lets use spinbox frame here as well, as no combobox specific value available. const int frameThickness = cmb->frame ? pixelMetric(PM_SpinBoxFrameWidth, cmb, widget) : 0; const int buttonWidth = QS60StylePrivate::pixelMetric(QStyle::PM_ButtonIconSize); - const int xposMod = (cmb->rect.x()) + width - buttonMargin - buttonWidth; - const int ypos = cmb->rect.y(); QSize buttonSize; buttonSize.setHeight(qMax(8, (cmb->rect.height()>>1) - frameThickness)); //minimum of 8 pixels @@ -2406,15 +2404,18 @@ QRect QS60Style::subControlRect(ComplexControl control, const QStyleOptionComple buttonSize = buttonSize.expandedTo(QApplication::globalStrut()); switch (scontrol) { case SC_ComboBoxArrow: - ret.setRect(xposMod, ypos + buttonMargin, buttonWidth, height - 2*buttonMargin); + ret.setRect( + ret.x() + ret.width() - buttonMargin - buttonWidth, + ret.y() + buttonMargin, + buttonWidth, + height - 2*buttonMargin); break; case SC_ComboBoxEditField: { - const int withFrameX = cmb->rect.x() + cmb->rect.width() - frameThickness - buttonSize.width(); - ret = QRect( - frameThickness, - frameThickness, - withFrameX - frameThickness, - cmb->rect.height() - 2*frameThickness); + ret.setRect( + ret.x() + frameThickness, + ret.y() + frameThickness, + ret.width() - 2*frameThickness - buttonSize.width(), + ret.height() - 2*frameThickness); } break; default: diff --git a/src/gui/styles/qs60style.h b/src/gui/styles/qs60style.h index fd18bc3..6be3197 100644 --- a/src/gui/styles/qs60style.h +++ b/src/gui/styles/qs60style.h @@ -76,6 +76,9 @@ public: void unpolish(QWidget *widget); void polish(QApplication *application); void unpolish(QApplication *application); +#ifndef Q_NO_USING_KEYWORD + using QCommonStyle::polish; +#endif void setStyleProperty(const char *name, const QVariant &value); QVariant styleProperty(const char *name) const; diff --git a/src/gui/styles/qwindowsvistastyle.cpp b/src/gui/styles/qwindowsvistastyle.cpp index b062a3f..6cb8b40 100644 --- a/src/gui/styles/qwindowsvistastyle.cpp +++ b/src/gui/styles/qwindowsvistastyle.cpp @@ -731,14 +731,11 @@ void QWindowsVistaStyle::drawPrimitive(PrimitiveElement element, const QStyleOpt { const QStyleOptionViewItemV4 *vopt; const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(widget); - bool newStyle = false; + bool newStyle = true; + + if (qobject_cast<const QTableView*>(widget)) + newStyle = false; - if (const QListView *listview = qobject_cast<const QListView *>(widget)) { - if (listview->viewMode() == QListView::IconMode) - newStyle = true; - } else if (qobject_cast<const QTreeView *>(widget)) { - newStyle = true; - } if (newStyle && view && (vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option))) { bool selected = vopt->state & QStyle::State_Selected; bool hover = vopt->state & QStyle::State_MouseOver; @@ -1496,14 +1493,11 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption { const QStyleOptionViewItemV4 *vopt; const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(widget); - bool newStyle = false; + bool newStyle = true; + + if (qobject_cast<const QTableView*>(widget)) + newStyle = false; - if (const QListView *listview = qobject_cast<const QListView *>(widget)) { - if (listview->viewMode() == QListView::IconMode) - newStyle = true; - } else if (qobject_cast<const QTreeView *>(widget)) { - newStyle = true; - } if (newStyle && view && (vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option))) { /* // We cannot currently get the correct selection color for "explorer style" views diff --git a/src/gui/styles/qwindowsvistastyle_p.h b/src/gui/styles/qwindowsvistastyle_p.h index d4170aa..e9bbb77 100644 --- a/src/gui/styles/qwindowsvistastyle_p.h +++ b/src/gui/styles/qwindowsvistastyle_p.h @@ -84,6 +84,7 @@ #include <qinputdialog.h> #include <qtreeview.h> #include <qlistview.h> +#include <qtableview.h> #include <qbasictimer.h> #include <qcommandlinkbutton.h> diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index ef91983..d73e1c4 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -309,6 +309,7 @@ private: friend class QPicturePaintEngine; friend class QPainterReplayer; friend class QPaintBufferEngine; + friend class QCommandLinkButtonPrivate; #ifndef QT_NO_DATASTREAM friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QFont &); diff --git a/src/gui/text/qfontengine_qpf.cpp b/src/gui/text/qfontengine_qpf.cpp index 996e471..ef3f2ae 100644 --- a/src/gui/text/qfontengine_qpf.cpp +++ b/src/gui/text/qfontengine_qpf.cpp @@ -628,13 +628,13 @@ QImage QFontEngineQPF::alphaMapForGlyph(glyph_t g) { const Glyph *glyph = findGlyph(g); if (!glyph) - QImage(); + return QImage(); const uchar *bits = ((const uchar *) glyph) + sizeof(Glyph); QImage image(glyph->width, glyph->height, QImage::Format_Indexed8); for (int j=0; j<256; ++j) - image.setColor(j, 0xff000000 | j | (j<<8) | (j<<16)); + image.setColor(j, qRgba(0, 0, 0, j)); for (int i=0; i<glyph->height; ++i) { memcpy(image.scanLine(i), bits, glyph->bytesPerLine); diff --git a/src/gui/text/qfontengine_qws.cpp b/src/gui/text/qfontengine_qws.cpp index 888e1be..de8028c 100644 --- a/src/gui/text/qfontengine_qws.cpp +++ b/src/gui/text/qfontengine_qws.cpp @@ -528,10 +528,12 @@ QImage QFontEngineQPF1::alphaMapForGlyph(glyph_t g) QImage image; if (mono) { image = QImage((glyph->metrics->width+7)&~7, glyph->metrics->height, QImage::Format_Mono); + image.setColor(0, qRgba(0, 0, 0, 0)); + image.setColor(1, qRgba(0, 0, 0, 255)); } else { image = QImage(glyph->metrics->width, glyph->metrics->height, QImage::Format_Indexed8); for (int j=0; j<256; ++j) - image.setColor(j, 0xff000000 | j | (j<<8) | (j<<16)); + image.setColor(j, qRgba(0, 0, 0, j)); } for (int i=0; i<glyph->metrics->height; ++i) { memcpy(image.scanLine(i), bits, glyph->metrics->linestep); diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index 61532b9..95ff4c1 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -403,8 +403,8 @@ QComboBoxPrivateContainer::QComboBoxPrivateContainer(QAbstractItemView *itemView layout->setMargin(0); #ifdef QT_SOFTKEYS_ENABLED - selectAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::SelectSoftKey, Qt::Key_Select, itemView); - cancelAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::CancelSoftKey, Qt::Key_Escape, itemView); + selectAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::SelectSoftKey, Qt::Key_Select, this); + cancelAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::CancelSoftKey, Qt::Key_Escape, this); addAction(selectAction); addAction(cancelAction); #endif @@ -534,6 +534,7 @@ void QComboBoxPrivateContainer::setItemView(QAbstractItemView *itemView) this, SLOT(setCurrentIndex(QModelIndex))); disconnect(view, SIGNAL(destroyed()), this, SLOT(viewDestroyed())); + delete view; view = 0; } @@ -571,11 +572,6 @@ void QComboBoxPrivateContainer::setItemView(QAbstractItemView *itemView) this, SLOT(setCurrentIndex(QModelIndex))); connect(view, SIGNAL(destroyed()), this, SLOT(viewDestroyed())); - -#ifdef QT_SOFTKEYS_ENABLED - selectAction->setParent(itemView); - cancelAction->setParent(itemView); -#endif } /*! diff --git a/src/gui/widgets/qcommandlinkbutton.cpp b/src/gui/widgets/qcommandlinkbutton.cpp index e64f687..9adf280 100644 --- a/src/gui/widgets/qcommandlinkbutton.cpp +++ b/src/gui/widgets/qcommandlinkbutton.cpp @@ -140,23 +140,34 @@ QFont QCommandLinkButtonPrivate::titleFont() const Q_Q(const QCommandLinkButton); QFont font = q->font(); if (usingVistaStyle()) { - if (!q->testAttribute(Qt::WA_SetFont)) - font.setPointSizeF(12.0); + font.setPointSizeF(12.0); } else { font.setBold(true); - if (!q->testAttribute(Qt::WA_SetFont)) - font.setPointSizeF(9.0); + font.setPointSizeF(9.0); } - return font; + + // Note the font will be resolved against + // QPainters font, so we need to restore the mask + int resolve_mask = font.resolve_mask; + QFont modifiedFont = q->font().resolve(font); + modifiedFont.detach(); + modifiedFont.resolve_mask = resolve_mask; + return modifiedFont; } QFont QCommandLinkButtonPrivate::descriptionFont() const { Q_Q(const QCommandLinkButton); QFont font = q->font(); - if (!q->testAttribute(Qt::WA_SetFont)) - font.setPointSizeF(9.0); - return font; + font.setPointSizeF(9.0); + + // Note the font will be resolved against + // QPainters font, so we need to restore the mask + int resolve_mask = font.resolve_mask; + QFont modifiedFont = q->font().resolve(font); + modifiedFont.detach(); + modifiedFont.resolve_mask = resolve_mask; + return modifiedFont; } QRect QCommandLinkButtonPrivate::titleRect() const diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp index f36ffc8..46c4392 100644 --- a/src/multimedia/audio/qaudioinput_alsa_p.cpp +++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp @@ -57,6 +57,8 @@ QT_BEGIN_NAMESPACE //#define DEBUG_AUDIO 1 +static const int minimumIntervalTime = 50; + QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat): settings(audioFormat) { @@ -248,6 +250,7 @@ bool QAudioInputPrivate::open() qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()"; #endif timeStamp.restart(); + elapsedTimeOffset = 0; int dir; int err=-1; @@ -283,69 +286,69 @@ bool QAudioInputPrivate::open() err = snd_pcm_hw_params_any( handle, hwparams ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params_any: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_any: err = %1").arg(err); } if ( !fatal ) { err = snd_pcm_hw_params_set_rate_resample( handle, hwparams, 1 ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params_set_rate_resample: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_rate_resample: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_access( handle, hwparams, access ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params_set_access: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_access: err = %1").arg(err); } } if ( !fatal ) { err = setFormat(); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params_set_format: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_format: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channels() ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params_set_channels: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_channels: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_rate_near( handle, hwparams, &freakuency, 0 ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params_set_rate_near: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_rate_near: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_buffer_time_near(handle, hwparams, &buffer_time, &dir); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params_set_buffer_time_near: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_period_time_near(handle, hwparams, &period_time, &dir); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params_set_period_time_near: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_period_time_near: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_periods_near(handle, hwparams, &chunks, &dir); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params_set_periods_near: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_periods_near: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params(handle, hwparams); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioInput: snd_pcm_hw_params: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params: err = %1").arg(err); } } if( err < 0) { @@ -443,7 +446,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) if (readFrames >= 0) { err = snd_pcm_frames_to_bytes(handle, readFrames); #ifdef DEBUG_AUDIO - qDebug()<<QString(tr("PULL: read in bytes = %1 (frames=%2)")).arg(err).arg(readFrames).toLatin1().constData(); + qDebug()<<QString::fromLatin1("PULL: read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData(); #endif break; } else if((readFrames == -EAGAIN) || (readFrames == -EINTR)) { @@ -531,7 +534,10 @@ int QAudioInputPrivate::periodSize() const void QAudioInputPrivate::setNotifyInterval(int ms) { - intervalTime = ms; + if(ms >= minimumIntervalTime) + intervalTime = ms; + else + intervalTime = minimumIntervalTime; } int QAudioInputPrivate::notifyInterval() const @@ -579,8 +585,9 @@ bool QAudioInputPrivate::deviceReady() if(deviceState != QAudio::ActiveState) return true; - if(timeStamp.elapsed() > intervalTime && intervalTime > 50) { + if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { emit notify(); + elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; timeStamp.restart(); } return true; @@ -650,7 +657,7 @@ qint64 InputPrivate::readData( char* data, qint64 len) if (readFrames >= 0) { err = snd_pcm_frames_to_bytes(audioDevice->handle, readFrames); #ifdef DEBUG_AUDIO - qDebug()<<QString(tr("PUSH: read in bytes = %1 (frames=%2)")).arg(err).arg(readFrames).toLatin1().constData(); + qDebug()<<QString::fromLatin1("PUSH: read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData(); #endif break; } else if((readFrames == -EAGAIN) || (readFrames == -EINTR)) { diff --git a/src/multimedia/audio/qaudioinput_alsa_p.h b/src/multimedia/audio/qaudioinput_alsa_p.h index a1cc738..5583ea0 100644 --- a/src/multimedia/audio/qaudioinput_alsa_p.h +++ b/src/multimedia/audio/qaudioinput_alsa_p.h @@ -117,6 +117,7 @@ private: QTimer* timer; QTime timeStamp; + qint64 elapsedTimeOffset; int intervalTime; char* audioBuffer; int bytesAvailable; diff --git a/src/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/audio/qaudioinput_win32_p.cpp index 31441ae..d4226f5 100644 --- a/src/multimedia/audio/qaudioinput_win32_p.cpp +++ b/src/multimedia/audio/qaudioinput_win32_p.cpp @@ -59,6 +59,8 @@ QT_BEGIN_NAMESPACE static CRITICAL_SECTION waveInCriticalSection; +static const int minimumIntervalTime = 50; + QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat): settings(audioFormat) { @@ -226,6 +228,7 @@ bool QAudioInputPrivate::open() period_size = buffer_size/2; #endif timeStamp.restart(); + elapsedTimeOffset = 0; wfx.nSamplesPerSec = settings.frequency(); wfx.wBitsPerSample = settings.sampleSize(); wfx.nChannels = settings.channels(); @@ -297,6 +300,7 @@ bool QAudioInputPrivate::open() return false; } timeStampOpened.restart(); + elapsedTimeOffset = 0; totalTimeValue = 0; errorState = QAudio::NoError; deviceState = QAudio::ActiveState; @@ -473,7 +477,10 @@ int QAudioInputPrivate::periodSize() const void QAudioInputPrivate::setNotifyInterval(int ms) { - intervalTime = ms; + if(ms >= minimumIntervalTime) + intervalTime = ms; + else + intervalTime = minimumIntervalTime; } int QAudioInputPrivate::notifyInterval() const @@ -524,8 +531,9 @@ bool QAudioInputPrivate::deviceReady() if(deviceState != QAudio::ActiveState) return true; - if(timeStamp.elapsed() > intervalTime && intervalTime > 50) { + if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { emit notify(); + elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; timeStamp.restart(); } return true; diff --git a/src/multimedia/audio/qaudioinput_win32_p.h b/src/multimedia/audio/qaudioinput_win32_p.h index 3363b6a..26c470d 100644 --- a/src/multimedia/audio/qaudioinput_win32_p.h +++ b/src/multimedia/audio/qaudioinput_win32_p.h @@ -109,6 +109,7 @@ private: int bytesAvailable; int intervalTime; QTime timeStamp; + qint64 elapsedTimeOffset; QTime timeStampOpened; qint64 totalTimeValue; bool pullMode; diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp index e8a3f5c..0d37d61 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp +++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp @@ -57,6 +57,8 @@ QT_BEGIN_NAMESPACE //#define DEBUG_AUDIO 1 +static const int minimumIntervalTime = 50; + QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat): settings(audioFormat) { @@ -271,6 +273,7 @@ bool QAudioOutputPrivate::open() qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()"; #endif timeStamp.restart(); + elapsedTimeOffset = 0; int dir; int err=-1; @@ -304,69 +307,69 @@ bool QAudioOutputPrivate::open() err = snd_pcm_hw_params_any( handle, hwparams ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params_any: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_any: err = %1").arg(err); } if ( !fatal ) { err = snd_pcm_hw_params_set_rate_resample( handle, hwparams, 1 ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params_set_rate_resample: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_rate_resample: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_access( handle, hwparams, access ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params_set_access: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_access: err = %1").arg(err); } } if ( !fatal ) { err = setFormat(); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params_set_format: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_format: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channels() ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params_set_channels: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_channels: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_rate_near( handle, hwparams, &freakuency, 0 ); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params_set_rate_near: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_rate_near: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_buffer_time_near(handle, hwparams, &buffer_time, &dir); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params_set_buffer_time_near: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_period_time_near(handle, hwparams, &period_time, &dir); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params_set_period_time_near: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_period_time_near: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params_set_periods_near(handle, hwparams, &chunks, &dir); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params_set_periods_near: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_periods_near: err = %1").arg(err); } } if ( !fatal ) { err = snd_pcm_hw_params(handle, hwparams); if ( err < 0 ) { fatal = true; - errMessage = QString(tr("QAudioOutput: snd_pcm_hw_params: err = %1")).arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params: err = %1").arg(err); } } if( err < 0) { @@ -404,6 +407,8 @@ bool QAudioOutputPrivate::open() // Step 6: Start audio processing timer->start(period_time/1000); + timeStamp.restart(); + elapsedTimeOffset = 0; errorState = QAudio::NoError; totalTimeValue = 0; opened = true; @@ -500,7 +505,10 @@ int QAudioOutputPrivate::bufferSize() const void QAudioOutputPrivate::setNotifyInterval(int ms) { - intervalTime = ms; + if(ms >= minimumIntervalTime) + intervalTime = ms; + else + intervalTime = minimumIntervalTime; } int QAudioOutputPrivate::notifyInterval() const @@ -629,8 +637,9 @@ bool QAudioOutputPrivate::deviceReady() if(deviceState != QAudio::ActiveState) return true; - if(timeStamp.elapsed() > intervalTime && intervalTime > 50) { + if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { emit notify(); + elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; timeStamp.restart(); } return true; diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.h b/src/multimedia/audio/qaudiooutput_alsa_p.h index 63fe348..6d4177d 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.h +++ b/src/multimedia/audio/qaudiooutput_alsa_p.h @@ -134,6 +134,7 @@ private: QByteArray m_device; int bytesAvailable; QTime timeStamp; + qint64 elapsedTimeOffset; char* audioBuffer; snd_pcm_t* handle; snd_async_handler_t* ahandler; diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp index aea3a3f..bb61f41 100644 --- a/src/multimedia/audio/qaudiooutput_win32_p.cpp +++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp @@ -58,6 +58,8 @@ QT_BEGIN_NAMESPACE static CRITICAL_SECTION waveOutCriticalSection; +static const int minimumIntervalTime = 50; + QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat): settings(audioFormat) { @@ -221,6 +223,7 @@ bool QAudioOutputPrivate::open() audioBuffer = new char[buffer_size]; timeStamp.restart(); + elapsedTimeOffset = 0; wfx.nSamplesPerSec = settings.frequency(); wfx.wBitsPerSample = settings.sampleSize(); @@ -261,6 +264,7 @@ bool QAudioOutputPrivate::open() totalTimeValue = 0; timeStampOpened.restart(); + elapsedTimeOffset = 0; errorState = QAudio::NoError; if(pullMode) { @@ -316,7 +320,10 @@ int QAudioOutputPrivate::bufferSize() const void QAudioOutputPrivate::setNotifyInterval(int ms) { - intervalTime = ms; + if(ms >= minimumIntervalTime) + intervalTime = ms; + else + intervalTime = minimumIntervalTime; } int QAudioOutputPrivate::notifyInterval() const @@ -420,7 +427,6 @@ void QAudioOutputPrivate::feedback() bool QAudioOutputPrivate::deviceReady() { if(pullMode) { - int i = 0; int chunks = bytesAvailable/period_size; #ifdef DEBUG_AUDIO qDebug()<<"deviceReady() avail="<<bytesAvailable<<" bytes, period size="<<period_size<<" bytes"; @@ -430,6 +436,22 @@ bool QAudioOutputPrivate::deviceReady() if(totalTimeValue == 0) startup = true; + bool full=false; + EnterCriticalSection(&waveOutCriticalSection); + if(waveFreeBlockCount==0) full = true; + LeaveCriticalSection(&waveOutCriticalSection); + if (full){ +#ifdef DEBUG_AUDIO + qDebug() << "Skipping data as unable to write"; +#endif + if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime ) { + emit notify(); + elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; + timeStamp.restart(); + } + return true; + } + if(startup) waveOutPause(hWaveOut); int input = period_size*chunks; @@ -451,7 +473,7 @@ bool QAudioOutputPrivate::deviceReady() } LeaveCriticalSection(&waveOutCriticalSection); - } else if(i < 0) { + } else if(l < 0) { bytesAvailable = bytesFree(); errorState = QAudio::IOError; } @@ -459,8 +481,9 @@ bool QAudioOutputPrivate::deviceReady() if(deviceState != QAudio::ActiveState) return true; - if(timeStamp.elapsed() > intervalTime && intervalTime > 50) { + if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { emit notify(); + elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; timeStamp.restart(); } @@ -468,7 +491,7 @@ bool QAudioOutputPrivate::deviceReady() } qint64 QAudioOutputPrivate::clock() const -{ +{ if(deviceState != QAudio::ActiveState) return 0; diff --git a/src/multimedia/audio/qaudiooutput_win32_p.h b/src/multimedia/audio/qaudiooutput_win32_p.h index 5c08bf4..bcf8e1e 100644 --- a/src/multimedia/audio/qaudiooutput_win32_p.h +++ b/src/multimedia/audio/qaudiooutput_win32_p.h @@ -109,6 +109,7 @@ private: bool resuming; int bytesAvailable; QTime timeStamp; + qint64 elapsedTimeOffset; QTime timeStampOpened; qint32 buffer_size; qint32 period_size; diff --git a/src/network/kernel/qhostinfo_win.cpp b/src/network/kernel/qhostinfo_win.cpp index 55aa77a..d9d7234 100644 --- a/src/network/kernel/qhostinfo_win.cpp +++ b/src/network/kernel/qhostinfo_win.cpp @@ -186,7 +186,7 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName) results.setHostName(hostName); if (aceHostname.isEmpty()) { results.setError(QHostInfo::HostNotFound); - results.setErrorString(hostName.isEmpty() ? QObject::tr("No host name given") : QObject::tr("Invalid hostname")); + results.setErrorString(hostName.isEmpty() ? tr("No host name given") : tr("Invalid hostname")); return results; } } else { diff --git a/src/opengl/qgl_egl.cpp b/src/opengl/qgl_egl.cpp index 5ce1a45..6c93bea 100644 --- a/src/opengl/qgl_egl.cpp +++ b/src/opengl/qgl_egl.cpp @@ -142,10 +142,12 @@ void QGLContext::reset() d->cleanup(); doneCurrent(); if (d->eglContext) { + if (d->eglSurface != EGL_NO_SURFACE) + eglDestroySurface(d->eglContext->display(), d->eglSurface); delete d->eglContext; - d->eglContext = 0; } - d->eglSurface = EGL_NO_SURFACE; // XXX - probably need to destroy surface + d->eglContext = 0; + d->eglSurface = EGL_NO_SURFACE; d->crWin = false; d->sharing = false; d->valid = false; diff --git a/src/opengl/qglpixmapfilter.cpp b/src/opengl/qglpixmapfilter.cpp index bb3cb5d..1ae3866 100644 --- a/src/opengl/qglpixmapfilter.cpp +++ b/src/opengl/qglpixmapfilter.cpp @@ -79,34 +79,28 @@ protected: bool processGL(QPainter *painter, const QPointF &pos, const QPixmap &pixmap, const QRectF &srcRect) const; }; -#ifndef QT_OPENGL_ES_2 - -class QGLPixmapConvolutionFilter: public QGLPixmapFilter<QPixmapConvolutionFilter> +class QGLPixmapConvolutionFilter: public QGLCustomShaderStage, public QGLPixmapFilter<QPixmapConvolutionFilter> { public: QGLPixmapConvolutionFilter(); ~QGLPixmapConvolutionFilter(); + void setUniforms(QGLShaderProgram *program); + protected: bool processGL(QPainter *painter, const QPointF &pos, const QPixmap &src, const QRectF &srcRect) const; private: QByteArray generateConvolutionShader() const; - mutable QGLShaderProgram *m_program; - mutable int m_scaleUniform; - mutable int m_matrixUniform; - - mutable int m_kernelWidth; - mutable int m_kernelHeight; + mutable QSize m_srcSize; + mutable int m_prevKernelSize; }; -#endif - class QGLPixmapBlurFilter : public QGLCustomShaderStage, public QGLPixmapFilter<QPixmapBlurFilter> { public: - QGLPixmapBlurFilter(QPixmapBlurFilter::BlurHint hint); + QGLPixmapBlurFilter(Qt::RenderHint hint); void setUniforms(QGLShaderProgram *program); @@ -121,7 +115,7 @@ private: mutable bool m_haveCached; mutable int m_cachedRadius; - mutable QPixmapBlurFilter::BlurHint m_hint; + mutable Qt::RenderHint m_hint; }; extern QGLWidget *qt_gl_share_widget(); @@ -137,67 +131,26 @@ QPixmapFilter *QGL2PaintEngineEx::pixmapFilter(int type, const QPixmapFilter *pr case QPixmapFilter::BlurFilter: { const QPixmapBlurFilter *proto = static_cast<const QPixmapBlurFilter *>(prototype); - if (proto->blurHint() == QPixmapBlurFilter::PerformanceHint || proto->radius() <= 5) { + if (proto->blurHint() == Qt::PerformanceHint || proto->radius() <= 5) { if (!d->fastBlurFilter) - d->fastBlurFilter.reset(new QGLPixmapBlurFilter(QPixmapBlurFilter::PerformanceHint)); + d->fastBlurFilter.reset(new QGLPixmapBlurFilter(Qt::PerformanceHint)); return d->fastBlurFilter.data(); } if (!d->blurFilter) - d->blurFilter.reset(new QGLPixmapBlurFilter(QPixmapBlurFilter::QualityHint)); + d->blurFilter.reset(new QGLPixmapBlurFilter(Qt::QualityHint)); return d->blurFilter.data(); } -#ifndef QT_OPENGL_ES_2 case QPixmapFilter::ConvolutionFilter: if (!d->convolutionFilter) d->convolutionFilter.reset(new QGLPixmapConvolutionFilter); return d->convolutionFilter.data(); -#endif default: break; } return QPaintEngineEx::pixmapFilter(type, prototype); } -#ifndef QT_OPENGL_ES_2 // XXX: needs to be ported - -extern void qt_add_rect_to_array(const QRectF &r, q_vertexType *array); -extern void qt_add_texcoords_to_array(qreal x1, qreal y1, qreal x2, qreal y2, q_vertexType *array); - -static void qgl_drawTexture(const QRectF &rect, int tx_width, int tx_height, const QRectF & src) -{ -#ifndef QT_OPENGL_ES - glPushAttrib(GL_CURRENT_BIT); -#endif - qreal x1, x2, y1, y2; - - x1 = src.x() / tx_width; - x2 = x1 + src.width() / tx_width; - y1 = 1.0 - ((src.y() / tx_height) + (src.height() / tx_height)); - y2 = 1.0 - (src.y() / tx_height); - - q_vertexType vertexArray[4*2]; - q_vertexType texCoordArray[4*2]; - - qt_add_rect_to_array(rect, vertexArray); - qt_add_texcoords_to_array(x1, y2, x2, y1, texCoordArray); - - glVertexPointer(2, q_vertexTypeEnum, 0, vertexArray); - glTexCoordPointer(2, q_vertexTypeEnum, 0, texCoordArray); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_VERTEX_ARRAY); - -#ifndef QT_OPENGL_ES - glPopAttrib(); -#endif -} - -#endif // !QT_OPENGL_ES_2 - static const char *qt_gl_colorize_filter = "uniform lowp vec4 colorizeColor;" "uniform lowp float colorizeStrength;" @@ -231,102 +184,88 @@ void QGLPixmapColorizeFilter::setUniforms(QGLShaderProgram *program) program->setUniformValue("colorizeStrength", float(strength())); } -#ifndef QT_OPENGL_ES_2 +void QGLPixmapConvolutionFilter::setUniforms(QGLShaderProgram *program) +{ + const qreal *kernel = convolutionKernel(); + int kernelWidth = columns(); + int kernelHeight = rows(); + int kernelSize = kernelWidth * kernelHeight; + + QVarLengthArray<GLfloat> matrix(kernelSize); + QVarLengthArray<GLfloat> offset(kernelSize * 2); + + for(int i = 0; i < kernelSize; ++i) + matrix[i] = kernel[i]; + + for(int y = 0; y < kernelHeight; ++y) { + for(int x = 0; x < kernelWidth; ++x) { + offset[(y * kernelWidth + x) * 2] = x - (kernelWidth / 2); + offset[(y * kernelWidth + x) * 2 + 1] = (kernelHeight / 2) - y; + } + } + + const qreal iw = 1.0 / m_srcSize.width(); + const qreal ih = 1.0 / m_srcSize.height(); + program->setUniformValue("inv_texture_size", iw, ih); + program->setUniformValueArray("matrix", matrix.constData(), kernelSize, 1); + program->setUniformValueArray("offset", offset.constData(), kernelSize, 2); +} // generates convolution filter code for arbitrary sized kernel QByteArray QGLPixmapConvolutionFilter::generateConvolutionShader() const { QByteArray code; - code.append("uniform sampler2D texture;\n" - "uniform vec2 inv_texture_size;\n" - "uniform float matrix["); - code.append(QByteArray::number(m_kernelWidth * m_kernelHeight)); - code.append("];\n" - "vec2 offset["); - code.append(QByteArray::number(m_kernelWidth*m_kernelHeight)); + int kernelWidth = columns(); + int kernelHeight = rows(); + int kernelSize = kernelWidth * kernelHeight; + code.append("uniform highp vec2 inv_texture_size;\n" + "uniform mediump float matrix["); + code.append(QByteArray::number(kernelSize)); code.append("];\n" - "void main(void) {\n"); - - for(int y = 0; y < m_kernelHeight; y++) { - for(int x = 0; x < m_kernelWidth; x++) { - code.append(" offset["); - code.append(QByteArray::number(y * m_kernelWidth + x)); - code.append("] = vec2(inv_texture_size.x * "); - code.append(QByteArray::number(x-(int)(m_kernelWidth/2))); - code.append(".0, inv_texture_size.y * "); - code.append(QByteArray::number((int)(m_kernelHeight/2)-y)); - code.append(".0);\n"); - } - } + "uniform highp vec2 offset["); + code.append(QByteArray::number(kernelSize)); + code.append("];\n"); + code.append("lowp vec4 customShader(lowp sampler2D src, highp vec2 srcCoords) {\n"); code.append(" int i = 0;\n" - " vec2 coords = gl_TexCoord[0].st;\n" - " vec4 sum = vec4(0.0);\n" + " lowp vec4 sum = vec4(0.0);\n" " for (i = 0; i < "); - code.append(QByteArray::number(m_kernelWidth * m_kernelHeight)); + code.append(QByteArray::number(kernelSize)); code.append("; i++) {\n" - " vec4 tmp = texture2D(texture,coords+offset[i]);\n" - " sum += matrix[i] * tmp;\n" + " sum += matrix[i] * texture2D(src,srcCoords+inv_texture_size*offset[i]);\n" " }\n" - " gl_FragColor = sum;\n" + " return sum;\n" "}"); return code; } QGLPixmapConvolutionFilter::QGLPixmapConvolutionFilter() - : m_program(0) - , m_scaleUniform(0) - , m_matrixUniform(0) - , m_kernelWidth(0) - , m_kernelHeight(0) + : m_prevKernelSize(-1) { } QGLPixmapConvolutionFilter::~QGLPixmapConvolutionFilter() { - delete m_program; } -bool QGLPixmapConvolutionFilter::processGL(QPainter *, const QPointF &pos, const QPixmap &src, const QRectF &srcRect) const +bool QGLPixmapConvolutionFilter::processGL(QPainter *painter, const QPointF &pos, const QPixmap &src, const QRectF &srcRect) const { - QRectF target = (srcRect.isNull() ? QRectF(src.rect()) : srcRect).translated(pos); - - bindTexture(src); -#ifdef GL_CLAMP - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); -#endif - if (!m_program || m_kernelWidth != columns() || m_kernelHeight != rows()) { - delete m_program; - - m_kernelWidth = columns(); - m_kernelHeight = rows(); - - QByteArray code = generateConvolutionShader(); - m_program = new QGLShaderProgram(); - m_program->addShader(QGLShader::FragmentShader, code); - m_program->link(); - m_scaleUniform = m_program->uniformLocation("inv_texture_size"); - m_matrixUniform = m_program->uniformLocation("matrix"); + QGLPixmapConvolutionFilter *filter = const_cast<QGLPixmapConvolutionFilter *>(this); + + m_srcSize = src.size(); + + int kernelSize = rows() * columns(); + if (m_prevKernelSize == -1 || m_prevKernelSize != kernelSize) { + filter->setSource(generateConvolutionShader()); + m_prevKernelSize = kernelSize; } - const qreal *kernel = convolutionKernel(); - GLfloat *conv = new GLfloat[m_kernelWidth * m_kernelHeight]; - for(int i = 0; i < m_kernelWidth * m_kernelHeight; ++i) - conv[i] = kernel[i]; - - const qreal iw = 1.0 / src.width(); - const qreal ih = 1.0 / src.height(); - m_program->enable(); - m_program->setUniformValue(m_scaleUniform, iw, ih); - m_program->setUniformValueArray(m_matrixUniform, conv, m_kernelWidth * m_kernelHeight, 1); - - qgl_drawTexture(target, src.width(), src.height(), boundingRectFor(srcRect)); - m_program->disable(); + filter->setOnPainter(painter); + painter->drawPixmap(pos, src, srcRect); + filter->removeFromPainter(painter); + return true; } -#endif // !QT_OPENGL_ES_2 - static const char *qt_gl_blur_filter_fast = "const int samples = 9;" "uniform mediump vec2 delta;" @@ -340,12 +279,12 @@ static const char *qt_gl_blur_filter_fast = " return color * (1.0 / float(samples));" "}"; -QGLPixmapBlurFilter::QGLPixmapBlurFilter(QPixmapBlurFilter::BlurHint hint) +QGLPixmapBlurFilter::QGLPixmapBlurFilter(Qt::RenderHint hint) : m_haveCached(false) , m_cachedRadius(5) , m_hint(hint) { - if (hint == PerformanceHint) { + if (hint == Qt::PerformanceHint) { QGLPixmapBlurFilter *filter = const_cast<QGLPixmapBlurFilter *>(this); filter->setSource(qt_gl_blur_filter_fast); m_haveCached = true; @@ -357,7 +296,7 @@ bool QGLPixmapBlurFilter::processGL(QPainter *painter, const QPointF &pos, const QGLPixmapBlurFilter *filter = const_cast<QGLPixmapBlurFilter *>(this); int radius = this->radius(); - if (!m_haveCached || (m_hint == QualityHint && radius != m_cachedRadius)) { + if (!m_haveCached || (m_hint == Qt::QualityHint && radius != m_cachedRadius)) { // Only regenerate the shader from source if parameters have changed. m_haveCached = true; m_cachedRadius = radius; @@ -419,7 +358,7 @@ bool QGLPixmapBlurFilter::processGL(QPainter *painter, const QPointF &pos, const void QGLPixmapBlurFilter::setUniforms(QGLShaderProgram *program) { - if (m_hint == QualityHint) { + if (m_hint == Qt::QualityHint) { if (m_horizontalBlur) program->setUniformValue("delta", 1.0 / m_textureSize.width(), 0.0); else diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp index bd3883a..a904064 100644 --- a/src/opengl/qpaintengine_opengl.cpp +++ b/src/opengl/qpaintengine_opengl.cpp @@ -4791,22 +4791,6 @@ void QGLGlyphCache::cacheGlyphs(QGLContext *context, const QTextItemInt &ti, } QImage glyph_im(ti.fontEngine->alphaMapForGlyph(glyphs[i])); - - // The QPF implementation of alphaMapForGlyph() uses the color - // RGBA = (value, value, value, 255) instead of the color - // RGBA = (0, 0, 0, value) that the other font engines use. - // We modify the image colors to rectify this situation. - QFontEngine::Type type = ti.fontEngine->type(); - if (type == QFontEngine::QPF1 || type == QFontEngine::QPF2) { - if (glyph_im.format() == QImage::Format_Indexed8) { - for (int i = 0; i < 256; ++i) - glyph_im.setColor(i, qRgba(0, 0, 0, i)); - } else if (glyph_im.format() == QImage::Format_Mono) { - glyph_im.setColor(0, qRgba(0, 0, 0, 0)); - glyph_im.setColor(1, qRgba(0, 0, 0, 255)); - } - } - glyph_im = glyph_im.convertToFormat(QImage::Format_Indexed8); glyph_width = glyph_im.width(); Q_ASSERT(glyph_width >= 0); diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index 3558c28..b129164 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -3023,20 +3023,6 @@ void QVGFontGlyphCache::cacheGlyphs VGImage vgImage = VG_INVALID_HANDLE; metrics = ti.fontEngine->boundingBox(glyph); if (!scaledImage.isNull()) { // Not a space character - // The QPF implementation of alphaMapForGlyph() uses the color - // RGBA = (value, value, value, 255) instead of the color - // RGBA = (0, 0, 0, value) that the other font engines use. - // We modify the image colors to rectify this situation. - QFontEngine::Type type = ti.fontEngine->type(); - if (type == QFontEngine::QPF1 || type == QFontEngine::QPF2) { - if (scaledImage.format() == QImage::Format_Indexed8) { - for (int i = 0; i < 256; ++i) - scaledImage.setColor(i, qRgba(0, 0, 0, i)); - } else if (scaledImage.format() == QImage::Format_Mono) { - scaledImage.setColor(0, qRgba(0, 0, 0, 0)); - scaledImage.setColor(1, qRgba(0, 0, 0, 255)); - } - } if (scaledImage.format() == QImage::Format_Indexed8) { vgImage = vgCreateImage(VG_A_8, scaledImage.width(), scaledImage.height(), VG_IMAGE_QUALITY_FASTER); vgImageSubData(vgImage, scaledImage.bits(), scaledImage.bytesPerLine(), VG_A_8, 0, 0, scaledImage.width(), scaledImage.height()); diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp index 043189e..a9ae72c 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp @@ -1249,7 +1249,7 @@ static void rasterFallbackWarn(const char *msg, const char *func, const device * dbg << dev << "of type" << dev->devType(); } - dbg << QString("transformationType 0x%1").arg(transformationType, 3, 16, QLatin1Char('0')) + dbg << QString::fromLatin1("transformationType 0x%1").arg(transformationType, 3, 16, QLatin1Char('0')) << "simplePen" << simplePen << "clipType" << clipType << "compositionModeStatus" << compositionModeStatus; diff --git a/src/plugins/phonon/mmf/mmf.pro b/src/plugins/phonon/mmf/mmf.pro new file mode 100644 index 0000000..ff27ea1 --- /dev/null +++ b/src/plugins/phonon/mmf/mmf.pro @@ -0,0 +1,4 @@ +TEMPLATE = subdirs +SUBDIRS = mmfphonondebug plugin + +plugin.depends = mmfphonondebug diff --git a/src/plugins/phonon/mmf/mmfphonondebug/mmfphonondebug.pro b/src/plugins/phonon/mmf/mmfphonondebug/mmfphonondebug.pro new file mode 100644 index 0000000..2cfec15 --- /dev/null +++ b/src/plugins/phonon/mmf/mmfphonondebug/mmfphonondebug.pro @@ -0,0 +1,31 @@ +TEMPLATE = lib +TARGET = phonon_mmf_debug +OBJECTDUMP_DIR = $$QT_SOURCE_TREE/src/3rdparty/phonon/mmf/mmfphonondebug + +CONFIG += staticlib + +DEFINES += OBJECTDUMP_LIBRARY + +HEADERS += \ + $$OBJECTDUMP_DIR/objectdump_global.h \ + $$OBJECTDUMP_DIR/objectdump.h \ + $$OBJECTDUMP_DIR/objecttree.h + +SOURCES += \ + $$OBJECTDUMP_DIR/objectdump.cpp \ + $$OBJECTDUMP_DIR/objecttree.cpp + +symbian { + HEADERS += $$OBJECTDUMP_DIR/objectdump_symbian.h + SOURCES += $$OBJECTDUMP_DIR/objectdump_symbian.cpp + + LIBS += -lcone + LIBS += -lws32 + + TARGET.CAPABILITY = all -tcb + +} else { + SOURCES += $$OBJECTDUMP_DIR/objectdump_stub.cpp +} + +TARGET.UID3=0x2001E62A diff --git a/src/plugins/phonon/mmf/plugin/plugin.pro b/src/plugins/phonon/mmf/plugin/plugin.pro new file mode 100644 index 0000000..eb7fd27 --- /dev/null +++ b/src/plugins/phonon/mmf/plugin/plugin.pro @@ -0,0 +1,88 @@ +# MMF Phonon backend + +QT += phonon +TARGET = phonon_mmf +PHONON_MMF_DIR = $$QT_SOURCE_TREE/src/3rdparty/phonon/mmf + +# Uncomment the following line in order to use the CDrmPlayerUtility client +# API for audio playback, rather than CMdaAudioPlayerUtility. +#CONFIG += phonon_mmf_audio_drm + +phonon_mmf_audio_drm { + LIBS += -lDrmAudioPlayUtility + DEFINES += QT_PHONON_MMF_AUDIO_DRM +} else { + LIBS += -lmediaclientaudio +} + +# This is necessary because both epoc32/include and Phonon contain videoplayer.h. +# By making /epoc32/include the first SYSTEMINCLUDE, we ensure that +# '#include <videoplayer.h>' picks up the Symbian header, as intended. +PREPEND_INCLUDEPATH = /epoc32/include + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + +HEADERS += \ + $$PHONON_MMF_DIR/abstractaudioeffect.h \ + $$PHONON_MMF_DIR/abstractmediaplayer.h \ + $$PHONON_MMF_DIR/abstractplayer.h \ + $$PHONON_MMF_DIR/audiooutput.h \ + $$PHONON_MMF_DIR/audioequalizer.h \ + $$PHONON_MMF_DIR/audioplayer.h \ + $$PHONON_MMF_DIR/backend.h \ + $$PHONON_MMF_DIR/bassboost.h \ + $$PHONON_MMF_DIR/defs.h \ + $$PHONON_MMF_DIR/dummyplayer.h \ + $$PHONON_MMF_DIR/effectfactory.h \ + $$PHONON_MMF_DIR/mmf_medianode.h \ + $$PHONON_MMF_DIR/mediaobject.h \ + $$PHONON_MMF_DIR/utils.h \ + $$PHONON_MMF_DIR/videooutput.h \ + $$PHONON_MMF_DIR/videooutputobserver.h \ + $$PHONON_MMF_DIR/mmf_videoplayer.h \ + $$PHONON_MMF_DIR/videowidget.h \ + $$PHONON_MMF_DIR/volumeobserver.h + +SOURCES += \ + $$PHONON_MMF_DIR/abstractaudioeffect.cpp \ + $$PHONON_MMF_DIR/abstractmediaplayer.cpp \ + $$PHONON_MMF_DIR/abstractplayer.cpp \ + $$PHONON_MMF_DIR/audiooutput.cpp \ + $$PHONON_MMF_DIR/audioequalizer.cpp \ + $$PHONON_MMF_DIR/audioplayer.cpp \ + $$PHONON_MMF_DIR/backend.cpp \ + $$PHONON_MMF_DIR/bassboost.cpp \ + $$PHONON_MMF_DIR/dummyplayer.cpp \ + $$PHONON_MMF_DIR/effectfactory.cpp \ + $$PHONON_MMF_DIR/mmf_medianode.cpp \ + $$PHONON_MMF_DIR/mediaobject.cpp \ + $$PHONON_MMF_DIR/utils.cpp \ + $$PHONON_MMF_DIR/videooutput.cpp \ + $$PHONON_MMF_DIR/mmf_videoplayer.cpp \ + $$PHONON_MMF_DIR/videowidget.cpp + +debug { + INCLUDEPATH += $$PHONON_MMF_DIR/mmfphonondebug + LIBS += -lphonon_mmf_debug.lib + LIBS += -lhal +} + +LIBS += -lmediaclientvideo # For CVideoPlayerUtility +LIBS += -lcone # For CCoeEnv +LIBS += -lws32 # For RWindow +LIBS += -lefsrv # For file server +LIBS += -lapgrfx -lapmime # For recognizer + +# These are for effects. +LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect + +# This is needed for having the .qtplugin file properly created on Symbian. +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/phonon_backend + +target.path = $$[QT_INSTALL_PLUGINS]/phonon_backend +INSTALLS += target + +include(../../../qpluginbase.pri) + +TARGET.UID3=0x2001E629 + diff --git a/src/plugins/phonon/phonon.pro b/src/plugins/phonon/phonon.pro index e43a4c2..814a062 100644 --- a/src/plugins/phonon/phonon.pro +++ b/src/plugins/phonon/phonon.pro @@ -7,3 +7,4 @@ mac:contains(QT_CONFIG, phonon-backend): SUBDIRS *= qt7 win32:!wince*:contains(QT_CONFIG, phonon-backend): SUBDIRS *= ds9 wince*:contains(QT_CONFIG, phonon-backend): SUBDIRS *= waveout wince*:contains(QT_CONFIG, directshow): SUBDIRS *= ds9 +symbian:contains(QT_CONFIG, phonon-backend): SUBDIRS *= mmf diff --git a/src/s60installs/qt.iby b/src/s60installs/qt.iby index dc9ec43..3a7f008 100644 --- a/src/s60installs/qt.iby +++ b/src/s60installs/qt.iby @@ -71,6 +71,9 @@ file=ABI_DIR\BUILD_DIR\qtwcodecs.dll SHARED_LIB_DIR\qtwcodecs.dll PAG // iconengines file=ABI_DIR\BUILD_DIR\qsvgicon.dll SHARED_LIB_DIR\qsvgicon.dll PAGED +// Phonon MMF backend +file=ABI_DIR\BUILD_DIR\phonon_mmf.dll SHARED_LIB_DIR\phonon_mmf.dll PAGED + // graphicssystems file=ABI_DIR\BUILD_DIR\qvggraphicssystem.dll SHARED_LIB_DIR\qvggraphicssystem.dll PAGED @@ -93,6 +96,9 @@ data=\epoc32\winscw\c\resource\qt\plugins\codecs\qtwcodecs.qtplugin res // iconengines stubs data=\epoc32\winscw\c\resource\qt\plugins\iconengines\qsvgicon.qtplugin resource\qt\plugins\iconengines\qsvgicon.qtplugin +// Phonon MMF backend +data=\epoc32\winscw\c\resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin + // graphicssystems data=\epoc32\winscw\c\resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 2bf64e3..d21c524 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -73,6 +73,13 @@ symbian: { codecs_plugins.sources = qcncodecs.dll qjpcodecs.dll qtwcodecs.dll qkrcodecs.dll codecs_plugins.path = $$QT_PLUGINS_BASE_DIR/codecs + contains(QT_CONFIG, phonon-backend) { + phonon_backend_plugins.sources += phonon_mmf.dll + + phonon_backend_plugins.path = $$QT_PLUGINS_BASE_DIR/phonon_backend + DEPLOYMENT += phonon_backend_plugins + } + DEPLOYMENT += qtresources qtlibraries imageformats_plugins codecs_plugins graphicssystems_plugins contains(QT_CONFIG, svg): { diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index ee25239..9604fff 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -1606,6 +1606,9 @@ QScriptValue QScriptEngine::newFunction(QScriptEngine::FunctionSignature fun, } #ifndef QT_NO_REGEXP + +extern QString qt_regexp_toCanonical(const QString &, QRegExp::PatternSyntax); + /*! Creates a QtScript object of class RegExp with the given \a regexp. @@ -1620,7 +1623,6 @@ QScriptValue QScriptEngine::newRegExp(const QRegExp ®exp) JSC::ArgList args(buf, sizeof(buf)); //convert the pattern to a ECMAScript pattern - extern QString qt_regexp_toCanonical(const QString &, QRegExp::PatternSyntax); QString pattern = qt_regexp_toCanonical(regexp.pattern(), regexp.patternSyntax()); if (regexp.isMinimal()) { QString ecmaPattern; diff --git a/src/script/api/qscriptvalue.h b/src/script/api/qscriptvalue.h index 2bc89bd..32f7a43 100644 --- a/src/script/api/qscriptvalue.h +++ b/src/script/api/qscriptvalue.h @@ -216,9 +216,9 @@ public: private: // force compile error, prevent QScriptValue(bool) to be called - inline QScriptValue(void *); + QScriptValue(void *); // force compile error, prevent QScriptValue(QScriptEngine*, bool) to be called - inline QScriptValue(QScriptEngine *, void *); + QScriptValue(QScriptEngine *, void *); QScriptValue(QScriptValuePrivate*); diff --git a/src/script/script.pro b/src/script/script.pro index 6c6b701..008c556 100644 --- a/src/script/script.pro +++ b/src/script/script.pro @@ -62,6 +62,14 @@ DEFINES += WTF_USE_JAVASCRIPTCORE_BINDINGS=1 WTF_CHANGES=1 DEFINES += NDEBUG +solaris-g++:isEqual(QT_ARCH,sparc) { + CONFIG -= separate_debug_info + CONFIG += no_debug_info +} + +# Avoid JSC C API functions being exported. +DEFINES += JS_EXPORT="" JS_EXPORTDATA="" + INCLUDEPATH += $$PWD include(script.pri) diff --git a/src/scripttools/debugging/qscriptbreakpointsmodel.cpp b/src/scripttools/debugging/qscriptbreakpointsmodel.cpp index 82a7c6a..40acebb 100644 --- a/src/scripttools/debugging/qscriptbreakpointsmodel.cpp +++ b/src/scripttools/debugging/qscriptbreakpointsmodel.cpp @@ -47,6 +47,7 @@ #include "private/qabstractitemmodel_p.h" #include <QtCore/qpair.h> +#include <QtCore/qcoreapplication.h> #include <QtGui/qicon.h> #include <QtCore/qdebug.h> @@ -451,17 +452,17 @@ QVariant QScriptBreakpointsModel::headerData(int section, Qt::Orientation orient if (orient == Qt::Horizontal) { if (role == Qt::DisplayRole) { if (section == 0) - return QObject::tr("ID"); + return QCoreApplication::translate("QScriptBreakpointsModel", "ID"); else if (section == 1) - return QObject::tr("Location"); + return QCoreApplication::translate("QScriptBreakpointsModel", "Location"); else if (section == 2) - return QObject::tr("Condition"); + return QCoreApplication::translate("QScriptBreakpointsModel", "Condition"); else if (section == 3) - return QObject::tr("Ignore-count"); + return QCoreApplication::translate("QScriptBreakpointsModel", "Ignore-count"); else if (section == 4) - return QObject::tr("Single-shot"); + return QCoreApplication::translate("QScriptBreakpointsModel", "Single-shot"); else if (section == 5) - return QObject::tr("Hit-count"); + return QCoreApplication::translate("QScriptBreakpointsModel", "Hit-count"); } } return QVariant(); diff --git a/src/scripttools/debugging/qscriptbreakpointswidget.cpp b/src/scripttools/debugging/qscriptbreakpointswidget.cpp index 356c6d5..688c7c8 100644 --- a/src/scripttools/debugging/qscriptbreakpointswidget.cpp +++ b/src/scripttools/debugging/qscriptbreakpointswidget.cpp @@ -78,7 +78,7 @@ public: toolClose = new QToolButton(this); toolClose->setIcon(QIcon(QString::fromUtf8(":/qt/scripttools/debugging/images/%1/closetab.png").arg(system))); toolClose->setAutoRaise(true); - toolClose->setText(QObject::tr("Close")); + toolClose->setText(tr("Close")); hboxLayout->addWidget(toolClose); fileNameEdit = new QLineEdit(); @@ -295,13 +295,13 @@ QScriptBreakpointsWidget::QScriptBreakpointsWidget(QWidget *parent) QIcon newBreakpointIcon; newBreakpointIcon.addPixmap(d->pixmap(QString::fromLatin1("new.png")), QIcon::Normal); - QAction *newBreakpointAction = new QAction(newBreakpointIcon, QObject::tr("New"), this); + QAction *newBreakpointAction = new QAction(newBreakpointIcon, tr("New"), this); QObject::connect(newBreakpointAction, SIGNAL(triggered()), this, SLOT(_q_newBreakpoint())); QIcon deleteBreakpointIcon; deleteBreakpointIcon.addPixmap(d->pixmap(QString::fromLatin1("delete.png")), QIcon::Normal); - d->deleteBreakpointAction = new QAction(deleteBreakpointIcon, QObject::tr("Delete"), this); + d->deleteBreakpointAction = new QAction(deleteBreakpointIcon, tr("Delete"), this); d->deleteBreakpointAction->setEnabled(false); QObject::connect(d->deleteBreakpointAction, SIGNAL(triggered()), this, SLOT(_q_deleteBreakpoint())); diff --git a/src/scripttools/debugging/qscriptdebugger.cpp b/src/scripttools/debugging/qscriptdebugger.cpp index c09e494..58d707f 100644 --- a/src/scripttools/debugging/qscriptdebugger.cpp +++ b/src/scripttools/debugging/qscriptdebugger.cpp @@ -882,8 +882,8 @@ void QScriptDebuggerPrivate::_q_goToLine() if (!view) return; bool ok = false; - int lineNumber = QInputDialog::getInteger(0, QObject::tr("Go to Line"), - QObject::tr("Line:"), + int lineNumber = QInputDialog::getInteger(0, QScriptDebugger::tr("Go to Line"), + QScriptDebugger::tr("Line:"), view->cursorLineNumber(), 1, INT_MAX, 1, &ok); if (ok) @@ -1674,9 +1674,9 @@ QAction *QScriptDebugger::interruptAction(QObject *parent) const interruptIcon.addPixmap(d->pixmap(QString::fromLatin1("interrupt.png")), QIcon::Normal); interruptIcon.addPixmap(d->pixmap(QString::fromLatin1("d_interrupt.png")), QIcon::Disabled); QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->interruptAction = new QAction(interruptIcon, QObject::tr("Interrupt"), parent); + that->d_func()->interruptAction = new QAction(interruptIcon, QScriptDebugger::tr("Interrupt"), parent); d->interruptAction->setEnabled(!d->interactive); - d->interruptAction->setShortcut(QObject::tr("Shift+F5")); + d->interruptAction->setShortcut(QScriptDebugger::tr("Shift+F5")); QObject::connect(d->interruptAction, SIGNAL(triggered()), that, SLOT(_q_interrupt())); } @@ -1691,9 +1691,9 @@ QAction *QScriptDebugger::continueAction(QObject *parent) const continueIcon.addPixmap(d->pixmap(QString::fromLatin1("play.png")), QIcon::Normal); continueIcon.addPixmap(d->pixmap(QString::fromLatin1("d_play.png")), QIcon::Disabled); QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->continueAction = new QAction(continueIcon, QObject::tr("Continue"), parent); + that->d_func()->continueAction = new QAction(continueIcon, QScriptDebugger::tr("Continue"), parent); d->continueAction->setEnabled(d->interactive); - d->continueAction->setShortcut(QObject::tr("F5")); + d->continueAction->setShortcut(QScriptDebugger::tr("F5")); QObject::connect(d->continueAction, SIGNAL(triggered()), that, SLOT(_q_continue())); } @@ -1708,9 +1708,9 @@ QAction *QScriptDebugger::stepIntoAction(QObject *parent) const stepIntoIcon.addPixmap(d->pixmap(QString::fromLatin1("stepinto.png")), QIcon::Normal); stepIntoIcon.addPixmap(d->pixmap(QString::fromLatin1("d_stepinto.png")), QIcon::Disabled); QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->stepIntoAction = new QAction(stepIntoIcon, QObject::tr("Step Into"), parent); + that->d_func()->stepIntoAction = new QAction(stepIntoIcon, QScriptDebugger::tr("Step Into"), parent); d->stepIntoAction->setEnabled(d->interactive); - d->stepIntoAction->setShortcut(QObject::tr("F11")); + d->stepIntoAction->setShortcut(QScriptDebugger::tr("F11")); QObject::connect(d->stepIntoAction, SIGNAL(triggered()), that, SLOT(_q_stepInto())); } @@ -1725,9 +1725,9 @@ QAction *QScriptDebugger::stepOverAction(QObject *parent) const stepOverIcon.addPixmap(d->pixmap(QString::fromLatin1("stepover.png")), QIcon::Normal); stepOverIcon.addPixmap(d->pixmap(QString::fromLatin1("d_stepover.png")), QIcon::Disabled); QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->stepOverAction = new QAction(stepOverIcon, QObject::tr("Step Over"), parent); + that->d_func()->stepOverAction = new QAction(stepOverIcon, QScriptDebugger::tr("Step Over"), parent); d->stepOverAction->setEnabled(d->interactive); - d->stepOverAction->setShortcut(QObject::tr("F10")); + d->stepOverAction->setShortcut(QScriptDebugger::tr("F10")); QObject::connect(d->stepOverAction, SIGNAL(triggered()), that, SLOT(_q_stepOver())); } @@ -1742,9 +1742,9 @@ QAction *QScriptDebugger::stepOutAction(QObject *parent) const stepOutIcon.addPixmap(d->pixmap(QString::fromLatin1("stepout.png")), QIcon::Normal); stepOutIcon.addPixmap(d->pixmap(QString::fromLatin1("d_stepout.png")), QIcon::Disabled); QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->stepOutAction = new QAction(stepOutIcon, QObject::tr("Step Out"), parent); + that->d_func()->stepOutAction = new QAction(stepOutIcon, QScriptDebugger::tr("Step Out"), parent); d->stepOutAction->setEnabled(d->interactive); - d->stepOutAction->setShortcut(QObject::tr("Shift+F11")); + d->stepOutAction->setShortcut(QScriptDebugger::tr("Shift+F11")); QObject::connect(d->stepOutAction, SIGNAL(triggered()), that, SLOT(_q_stepOut())); } @@ -1759,9 +1759,9 @@ QAction *QScriptDebugger::runToCursorAction(QObject *parent) const runToCursorIcon.addPixmap(d->pixmap(QString::fromLatin1("runtocursor.png")), QIcon::Normal); runToCursorIcon.addPixmap(d->pixmap(QString::fromLatin1("d_runtocursor.png")), QIcon::Disabled); QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->runToCursorAction = new QAction(runToCursorIcon, QObject::tr("Run to Cursor"), parent); + that->d_func()->runToCursorAction = new QAction(runToCursorIcon, QScriptDebugger::tr("Run to Cursor"), parent); d->runToCursorAction->setEnabled(d->interactive); - d->runToCursorAction->setShortcut(QObject::tr("Ctrl+F10")); + d->runToCursorAction->setShortcut(QScriptDebugger::tr("Ctrl+F10")); QObject::connect(d->runToCursorAction, SIGNAL(triggered()), that, SLOT(_q_runToCursor())); } @@ -1777,7 +1777,7 @@ QAction *QScriptDebugger::runToNewScriptAction(QObject *parent) const runToNewScriptIcon.addPixmap(d->pixmap(QString::fromLatin1("d_breakonscriptload.png")), QIcon::Disabled); QScriptDebugger *that = const_cast<QScriptDebugger*>(this); that->d_func()->runToNewScriptAction = new QAction(runToNewScriptIcon, - QObject::tr("Run to New Script"), parent); + QScriptDebugger::tr("Run to New Script"), parent); d->runToNewScriptAction->setEnabled(d->interactive); QObject::connect(d->runToNewScriptAction, SIGNAL(triggered()), that, SLOT(_q_runToNewScript())); @@ -1792,8 +1792,8 @@ QAction *QScriptDebugger::toggleBreakpointAction(QObject *parent) const QIcon toggleBreakpointIcon; QScriptDebugger *that = const_cast<QScriptDebugger*>(this); that->d_func()->toggleBreakpointAction = new QAction(toggleBreakpointIcon, - QObject::tr("Toggle Breakpoint"), parent); - d->toggleBreakpointAction->setShortcut(QObject::tr("F9")); + QScriptDebugger::tr("Toggle Breakpoint"), parent); + d->toggleBreakpointAction->setShortcut(QScriptDebugger::tr("F9")); d->toggleBreakpointAction->setEnabled((d->codeWidget != 0) && (d->codeWidget->currentView() != 0)); QObject::connect(d->toggleBreakpointAction, SIGNAL(triggered()), that, SLOT(_q_toggleBreakpoint())); @@ -1807,7 +1807,7 @@ QAction *QScriptDebugger::clearDebugOutputAction(QObject *parent) const if (!d->clearDebugOutputAction) { QIcon clearDebugOutputIcon; QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->clearDebugOutputAction = new QAction(clearDebugOutputIcon, QObject::tr("Clear Debug Output"), parent); + that->d_func()->clearDebugOutputAction = new QAction(clearDebugOutputIcon, QScriptDebugger::tr("Clear Debug Output"), parent); QObject::connect(d->clearDebugOutputAction, SIGNAL(triggered()), that, SLOT(_q_clearDebugOutput())); } @@ -1820,7 +1820,7 @@ QAction *QScriptDebugger::clearErrorLogAction(QObject *parent) const if (!d->clearErrorLogAction) { QIcon clearErrorLogIcon; QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->clearErrorLogAction = new QAction(clearErrorLogIcon, QObject::tr("Clear Error Log"), parent); + that->d_func()->clearErrorLogAction = new QAction(clearErrorLogIcon, QScriptDebugger::tr("Clear Error Log"), parent); QObject::connect(d->clearErrorLogAction, SIGNAL(triggered()), that, SLOT(_q_clearErrorLog())); } @@ -1833,7 +1833,7 @@ QAction *QScriptDebugger::clearConsoleAction(QObject *parent) const if (!d->clearConsoleAction) { QIcon clearConsoleIcon; QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->clearConsoleAction = new QAction(clearConsoleIcon, QObject::tr("Clear Console"), parent); + that->d_func()->clearConsoleAction = new QAction(clearConsoleIcon, QScriptDebugger::tr("Clear Console"), parent); QObject::connect(d->clearConsoleAction, SIGNAL(triggered()), that, SLOT(_q_clearConsole())); } @@ -1847,8 +1847,8 @@ QAction *QScriptDebugger::findInScriptAction(QObject *parent) const QIcon findInScriptIcon; findInScriptIcon.addPixmap(d->pixmap(QString::fromLatin1("find.png")), QIcon::Normal); QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->findInScriptAction = new QAction(findInScriptIcon, QObject::tr("&Find in Script..."), parent); - d->findInScriptAction->setShortcut(QObject::tr("Ctrl+F")); + that->d_func()->findInScriptAction = new QAction(findInScriptIcon, QScriptDebugger::tr("&Find in Script..."), parent); + d->findInScriptAction->setShortcut(QScriptDebugger::tr("Ctrl+F")); d->findInScriptAction->setEnabled( (d->codeFinderWidget != 0) && (d->codeWidget != 0) @@ -1865,9 +1865,9 @@ QAction *QScriptDebugger::findNextInScriptAction(QObject *parent) const if (!d->findNextInScriptAction) { QIcon findNextInScriptIcon; QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->findNextInScriptAction = new QAction(findNextInScriptIcon, QObject::tr("Find &Next"), parent); + that->d_func()->findNextInScriptAction = new QAction(findNextInScriptIcon, QScriptDebugger::tr("Find &Next"), parent); d->findNextInScriptAction->setEnabled(d->codeFinderWidget && !d->codeFinderWidget->text().isEmpty()); - d->findNextInScriptAction->setShortcut(QObject::tr("F3")); + d->findNextInScriptAction->setShortcut(QScriptDebugger::tr("F3")); QObject::connect(d->findNextInScriptAction, SIGNAL(triggered()), that, SLOT(_q_findNextInScript())); } @@ -1880,9 +1880,9 @@ QAction *QScriptDebugger::findPreviousInScriptAction(QObject *parent) const if (!d->findPreviousInScriptAction) { QIcon findPreviousInScriptIcon; QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->findPreviousInScriptAction = new QAction(findPreviousInScriptIcon, QObject::tr("Find &Previous"), parent); + that->d_func()->findPreviousInScriptAction = new QAction(findPreviousInScriptIcon, QScriptDebugger::tr("Find &Previous"), parent); d->findPreviousInScriptAction->setEnabled(d->codeFinderWidget && !d->codeFinderWidget->text().isEmpty()); - d->findPreviousInScriptAction->setShortcut(QObject::tr("Shift+F3")); + d->findPreviousInScriptAction->setShortcut(QScriptDebugger::tr("Shift+F3")); QObject::connect(d->findPreviousInScriptAction, SIGNAL(triggered()), that, SLOT(_q_findPreviousInScript())); } @@ -1895,8 +1895,8 @@ QAction *QScriptDebugger::goToLineAction(QObject *parent) const if (!d->goToLineAction) { QIcon goToLineIcon; QScriptDebugger *that = const_cast<QScriptDebugger*>(this); - that->d_func()->goToLineAction = new QAction(goToLineIcon, QObject::tr("Go to Line"), parent); - d->goToLineAction->setShortcut(QObject::tr("Ctrl+G")); + that->d_func()->goToLineAction = new QAction(goToLineIcon, QScriptDebugger::tr("Go to Line"), parent); + d->goToLineAction->setShortcut(QScriptDebugger::tr("Ctrl+G")); d->goToLineAction->setEnabled((d->codeWidget != 0) && (d->codeWidget->currentView() != 0)); QObject::connect(d->goToLineAction, SIGNAL(triggered()), that, SLOT(_q_goToLine())); @@ -1907,7 +1907,7 @@ QAction *QScriptDebugger::goToLineAction(QObject *parent) const QMenu *QScriptDebugger::createStandardMenu(QWidget *widgetParent, QObject *actionParent) { QMenu *menu = new QMenu(widgetParent); - menu->setTitle(QObject::tr("Debug")); + menu->setTitle(QScriptDebugger::tr("Debug")); menu->addAction(action(ContinueAction, actionParent)); menu->addAction(action(InterruptAction, actionParent)); menu->addAction(action(StepIntoAction, actionParent)); diff --git a/src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp b/src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp index 5ef5a0c..8ed0aaa 100644 --- a/src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp +++ b/src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp @@ -138,7 +138,7 @@ QScriptDebuggerCodeFinderWidget::QScriptDebuggerCodeFinderWidget(QWidget *parent d->toolClose = new QToolButton(this); d->toolClose->setIcon(QIcon(QString::fromUtf8(":/qt/scripttools/debugging/images/%1/closetab.png").arg(system))); d->toolClose->setAutoRaise(true); - d->toolClose->setText(QObject::tr("Close")); + d->toolClose->setText(tr("Close")); hboxLayout->addWidget(d->toolClose); d->editFind = new QLineEdit(this); diff --git a/src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp b/src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp index 15d43f4..9caefce 100644 --- a/src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp +++ b/src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp @@ -53,6 +53,7 @@ #include "private/qabstractitemmodel_p.h" #include <QtCore/qdebug.h> +#include <QtCore/qcoreapplication.h> #include <QtGui/qbrush.h> #include <QtGui/qfont.h> @@ -868,9 +869,9 @@ QVariant QScriptDebuggerLocalsModel::headerData(int section, Qt::Orientation ori if (orient == Qt::Horizontal) { if (role == Qt::DisplayRole) { if (section == 0) - return QObject::tr("Name"); + return QCoreApplication::translate("QScriptDebuggerLocalsModel", "Name"); else if (section == 1) - return QObject::tr("Value"); + return QCoreApplication::translate("QScriptDebuggerLocalsModel", "Value"); } } return QVariant(); diff --git a/src/scripttools/debugging/qscriptdebuggerstackmodel.cpp b/src/scripttools/debugging/qscriptdebuggerstackmodel.cpp index a63ea73..2d56e17 100644 --- a/src/scripttools/debugging/qscriptdebuggerstackmodel.cpp +++ b/src/scripttools/debugging/qscriptdebuggerstackmodel.cpp @@ -45,6 +45,7 @@ #include <QtScript/qscriptcontextinfo.h> #include <QtCore/qfileinfo.h> +#include <QtCore/qcoreapplication.h> QT_BEGIN_NAMESPACE @@ -157,11 +158,11 @@ QVariant QScriptDebuggerStackModel::headerData(int section, Qt::Orientation orie return QVariant(); if (role == Qt::DisplayRole) { if (section == 0) - return QObject::tr("Level"); + return QCoreApplication::translate("QScriptDebuggerStackModel", "Level"); else if (section == 1) - return QObject::tr("Name"); + return QCoreApplication::translate("QScriptDebuggerStackModel", "Name"); else if (section == 2) - return QObject::tr("Location"); + return QCoreApplication::translate("QScriptDebuggerStackModel", "Location"); } return QVariant(); } diff --git a/src/scripttools/debugging/qscriptedit.cpp b/src/scripttools/debugging/qscriptedit.cpp index 8db9cea..7f0a5e0 100644 --- a/src/scripttools/debugging/qscriptedit.cpp +++ b/src/scripttools/debugging/qscriptedit.cpp @@ -408,14 +408,14 @@ void QScriptEdit::extraAreaMouseEvent(QMouseEvent *e) return; bool has = m_breakpoints.contains(lineNumber); QMenu *popup = new QMenu(); - QAction *toggleAct = new QAction(QObject::tr("Toggle Breakpoint"), popup); + QAction *toggleAct = new QAction(tr("Toggle Breakpoint"), popup); popup->addAction(toggleAct); - QAction *disableAct = new QAction(QObject::tr("Disable Breakpoint"), popup); - QAction *enableAct = new QAction(QObject::tr("Enable Breakpoint"), popup); + QAction *disableAct = new QAction(tr("Disable Breakpoint"), popup); + QAction *enableAct = new QAction(tr("Enable Breakpoint"), popup); QWidget *conditionWidget = new QWidget(); { QHBoxLayout *hbox = new QHBoxLayout(conditionWidget); - hbox->addWidget(new QLabel(QObject::tr("Breakpoint Condition:"))); + hbox->addWidget(new QLabel(tr("Breakpoint Condition:"))); hbox->addWidget(new QLineEdit()); } // QWidgetAction *conditionAct = new QWidgetAction(popup); diff --git a/src/scripttools/debugging/qscriptenginedebugger.cpp b/src/scripttools/debugging/qscriptenginedebugger.cpp index 7456da0..915d511 100644 --- a/src/scripttools/debugging/qscriptenginedebugger.cpp +++ b/src/scripttools/debugging/qscriptenginedebugger.cpp @@ -520,43 +520,43 @@ QMainWindow *QScriptEngineDebugger::standardWindow() const QMainWindow *win = new QMainWindow(); QDockWidget *scriptsDock = new QDockWidget(win); scriptsDock->setObjectName(QLatin1String("qtscriptdebugger_scriptsDockWidget")); - scriptsDock->setWindowTitle(QObject::tr("Loaded Scripts")); + scriptsDock->setWindowTitle(tr("Loaded Scripts")); scriptsDock->setWidget(widget(ScriptsWidget)); win->addDockWidget(Qt::LeftDockWidgetArea, scriptsDock); QDockWidget *breakpointsDock = new QDockWidget(win); breakpointsDock->setObjectName(QLatin1String("qtscriptdebugger_breakpointsDockWidget")); - breakpointsDock->setWindowTitle(QObject::tr("Breakpoints")); + breakpointsDock->setWindowTitle(tr("Breakpoints")); breakpointsDock->setWidget(widget(BreakpointsWidget)); win->addDockWidget(Qt::LeftDockWidgetArea, breakpointsDock); QDockWidget *stackDock = new QDockWidget(win); stackDock->setObjectName(QLatin1String("qtscriptdebugger_stackDockWidget")); - stackDock->setWindowTitle(QObject::tr("Stack")); + stackDock->setWindowTitle(tr("Stack")); stackDock->setWidget(widget(StackWidget)); win->addDockWidget(Qt::RightDockWidgetArea, stackDock); QDockWidget *localsDock = new QDockWidget(win); localsDock->setObjectName(QLatin1String("qtscriptdebugger_localsDockWidget")); - localsDock->setWindowTitle(QObject::tr("Locals")); + localsDock->setWindowTitle(tr("Locals")); localsDock->setWidget(widget(LocalsWidget)); win->addDockWidget(Qt::RightDockWidgetArea, localsDock); QDockWidget *consoleDock = new QDockWidget(win); consoleDock->setObjectName(QLatin1String("qtscriptdebugger_consoleDockWidget")); - consoleDock->setWindowTitle(QObject::tr("Console")); + consoleDock->setWindowTitle(tr("Console")); consoleDock->setWidget(widget(ConsoleWidget)); win->addDockWidget(Qt::BottomDockWidgetArea, consoleDock); QDockWidget *debugOutputDock = new QDockWidget(win); debugOutputDock->setObjectName(QLatin1String("qtscriptdebugger_debugOutputDockWidget")); - debugOutputDock->setWindowTitle(QObject::tr("Debug Output")); + debugOutputDock->setWindowTitle(tr("Debug Output")); debugOutputDock->setWidget(widget(DebugOutputWidget)); win->addDockWidget(Qt::BottomDockWidgetArea, debugOutputDock); QDockWidget *errorLogDock = new QDockWidget(win); errorLogDock->setObjectName(QLatin1String("qtscriptdebugger_errorLogDockWidget")); - errorLogDock->setWindowTitle(QObject::tr("Error Log")); + errorLogDock->setWindowTitle(tr("Error Log")); errorLogDock->setWidget(widget(ErrorLogWidget)); win->addDockWidget(Qt::BottomDockWidgetArea, errorLogDock); @@ -568,14 +568,14 @@ QMainWindow *QScriptEngineDebugger::standardWindow() const #ifndef QT_NO_MENUBAR win->menuBar()->addMenu(that->createStandardMenu(win)); - QMenu *editMenu = win->menuBar()->addMenu(QObject::tr("Search")); + QMenu *editMenu = win->menuBar()->addMenu(tr("Search")); editMenu->addAction(action(FindInScriptAction)); editMenu->addAction(action(FindNextInScriptAction)); editMenu->addAction(action(FindPreviousInScriptAction)); editMenu->addSeparator(); editMenu->addAction(action(GoToLineAction)); - QMenu *viewMenu = win->menuBar()->addMenu(QObject::tr("View")); + QMenu *viewMenu = win->menuBar()->addMenu(tr("View")); viewMenu->addAction(scriptsDock->toggleViewAction()); viewMenu->addAction(breakpointsDock->toggleViewAction()); viewMenu->addAction(stackDock->toggleViewAction()); @@ -593,7 +593,7 @@ QMainWindow *QScriptEngineDebugger::standardWindow() const widget(CodeFinderWidget)->hide(); win->setCentralWidget(central); - win->setWindowTitle(QObject::tr("Qt Script Debugger")); + win->setWindowTitle(tr("Qt Script Debugger")); win->setUnifiedTitleAndToolBarOnMac(true); QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index 7cf5e8b..ff9458b 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -127,7 +127,7 @@ class QODBCPrivate { public: QODBCPrivate(QODBCDriverPrivate *dpp) - : hStmt(0), useSchema(false), hasSQLFetchScroll(true), driverPrivate(dpp) + : hStmt(0), useSchema(false), hasSQLFetchScroll(true), driverPrivate(dpp), userForwardOnly(false) { unicode = false; } @@ -148,6 +148,7 @@ public: int disconnectCount; bool hasSQLFetchScroll; QODBCDriverPrivate *driverPrivate; + bool userForwardOnly; bool isStmtHandleValid(const QSqlDriver *driver); void updateStmtHandleState(const QSqlDriver *driver); @@ -848,7 +849,7 @@ bool QODBCResult::reset (const QString& query) d->updateStmtHandleState(driver()); - if (isForwardOnly()) { + if (d->userForwardOnly) { r = SQLSetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY, @@ -885,7 +886,7 @@ bool QODBCResult::reset (const QString& query) SQLINTEGER isScrollable, bufferLength; r = SQLGetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_SCROLLABLE, &isScrollable, SQL_IS_INTEGER, &bufferLength); if(r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) - setForwardOnly(isScrollable==SQL_NONSCROLLABLE); + QSqlResult::setForwardOnly(isScrollable==SQL_NONSCROLLABLE); SQLSMALLINT count; SQLNumResultCols(d->hStmt, &count); @@ -1194,7 +1195,7 @@ bool QODBCResult::prepare(const QString& query) d->updateStmtHandleState(driver()); - if (isForwardOnly()) { + if (d->userForwardOnly) { r = SQLSetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY, @@ -1508,7 +1509,7 @@ bool QODBCResult::exec() SQLINTEGER isScrollable, bufferLength; r = SQLGetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_SCROLLABLE, &isScrollable, SQL_IS_INTEGER, &bufferLength); if(r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) - setForwardOnly(isScrollable==SQL_NONSCROLLABLE); + QSqlResult::setForwardOnly(isScrollable==SQL_NONSCROLLABLE); SQLSMALLINT count; SQLNumResultCols(d->hStmt, &count); @@ -1639,6 +1640,12 @@ void QODBCResult::virtual_hook(int id, void *data) } } +void QODBCResult::setForwardOnly(bool forward) +{ + d->userForwardOnly = forward; + QSqlResult::setForwardOnly(forward); +} + //////////////////////////////////////// diff --git a/src/sql/drivers/odbc/qsql_odbc.h b/src/sql/drivers/odbc/qsql_odbc.h index d8a3b69..8bd7660 100644 --- a/src/sql/drivers/odbc/qsql_odbc.h +++ b/src/sql/drivers/odbc/qsql_odbc.h @@ -100,6 +100,7 @@ public: bool exec(); QVariant handle() const; + virtual void setForwardOnly(bool forward); protected: bool fetchNext(); diff --git a/src/sql/drivers/tds/qsql_tds.cpp b/src/sql/drivers/tds/qsql_tds.cpp index 46508a0..2508833 100644 --- a/src/sql/drivers/tds/qsql_tds.cpp +++ b/src/sql/drivers/tds/qsql_tds.cpp @@ -754,7 +754,9 @@ QString QTDSDriver::formatValue(const QSqlField &field, r = QLatin1String("NULL"); else if (field.type() == QVariant::DateTime) { if (field.value().toDateTime().isValid()){ - r = field.value().toDateTime().toString(QLatin1String("'yyyyMMdd hh:mm:ss'")); + r = field.value().toDateTime().toString(QLatin1String("yyyyMMdd hh:mm:ss")); + r.prepend(QLatin1String("'")); + r.append(QLatin1String("'")); } else r = QLatin1String("NULL"); } else if (field.type() == QVariant::ByteArray) { @@ -805,4 +807,15 @@ QSqlIndex QTDSDriver::primaryIndex(const QString& tablename) const return idx; } +QString QTDSDriver::escapeIdentifier(const QString &identifier, IdentifierType type) const +{ + QString res = identifier; + if(!identifier.isEmpty() && !identifier.startsWith(QLatin1Char('"')) && !identifier.endsWith(QLatin1Char('"')) ) { + res.replace(QLatin1Char('"'), QLatin1String("\"\"")); + res.prepend(QLatin1Char('"')).append(QLatin1Char('"')); + res.replace(QLatin1Char('.'), QLatin1String("\".\"")); + } + return res; +} + QT_END_NAMESPACE diff --git a/src/sql/drivers/tds/qsql_tds.h b/src/sql/drivers/tds/qsql_tds.h index 6001106..0ceae6d 100644 --- a/src/sql/drivers/tds/qsql_tds.h +++ b/src/sql/drivers/tds/qsql_tds.h @@ -116,6 +116,8 @@ public: bool trimStrings) const; QVariant handle() const; + QString escapeIdentifier(const QString &identifier, IdentifierType type) const; + protected: bool beginTransaction(); bool commitTransaction(); diff --git a/src/testlib/qtestsystem.h b/src/testlib/qtestsystem.h index a9a2193..8caec76 100644 --- a/src/testlib/qtestsystem.h +++ b/src/testlib/qtestsystem.h @@ -75,6 +75,7 @@ namespace QTest { #if defined(Q_WS_X11) qt_x11_wait_for_window_manager(window); + QCoreApplication::processEvents(); #elif defined(Q_WS_QWS) Q_UNUSED(window); qWait(100); diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp index 3ae91d3..b06fbeb 100644 --- a/src/xml/dom/qdom.cpp +++ b/src/xml/dom/qdom.cpp @@ -6438,22 +6438,23 @@ void QDomDocumentPrivate::saveDocument(QTextStream& s, const int indent, QDomNod #ifndef QT_NO_TEXTCODEC const QDomNodePrivate* n = first; + QTextCodec *codec = 0; + if (n && n->isProcessingInstruction() && n->nodeName() == QLatin1String("xml")) { // we have an XML declaration QString data = n->nodeValue(); QRegExp encoding(QString::fromLatin1("encoding\\s*=\\s*((\"([^\"]*)\")|('([^']*)'))")); encoding.indexIn(data); QString enc = encoding.cap(3); - if (enc.isEmpty()) { - enc = encoding.cap(5); - } if (enc.isEmpty()) - s.setCodec(QTextCodec::codecForName("UTF-8")); - else - s.setCodec(QTextCodec::codecForName(enc.toLatin1().data())); - } else { - s.setCodec(QTextCodec::codecForName("UTF-8")); + enc = encoding.cap(5); + if (!enc.isEmpty()) + codec = QTextCodec::codecForName(enc.toLatin1().data()); } + if (!codec) + codec = QTextCodec::codecForName("UTF-8"); + if (codec) + s.setCodec(codec); #endif bool doc = false; diff --git a/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp b/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp index 10318f1..0980777 100644 --- a/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp +++ b/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp @@ -455,7 +455,7 @@ bool XsdValidatingInstanceReader::validateElement(const XsdElement::Ptr &declara const QString value = attribute(m_xsiNilName); const Boolean::Ptr nil = Boolean::fromLexical(value); if (nil->hasError()) { - error(QtXmlPatterns::tr("attribute %1 contains invalid data: %1").arg(formatKeyword(QLatin1String("nil"))).arg(formatData(value))); + error(QtXmlPatterns::tr("attribute %1 contains invalid data: %2").arg(formatKeyword(QLatin1String("nil"))).arg(formatData(value))); return false; } diff --git a/tests/auto/mediaobject/tst_mediaobject.cpp b/tests/auto/mediaobject/tst_mediaobject.cpp index 556e465..16b2611 100644 --- a/tests/auto/mediaobject/tst_mediaobject.cpp +++ b/tests/auto/mediaobject/tst_mediaobject.cpp @@ -89,7 +89,7 @@ const qint64 SEEK_BACKWARDS = 2000; const qint64 ALLOWED_TIME_FOR_SEEKING = 1500; // 1.5s const qint64 SEEKING_TOLERANCE = 250; #else -#if defined(Q_OS_WIN) || defined(Q_OS_MAC) +#if defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(Q_OS_SYMBIAN) #define MEDIA_FILE "/sax.mp3" #define MEDIA_FILEPATH ":/media/sax.mp3" #else @@ -207,6 +207,11 @@ void tst_MediaObject::stateChanged(Phonon::State newstate, Phonon::State oldstat void tst_MediaObject::testPlayFromResource() { +#ifdef Q_OS_SYMBIAN + QSKIP("Not implemented yet.", SkipAll); + return; +#endif + QFile file(MEDIA_FILEPATH); MediaObject media; media.setCurrentSource(&file); diff --git a/tests/auto/qbuttongroup/tst_qbuttongroup.cpp b/tests/auto/qbuttongroup/tst_qbuttongroup.cpp index 502c2d1..11c1f47 100644 --- a/tests/auto/qbuttongroup/tst_qbuttongroup.cpp +++ b/tests/auto/qbuttongroup/tst_qbuttongroup.cpp @@ -173,10 +173,11 @@ void tst_QButtonGroup::arrowKeyNavigation() dlg.show(); qApp->setActiveWindow(&dlg); + QTest::qWaitForWindowShown(&dlg); bt1.setFocus(); - QVERIFY(bt1.hasFocus()); + QTRY_VERIFY(bt1.hasFocus()); QTest::keyClick(&bt1, Qt::Key_Right); QVERIFY(pb.hasFocus()); diff --git a/tests/auto/qcombobox/tst_qcombobox.cpp b/tests/auto/qcombobox/tst_qcombobox.cpp index 6984a88..e76f0f7 100644 --- a/tests/auto/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/qcombobox/tst_qcombobox.cpp @@ -746,7 +746,7 @@ void tst_QComboBox::virtualAutocompletion() // We need to set the keyboard input interval to a higher value // as the processEvent() call takes too much time, so it restarts // the keyboard search then -#if defined(QT_ARCH_ARM) || defined(QT_ARCH_MIPS) +#if defined(QT_ARCH_ARM) || defined(QT_ARCH_MIPS) || defined(QT_ARCH_SYMBIAN) int oldInterval = QApplication::keyboardInputInterval(); QApplication::setKeyboardInputInterval(1500); #endif @@ -782,7 +782,7 @@ void tst_QComboBox::virtualAutocompletion() QApplication::sendEvent(testWidget, &kr2); qApp->processEvents(); // Process events to trigger autocompletion QTRY_COMPARE(testWidget->currentIndex(), 3); -#if defined(QT_ARCH_ARM) || defined(QT_ARCH_MIPS) +#if defined(QT_ARCH_ARM) || defined(QT_ARCH_MIPS) || defined(QT_ARCH_SYMBIAN) QApplication::setKeyboardInputInterval(oldInterval); #endif } diff --git a/tests/auto/qdatastream/tst_qdatastream.cpp b/tests/auto/qdatastream/tst_qdatastream.cpp index 4f7b34e..add0945 100644 --- a/tests/auto/qdatastream/tst_qdatastream.cpp +++ b/tests/auto/qdatastream/tst_qdatastream.cpp @@ -204,6 +204,8 @@ private slots: void streamRealDataTypes(); + void floatingPointPrecision(); + #ifdef QT3_SUPPORT void task_224283(); #endif @@ -288,7 +290,8 @@ static int NColorRoles[] = { QPalette::AlternateBase + 1, // Qt_4_3 QPalette::ToolTipText + 1, // Qt_4_4 QPalette::ToolTipText + 1, // Qt_4_5 - 0 // add the correct value for Qt_4_6 here later + QPalette::ToolTipText + 1, // Qt_4_6 + 0 // add the correct value for Qt_4_7 here later }; // Testing get/set functions @@ -2538,9 +2541,12 @@ void tst_QDataStream::skipRawData() QFETCH(QByteArray, littleEndianData); \ QFETCH(int, expectedStatus); \ QFETCH(double, expectedValue); \ + \ + QDataStream::FloatingPointPrecision prec = sizeof(T) == sizeof(double) ? QDataStream::DoublePrecision : QDataStream::SinglePrecision; \ \ { \ QDataStream stream(&bigEndianData, QIODevice::ReadOnly); \ + stream.setFloatingPointPrecision(prec); \ T i; \ stream >> i; \ QCOMPARE((int) stream.status(), expectedStatus); \ @@ -2549,6 +2555,7 @@ void tst_QDataStream::skipRawData() { \ QDataStream stream(&littleEndianData, QIODevice::ReadOnly); \ stream.setByteOrder(QDataStream::LittleEndian); \ + stream.setFloatingPointPrecision(prec); \ T i; \ stream >> i; \ QCOMPARE((int) stream.status(), expectedStatus); \ @@ -3359,6 +3366,55 @@ void tst_QDataStream::compatibility_Qt2() QVERIFY(in_palette.color(QPalette::Light) == Qt::green); } +void tst_QDataStream::floatingPointPrecision() +{ + QByteArray ba; + { + QDataStream stream(&ba, QIODevice::WriteOnly); + QCOMPARE(QDataStream::DoublePrecision, stream.floatingPointPrecision()); + + float f = 123.0f; + stream << f; + QCOMPARE(ba.size(), int(sizeof(double))); + + double d = 234.0; + stream << d; + QCOMPARE(ba.size(), int(sizeof(double)*2)); + + stream.setFloatingPointPrecision(QDataStream::SinglePrecision); + + f = 123.0f; + stream << f; + QCOMPARE(ba.size(), int(sizeof(double)*2 + sizeof(float))); + + d = 234.0; + stream << d; + QCOMPARE(ba.size(), int(sizeof(double)*2 + sizeof(float)*2)); + } + + { + QDataStream stream(ba); + + float f = 0.0f; + stream >> f; + QCOMPARE(123.0f, f); + + double d = 0.0; + stream >> d; + QCOMPARE(234.0, d); + + f = 0.0f; + stream.setFloatingPointPrecision(QDataStream::SinglePrecision); + stream >> f; + QCOMPARE(123.0f, f); + + d = 0.0; + stream >> d; + QCOMPARE(234.0, d); + } + +} + QTEST_MAIN(tst_QDataStream) #include "tst_qdatastream.moc" diff --git a/tests/auto/qdoublespinbox/tst_qdoublespinbox.cpp b/tests/auto/qdoublespinbox/tst_qdoublespinbox.cpp index f4ea985..3d2fa42 100644 --- a/tests/auto/qdoublespinbox/tst_qdoublespinbox.cpp +++ b/tests/auto/qdoublespinbox/tst_qdoublespinbox.cpp @@ -936,19 +936,29 @@ void tst_QDoubleSpinBox::undoRedo() //testing CTRL+Z (undo) int val = QKeySequence(QKeySequence::Undo)[0]; - Qt::KeyboardModifiers mods = (Qt::KeyboardModifiers)(val & Qt::KeyboardModifierMask); - QTest::keyClick(&spin, val & ~mods, mods); - QCOMPARE(spin.value(), 0.0); - QVERIFY(!spin.lineEdit()->isUndoAvailable()); - QVERIFY(spin.lineEdit()->isRedoAvailable()); + if (val != 0) { + Qt::KeyboardModifiers mods = (Qt::KeyboardModifiers)(val & Qt::KeyboardModifierMask); + QTest::keyClick(&spin, val & ~mods, mods); + QCOMPARE(spin.value(), 0.0); + QVERIFY(!spin.lineEdit()->isUndoAvailable()); + QVERIFY(spin.lineEdit()->isRedoAvailable()); + } else { + QWARN("Undo not tested because no key sequence associated to QKeySequence::Redo"); + } + //testing CTRL+Y (redo) val = QKeySequence(QKeySequence::Redo)[0]; - mods = (Qt::KeyboardModifiers)(val & Qt::KeyboardModifierMask); - QTest::keyClick(&spin, val & ~mods, mods); - QCOMPARE(spin.value(), 1.0); - QVERIFY(!spin.lineEdit()->isRedoAvailable()); - QVERIFY(spin.lineEdit()->isUndoAvailable()); + if (val != 0) { + Qt::KeyboardModifiers mods = (Qt::KeyboardModifiers)(val & Qt::KeyboardModifierMask); + QTest::keyClick(&spin, val & ~mods, mods); + QCOMPARE(spin.value(), 1.0); + QVERIFY(!spin.lineEdit()->isRedoAvailable()); + QVERIFY(spin.lineEdit()->isUndoAvailable()); + } else { + QWARN("Redo not tested because no key sequence associated to QKeySequence::Redo"); + } + spin.setValue(55.0); QVERIFY(!spin.lineEdit()->isUndoAvailable()); diff --git a/tests/auto/qfiledialog/tst_qfiledialog.cpp b/tests/auto/qfiledialog/tst_qfiledialog.cpp index 1aa5ee1..f6b082f 100644 --- a/tests/auto/qfiledialog/tst_qfiledialog.cpp +++ b/tests/auto/qfiledialog/tst_qfiledialog.cpp @@ -169,6 +169,8 @@ private slots: void task257579_sideBarWithNonCleanUrls(); void task259105_filtersCornerCases(); + void QTBUG4419_lineEditSelectAll(); + private: QByteArray userSettings; }; @@ -2153,5 +2155,32 @@ void tst_QFiledialog::task259105_filtersCornerCases() filters->setCurrentIndex(1); QCOMPARE(filters->currentText(), QLatin1String("Text Files")); } + +void tst_QFiledialog::QTBUG4419_lineEditSelectAll() +{ + QString tempPath = QDir::tempPath(); + QTemporaryFile *t; + t = new QTemporaryFile; + t->open(); + QNonNativeFileDialog fd(0, "TestFileDialog", t->fileName()); + + fd.setDirectory(tempPath); + fd.setViewMode(QFileDialog::List); + fd.setAcceptMode(QFileDialog::AcceptSave); + fd.setFileMode(QFileDialog::AnyFile); + + fd.show(); + QApplication::setActiveWindow(&fd); + QTest::qWaitForWindowShown(&fd); + QTRY_COMPARE(fd.isVisible(), true); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&fd)); + + QTest::qWait(250); + QLineEdit *lineEdit = qFindChild<QLineEdit*>(&fd, "fileNameEdit"); + + QCOMPARE(tempPath + QChar('/') + lineEdit->text(), t->fileName()); + QCOMPARE(tempPath + QChar('/') + lineEdit->selectedText(), t->fileName()); +} + QTEST_MAIN(tst_QFiledialog) #include "tst_qfiledialog.moc" diff --git a/tests/auto/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/qfilesystemmodel/tst_qfilesystemmodel.cpp index a388f0a..ea9304d 100644 --- a/tests/auto/qfilesystemmodel/tst_qfilesystemmodel.cpp +++ b/tests/auto/qfilesystemmodel/tst_qfilesystemmodel.cpp @@ -806,6 +806,16 @@ void tst_QFileSystemModel::sort() QDir dir(QDir::tempPath()); dir.mkdir("sortTemp"); dir.cd("sortTemp"); + QDirIterator it(dir); + while(it.hasNext()) + { + it.next(); + QFileInfo info = it.fileInfo(); + if (info.isDir()) + dir.rmdir(info.fileName()); + else + QFile::remove(info.absoluteFilePath()); + } const QString dirPath = dir.absolutePath(); QVERIFY(dir.exists()); @@ -823,7 +833,7 @@ void tst_QFileSystemModel::sort() out2 << "The magic number is : " << 49 << " but i write some stuff in the file \n"; tempFile2.close(); - myModel->setRootPath(QDir::rootPath()); + myModel->setRootPath(""); myModel->setFilter(QDir::AllEntries | QDir::System | QDir::Hidden); tree->setSortingEnabled(true); tree->setModel(myModel); @@ -846,11 +856,22 @@ void tst_QFileSystemModel::sort() tree->expand(myModel->index(dirPath, 0)); QTest::qWait(500); QModelIndex parent = myModel->index(dirPath, 0); + QList<QString> expectedOrder; + expectedOrder << tempFile2.fileName() << tempFile.fileName() << dirPath + QChar('/') + "." << dirPath + QChar('/') + ".."; //File dialog Mode means sub trees are not sorted, only the current root - if (fileDialogMode) - QVERIFY(dirPath + QChar('/') + myModel->index(0, 1, parent).data(QFileSystemModel::FileNameRole).toString() != tempFile2.fileName()); - else - QCOMPARE(dirPath + QChar('/') + myModel->index(0, 1, parent).data(QFileSystemModel::FileNameRole).toString(), tempFile2.fileName()); + if (fileDialogMode) { + QList<QString> actualRows; + for(int i = 0; i < myModel->rowCount(parent); ++i) + { + actualRows << dirPath + QChar('/') + myModel->index(i, 1, parent).data(QFileSystemModel::FileNameRole).toString(); + } + QVERIFY(actualRows != expectedOrder); + } else { + for(int i = 0; i < myModel->rowCount(parent); ++i) + { + QVERIFY(dirPath + QChar('/') + myModel->index(i, 1, parent).data(QFileSystemModel::FileNameRole).toString() == expectedOrder.at(i)); + } + } delete tree; delete myModel; diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index d08e74b..bbf19f2 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -1372,19 +1372,20 @@ void tst_QGraphicsItem::selected_textItem() QGraphicsView view(&scene); view.show(); - QTest::qWait(1000); + QTest::qWaitForWindowShown(&view); + QTest::qWait(20); - QVERIFY(!text->isSelected()); + QTRY_VERIFY(!text->isSelected()); QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(text->mapToScene(0, 0))); - QVERIFY(text->isSelected()); + QTRY_VERIFY(text->isSelected()); text->setSelected(false); text->setTextInteractionFlags(Qt::TextEditorInteraction); QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(text->mapToScene(0, 0))); - QVERIFY(text->isSelected()); + QTRY_VERIFY(text->isSelected()); } void tst_QGraphicsItem::selected_multi() @@ -1416,91 +1417,91 @@ void tst_QGraphicsItem::selected_multi() // Click on item1 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item1->isSelected()); QVERIFY(!item2->isSelected()); // Click on item2 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(item2->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item2->isSelected()); QVERIFY(!item1->isSelected()); // Ctrl-click on item1 QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item2->isSelected()); QVERIFY(item1->isSelected()); // Ctrl-click on item1 again QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item2->isSelected()); QVERIFY(!item1->isSelected()); // Ctrl-click on item2 QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, view.mapFromScene(item2->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(!item2->isSelected()); QVERIFY(!item1->isSelected()); // Click on item1 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item1->isSelected()); QVERIFY(!item2->isSelected()); // Click on scene QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(0, 0)); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(!item1->isSelected()); QVERIFY(!item2->isSelected()); // Click on item1 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item1->isSelected()); QVERIFY(!item2->isSelected()); // Ctrl-click on scene QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, view.mapFromScene(0, 0)); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(!item1->isSelected()); QVERIFY(!item2->isSelected()); // Click on item1 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item1->isSelected()); QVERIFY(!item2->isSelected()); // Press on item2 QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(item2->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(!item1->isSelected()); QVERIFY(item2->isSelected()); // Release on item2 QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(item2->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(!item1->isSelected()); QVERIFY(item2->isSelected()); // Click on item1 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item1->isSelected()); QVERIFY(!item2->isSelected()); // Ctrl-click on item1 QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(!item1->isSelected()); QVERIFY(!item2->isSelected()); // Ctrl-press on item1 QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::ControlModifier, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(!item1->isSelected()); QVERIFY(!item2->isSelected()); @@ -1508,14 +1509,14 @@ void tst_QGraphicsItem::selected_multi() // Ctrl-move on item1 QMouseEvent event(QEvent::MouseMove, view.mapFromScene(item1->scenePos()) + QPoint(1, 0), Qt::LeftButton, Qt::LeftButton, Qt::ControlModifier); QApplication::sendEvent(view.viewport(), &event); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(!item1->isSelected()); QVERIFY(!item2->isSelected()); } // Release on item1 QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::ControlModifier, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item1->isSelected()); QVERIFY(!item2->isSelected()); @@ -1524,7 +1525,7 @@ void tst_QGraphicsItem::selected_multi() // Ctrl-press on item1 QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::ControlModifier, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(!item1->isSelected()); QVERIFY(!item2->isSelected()); @@ -1532,14 +1533,14 @@ void tst_QGraphicsItem::selected_multi() // Ctrl-move on item1 QMouseEvent event(QEvent::MouseMove, view.mapFromScene(item1->scenePos()) + QPoint(1, 0), Qt::LeftButton, Qt::LeftButton, Qt::ControlModifier); QApplication::sendEvent(view.viewport(), &event); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item1->isSelected()); QVERIFY(!item2->isSelected()); } // Release on item1 QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::ControlModifier, view.mapFromScene(item1->scenePos())); - QTest::qWait(200); + QTest::qWait(20); QVERIFY(item1->isSelected()); QVERIFY(!item2->isSelected()); } @@ -2924,10 +2925,8 @@ void tst_QGraphicsItem::hoverEventsGenerateRepaints() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QTest::qWait(100); EventTester *tester = new EventTester; scene.addItem(tester); @@ -3059,7 +3058,8 @@ void tst_QGraphicsItem::childrenBoundingRect() QGraphicsView view(&scene); view.show(); - QTest::qWait(5000); + QTest::qWaitForWindowShown(&view); + QTest::qWait(30); QCOMPARE(parent->childrenBoundingRect(), QRectF(-500, -100, 600, 800)); } @@ -3164,7 +3164,8 @@ void tst_QGraphicsItem::group() QGraphicsView view(&scene); view.show(); - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); QGraphicsItemGroup *group = new QGraphicsItemGroup; group->setSelected(true); @@ -3180,7 +3181,7 @@ void tst_QGraphicsItem::group() QCOMPARE(scene.items().size(), 4); QCOMPARE(scene.items(group->sceneBoundingRect()).size(), 3); - QTest::qWait(250); + QTest::qWait(25); QRectF parent2SceneBoundingRect = parent2->sceneBoundingRect(); group->addToGroup(parent2); @@ -3192,7 +3193,7 @@ void tst_QGraphicsItem::group() QCOMPARE(scene.items().size(), 4); QCOMPARE(scene.items(group->sceneBoundingRect()).size(), 4); - QTest::qWait(250); + QTest::qWait(25); QList<QGraphicsItem *> newItems; for (int i = 0; i < 100; ++i) { @@ -3372,8 +3373,8 @@ void tst_QGraphicsItem::handlesChildEvents() QGraphicsView view(&scene); view.show(); - - QTest::qWait(1000); + QTest::qWaitForWindowShown(&view); + QTest::qWait(20); // Pull out the items, closest item first QList<QGraphicsItem *> items = scene.items(scene.itemsBoundingRect()); @@ -3496,14 +3497,14 @@ void tst_QGraphicsItem::handlesChildEvents2() QGraphicsView view(&scene); view.show(); - - QTestEventLoop::instance().enterLoop(1); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); QMouseEvent event(QEvent::MouseButtonPress, view.mapFromScene(5, 5), view.viewport()->mapToGlobal(view.mapFromScene(5, 5)), Qt::LeftButton, 0, 0); QApplication::sendEvent(view.viewport(), &event); - QCOMPARE(root->counter, 1); + QTRY_COMPARE(root->counter, 1); } void tst_QGraphicsItem::handlesChildEvents3() @@ -3585,8 +3586,8 @@ void tst_QGraphicsItem::filtersChildEvents() QGraphicsView view(&scene); view.show(); - - QTest::qWait(1000); + QTest::qWaitForWindowShown(&view); + QTest::qWait(20); QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress); QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease); @@ -3601,7 +3602,7 @@ void tst_QGraphicsItem::filtersChildEvents() QApplication::sendEvent(&scene, &pressEvent); QApplication::sendEvent(&scene, &releaseEvent); - QCOMPARE(child->counter, 1); // mouse release is not filtered + QTRY_COMPARE(child->counter, 1); // mouse release is not filtered QCOMPARE(filter->counter, 1); // mouse press is filtered QCOMPARE(root->counter, 0); @@ -3656,17 +3657,18 @@ void tst_QGraphicsItem::filtersChildEvents2() QGraphicsView view(&scene); view.show(); - QTestEventLoop::instance().enterLoop(1); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); QMouseEvent event(QEvent::MouseButtonPress, view.mapFromScene(5, 5), view.viewport()->mapToGlobal(view.mapFromScene(5, 5)), Qt::LeftButton, 0, 0); QApplication::sendEvent(view.viewport(), &event); + QTRY_COMPARE(root->counter, 1); QCOMPARE(child->counter, 0); QCOMPARE(child2->counter, 0); QCOMPARE(child3->counter, 0); QCOMPARE(child4->counter, 0); - QCOMPARE(root->counter, 1); } class CustomItem : public QGraphicsItem @@ -3703,21 +3705,22 @@ void tst_QGraphicsItem::ensureVisible() QGraphicsView view(&scene); view.setFixedSize(300, 300); view.show(); + QTest::qWaitForWindowShown(&view); for (int i = 0; i < 25; ++i) { view.scale(qreal(1.06), qreal(1.06)); - QTest::qWait(25); + QApplication::processEvents(); } item->ensureVisible(-100, -100, 25, 25); - QTest::qWait(250); + QTest::qWait(25); for (int x = -100; x < 100; x += 25) { for (int y = -100; y < 100; y += 25) { int xmargin = rand() % 75; int ymargin = rand() % 75; item->ensureVisible(x, y, 25, 25, xmargin, ymargin); - QTest::qWait(25); + QApplication::processEvents(); QPolygonF viewScenePoly; viewScenePoly << view.mapToScene(view.rect().topLeft()) @@ -3744,7 +3747,7 @@ void tst_QGraphicsItem::ensureVisible() } item->ensureVisible(100, 100, 25, 25); - QTest::qWait(250); + QTest::qWait(25); } void tst_QGraphicsItem::cursor() @@ -3785,7 +3788,7 @@ void tst_QGraphicsItem::cursor() view.show(); QTest::mouseMove(&view, view.rect().center()); - QTest::qWait(250); + QTest::qWait(25); QCursor cursor = view.viewport()->cursor(); @@ -3794,7 +3797,7 @@ void tst_QGraphicsItem::cursor() QApplication::sendEvent(view.viewport(), &event); } - QTest::qWait(250); + QTest::qWait(25); QCOMPARE(view.viewport()->cursor().shape(), cursor.shape()); @@ -3819,7 +3822,7 @@ void tst_QGraphicsItem::cursor() QApplication::sendEvent(view.viewport(), &event); } - QTest::qWait(250); + QTest::qWait(25); QCOMPARE(view.viewport()->cursor().shape(), item2->cursor().shape()); @@ -3829,7 +3832,7 @@ void tst_QGraphicsItem::cursor() QApplication::sendEvent(view.viewport(), &event); } - QTest::qWait(250); + QTest::qWait(25); QCOMPARE(view.viewport()->cursor().shape(), cursor.shape()); #endif @@ -4488,10 +4491,9 @@ void tst_QGraphicsItem::sceneEventFilter() QGraphicsView view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif - QTest::qWait(250); + QApplication::setActiveWindow(&view); + QTest::qWaitForWindowShown(&view); + QTest::qWait(25); QGraphicsTextItem *text1 = scene.addText(QLatin1String("Text1")); QGraphicsTextItem *text2 = scene.addText(QLatin1String("Text2")); @@ -4503,10 +4505,10 @@ void tst_QGraphicsItem::sceneEventFilter() EventFilterTesterItem *tester = new EventFilterTesterItem; scene.addItem(tester); - QVERIFY(!text1->hasFocus()); + QTRY_VERIFY(!text1->hasFocus()); text1->installSceneEventFilter(tester); text1->setFocus(); - QVERIFY(text1->hasFocus()); + QTRY_VERIFY(text1->hasFocus()); QCOMPARE(tester->filteredEvents.size(), 1); QCOMPARE(tester->filteredEvents.at(0), QEvent::FocusIn); @@ -4554,13 +4556,14 @@ void tst_QGraphicsItem::sceneEventFilter() QGraphicsTextItem *ti3 = anotherScene->addText("This is a test #3"); gv.setScene(anotherScene); gv.show(); - QTest::qWait(250); + QTest::qWaitForWindowShown(&gv); + QTest::qWait(25); ti->installSceneEventFilter(ti2); ti3->installSceneEventFilter(ti); delete ti2; //we souldn't crash QTest::mouseMove(gv.viewport(), gv.mapFromScene(ti->scenePos())); - QTest::qWait(250); + QTest::qWait(30); delete ti; } @@ -4608,10 +4611,8 @@ void tst_QGraphicsItem::paint() QGraphicsView view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); #ifdef Q_OS_WIN32 //we try to switch the desktop: if it fails, we skip the test if (::SwitchDesktop( ::GetThreadDesktop( ::GetCurrentThreadId() ) ) == 0) { @@ -4619,41 +4620,39 @@ void tst_QGraphicsItem::paint() } #endif - QCOMPARE(paintTester.widget, view.viewport()); + QTRY_COMPARE(paintTester.widget, view.viewport()); view.hide(); QGraphicsScene scene2; QGraphicsView view2(&scene2); view2.show(); - QTest::qWait(250); + QTest::qWaitForWindowShown(&view2); + QTest::qWait(25); PaintTester tester2; scene2.addItem(&tester2); qApp->processEvents(); //First show one paint - QVERIFY(tester2.painted == 1); + QTRY_COMPARE(tester2.painted, 1); //nominal case, update call paint tester2.update(); qApp->processEvents(); - QTest::qWait(250); - QVERIFY(tester2.painted == 2); + QTRY_VERIFY(tester2.painted == 2); //we remove the item from the scene, number of updates is still the same tester2.update(); scene2.removeItem(&tester2); qApp->processEvents(); - QTest::qWait(250); - QVERIFY(tester2.painted == 2); + QTRY_VERIFY(tester2.painted == 2); //We re-add the item, the number of paint should increase scene2.addItem(&tester2); tester2.update(); qApp->processEvents(); - QTest::qWait(250); - QVERIFY(tester2.painted == 3); + QTRY_VERIFY(tester2.painted == 3); } class HarakiriItem : public QGraphicsRectItem @@ -5414,6 +5413,8 @@ void tst_QGraphicsItem::untransformable() view.setBackgroundBrush(QBrush(Qt::black, Qt::DiagCrossPattern)); #endif + QTest::qWaitForWindowShown(&view); + for (int i = 0; i < 10; ++i) { QPoint center = view.viewport()->rect().center(); QCOMPARE(view.itemAt(center), item1); @@ -5438,7 +5439,7 @@ void tst_QGraphicsItem::untransformable() view.rotate(13); view.shear(qreal(0.01), qreal(0.01)); view.translate(10, 10); - QTest::qWait(250); + QTest::qWait(25); } } @@ -5474,11 +5475,9 @@ void tst_QGraphicsItem::contextMenuEventPropagation() QGraphicsView view(&scene); view.setAlignment(Qt::AlignLeft | Qt::AlignTop); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif view.resize(200, 200); - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QTest::qWait(20); QContextMenuEvent event(QContextMenuEvent::Mouse, QPoint(10, 10), view.viewport()->mapToGlobal(QPoint(10, 10))); @@ -5579,15 +5578,16 @@ void tst_QGraphicsItem::task141694_textItemEnsureVisible() QGraphicsView view(&scene); view.setFixedSize(200, 200); view.show(); + QTest::qWaitForWindowShown(&view); view.ensureVisible(-1000, -1000, 5, 5); int hscroll = view.horizontalScrollBar()->value(); int vscroll = view.verticalScrollBar()->value(); - QTestEventLoop::instance().enterLoop(1); + QTest::qWait(10); // This should not cause the view to scroll - QCOMPARE(view.horizontalScrollBar()->value(), hscroll); + QTRY_COMPARE(view.horizontalScrollBar()->value(), hscroll); QCOMPARE(view.verticalScrollBar()->value(), vscroll); } @@ -5752,16 +5752,17 @@ void tst_QGraphicsItem::ensureUpdateOnTextItem() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QTest::qWait(25); TextItem *text1 = new TextItem(QLatin1String("123")); scene.addItem(text1); qApp->processEvents(); - QCOMPARE(text1->updates,1); + QTRY_COMPARE(text1->updates,1); //same bouding rect but we have to update text1->setText(QLatin1String("321")); - QTest::qWait(250); - QCOMPARE(text1->updates,2); + qApp->processEvents(); + QTRY_COMPARE(text1->updates,2); } void tst_QGraphicsItem::task243707_addChildBeforeParent() @@ -6049,10 +6050,8 @@ void tst_QGraphicsItem::opacity2() MyGraphicsView view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QTRY_COMPARE(view.repaints, 1); #define RESET_REPAINT_COUNTERS \ parent->repaints = 0; \ @@ -6063,8 +6062,8 @@ void tst_QGraphicsItem::opacity2() RESET_REPAINT_COUNTERS child->setOpacity(0.0); - QTest::qWait(100); - QCOMPARE(view.repaints, 1); + QTest::qWait(10); + QTRY_COMPARE(view.repaints, 1); QCOMPARE(parent->repaints, 1); QCOMPARE(child->repaints, 0); QCOMPARE(grandChild->repaints, 0); @@ -6072,8 +6071,8 @@ void tst_QGraphicsItem::opacity2() RESET_REPAINT_COUNTERS child->setOpacity(1.0); - QTest::qWait(100); - QCOMPARE(view.repaints, 1); + QTest::qWait(10); + QTRY_COMPARE(view.repaints, 1); QCOMPARE(parent->repaints, 1); QCOMPARE(child->repaints, 1); QCOMPARE(grandChild->repaints, 1); @@ -6081,8 +6080,8 @@ void tst_QGraphicsItem::opacity2() RESET_REPAINT_COUNTERS parent->setOpacity(0.0); - QTest::qWait(100); - QCOMPARE(view.repaints, 1); + QTest::qWait(10); + QTRY_COMPARE(view.repaints, 1); QCOMPARE(parent->repaints, 0); QCOMPARE(child->repaints, 0); QCOMPARE(grandChild->repaints, 0); @@ -6090,8 +6089,8 @@ void tst_QGraphicsItem::opacity2() RESET_REPAINT_COUNTERS parent->setOpacity(1.0); - QTest::qWait(100); - QCOMPARE(view.repaints, 1); + QTest::qWait(10); + QTRY_COMPARE(view.repaints, 1); QCOMPARE(parent->repaints, 1); QCOMPARE(child->repaints, 1); QCOMPARE(grandChild->repaints, 1); @@ -6100,8 +6099,8 @@ void tst_QGraphicsItem::opacity2() RESET_REPAINT_COUNTERS child->setOpacity(0.0); - QTest::qWait(100); - QCOMPARE(view.repaints, 1); + QTest::qWait(10); + QTRY_COMPARE(view.repaints, 1); QCOMPARE(parent->repaints, 1); QCOMPARE(child->repaints, 0); QCOMPARE(grandChild->repaints, 1); @@ -6109,8 +6108,8 @@ void tst_QGraphicsItem::opacity2() RESET_REPAINT_COUNTERS child->setOpacity(0.0); // Already 0.0; no change. - QTest::qWait(100); - QCOMPARE(view.repaints, 0); + QTest::qWait(10); + QTRY_COMPARE(view.repaints, 0); QCOMPARE(parent->repaints, 0); QCOMPARE(child->repaints, 0); QCOMPARE(grandChild->repaints, 0); @@ -6142,15 +6141,13 @@ void tst_QGraphicsItem::opacityZeroUpdates() MyGraphicsView view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QTRY_VERIFY(view.repaints > 0); view.reset(); parent->setOpacity(0.0); - QTest::qWait(200); + QTest::qWait(20); // transforming items bounding rect to view coordinates const QRect childDeviceBoundingRect = child->deviceTransform(view.viewportTransform()) @@ -6161,7 +6158,7 @@ void tst_QGraphicsItem::opacityZeroUpdates() QRegion expectedRegion = parentDeviceBoundingRect.adjusted(-2, -2, 2, 2); expectedRegion += childDeviceBoundingRect.adjusted(-2, -2, 2, 2); - QCOMPARE(view.paintedRegion, expectedRegion); + QTRY_COMPARE(view.paintedRegion, expectedRegion); } class StacksBehindParentHelper : public QGraphicsRectItem @@ -6217,15 +6214,12 @@ void tst_QGraphicsItem::itemStacksBehindParent() QGraphicsView view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QTest::qWait(100); paintedItems.clear(); view.viewport()->update(); - QTest::qWait(100); - - QCOMPARE(scene.items(0, 0, 100, 100), (QList<QGraphicsItem *>() + QApplication::processEvents(); + QTRY_COMPARE(scene.items(0, 0, 100, 100), (QList<QGraphicsItem *>() << grandChild111 << child11 << grandChild121 << child12 << parent1 << grandChild211 << child21 @@ -6239,9 +6233,9 @@ void tst_QGraphicsItem::itemStacksBehindParent() child11->setFlag(QGraphicsItem::ItemStacksBehindParent); scene.update(); paintedItems.clear(); - QTest::qWait(250); + QApplication::processEvents(); - QCOMPARE(scene.items(0, 0, 100, 100), (QList<QGraphicsItem *>() + QTRY_COMPARE(scene.items(0, 0, 100, 100), (QList<QGraphicsItem *>() << grandChild121 << child12 << parent1 << grandChild111 << child11 << grandChild211 << child21 @@ -6255,9 +6249,9 @@ void tst_QGraphicsItem::itemStacksBehindParent() child12->setFlag(QGraphicsItem::ItemStacksBehindParent); paintedItems.clear(); scene.update(); - QTest::qWait(250); + QApplication::processEvents(); - QCOMPARE(scene.items(0, 0, 100, 100), (QList<QGraphicsItem *>() + QTRY_COMPARE(scene.items(0, 0, 100, 100), (QList<QGraphicsItem *>() << parent1 << grandChild111 << child11 << grandChild121 << child12 << grandChild211 << child21 @@ -6503,31 +6497,29 @@ void tst_QGraphicsItem::tabChangesFocus() QWidget widget; widget.setLayout(layout); widget.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&widget); -#endif - QTest::qWait(250); - QVERIFY(scene.isActive()); + QTest::qWaitForWindowShown(&widget); + + QTRY_VERIFY(scene.isActive()); dial1->setFocus(); - QTest::qWait(125); - QVERIFY(dial1->hasFocus()); + QTest::qWait(15); + QTRY_VERIFY(dial1->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(view->hasFocus()); - QVERIFY(item->hasFocus()); + QTest::qWait(15); + QTRY_VERIFY(view->hasFocus()); + QTRY_VERIFY(item->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QTest::qWait(15); if (tabChangesFocus) { - QVERIFY(!view->hasFocus()); - QVERIFY(!item->hasFocus()); - QVERIFY(dial2->hasFocus()); + QTRY_VERIFY(!view->hasFocus()); + QTRY_VERIFY(!item->hasFocus()); + QTRY_VERIFY(dial2->hasFocus()); } else { - QVERIFY(view->hasFocus()); - QVERIFY(item->hasFocus()); + QTRY_VERIFY(view->hasFocus()); + QTRY_VERIFY(item->hasFocus()); QCOMPARE(item->toPlainText(), QString("\tHello")); } } @@ -6538,12 +6530,12 @@ void tst_QGraphicsItem::cacheMode() QGraphicsView view(&scene); view.resize(150, 150); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif + QApplication::setActiveWindow(&view); + QTest::qWaitForWindowShown(&view); + // Increase the probability of window activation // not causing another repaint of test items. - QTest::qWait(250); + QTest::qWait(50); EventTester *tester = new EventTester; EventTester *testerChild = new EventTester; @@ -6553,24 +6545,24 @@ void tst_QGraphicsItem::cacheMode() testerChild2->setFlag(QGraphicsItem::ItemIgnoresTransformations); scene.addItem(tester); - QTest::qWait(250); + QTest::qWait(10); for (int i = 0; i < 2; ++i) { // No visual change. - QCOMPARE(tester->repaints, 1); + QTRY_COMPARE(tester->repaints, 1); QCOMPARE(testerChild->repaints, 1); QCOMPARE(testerChild2->repaints, 1); tester->setCacheMode(QGraphicsItem::NoCache); testerChild->setCacheMode(QGraphicsItem::NoCache); testerChild2->setCacheMode(QGraphicsItem::NoCache); - QTest::qWait(250); - QCOMPARE(tester->repaints, 1); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 1); QCOMPARE(testerChild->repaints, 1); QCOMPARE(testerChild2->repaints, 1); tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache); testerChild->setCacheMode(QGraphicsItem::DeviceCoordinateCache); testerChild2->setCacheMode(QGraphicsItem::DeviceCoordinateCache); - QTest::qWait(250); + QTest::qWait(25); } // The first move causes a repaint as the item is painted into its pixmap. @@ -6578,8 +6570,8 @@ void tst_QGraphicsItem::cacheMode() tester->setPos(10, 10); testerChild->setPos(10, 10); testerChild2->setPos(10, 10); - QTest::qWait(250); - QCOMPARE(tester->repaints, 2); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 2); QCOMPARE(testerChild->repaints, 2); QCOMPARE(testerChild2->repaints, 2); @@ -6594,15 +6586,15 @@ void tst_QGraphicsItem::cacheMode() // Translating does not result in a repaint. tester->translate(10, 10); - QTest::qWait(250); - QCOMPARE(tester->repaints, 2); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 2); QCOMPARE(testerChild->repaints, 2); QCOMPARE(testerChild2->repaints, 2); // Rotating results in a repaint. tester->rotate(45); - QTest::qWait(250); - QCOMPARE(tester->repaints, 3); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 3); QCOMPARE(testerChild->repaints, 3); QCOMPARE(testerChild2->repaints, 2); @@ -6610,8 +6602,8 @@ void tst_QGraphicsItem::cacheMode() tester->setCacheMode(QGraphicsItem::ItemCoordinateCache); // autosize testerChild->setCacheMode(QGraphicsItem::ItemCoordinateCache); // autosize testerChild2->setCacheMode(QGraphicsItem::ItemCoordinateCache); // autosize - QTest::qWait(250); - QCOMPARE(tester->repaints, 4); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 4); QCOMPARE(testerChild->repaints, 4); QCOMPARE(testerChild2->repaints, 3); @@ -6619,30 +6611,30 @@ void tst_QGraphicsItem::cacheMode() tester->rotate(22); testerChild->rotate(22); testerChild2->rotate(22); - QTest::qWait(250); - QCOMPARE(tester->repaints, 4); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 4); QCOMPARE(testerChild->repaints, 4); QCOMPARE(testerChild2->repaints, 3); // Explicit update causes a repaint. tester->update(0, 0, 5, 5); - QTest::qWait(250); - QCOMPARE(tester->repaints, 5); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 5); QCOMPARE(testerChild->repaints, 4); QCOMPARE(testerChild2->repaints, 3); // Updating outside the item's bounds does not cause a repaint. tester->update(10, 10, 5, 5); - QTest::qWait(250); - QCOMPARE(tester->repaints, 5); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 5); QCOMPARE(testerChild->repaints, 4); QCOMPARE(testerChild2->repaints, 3); // Resizing an item should cause a repaint of that item. (because of // autosize). tester->setGeometry(QRectF(-15, -15, 30, 30)); - QTest::qWait(250); - QCOMPARE(tester->repaints, 6); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 6); QCOMPARE(testerChild->repaints, 4); QCOMPARE(testerChild2->repaints, 3); @@ -6650,22 +6642,22 @@ void tst_QGraphicsItem::cacheMode() tester->setCacheMode(QGraphicsItem::ItemCoordinateCache, QSize(30, 30)); testerChild->setCacheMode(QGraphicsItem::ItemCoordinateCache, QSize(30, 30)); testerChild2->setCacheMode(QGraphicsItem::ItemCoordinateCache, QSize(30, 30)); - QTest::qWait(250); - QCOMPARE(tester->repaints, 7); + QTest::qWait(20); + QTRY_COMPARE(tester->repaints, 7); QCOMPARE(testerChild->repaints, 5); QCOMPARE(testerChild2->repaints, 4); // Resizing the item should cause a repaint. testerChild->setGeometry(QRectF(-15, -15, 30, 30)); - QTest::qWait(250); - QCOMPARE(tester->repaints, 7); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 7); QCOMPARE(testerChild->repaints, 6); QCOMPARE(testerChild2->repaints, 4); // Scaling the view does not cause a repaint. view.scale(0.7, 0.7); - QTest::qWait(250); - QCOMPARE(tester->repaints, 7); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 7); QCOMPARE(testerChild->repaints, 6); QCOMPARE(testerChild2->repaints, 4); @@ -6673,54 +6665,54 @@ void tst_QGraphicsItem::cacheMode() tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache); testerChild->setCacheMode(QGraphicsItem::DeviceCoordinateCache); testerChild2->setCacheMode(QGraphicsItem::DeviceCoordinateCache); - QTest::qWait(250); - QCOMPARE(tester->repaints, 8); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 8); QCOMPARE(testerChild->repaints, 7); QCOMPARE(testerChild2->repaints, 5); // Scaling the view back should cause repaints for two of the items. view.setTransform(QTransform()); - QTest::qWait(250); - QCOMPARE(tester->repaints, 9); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 9); QCOMPARE(testerChild->repaints, 8); QCOMPARE(testerChild2->repaints, 5); // Rotating the base item (perspective) should repaint two items. tester->setTransform(QTransform().rotate(10, Qt::XAxis)); - QTest::qWait(250); - QCOMPARE(tester->repaints, 10); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 10); QCOMPARE(testerChild->repaints, 9); QCOMPARE(testerChild2->repaints, 5); // Moving the middle item should case a repaint even if it's a move, // because the parent is rotated with a perspective. testerChild->setPos(1, 1); - QTest::qWait(250); - QCOMPARE(tester->repaints, 10); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 10); QCOMPARE(testerChild->repaints, 10); QCOMPARE(testerChild2->repaints, 5); // Make a huge item tester->setGeometry(QRectF(-4000, -4000, 8000, 8000)); - QTest::qWait(250); - QCOMPARE(tester->repaints, 11); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 11); QCOMPARE(testerChild->repaints, 10); QCOMPARE(testerChild2->repaints, 5); // Move the large item - will cause a repaint as the // cache is clipped. tester->setPos(5, 0); - QTest::qWait(250); - QCOMPARE(tester->repaints, 12); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 12); QCOMPARE(testerChild->repaints, 10); QCOMPARE(testerChild2->repaints, 5); // Hiding and showing should invalidate the cache tester->hide(); - QTest::qWait(250); + QTest::qWait(25); tester->show(); - QTest::qWait(250); - QCOMPARE(tester->repaints, 13); + QTest::qWait(25); + QTRY_COMPARE(tester->repaints, 13); QCOMPARE(testerChild->repaints, 11); QCOMPARE(testerChild2->repaints, 6); } @@ -6739,30 +6731,30 @@ void tst_QGraphicsItem::updateCachedItemAfterMove() view.show(); QTest::qWaitForWindowShown(&view); - QTest::qWait(125); + QTest::qWait(12); QTRY_VERIFY(tester->repaints > 0); tester->repaints = 0; // Move the item, should not cause repaints tester->setPos(10, 0); - QTest::qWait(125); + QTest::qWait(12); QCOMPARE(tester->repaints, 0); // Move then update, should cause one repaint tester->setPos(20, 0); tester->update(); - QTest::qWait(125); + QTest::qWait(12); QCOMPARE(tester->repaints, 1); // Hiding the item doesn't cause a repaint tester->hide(); - QTest::qWait(125); + QTest::qWait(12); QCOMPARE(tester->repaints, 1); // Moving a hidden item doesn't cause a repaint tester->setPos(30, 0); tester->update(); - QTest::qWait(125); + QTest::qWait(12); QCOMPARE(tester->repaints, 1); } @@ -7177,17 +7169,17 @@ void tst_QGraphicsItem::itemUsesExtendedStyleOption() QGraphicsView view(&scene); rect->startTrack = false; view.show(); - QTest::qWait(500); + QTest::qWaitForWindowShown(&view); rect->startTrack = true; rect->update(10, 10, 10, 10); - QTest::qWait(125); + QTest::qWait(12); rect->startTrack = false; rect->setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, true); QVERIFY((rect->flags() & QGraphicsItem::ItemUsesExtendedStyleOption)); - QTest::qWait(125); + QTest::qWait(12); rect->startTrack = true; rect->update(10, 10, 10, 10); - QTest::qWait(125); + QTest::qWait(12); } void tst_QGraphicsItem::itemSendsGeometryChanges() @@ -7379,10 +7371,8 @@ void tst_QGraphicsItem::itemHasNoContents() QGraphicsView view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif - QTest::qWait(100); + QTest::qWaitForWindowShown(&view); + QTRY_VERIFY(!_paintedItems.isEmpty()); _paintedItems.clear(); @@ -7390,10 +7380,10 @@ void tst_QGraphicsItem::itemHasNoContents() #ifdef Q_WS_MAC // There's no difference between update() and repaint() on the Mac, // so we have to process events here to make sure we get the event. - QTest::qWait(100); + QTest::qWait(10); #endif - QCOMPARE(_paintedItems, QList<QGraphicsItem *>() << item2); + QTRY_COMPARE(_paintedItems, QList<QGraphicsItem *>() << item2); } void tst_QGraphicsItem::hitTestUntransformableItem() @@ -8474,9 +8464,10 @@ void tst_QGraphicsItem::QTBUG_4233_updateCachedWithSceneRect() QGraphicsView view(&scene); view.show(); + QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), (QWidget *)&view); - QCOMPARE(tester->repaints, 1); + QTRY_COMPARE(tester->repaints, 1); scene.update(); // triggers "updateAll" optimization qApp->processEvents(); diff --git a/tests/auto/qgraphicslayout/tst_qgraphicslayout.cpp b/tests/auto/qgraphicslayout/tst_qgraphicslayout.cpp index feaedd9..69a64ee 100644 --- a/tests/auto/qgraphicslayout/tst_qgraphicslayout.cpp +++ b/tests/auto/qgraphicslayout/tst_qgraphicslayout.cpp @@ -153,7 +153,7 @@ void tst_QGraphicsLayout::automaticReparenting() QGraphicsWidget *ww = new QGraphicsWidget(); QGraphicsLinearLayout *l1 = new QGraphicsLinearLayout(ww); -#ifdef QT_DEBUG +#if !defined(Q_OS_MAC) && defined(QT_DEBUG) QTest::ignoreMessage(QtWarningMsg, "QGraphicsLayout::addChildLayoutItem: QGraphicsWidget \"\"" " in wrong parent; moved to correct parent"); #endif diff --git a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index a289257..6e60516 100644 --- a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -783,11 +783,9 @@ void tst_QGraphicsProxyWidget::focusNextPrevChild() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif QApplication::setActiveWindow(&view); - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); QTRY_COMPARE(QApplication::activeWindow(), &view); if (hasScene) { scene.addItem(proxy); @@ -832,13 +830,11 @@ void tst_QGraphicsProxyWidget::focusOutEvent() SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; scene.addItem(proxy); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif QApplication::setActiveWindow(&view); view.activateWindow(); view.setFocus(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); QTRY_VERIFY(view.isVisible()); QTRY_COMPARE(QApplication::activeWindow(), &view); @@ -856,11 +852,10 @@ void tst_QGraphicsProxyWidget::focusOutEvent() if (!call) { QWidget *other = new QLineEdit(&view); other->show(); - QTest::qWait(125); + QApplication::processEvents(); QTRY_VERIFY(other->isVisible()); other->setFocus(); QTRY_VERIFY(other->hasFocus()); - QTest::qWait(125); qApp->processEvents(); QTRY_COMPARE(proxy->hasFocus(), false); QVERIFY(proxy->focusOut); @@ -992,7 +987,7 @@ void tst_QGraphicsProxyWidget::hoverEnterLeaveEvent() // in QTest::mouseMove(&view, QPoint(50, 50)); - QTest::qWait(250); + QTest::qWait(25); QTRY_COMPARE(widget->testAttribute(Qt::WA_UnderMouse), hasWidget ? true : false); // ### this attribute isn't supported QCOMPARE(widget->enterCount, hasWidget ? 1 : 0); @@ -1002,7 +997,7 @@ void tst_QGraphicsProxyWidget::hoverEnterLeaveEvent() // out QTest::mouseMove(&view, QPoint(10, 10)); - QTest::qWait(250); + QTest::qWait(25); // QTRY_COMPARE(widget->testAttribute(Qt::WA_UnderMouse), false); // ### this attribute isn't supported QCOMPARE(widget->leaveCount, hasWidget ? 1 : 0); @@ -1067,14 +1062,14 @@ void tst_QGraphicsProxyWidget::hoverMoveEvent() // in QTest::mouseMove(&view, QPoint(50, 50)); - QTest::qWait(125); + QTest::qWait(12); if (mouseDown) QTest::mousePress(view.viewport(), Qt::LeftButton); // move a little bit QTest::mouseMove(&view, QPoint(60, 60)); - QTest::qWait(125); + QTest::qWait(12); QTRY_COMPARE(widget->hoverEnter, (hasWidget && hoverEnabled) ? 1 : 0); QCOMPARE(widget->moveCount, (hasWidget && mouseTracking) || (hasWidget && mouseDown) ? 1 : 0); @@ -1098,11 +1093,9 @@ void tst_QGraphicsProxyWidget::keyPressEvent() QGraphicsView view(&scene); view.show(); view.viewport()->setFocus(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif QApplication::setActiveWindow(&view); - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); QTRY_COMPARE(QApplication::activeWindow(), &view); SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; @@ -1142,11 +1135,8 @@ void tst_QGraphicsProxyWidget::keyReleaseEvent() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif QApplication::setActiveWindow(&view); - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), &view); @@ -1190,7 +1180,7 @@ void tst_QGraphicsProxyWidget::mouseDoubleClickEvent() view.show(); QApplication::setActiveWindow(&view); - QTest::qWait(250); + QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), &view); SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; @@ -1234,7 +1224,7 @@ void tst_QGraphicsProxyWidget::mousePressReleaseEvent() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&view); SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; proxy->setFlag(QGraphicsItem::ItemIsFocusable, true); // ### remove me!!! @@ -1305,19 +1295,18 @@ void tst_QGraphicsProxyWidget::paintEvent() w->show(); QTest::qWaitForWindowShown(w); - - QTest::qWait(100); + QApplication::processEvents(); proxy.setWidget(w); scene.addItem(&proxy); //make sure we flush all the paint events - QTest::qWait(250); + QApplication::processEvents(); QTRY_VERIFY(proxy.paintCount > 1); proxy.paintCount = 0; w->update(); - QTest::qWait(100); + QApplication::processEvents(); QTRY_COMPARE(proxy.paintCount, 1); //the widget should have been painted now } @@ -1502,9 +1491,7 @@ void tst_QGraphicsProxyWidget::scrollUpdate() View view(&scene); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif + QTest::qWaitForWindowShown(&view); QTRY_VERIFY(view.npaints >= 1); QTest::qWait(20); widget->paintEventRegion = QRegion(); @@ -1711,24 +1698,21 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleWidget() window.setLayout(layout); window.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&window); -#endif QApplication::setActiveWindow(&window); window.activateWindow(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&window); leftDial->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QTRY_VERIFY(leftDial->hasFocus()); EventSpy eventSpy(edit); // Tab into line edit QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(!leftDial->hasFocus()); - QVERIFY(view->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!leftDial->hasFocus()); + QTRY_VERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); QVERIFY(scene.hasFocus()); QVERIFY(editProxy->hasFocus()); @@ -1738,22 +1722,22 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleWidget() // Tab into right dial QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(!view->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!view->hasFocus()); QVERIFY(!view->viewport()->hasFocus()); QVERIFY(!scene.hasFocus()); QVERIFY(!editProxy->hasFocus()); QVERIFY(!edit->hasFocus()); - QVERIFY(rightDial->hasFocus()); + QTRY_VERIFY(rightDial->hasFocus()); QCOMPARE(eventSpy.counts[QEvent::FocusIn], 1); QCOMPARE(eventSpy.counts[QEvent::FocusOut], 1); // Backtab into line edit QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(view->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); - QVERIFY(scene.hasFocus()); + QTRY_VERIFY(scene.hasFocus()); QVERIFY(editProxy->hasFocus()); QVERIFY(edit->hasFocus()); QVERIFY(!rightDial->hasFocus()); @@ -1762,13 +1746,13 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleWidget() // Backtab into left dial QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(!view->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!view->hasFocus()); QVERIFY(!view->viewport()->hasFocus()); QVERIFY(!scene.hasFocus()); QVERIFY(!editProxy->hasFocus()); QVERIFY(!edit->hasFocus()); - QVERIFY(leftDial->hasFocus()); + QTRY_VERIFY(leftDial->hasFocus()); QCOMPARE(eventSpy.counts[QEvent::FocusIn], 2); QCOMPARE(eventSpy.counts[QEvent::FocusOut], 2); } @@ -1796,14 +1780,12 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleTwoWidgets() window.setLayout(layout); window.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&window); -#endif QApplication::setActiveWindow(&window); window.activateWindow(); + QTest::qWaitForWindowShown(&window); leftDial->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QTRY_VERIFY(leftDial->hasFocus()); EventSpy eventSpy(edit); @@ -1811,7 +1793,7 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleTwoWidgets() // Tab into line edit QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!leftDial->hasFocus()); QVERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); @@ -1823,7 +1805,7 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleTwoWidgets() // Tab into second line edit QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); QVERIFY(scene.hasFocus()); @@ -1838,7 +1820,7 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleTwoWidgets() // Tab into right dial QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!view->hasFocus()); QVERIFY(!view->viewport()->hasFocus()); QVERIFY(!scene.hasFocus()); @@ -1854,7 +1836,7 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleTwoWidgets() // Backtab into line edit 2 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); QVERIFY(scene.hasFocus()); @@ -1870,7 +1852,7 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleTwoWidgets() // Backtab into line edit 1 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); QVERIFY(scene.hasFocus()); @@ -1886,7 +1868,7 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleTwoWidgets() // Backtab into left dial QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!view->hasFocus()); QVERIFY(!view->viewport()->hasFocus()); QVERIFY(!scene.hasFocus()); @@ -1929,15 +1911,12 @@ void tst_QGraphicsProxyWidget::tabFocus_complexWidget() window.setLayout(layout); window.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&window); -#endif QApplication::setActiveWindow(&window); window.activateWindow(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&window); leftDial->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QTRY_VERIFY(leftDial->hasFocus()); EventSpy eventSpy(edit1); @@ -1946,7 +1925,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexWidget() // Tab into group box QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!leftDial->hasFocus()); QVERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); @@ -1956,7 +1935,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexWidget() // Tab into line edit QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); edit1->hasFocus(); QVERIFY(!box->hasFocus()); QCOMPARE(eventSpy.counts[QEvent::FocusIn], 1); @@ -1964,7 +1943,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexWidget() // Tab into line edit 2 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); edit2->hasFocus(); QVERIFY(!edit1->hasFocus()); QCOMPARE(eventSpy.counts[QEvent::FocusIn], 1); @@ -1974,7 +1953,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexWidget() // Tab into right dial QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit2->hasFocus()); rightDial->hasFocus(); QCOMPARE(eventSpy2.counts[QEvent::FocusIn], 1); @@ -1982,7 +1961,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexWidget() // Backtab into line edit 2 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!rightDial->hasFocus()); edit2->hasFocus(); QCOMPARE(eventSpy2.counts[QEvent::FocusIn], 2); @@ -1990,7 +1969,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexWidget() // Backtab into line edit 1 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit2->hasFocus()); edit1->hasFocus(); QCOMPARE(eventSpy2.counts[QEvent::FocusOut], 2); @@ -1998,14 +1977,14 @@ void tst_QGraphicsProxyWidget::tabFocus_complexWidget() // Backtab into line box QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit1->hasFocus()); box->hasFocus(); QCOMPARE(eventSpy.counts[QEvent::FocusOut], 2); // Backtab into left dial QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!box->hasFocus()); leftDial->hasFocus(); } @@ -2063,16 +2042,13 @@ void tst_QGraphicsProxyWidget::tabFocus_complexTwoWidgets() window.setLayout(layout); window.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&window); -#endif QApplication::setActiveWindow(&window); window.activateWindow(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&window); QTRY_COMPARE(QApplication::activeWindow(), &window); leftDial->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QTRY_VERIFY(leftDial->hasFocus()); EventSpy eventSpy(edit1); @@ -2083,7 +2059,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexTwoWidgets() // Tab into group box QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!leftDial->hasFocus()); QVERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); @@ -2093,7 +2069,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexTwoWidgets() // Tab into line edit QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); edit1->hasFocus(); QVERIFY(!box->hasFocus()); QCOMPARE(eventSpy.counts[QEvent::FocusIn], 1); @@ -2101,7 +2077,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexTwoWidgets() // Tab into line edit 2 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); edit2->hasFocus(); QVERIFY(!edit1->hasFocus()); QCOMPARE(eventSpy.counts[QEvent::FocusIn], 1); @@ -2109,13 +2085,13 @@ void tst_QGraphicsProxyWidget::tabFocus_complexTwoWidgets() // Tab into right box QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit2->hasFocus()); box_2->hasFocus(); // Tab into right top line edit QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!box_2->hasFocus()); edit1_2->hasFocus(); QCOMPARE(eventSpy1_2.counts[QEvent::FocusIn], 1); @@ -2123,7 +2099,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexTwoWidgets() // Tab into right bottom line edit QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit1_2->hasFocus()); edit2_2->hasFocus(); QCOMPARE(eventSpy1_2.counts[QEvent::FocusIn], 1); @@ -2133,50 +2109,50 @@ void tst_QGraphicsProxyWidget::tabFocus_complexTwoWidgets() // Tab into right dial QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit2->hasFocus()); rightDial->hasFocus(); QCOMPARE(eventSpy2_2.counts[QEvent::FocusOut], 1); // Backtab into line edit 2 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!rightDial->hasFocus()); edit2_2->hasFocus(); // Backtab into line edit 1 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit2_2->hasFocus()); edit1_2->hasFocus(); // Backtab into line box QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit1_2->hasFocus()); box_2->hasFocus(); // Backtab into line edit 2 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!rightDial->hasFocus()); edit2->hasFocus(); // Backtab into line edit 1 QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit2->hasFocus()); edit1->hasFocus(); // Backtab into line box QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit1->hasFocus()); box->hasFocus(); // Backtab into left dial QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!box->hasFocus()); leftDial->hasFocus(); } @@ -2200,16 +2176,13 @@ void tst_QGraphicsProxyWidget::setFocus_simpleWidget() window.setLayout(layout); window.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&window); -#endif QApplication::setActiveWindow(&window); window.activateWindow(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&window); QTRY_COMPARE(QApplication::activeWindow(), &window); leftDial->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QTRY_VERIFY(leftDial->hasFocus()); EventSpy eventSpy(edit); @@ -2273,16 +2246,13 @@ void tst_QGraphicsProxyWidget::setFocus_simpleTwoWidgets() window.setLayout(layout); window.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&window); -#endif QApplication::setActiveWindow(&window); window.activateWindow(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&window); QTRY_COMPARE(QApplication::activeWindow(), &window); leftDial->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QTRY_VERIFY(leftDial->hasFocus()); EventSpy eventSpy(edit); @@ -2353,16 +2323,13 @@ void tst_QGraphicsProxyWidget::setFocus_complexTwoWidgets() window.setLayout(layout); window.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&window); -#endif QApplication::setActiveWindow(&window); window.activateWindow(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&window); QTRY_COMPARE(QApplication::activeWindow(), &window); leftDial->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QTRY_VERIFY(leftDial->hasFocus()); EventSpy eventSpy(edit1); @@ -2377,7 +2344,7 @@ void tst_QGraphicsProxyWidget::setFocus_complexTwoWidgets() QCOMPARE(eventSpy.counts[QEvent::FocusIn], 0); edit1->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(scene.hasFocus()); QVERIFY(edit1->hasFocus()); QVERIFY(!box->hasFocus()); @@ -2385,7 +2352,7 @@ void tst_QGraphicsProxyWidget::setFocus_complexTwoWidgets() QCOMPARE(eventSpyBox.counts[QEvent::FocusIn], 0); edit2_2->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit1->hasFocus()); QVERIFY(!box_2->hasFocus()); QVERIFY(edit2_2->hasFocus()); @@ -2396,7 +2363,7 @@ void tst_QGraphicsProxyWidget::setFocus_complexTwoWidgets() QCOMPARE(eventSpyBox_2.counts[QEvent::FocusIn], 0); box->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(!edit2_2->hasFocus()); QVERIFY(!edit1->hasFocus()); QVERIFY(box->hasFocus()); @@ -2410,7 +2377,7 @@ void tst_QGraphicsProxyWidget::setFocus_complexTwoWidgets() QCOMPARE(eventSpyBox_2.counts[QEvent::FocusOut], 0); edit2_2->setFocus(); - QTest::qWait(125); + QApplication::processEvents(); QVERIFY(edit2_2->hasFocus()); QVERIFY(!edit1->hasFocus()); QVERIFY(!box->hasFocus()); @@ -2447,12 +2414,14 @@ void tst_QGraphicsProxyWidget::popup_basic() QCOMPARE(box->pos(), QPoint()); QCOMPARE(proxy->pos(), QPointF()); + QTest::qWaitForWindowShown(&view); QTest::qWait(125); + QApplication::processEvents(); QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); - QTest::qWait(125); + QTest::qWait(12); QCOMPARE(box->pos(), QPoint()); @@ -2467,8 +2436,8 @@ void tst_QGraphicsProxyWidget::popup_basic() QSKIP("Does not work due to SH_Combobox_Popup", SkipAll); QCOMPARE(child->widget()->parent(), static_cast<QObject*>(box)); - QTest::qWait(125); - QCOMPARE(proxy->pos(), QPointF(box->pos())); + QTest::qWait(12); + QTRY_COMPARE(proxy->pos(), QPointF(box->pos())); QCOMPARE(child->x(), qreal(box->x())); QCOMPARE(child->y(), qreal(box->rect().bottom())); #ifndef Q_OS_WIN @@ -2478,7 +2447,7 @@ void tst_QGraphicsProxyWidget::popup_basic() QCOMPARE(child->widget()->y(), box->rect().bottom()); QCOMPARE(child->geometry().toRect(), child->widget()->geometry()); #endif - QTest::qWait(125); + QTest::qWait(12); } void tst_QGraphicsProxyWidget::popup_subwidget() @@ -2544,7 +2513,8 @@ void tst_QGraphicsProxyWidget::changingCursor_basic() proxy->setWidget(widget); proxy->show(); scene.addItem(proxy); - QTest::qWait(125); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); // in QTest::mouseMove(view.viewport(), view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); @@ -2653,7 +2623,8 @@ void tst_QGraphicsProxyWidget::childPos() for (int i = 0; i < 2; ++i) { box->showPopup(); - QTest::qWait(50); + QApplication::processEvents(); + QApplication::processEvents(); QWidget *menu = 0; foreach (QObject *child, box->children()) { @@ -2718,7 +2689,7 @@ void tst_QGraphicsProxyWidget::windowOpacity() view.show(); QTest::qWaitForWindowShown(&view); QApplication::sendPostedEvents(); - QTest::qWait(100); + QTest::qWait(50); qRegisterMetaType<QList<QRectF> >("QList<QRectF>"); QSignalSpy signalSpy(&scene, SIGNAL(changed(const QList<QRectF> &))); @@ -2727,7 +2698,7 @@ void tst_QGraphicsProxyWidget::windowOpacity() QVERIFY(widget->isVisible()); widget->setWindowOpacity(0.5); - QTest::qWait(100); + QApplication::processEvents(); // Make sure setWindowOpacity triggers an update on the scene, // and not on the widget or the proxy itself. The entire proxy needs an update @@ -2738,8 +2709,8 @@ void tst_QGraphicsProxyWidget::windowOpacity() #ifdef Q_WS_X11 paints = !X11->use_xrender; #endif - QCOMPARE(eventSpy.counts[QEvent::UpdateRequest], 0); - QCOMPARE(eventSpy.counts[QEvent::Paint], paints); + QTRY_COMPARE(eventSpy.counts[QEvent::UpdateRequest], 0); + QTRY_COMPARE(eventSpy.counts[QEvent::Paint], paints); QCOMPARE(signalSpy.count(), 1); const QList<QVariant> arguments = signalSpy.takeFirst(); @@ -2920,7 +2891,8 @@ void tst_QGraphicsProxyWidget::dontCrashWhenDie() { MainWidget *w = new MainWidget(); w->show(); - QTest::qWait(200); + QTest::qWaitForWindowShown(w); + QTest::qWait(100); QTest::mouseMove(w->view->viewport(), w->view->mapFromScene(w->widget->mapToScene(w->widget->boundingRect().center()))); delete w->item; } diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index 07d7cce..864076f 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -1702,9 +1702,8 @@ void tst_QGraphicsScene::hoverEvents_parentChild() view.rotate(10); view.scale(1.7, 1.7); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif + QTest::qWaitForWindowShown(&view); + QTest::qWait(50); QGraphicsSceneMouseEvent mouseEvent(QEvent::GraphicsSceneMouseMove); mouseEvent.setScenePos(QPointF(-1000, -1000)); @@ -3060,52 +3059,53 @@ void tst_QGraphicsScene::tabFocus_sceneWithFocusableItems() widget.show(); qApp->setActiveWindow(&widget); widget.activateWindow(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&widget); + QApplication::processEvents(); dial1->setFocus(); - QVERIFY(dial1->hasFocus()); + QTRY_VERIFY(dial1->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(view->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); QVERIFY(scene.hasFocus()); QVERIFY(item->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(dial2->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(dial2->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(view->hasFocus()); - QVERIFY(view->viewport()->hasFocus()); - QVERIFY(scene.hasFocus()); - QVERIFY(item->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(view->hasFocus()); + QTRY_VERIFY(view->viewport()->hasFocus()); + QTRY_VERIFY(scene.hasFocus()); + QTRY_VERIFY(item->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(dial1->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(dial1->hasFocus()); // If the item requests input focus, it can only ensure that the scene // sets focus on itself, but the scene cannot request focus from any view. item->setFocus(); - QTest::qWait(125); - QVERIFY(!view->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!view->hasFocus()); QVERIFY(!view->viewport()->hasFocus()); - QVERIFY(scene.hasFocus()); + QTRY_VERIFY(scene.hasFocus()); QVERIFY(item->hasFocus()); view->setFocus(); - QTest::qWait(125); - QVERIFY(view->hasFocus()); - QVERIFY(view->viewport()->hasFocus()); - QVERIFY(scene.hasFocus()); - QVERIFY(item->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(view->hasFocus()); + QTRY_VERIFY(view->viewport()->hasFocus()); + QTRY_VERIFY(scene.hasFocus()); + QTRY_VERIFY(item->hasFocus()); // Check that everyone loses focus when the widget is hidden. widget.hide(); - QTest::qWait(125); - QVERIFY(!view->hasFocus()); + QTest::qWait(15); + QTRY_VERIFY(!view->hasFocus()); QVERIFY(!view->viewport()->hasFocus()); QVERIFY(!scene.hasFocus()); QVERIFY(!item->hasFocus()); @@ -3114,8 +3114,8 @@ void tst_QGraphicsScene::tabFocus_sceneWithFocusableItems() widget.show(); qApp->setActiveWindow(&widget); widget.activateWindow(); - QTest::qWait(125); - QVERIFY(view->hasFocus()); + QTest::qWaitForWindowShown(&widget); + QTRY_VERIFY(view->hasFocus()); QVERIFY(view->viewport()->hasFocus()); QVERIFY(scene.hasFocus()); QVERIFY(item->hasFocus()); @@ -3193,47 +3193,48 @@ void tst_QGraphicsScene::tabFocus_sceneWithFocusWidgets() widget.show(); qApp->setActiveWindow(&widget); widget.activateWindow(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&widget); + QApplication::processEvents(); dial1->setFocus(); - QVERIFY(dial1->hasFocus()); + QTRY_VERIFY(dial1->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(view->hasFocus()); - QVERIFY(view->viewport()->hasFocus()); - QVERIFY(scene.hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(view->hasFocus()); + QTRY_VERIFY(view->viewport()->hasFocus()); + QTRY_VERIFY(scene.hasFocus()); QCOMPARE(widget1->tabs, 0); QVERIFY(widget1->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QCOMPARE(widget1->tabs, 1); - QVERIFY(widget2->hasFocus()); + QApplication::processEvents(); + QTRY_COMPARE(widget1->tabs, 1); + QTRY_VERIFY(widget2->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QCOMPARE(widget2->tabs, 1); - QVERIFY(dial2->hasFocus()); + QApplication::processEvents(); + QTRY_COMPARE(widget2->tabs, 1); + QTRY_VERIFY(dial2->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(widget2->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(widget2->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QCOMPARE(widget2->backTabs, 1); - QVERIFY(widget1->hasFocus()); + QApplication::processEvents(); + QTRY_COMPARE(widget2->backTabs, 1); + QTRY_VERIFY(widget1->hasFocus()); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QCOMPARE(widget1->backTabs, 1); - QVERIFY(dial1->hasFocus()); + QApplication::processEvents(); + QTRY_COMPARE(widget1->backTabs, 1); + QTRY_VERIFY(dial1->hasFocus()); widget1->setFocus(); view->viewport()->setFocus(); widget.hide(); - QTest::qWait(125); + QTest::qWait(15); widget.show(); qApp->setActiveWindow(&widget); widget.activateWindow(); - QTest::qWait(125); - QVERIFY(widget1->hasFocus()); + QTest::qWaitForWindowShown(&widget); + QTRY_VERIFY(widget1->hasFocus()); } void tst_QGraphicsScene::tabFocus_sceneWithNestedFocusWidgets() @@ -3276,10 +3277,10 @@ void tst_QGraphicsScene::tabFocus_sceneWithNestedFocusWidgets() widget.show(); qApp->setActiveWindow(&widget); widget.activateWindow(); - QTest::qWait(125); + QTest::qWaitForWindowShown(&widget); dial1->setFocus(); - QVERIFY(dial1->hasFocus()); + QTRY_VERIFY(dial1->hasFocus()); EventSpy focusInSpy_1(widget1, QEvent::FocusIn); EventSpy focusOutSpy_1(widget1, QEvent::FocusOut); @@ -3291,78 +3292,79 @@ void tst_QGraphicsScene::tabFocus_sceneWithNestedFocusWidgets() EventSpy focusOutSpy_2(widget2, QEvent::FocusOut); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(widget1->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(widget1->hasFocus()); QCOMPARE(focusInSpy_1.count(), 1); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(!widget1->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!widget1->hasFocus()); QVERIFY(widget1_1->hasFocus()); QCOMPARE(focusOutSpy_1.count(), 1); QCOMPARE(focusInSpy_1_1.count(), 1); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(!widget1_1->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!widget1_1->hasFocus()); QVERIFY(widget1_2->hasFocus()); QCOMPARE(focusOutSpy_1_1.count(), 1); QCOMPARE(focusInSpy_1_2.count(), 1); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(!widget1_2->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!widget1_2->hasFocus()); QVERIFY(widget2->hasFocus()); QCOMPARE(focusOutSpy_1_2.count(), 1); QCOMPARE(focusInSpy_2.count(), 1); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab); - QTest::qWait(125); - QVERIFY(!widget2->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!widget2->hasFocus()); QVERIFY(dial2->hasFocus()); QCOMPARE(focusOutSpy_2.count(), 1); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(widget2->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(widget2->hasFocus()); QCOMPARE(focusInSpy_2.count(), 2); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(!widget2->hasFocus()); - QVERIFY(widget1_2->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!widget2->hasFocus()); + QTRY_VERIFY(widget1_2->hasFocus()); QCOMPARE(focusOutSpy_2.count(), 2); QCOMPARE(focusInSpy_1_2.count(), 2); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(!widget1_2->hasFocus()); - QVERIFY(widget1_1->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!widget1_2->hasFocus()); + QTRY_VERIFY(widget1_1->hasFocus()); QCOMPARE(focusOutSpy_1_2.count(), 2); QCOMPARE(focusInSpy_1_1.count(), 2); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(!widget1_1->hasFocus()); - QVERIFY(widget1->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!widget1_1->hasFocus()); + QTRY_VERIFY(widget1->hasFocus()); QCOMPARE(focusOutSpy_1_1.count(), 2); QCOMPARE(focusInSpy_1.count(), 2); QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab); - QTest::qWait(125); - QVERIFY(!widget1->hasFocus()); - QVERIFY(dial1->hasFocus()); + QApplication::processEvents(); + QTRY_VERIFY(!widget1->hasFocus()); + QTRY_VERIFY(dial1->hasFocus()); QCOMPARE(focusOutSpy_1.count(), 2); widget1->setFocus(); view->viewport()->setFocus(); widget.hide(); - QTest::qWait(125); + QTest::qWait(12); widget.show(); qApp->setActiveWindow(&widget); widget.activateWindow(); - QTest::qWait(125); - QVERIFY(widget1->hasFocus()); + QTest::qWaitForWindowShown(&widget); + QApplication::processEvents(); + QTRY_VERIFY(widget1->hasFocus()); } void tst_QGraphicsScene::style() @@ -3454,10 +3456,10 @@ void tst_QGraphicsScene::task139782_containsItemBoundingRect() void tst_QGraphicsScene::task176178_itemIndexMethodBreaksSceneRect() { - QGraphicsScene scene; - scene.setItemIndexMethod(QGraphicsScene::NoIndex); - QGraphicsRectItem *rect = new QGraphicsRectItem; - rect->setRect(0,0,100,100); + QGraphicsScene scene; + scene.setItemIndexMethod(QGraphicsScene::NoIndex); + QGraphicsRectItem *rect = new QGraphicsRectItem; + rect->setRect(0,0,100,100); scene.addItem(rect); QCOMPARE(scene.sceneRect(), rect->rect()); } @@ -3518,7 +3520,7 @@ void tst_QGraphicsScene::sorting_data() void tst_QGraphicsScene::sorting() { QFETCH(bool, cache); - + QGraphicsScene scene; scene.setSortCacheEnabled(cache); @@ -3552,15 +3554,15 @@ void tst_QGraphicsScene::sorting() c_2_1_1->setPos(-16, 16); c_2_2->setPos(-16, 28); c_2_2->setZValue(1); - - c_1->setFlag(QGraphicsItem::ItemIsMovable); - c_1_1->setFlag(QGraphicsItem::ItemIsMovable); - c_1_1_1->setFlag(QGraphicsItem::ItemIsMovable); - c_1_2->setFlag(QGraphicsItem::ItemIsMovable); - c_2->setFlag(QGraphicsItem::ItemIsMovable); - c_2_1->setFlag(QGraphicsItem::ItemIsMovable); - c_2_1_1->setFlag(QGraphicsItem::ItemIsMovable); - c_2_2->setFlag(QGraphicsItem::ItemIsMovable); + + c_1->setFlag(QGraphicsItem::ItemIsMovable); + c_1_1->setFlag(QGraphicsItem::ItemIsMovable); + c_1_1_1->setFlag(QGraphicsItem::ItemIsMovable); + c_1_2->setFlag(QGraphicsItem::ItemIsMovable); + c_2->setFlag(QGraphicsItem::ItemIsMovable); + c_2_1->setFlag(QGraphicsItem::ItemIsMovable); + c_2_1_1->setFlag(QGraphicsItem::ItemIsMovable); + c_2_2->setFlag(QGraphicsItem::ItemIsMovable); t_1->setData(0, "t_1"); c_1->setData(0, "c_1"); @@ -3585,7 +3587,7 @@ void tst_QGraphicsScene::sorting() foreach (QGraphicsItem *item, scene.items(32, 31, 4, 55)) qDebug() << "\t" << item->data(0).toString(); qDebug() << "}"; - + QCOMPARE(scene.items(32, 31, 4, 55), QList<QGraphicsItem *>() << c_1_2 << c_1_1_1 << c_1 << t_1); diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index 95a038b..78fb4f3 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -363,7 +363,7 @@ void tst_QGraphicsView::alignment() for (int k = 0; k < 3; ++k) { view.resize(100 + k * 25, 100 + k * 25); - QTest::qWait(25); + QApplication::processEvents(); } } } @@ -455,7 +455,7 @@ void tst_QGraphicsView::setScene() view.setScene(0); - QTest::qWait(250); + QTest::qWait(25); QVERIFY(!view.horizontalScrollBar()->isVisible()); QVERIFY(!view.verticalScrollBar()->isVisible()); @@ -530,7 +530,7 @@ void tst_QGraphicsView::sceneRect_growing() size *= 2; scene.setSceneRect(-size, -size, size * 2, size * 2); - QTest::qWait(25); + QApplication::processEvents(); QCOMPARE(view.sceneRect(), scene.sceneRect()); QCOMPARE(view.mapToScene(0, 0), topLeft); @@ -614,7 +614,8 @@ void tst_QGraphicsView::dragMode_scrollHand() view.setFixedSize(100, 100); view.show(); - QTest::qWait(25); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); view.setInteractive(j ? false : true); @@ -646,9 +647,9 @@ void tst_QGraphicsView::dragMode_scrollHand() QApplication::sendEvent(view.viewport(), &event); QVERIFY(event.isAccepted()); } - QTest::qWait(250); + QApplication::processEvents(); - QVERIFY(item->isSelected()); + QTRY_VERIFY(item->isSelected()); for (int k = 0; k < 4; ++k) { #ifndef QT_NO_CURSOR @@ -689,9 +690,9 @@ void tst_QGraphicsView::dragMode_scrollHand() QApplication::sendEvent(view.viewport(), &event); QVERIFY(event.isAccepted()); } - QTest::qWait(250); + QApplication::processEvents(); - QVERIFY(item->isSelected()); + QTRY_VERIFY(item->isSelected()); QCOMPARE(view.horizontalScrollBar()->value(), horizontalScrollBarValue - 10); QCOMPARE(view.verticalScrollBar()->value(), verticalScrollBarValue - 10); #ifndef QT_NO_CURSOR @@ -749,6 +750,9 @@ void tst_QGraphicsView::dragMode_rubberBand() view.setDragMode(QGraphicsView::RubberBandDrag); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); + for (int i = 0; i < 2; ++i) { // RubberBandDrag #ifndef QT_NO_CURSOR @@ -769,7 +773,7 @@ void tst_QGraphicsView::dragMode_rubberBand() QCOMPARE(view.viewport()->cursor().shape(), cursorShape); #endif - QTest::qWait(25); + QApplication::processEvents(); { // Move @@ -1073,7 +1077,7 @@ void tst_QGraphicsView::centerOnPoint() QFAIL(qPrintable(error)); } - QTest::qWait(1); + QApplication::processEvents(); } } @@ -2095,7 +2099,7 @@ void tst_QGraphicsView::transformationAnchor() } view.centerOn(0, 0); view.horizontalScrollBar()->setValue(100); - QTest::qWait(100); + QApplication::processEvents(); QPointF center = view.mapToScene(view.viewport()->rect().center()); @@ -2125,6 +2129,8 @@ void tst_QGraphicsView::resizeAnchor() for (int i = 0; i < 2; ++i) { view.resize(100, 100); view.show(); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); if (i == 0) { QCOMPARE(view.resizeAnchor(), QGraphicsView::NoAnchor); @@ -2132,12 +2138,12 @@ void tst_QGraphicsView::resizeAnchor() view.setResizeAnchor(QGraphicsView::AnchorViewCenter); } view.centerOn(0, 0); - QTest::qWait(250); + QTest::qWait(25); QPointF f = view.mapToScene(50, 50); QPointF center = view.mapToScene(view.viewport()->rect().center()); - QTest::qWait(250); + QApplication::processEvents(); for (int size = 200; size <= 400; size += 25) { view.resize(size, size); @@ -2152,7 +2158,7 @@ void tst_QGraphicsView::resizeAnchor() QVERIFY(qAbs(newCenter.x() - center.x()) < slack); QVERIFY(qAbs(newCenter.y() - center.y()) < slack); } - QTest::qWait(20); + QApplication::processEvents(); } } } @@ -2760,11 +2766,11 @@ void tst_QGraphicsView::task187791_setSceneCausesUpdate() QCOMPARE(updateSpy.count(), 0); view.setScene(0); - QTest::qWait(125); - QCOMPARE(updateSpy.count(), 1); + QApplication::processEvents(); + QTRY_COMPARE(updateSpy.count(), 1); view.setScene(&scene); - QTest::qWait(125); - QCOMPARE(updateSpy.count(), 2); + QApplication::processEvents(); + QTRY_COMPARE(updateSpy.count(), 2); } class MouseMoveCounter : public QGraphicsView @@ -2808,15 +2814,15 @@ void tst_QGraphicsView::task186827_deleteReplayedItem() QApplication::sendEvent(view.viewport(), &event); } QCOMPARE(view.mouseMoves, 1); - QTest::qWait(125); - QCOMPARE(view.mouseMoves, 1); - QTest::qWait(125); + QTest::qWait(25); + QTRY_COMPARE(view.mouseMoves, 1); + QTest::qWait(25); { QMouseEvent event(QEvent::MouseMove, view.mapFromScene(25, 25), Qt::NoButton, 0, 0); QApplication::sendEvent(view.viewport(), &event); } QCOMPARE(view.mouseMoves, 2); - QTest::qWait(125); + QTest::qWait(15); } void tst_QGraphicsView::task207546_focusCrash() @@ -3154,11 +3160,12 @@ void tst_QGraphicsView::moveItemWhileScrolling() if (!adjustForAntialiasing) view.setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing); view.resize(200, 200); + view.painted = false; view.show(); QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); QTRY_VERIFY(view.painted); view.painted = false; - view.lastPaintedRegion = QRegion(); view.horizontalScrollBar()->setValue(view.horizontalScrollBar()->value() + 10); view.rect->moveBy(0, 10); @@ -3360,6 +3367,7 @@ void tst_QGraphicsView::render() view.painted = false; view.show(); QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); QTRY_VERIFY(view.painted > 0); RenderTester *r1 = new RenderTester(QRectF(0, 0, 50, 50)); @@ -3412,11 +3420,11 @@ void tst_QGraphicsView::exposeRegion() QRegion expectedExposeRegion = QRect(0, 0, 5, 5); expectedExposeRegion += QRect(viewport->rect().bottomRight() - QPoint(5, 5), QSize(5, 5)); viewport->update(expectedExposeRegion); - QTest::qWait(125); + QApplication::processEvents(); // Make sure it triggers correct repaint on the view. - QCOMPARE(view.lastUpdateRegions.size(), 1); - QCOMPARE(view.lastUpdateRegions.at(0), expectedExposeRegion); + QTRY_COMPARE(view.lastUpdateRegions.size(), 1); + QTRY_COMPARE(view.lastUpdateRegions.at(0), expectedExposeRegion); // Make sure the item didn't get any repaints. QCOMPARE(item->paints, 0); @@ -3473,7 +3481,7 @@ void tst_QGraphicsView::update() #if defined QT_BUILD_INTERNAL const bool intersects = updateRect.intersects(viewportRect); QGraphicsViewPrivate *viewPrivate = static_cast<QGraphicsViewPrivate *>(qt_widget_private(&view)); - QCOMPARE(viewPrivate->updateRect(updateRect), intersects); + QTRY_COMPARE(viewPrivate->updateRect(updateRect), intersects); QCOMPARE(viewPrivate->updateRegion(updateRect), intersects); view.lastUpdateRegions.clear(); @@ -3631,13 +3639,13 @@ void tst_QGraphicsView::task253415_reconnectUpdateSceneOnSceneChanged() QObject::connect(&scene1, SIGNAL(changed(QList<QRectF>)), &dummyView, SLOT(updateScene(QList<QRectF>))); view.setScene(&scene1); - QTest::qWait(125); + QTest::qWait(12); QGraphicsScene scene2; QObject::connect(&scene2, SIGNAL(changed(QList<QRectF>)), &dummyView, SLOT(updateScene(QList<QRectF>))); view.setScene(&scene2); - QTest::qWait(125); + QTest::qWait(12); bool wasConnected2 = QObject::disconnect(&scene2, SIGNAL(changed(QList<QRectF>)), &view, 0); QVERIFY(wasConnected2); @@ -3661,8 +3669,10 @@ void tst_QGraphicsView::task255529_transformationAnchorMouseAndViewportMargins() }; VpGraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); view.show(); QTest::qWaitForWindowShown(&view); + QTest::qWait(50); QPoint mouseViewPos(20, 20); sendMouseMove(view.viewport(), mouseViewPos); diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp index b51434f..d9cab02 100644 --- a/tests/auto/qlistview/tst_qlistview.cpp +++ b/tests/auto/qlistview/tst_qlistview.cpp @@ -59,6 +59,8 @@ #include <windows.h> #endif +#include "../../shared/util.h" + //TESTED_CLASS= //TESTED_FILES= @@ -1630,7 +1632,9 @@ void tst_QListView::task254449_draggingItemToNegativeCoordinates() } delegate; list.setItemDelegate(&delegate); - QTest::qWait(200); //makes sure the layout is done + delegate.numPaints = 0; + QTest::qWaitForWindowShown(&list); //makes sure the layout is done + QTRY_VERIFY(delegate.numPaints > 0); const QPoint topLeft(-6, 0); list.setPositionForIndex(topLeft, index); diff --git a/tests/auto/qlistwidget/tst_qlistwidget.cpp b/tests/auto/qlistwidget/tst_qlistwidget.cpp index d31b07f..e825c8f 100644 --- a/tests/auto/qlistwidget/tst_qlistwidget.cpp +++ b/tests/auto/qlistwidget/tst_qlistwidget.cpp @@ -302,6 +302,11 @@ void tst_QListWidget::openPersistentEditor() void tst_QListWidget::closePersistentEditor() { +#if defined(Q_OS_SYMBIAN) + //give the Symbian app start event queue time to clear + QTest::qWait(1000); +#endif + // Boundry checking int childCount = testWidget->viewport()->children().count(); testWidget->closePersistentEditor(0); diff --git a/tests/auto/qlocalsocket/lackey/lackey.pro b/tests/auto/qlocalsocket/lackey/lackey.pro index efb2f52..8182394 100644 --- a/tests/auto/qlocalsocket/lackey/lackey.pro +++ b/tests/auto/qlocalsocket/lackey/lackey.pro @@ -1,4 +1,4 @@ -include(../src/src.pri) +#include(../src/src.pri) QT = core script network diff --git a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp index 1180d4d..be39d00 100644 --- a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp +++ b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp @@ -87,6 +87,8 @@ private slots: void sendData_data(); void sendData(); + void readBufferOverflow(); + void fullPath(); void hitMaximumConnections_data(); @@ -102,13 +104,15 @@ private slots: void longPath(); void waitForDisconnect(); + void waitForDisconnectByServer(); void removeServer(); void recycleServer(); + void multiConnect(); + void writeOnlySocket(); void writeToClientAndDisconnect(); - void debug(); void bytesWrittenSignal(); @@ -151,7 +155,13 @@ public: LocalServer() : QLocalServer() { connect(this, SIGNAL(newConnection()), this, SLOT(slotNewConnection())); - }; + } + + bool listen(const QString &name) + { + removeServer(name); + return QLocalServer::listen(name); + } QList<int> hits; @@ -553,6 +563,40 @@ void tst_QLocalSocket::sendData() QCOMPARE(spy.count(), (canListen ? 1 : 0)); } +void tst_QLocalSocket::readBufferOverflow() +{ + const int readBufferSize = 128; + const int dataBufferSize = readBufferSize * 2; + const QString serverName = QLatin1String("myPreciousTestServer"); + LocalServer server; + server.listen(serverName); + QVERIFY(server.isListening()); + + LocalSocket client; + client.setReadBufferSize(readBufferSize); + client.connectToServer(serverName); + + bool timedOut = true; + QVERIFY(server.waitForNewConnection(3000, &timedOut)); + QVERIFY(!timedOut); + + QCOMPARE(client.state(), QLocalSocket::ConnectedState); + QVERIFY(server.hasPendingConnections()); + + QLocalSocket* serverSocket = server.nextPendingConnection(); + char buffer[dataBufferSize]; + memset(buffer, 0, dataBufferSize); + serverSocket->write(buffer, dataBufferSize); + serverSocket->flush(); + + QVERIFY(client.waitForReadyRead()); + QCOMPARE(client.read(buffer, readBufferSize), qint64(readBufferSize)); +#if defined(QT_LOCALSOCKET_TCP) || defined(Q_OS_SYMBIAN) + QTest::qWait(250); +#endif + QCOMPARE(client.read(buffer, readBufferSize), qint64(readBufferSize)); +} + // QLocalSocket/Server can take a name or path, check that it works as expected void tst_QLocalSocket::fullPath() { @@ -833,6 +877,25 @@ void tst_QLocalSocket::waitForDisconnect() QVERIFY(timer.elapsed() < 2000); } +void tst_QLocalSocket::waitForDisconnectByServer() +{ + QString name = "tst_localsocket"; + LocalServer server; + QVERIFY(server.listen(name)); + LocalSocket socket; + QSignalSpy spy(&socket, SIGNAL(disconnected())); + QVERIFY(spy.isValid()); + socket.connectToServer(name); + QVERIFY(socket.waitForConnected(3000)); + QVERIFY(server.waitForNewConnection(3000)); + QLocalSocket *serverSocket = server.nextPendingConnection(); + QVERIFY(serverSocket); + serverSocket->close(); + QVERIFY(serverSocket->state() == QLocalSocket::UnconnectedState); + QVERIFY(socket.waitForDisconnected(3000)); + QCOMPARE(spy.count(), 1); +} + void tst_QLocalSocket::removeServer() { // this is a hostile takeover, but recovering from a crash results in the same @@ -874,6 +937,53 @@ void tst_QLocalSocket::recycleServer() QVERIFY(server.nextPendingConnection() != 0); } +void tst_QLocalSocket::multiConnect() +{ + QLocalServer server; + QLocalSocket client1; + QLocalSocket client2; + QLocalSocket client3; + + QVERIFY(server.listen("multiconnect")); + + client1.connectToServer("multiconnect"); + client2.connectToServer("multiconnect"); + client3.connectToServer("multiconnect"); + + QVERIFY(client1.waitForConnected(201)); + QVERIFY(client2.waitForConnected(202)); + QVERIFY(client3.waitForConnected(203)); + + QVERIFY(server.waitForNewConnection(201)); + QVERIFY(server.nextPendingConnection() != 0); + QVERIFY(server.waitForNewConnection(202)); + QVERIFY(server.nextPendingConnection() != 0); + QVERIFY(server.waitForNewConnection(203)); + QVERIFY(server.nextPendingConnection() != 0); +} + +void tst_QLocalSocket::writeOnlySocket() +{ + QLocalServer server; +#ifdef Q_OS_SYMBIAN + unlink("writeOnlySocket"); +#endif + QVERIFY(server.listen("writeOnlySocket")); + + QLocalSocket client; + client.connectToServer("writeOnlySocket", QIODevice::WriteOnly); + QVERIFY(client.waitForConnected()); +#if defined(Q_OS_SYMBIAN) + QTest::qWait(250); +#endif + QVERIFY(server.waitForNewConnection()); + QLocalSocket* serverSocket = server.nextPendingConnection(); + QVERIFY(serverSocket); + + QCOMPARE(client.bytesAvailable(), qint64(0)); + QCOMPARE(client.state(), QLocalSocket::ConnectedState); +} + void tst_QLocalSocket::writeToClientAndDisconnect() { #ifdef Q_OS_SYMBIAN diff --git a/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp index 86a04d0..cc5104a 100644 --- a/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp +++ b/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp @@ -259,6 +259,9 @@ void tst_QNetworkDiskCache::data_data() // public QIODevice* data(QUrl const& url) void tst_QNetworkDiskCache::data() { +#ifdef Q_OS_SYMBIAN + QSKIP("Due to mmap(...) bug in Open C [Temtrack DEF142242]", SkipAll); +#endif QFETCH(QNetworkCacheMetaData, data); SubQNetworkDiskCache cache; QUrl url(EXAMPLE_URL); @@ -335,6 +338,9 @@ void tst_QNetworkDiskCache::setCacheDirectory() // public void updateMetaData(QNetworkCacheMetaData const& metaData) void tst_QNetworkDiskCache::updateMetaData() { +#ifdef Q_OS_SYMBIAN + QSKIP("Due to mmap(...) bug in Open C [Temtrack DEF142242]", SkipAll); +#endif QUrl url(EXAMPLE_URL); SubQNetworkDiskCache cache; cache.setupWithOne(url); diff --git a/tests/auto/qprinterinfo/tst_qprinterinfo.cpp b/tests/auto/qprinterinfo/tst_qprinterinfo.cpp index e397b76..2fa7515 100644 --- a/tests/auto/qprinterinfo/tst_qprinterinfo.cpp +++ b/tests/auto/qprinterinfo/tst_qprinterinfo.cpp @@ -101,6 +101,8 @@ void tst_QPrinterInfo::macFixNameFormat(QString *printerName) #ifdef Q_WS_MAC printerName->replace(QLatin1String("___"), QLatin1String(" @ ")); printerName->replace(QLatin1String("_"), QLatin1String(".")); +#else + Q_UNUSED(printerName); #endif } @@ -282,16 +284,17 @@ void tst_QPrinterInfo::testForPrinters() QCOMPARE(printers.size(), sysPrinters.size()); + QHash<QString, bool> qtPrinters; + + for (int j = 0; j < printers.size(); ++j) { + qtPrinters.insert(printers.at(j).printerName(), !printers.at(j).isNull()); + } + for (int i = 0; i < sysPrinters.size(); ++i) { - bool found = false; - for (int j = 0; j < printers.size(); ++j) { - if (sysPrinters.at(i) == printers.at(j).printerName()) { - QVERIFY(!printers.at(j).isNull()); - found = true; - break; - } + if (!qtPrinters.value(sysPrinters.at(i))) { + qDebug() << "Avaliable printers: " << qtPrinters; + QFAIL(qPrintable(QString("Printer '%1' reported by system, but not reported by Qt").arg(sysPrinters.at(i)))); } - if (!found) QFAIL("Printer reported by system, but not reported by Qt"); } #else QSKIP("Test doesn't work on non-Unix", SkipAll); diff --git a/tests/auto/qscriptvalue/tst_qscriptvalue.cpp b/tests/auto/qscriptvalue/tst_qscriptvalue.cpp index 6792ebf..6b64e76 100644 --- a/tests/auto/qscriptvalue/tst_qscriptvalue.cpp +++ b/tests/auto/qscriptvalue/tst_qscriptvalue.cpp @@ -51,6 +51,10 @@ //TESTED_CLASS= //TESTED_FILES= +QT_BEGIN_NAMESPACE +extern bool qt_script_isJITEnabled(); +QT_END_NAMESPACE + class tst_QScriptValue : public QObject { Q_OBJECT @@ -2886,7 +2890,6 @@ void tst_QScriptValue::equals() { QScriptValue ret = compareFun.call(QScriptValue(), QScriptValueList() << qobj1 << qobj2); QVERIFY(ret.isBool()); - QEXPECT_FAIL("", "In JSC back-end, == on QObject wrappers doesn't work", Continue); QVERIFY(ret.toBool()); ret = compareFun.call(QScriptValue(), QScriptValueList() << qobj1 << qobj3); QVERIFY(ret.isBool()); @@ -2906,7 +2909,6 @@ void tst_QScriptValue::equals() { QScriptValue ret = compareFun.call(QScriptValue(), QScriptValueList() << var1 << var2); QVERIFY(ret.isBool()); - QEXPECT_FAIL("", "In JSC back-end, == on QVariant wrappers doesn't work", Continue); QVERIFY(ret.toBool()); } } diff --git a/tests/auto/qsqldriver/qsqldriver.pro b/tests/auto/qsqldriver/qsqldriver.pro index 84f1cb2..7f289a6 100644 --- a/tests/auto/qsqldriver/qsqldriver.pro +++ b/tests/auto/qsqldriver/qsqldriver.pro @@ -15,3 +15,11 @@ wince*: { LIBS += ws2_32.lib } } + +symbian { + contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) { + sqlite.path = /sys/bin + sqlite.sources = sqlite3.dll + DEPLOYMENT += sqlite + } +} diff --git a/tests/auto/qstatemachine/tst_qstatemachine.cpp b/tests/auto/qstatemachine/tst_qstatemachine.cpp index 37b34bf..b808f7f 100644 --- a/tests/auto/qstatemachine/tst_qstatemachine.cpp +++ b/tests/auto/qstatemachine/tst_qstatemachine.cpp @@ -119,6 +119,8 @@ private slots: void assignProperty(); void assignPropertyWithAnimation(); void postEvent(); + void cancelDelayedEvent(); + void postDelayedEventAndStop(); void stateFinished(); void parallelStates(); void parallelRootState(); @@ -1543,8 +1545,8 @@ private: class StringEventPoster : public QState { public: - StringEventPoster(QStateMachine *machine, const QString &value, QState *parent = 0) - : QState(parent), m_machine(machine), m_value(value), m_delay(0) {} + StringEventPoster(const QString &value, QState *parent = 0) + : QState(parent), m_value(value), m_delay(-1) {} void setString(const QString &value) { m_value = value; } @@ -1554,12 +1556,14 @@ public: protected: virtual void onEntry(QEvent *) { - m_machine->postEvent(new StringEvent(m_value), m_delay); + if (m_delay == -1) + machine()->postEvent(new StringEvent(m_value)); + else + machine()->postDelayedEvent(new StringEvent(m_value), m_delay); } virtual void onExit(QEvent *) {} private: - QStateMachine *m_machine; QString m_value; int m_delay; }; @@ -1573,7 +1577,7 @@ void tst_QStateMachine::postEvent() QTest::ignoreMessage(QtWarningMsg, "QStateMachine::postEvent: cannot post event when the state machine is not running"); machine.postEvent(&e); } - StringEventPoster *s1 = new StringEventPoster(&machine, "a"); + StringEventPoster *s1 = new StringEventPoster("a"); if (x == 1) s1->setDelay(100); QFinalState *s2 = new QFinalState; @@ -1599,6 +1603,80 @@ void tst_QStateMachine::postEvent() } } +void tst_QStateMachine::cancelDelayedEvent() +{ + QStateMachine machine; + QTest::ignoreMessage(QtWarningMsg, "QStateMachine::cancelDelayedEvent: the machine is not running"); + QVERIFY(!machine.cancelDelayedEvent(-1)); + + QState *s1 = new QState(&machine); + QFinalState *s2 = new QFinalState(&machine); + s1->addTransition(new StringTransition("a", s2)); + machine.setInitialState(s1); + + QSignalSpy startedSpy(&machine, SIGNAL(started())); + machine.start(); + QTRY_COMPARE(startedSpy.count(), 1); + QCOMPARE(machine.configuration().size(), 1); + QVERIFY(machine.configuration().contains(s1)); + + int id1 = machine.postDelayedEvent(new StringEvent("c"), 50000); + QVERIFY(id1 != -1); + int id2 = machine.postDelayedEvent(new StringEvent("b"), 25000); + QVERIFY(id2 != -1); + QVERIFY(id2 != id1); + int id3 = machine.postDelayedEvent(new StringEvent("a"), 100); + QVERIFY(id3 != -1); + QVERIFY(id3 != id2); + QVERIFY(machine.cancelDelayedEvent(id1)); + QVERIFY(!machine.cancelDelayedEvent(id1)); + QVERIFY(machine.cancelDelayedEvent(id2)); + QVERIFY(!machine.cancelDelayedEvent(id2)); + + QSignalSpy finishedSpy(&machine, SIGNAL(finished())); + QTRY_COMPARE(finishedSpy.count(), 1); + QCOMPARE(machine.configuration().size(), 1); + QVERIFY(machine.configuration().contains(s2)); +} + +void tst_QStateMachine::postDelayedEventAndStop() +{ + QStateMachine machine; + QState *s1 = new QState(&machine); + QFinalState *s2 = new QFinalState(&machine); + s1->addTransition(new StringTransition("a", s2)); + machine.setInitialState(s1); + + QSignalSpy startedSpy(&machine, SIGNAL(started())); + machine.start(); + QTRY_COMPARE(startedSpy.count(), 1); + QCOMPARE(machine.configuration().size(), 1); + QVERIFY(machine.configuration().contains(s1)); + + int id1 = machine.postDelayedEvent(new StringEvent("a"), 0); + QVERIFY(id1 != -1); + QSignalSpy stoppedSpy(&machine, SIGNAL(stopped())); + machine.stop(); + QTRY_COMPARE(stoppedSpy.count(), 1); + QCOMPARE(machine.configuration().size(), 1); + QVERIFY(machine.configuration().contains(s1)); + + machine.start(); + QTRY_COMPARE(startedSpy.count(), 2); + QCOMPARE(machine.configuration().size(), 1); + QVERIFY(machine.configuration().contains(s1)); + + int id2 = machine.postDelayedEvent(new StringEvent("a"), 1000); + QVERIFY(id2 != -1); + machine.stop(); + QTRY_COMPARE(stoppedSpy.count(), 2); + machine.start(); + QTRY_COMPARE(startedSpy.count(), 3); + QTestEventLoop::instance().enterLoop(2); + QCOMPARE(machine.configuration().size(), 1); + QVERIFY(machine.configuration().contains(s1)); +} + void tst_QStateMachine::stateFinished() { QStateMachine machine; diff --git a/tests/auto/qstatusbar/tst_qstatusbar.cpp b/tests/auto/qstatusbar/tst_qstatusbar.cpp index 3727882..9774559 100644 --- a/tests/auto/qstatusbar/tst_qstatusbar.cpp +++ b/tests/auto/qstatusbar/tst_qstatusbar.cpp @@ -48,6 +48,8 @@ #include <QMainWindow> #include <QSizeGrip> +#include "../../shared/util.h" + //TESTED_CLASS= //TESTED_FILES= @@ -177,7 +179,7 @@ void tst_QStatusBar::setSizeGripEnabled() qt_x11_wait_for_window_manager(&mainWindow); #endif - QVERIFY(statusBar->isVisible()); + QTRY_VERIFY(statusBar->isVisible()); QPointer<QSizeGrip> sizeGrip = qFindChild<QSizeGrip *>(statusBar); QVERIFY(sizeGrip); QVERIFY(sizeGrip->isVisible()); @@ -223,11 +225,8 @@ void tst_QStatusBar::setSizeGripEnabled() qApp->processEvents(); mainWindow.showNormal(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&mainWindow); -#endif qApp->processEvents(); - QVERIFY(sizeGrip->isVisible()); + QTRY_VERIFY(sizeGrip->isVisible()); } void tst_QStatusBar::task194017_hiddenWidget() diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp index 8899176..fb3cf0e 100644 --- a/tests/auto/qurl/tst_qurl.cpp +++ b/tests/auto/qurl/tst_qurl.cpp @@ -186,6 +186,8 @@ private slots: void resolvedWithAbsoluteSchemes_data() const; void binaryData_data(); void binaryData(); + void fromUserInput_data(); + void fromUserInput(); void task_199967(); void task_240612(); @@ -3637,6 +3639,69 @@ void tst_QUrl::binaryData() QCOMPARE(url2, url); } +void tst_QUrl::fromUserInput_data() +{ + QTest::addColumn<QString>("string"); + QTest::addColumn<QUrl>("url"); + + // Null + QTest::newRow("null") << QString() << QUrl(); + + // File + QDirIterator it(QDir::homePath()); + QString fileString; + int c = 0; + while (it.hasNext()) { + it.next(); + QTest::newRow(QString("file-%1").arg(c++).toLatin1()) << it.filePath() << QUrl::fromLocalFile(it.filePath()); + } + + // basic latin1 + QTest::newRow("unicode-0") << QString::fromUtf8("\xC3\xA5.com/") << QUrl::fromEncoded(QString::fromUtf8("http://\xC3\xA5.com/").toUtf8(), QUrl::TolerantMode); + // unicode + QTest::newRow("unicode-1") << QString::fromUtf8("\xCE\xBB.com/") << QUrl::fromEncoded(QString::fromUtf8("http://\xCE\xBB.com/").toUtf8(), QUrl::TolerantMode); + + // no scheme + QTest::newRow("add scheme-0") << "webkit.org" << QUrl("http://webkit.org"); + QTest::newRow("add scheme-1") << "www.webkit.org" << QUrl("http://www.webkit.org"); + QTest::newRow("add scheme-2") << "ftp.webkit.org" << QUrl("ftp://ftp.webkit.org"); + QTest::newRow("add scheme-3") << "webkit" << QUrl("webkit"); + + // QUrl's tolerant parser should already handle this + QTest::newRow("not-encoded-0") << "http://webkit.org/test page.html" << QUrl("http://webkit.org/test%20page.html"); + + // Make sure the :80, i.e. port doesn't screw anything up + QUrl portUrl("http://webkit.org"); + portUrl.setPort(80); + QTest::newRow("port-0") << "webkit.org:80" << portUrl; + QTest::newRow("port-1") << "http://webkit.org:80" << portUrl; + + // mailto doesn't have a ://, but is valid + QUrl mailto("somebody@somewhere.net"); + mailto.setScheme("mailto"); + QTest::newRow("mailto") << "mailto:somebody@somewhere.net" << mailto; + + // misc + QTest::newRow("localhost-0") << "localhost" << QUrl("http://localhost"); + QTest::newRow("localhost-1") << "localhost:80" << QUrl("http://localhost:80"); + QTest::newRow("spaces-0") << " http://webkit.org/test page.html " << QUrl("http://webkit.org/test%20page.html"); + QTest::newRow("trash-0") << "webkit.org/test?someData=42%&someOtherData=abcde#anchor" << QUrl::fromEncoded("http://webkit.org/test?someData=42%25&someOtherData=abcde#anchor"); + + // FYI: The scheme in the resulting url user + QUrl authUrl("user:pass@domain.com"); + QTest::newRow("misc-1") << "user:pass@domain.com" << authUrl; +} + +// public static QUrl guessUrlFromString(QString const& string) +void tst_QUrl::fromUserInput() +{ + QFETCH(QString, string); + QFETCH(QUrl, url); + + QUrl guessedUrl = QUrl::fromUserInput(string); + QCOMPARE(guessedUrl, url); +} + void tst_QUrl::task_199967() { { diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index 4cf9e8f..019887d 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -5500,14 +5500,14 @@ void tst_QWidget::multipleToplevelFocusCheck() w1.activateWindow(); QApplication::setActiveWindow(&w1); QApplication::processEvents(); - QTRY_COMPARE(QApplication::activeWindow(), &w1); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w1)); QTest::mouseDClick(&w1, Qt::LeftButton); QTRY_COMPARE(QApplication::focusWidget(), static_cast<QWidget *>(w1.edit)); w2.activateWindow(); QApplication::setActiveWindow(&w2); QApplication::processEvents(); - QTRY_COMPARE(QApplication::activeWindow(), &w2); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w2)); QTest::mouseClick(&w2, Qt::LeftButton); #ifdef Q_WS_QWS QEXPECT_FAIL("", "embedded toplevels take focus anyway", Continue); @@ -5520,14 +5520,14 @@ void tst_QWidget::multipleToplevelFocusCheck() w1.activateWindow(); QApplication::setActiveWindow(&w1); QApplication::processEvents(); - QTRY_COMPARE(QApplication::activeWindow(), &w1); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w1)); QTest::mouseDClick(&w1, Qt::LeftButton); QTRY_COMPARE(QApplication::focusWidget(), static_cast<QWidget *>(w1.edit)); w2.activateWindow(); QApplication::setActiveWindow(&w2); QApplication::processEvents(); - QTRY_COMPARE(QApplication::activeWindow(), &w2); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w2)); QTest::mouseClick(&w2, Qt::LeftButton); QTRY_COMPARE(QApplication::focusWidget(), (QWidget *)0); } @@ -6151,9 +6151,6 @@ void tst_QWidget::compatibilityChildInsertedEvents() EventRecorder::EventList() << qMakePair(&widget, QEvent::PolishRequest) << qMakePair(&widget, QEvent::Type(QEvent::User + 1)) -#ifdef Q_OS_SYMBIAN - << qMakePair(&widget, QEvent::SymbianDeferredFocusChanged) -#endif #if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_S60) << qMakePair(&widget, QEvent::UpdateRequest) #endif @@ -6249,9 +6246,6 @@ void tst_QWidget::compatibilityChildInsertedEvents() << qMakePair(&widget, QEvent::PolishRequest) << qMakePair(&widget, QEvent::Type(QEvent::User + 1)) << qMakePair(&widget, QEvent::Type(QEvent::User + 2)) -#ifdef Q_OS_SYMBIAN - << qMakePair(&widget, QEvent::SymbianDeferredFocusChanged) -#endif #if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_S60) << qMakePair(&widget, QEvent::UpdateRequest) #endif @@ -6347,9 +6341,6 @@ void tst_QWidget::compatibilityChildInsertedEvents() << qMakePair(&widget, QEvent::PolishRequest) << qMakePair(&widget, QEvent::Type(QEvent::User + 1)) << qMakePair(&widget, QEvent::Type(QEvent::User + 2)) -#ifdef Q_OS_SYMBIAN - << qMakePair(&widget, QEvent::SymbianDeferredFocusChanged) -#endif #if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_S60) << qMakePair(&widget, QEvent::UpdateRequest) #endif @@ -6392,6 +6383,7 @@ private: void tst_QWidget::render() { + return; QCalendarWidget source; // disable anti-aliasing to eliminate potential differences when subpixel antialiasing // is enabled on the screen @@ -9155,7 +9147,7 @@ void tst_QWidget::destroyBackingStore() void tst_QWidget::rectOutsideCoordinatesLimit_task144779() { QApplication::setOverrideCursor(Qt::BlankCursor); //keep the cursor out of screen grabs - QWidget main(0,0,Qt::FramelessWindowHint); //don't get confused by the size of the window frame + QWidget main(0,Qt::FramelessWindowHint); //don't get confused by the size of the window frame QPalette palette; palette.setColor(QPalette::Window, Qt::red); main.setPalette(palette); diff --git a/tests/auto/qwindowsurface/tst_qwindowsurface.cpp b/tests/auto/qwindowsurface/tst_qwindowsurface.cpp index 0a6b7ad..e96bcf9 100644 --- a/tests/auto/qwindowsurface/tst_qwindowsurface.cpp +++ b/tests/auto/qwindowsurface/tst_qwindowsurface.cpp @@ -230,7 +230,7 @@ void tst_QWindowSurface::grabWidget() parentWidget.show(); QTest::qWaitForWindowShown(&parentWidget); - QTest::qWait(120); + QTest::qWait(220); QPixmap parentPixmap = parentWidget.windowSurface()->grabWidget(&parentWidget); QPixmap childPixmap = childWidget.windowSurface()->grabWidget(&childWidget); diff --git a/tests/manual/keypadnavigation/keypadnavigation.ui b/tests/manual/keypadnavigation/keypadnavigation.ui index e0db662..039889b 100644 --- a/tests/manual/keypadnavigation/keypadnavigation.ui +++ b/tests/manual/keypadnavigation/keypadnavigation.ui @@ -1058,6 +1058,79 @@ As a reward you can try out the QDial, below.</string> </item> </layout> </widget> + <widget class="QWidget" name="m_pageDialogs"> + <layout class="QVBoxLayout" name="verticalLayout_13"> + <item> + <widget class="QPushButton" name="m_buttonGetOpenFileName"> + <property name="text"> + <string>getOpenFileName()</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="m_buttonGetSaveFileName"> + <property name="text"> + <string>getSaveFileName()</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="m_buttonGetExistingDirectory"> + <property name="text"> + <string>getExistingDirectory()</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="m_buttonGetColor"> + <property name="text"> + <string>getColor()</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="m_buttonGetFont"> + <property name="text"> + <string>getFont()</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="m_buttonQuestion"> + <property name="text"> + <string>question()</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="m_buttonAboutQt"> + <property name="text"> + <string>aboutQt()</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="m_buttonGetItem"> + <property name="text"> + <string>getItem()</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>104</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> </widget> </item> </layout> @@ -1080,6 +1153,7 @@ As a reward you can try out the QDial, below.</string> <addaction name="m_actionLayoutTwoDimensional"/> <addaction name="m_actionLayoutSliderMagic"/> <addaction name="m_actionLayoutChaos"/> + <addaction name="m_actionLayoutDialogs"/> </widget> <widget class="QMenu" name="menuNavigation_mode"> <property name="title"> @@ -1144,14 +1218,22 @@ As a reward you can try out the QDial, below.</string> <string>CursorForceVisible</string> </property> </action> + <action name="m_actionLayoutDialogs"> + <property name="text"> + <string>Dialogs</string> + </property> + <property name="toolTip"> + <string>m_actionLayoutDialogs</string> + </property> + </action> </widget> <layoutdefault spacing="6" margin="11"/> <tabstops> - <tabstop>lineEdit</tabstop> - <tabstop>horizontalSlider</tabstop> - <tabstop>lineEdit_4</tabstop> - <tabstop>horizontalSlider_2</tabstop> - <tabstop>dateEdit</tabstop> + <tabstop>m_buttonGetOpenFileName</tabstop> + <tabstop>m_buttonGetSaveFileName</tabstop> + <tabstop>m_buttonGetExistingDirectory</tabstop> + <tabstop>m_buttonGetColor</tabstop> + <tabstop>m_buttonGetFont</tabstop> <tabstop>comboBox</tabstop> <tabstop>plainTextEdit</tabstop> <tabstop>pushButton</tabstop> @@ -1169,7 +1251,6 @@ As a reward you can try out the QDial, below.</string> <tabstop>toolButton_3</tabstop> <tabstop>horizontalSlider_6</tabstop> <tabstop>horizontalSlider_5</tabstop> - <tabstop>scrollArea_3</tabstop> <tabstop>lineEdit_13</tabstop> <tabstop>toolButton_31</tabstop> <tabstop>lineEdit_14</tabstop> @@ -1202,7 +1283,17 @@ As a reward you can try out the QDial, below.</string> <tabstop>toolButton_16</tabstop> <tabstop>tabWidget</tabstop> <tabstop>scrollArea_2</tabstop> - <tabstop>scrollArea</tabstop> + <tabstop>horizontalSlider_4</tabstop> + <tabstop>horizontalSlider_3</tabstop> + <tabstop>tabWidget_2</tabstop> + <tabstop>toolButton_2</tabstop> + <tabstop>toolButton_7</tabstop> + <tabstop>toolButton_13</tabstop> + <tabstop>lineEdit_4</tabstop> + <tabstop>lineEdit</tabstop> + <tabstop>horizontalSlider</tabstop> + <tabstop>horizontalSlider_2</tabstop> + <tabstop>dateEdit</tabstop> </tabstops> <resources/> <connections> diff --git a/tests/manual/keypadnavigation/main.cpp b/tests/manual/keypadnavigation/main.cpp index 0e4bf31..d1cc8a7 100644 --- a/tests/manual/keypadnavigation/main.cpp +++ b/tests/manual/keypadnavigation/main.cpp @@ -53,29 +53,57 @@ public: { ui->setupUi(this); - connect(ui->m_actionLayoutVerticalSimple, SIGNAL(triggered()), &m_layoutSignalMapper, SLOT(map())); - m_layoutSignalMapper.setMapping(ui->m_actionLayoutVerticalSimple, ui->m_pageVerticalSimple); - connect(ui->m_actionLayoutVerticalComplex, SIGNAL(triggered()), &m_layoutSignalMapper, SLOT(map())); - m_layoutSignalMapper.setMapping(ui->m_actionLayoutVerticalComplex, ui->m_pageVerticalComplex); - connect(ui->m_actionLayoutTwoDimensional, SIGNAL(triggered()), &m_layoutSignalMapper, SLOT(map())); - m_layoutSignalMapper.setMapping(ui->m_actionLayoutTwoDimensional, ui->m_pageTwoDimensional); - connect(ui->m_actionLayoutSliderMagic, SIGNAL(triggered()), &m_layoutSignalMapper, SLOT(map())); - m_layoutSignalMapper.setMapping(ui->m_actionLayoutSliderMagic, ui->m_pageSliderMagic); - connect(ui->m_actionLayoutChaos, SIGNAL(triggered()), &m_layoutSignalMapper, SLOT(map())); - m_layoutSignalMapper.setMapping(ui->m_actionLayoutChaos, ui->m_pageChaos); + const struct { + QObject *action; + QWidget *page; + } layoutMappings[] = { + {ui->m_actionLayoutVerticalSimple, ui->m_pageVerticalSimple}, + {ui->m_actionLayoutVerticalComplex, ui->m_pageVerticalComplex}, + {ui->m_actionLayoutTwoDimensional, ui->m_pageTwoDimensional}, + {ui->m_actionLayoutSliderMagic, ui->m_pageSliderMagic}, + {ui->m_actionLayoutChaos, ui->m_pageChaos}, + {ui->m_actionLayoutDialogs, ui->m_pageDialogs} + }; + for (int i = 0; i < int(sizeof layoutMappings / sizeof layoutMappings[0]); ++i) { + connect(layoutMappings[i].action, SIGNAL(triggered()), &m_layoutSignalMapper, SLOT(map())); + m_layoutSignalMapper.setMapping(layoutMappings[i].action, layoutMappings[i].page); + } connect(&m_layoutSignalMapper, SIGNAL(mapped(QWidget*)), ui->m_stackWidget, SLOT(setCurrentWidget(QWidget*))); - connect(ui->m_actionModeNone, SIGNAL(triggered()), &m_modeSignalMapper, SLOT(map())); - m_modeSignalMapper.setMapping(ui->m_actionModeNone, int(Qt::NavigationModeNone)); - connect(ui->m_actionModeKeypadTabOrder, SIGNAL(triggered()), &m_modeSignalMapper, SLOT(map())); - m_modeSignalMapper.setMapping(ui->m_actionModeKeypadTabOrder, int(Qt::NavigationModeKeypadTabOrder)); - connect(ui->m_actionModeKeypadDirectional, SIGNAL(triggered()), &m_modeSignalMapper, SLOT(map())); - m_modeSignalMapper.setMapping(ui->m_actionModeKeypadDirectional, int(Qt::NavigationModeKeypadDirectional)); - connect(ui->m_actionModeCursorAuto, SIGNAL(triggered()), &m_modeSignalMapper, SLOT(map())); - m_modeSignalMapper.setMapping(ui->m_actionModeCursorAuto, int(Qt::NavigationModeCursorAuto)); - connect(ui->m_actionModeCursorForceVisible, SIGNAL(triggered()), &m_modeSignalMapper, SLOT(map())); - m_modeSignalMapper.setMapping(ui->m_actionModeCursorForceVisible, int(Qt::NavigationModeCursorForceVisible)); + const struct { + QObject *action; + Qt::NavigationMode mode; + } modeMappings[] = { + {ui->m_actionModeNone, Qt::NavigationModeNone}, + {ui->m_actionModeKeypadTabOrder, Qt::NavigationModeKeypadTabOrder}, + {ui->m_actionModeKeypadDirectional, Qt::NavigationModeKeypadDirectional}, + {ui->m_actionModeCursorAuto, Qt::NavigationModeCursorAuto}, + {ui->m_actionModeCursorForceVisible, Qt::NavigationModeCursorForceVisible} + }; + for (int i = 0; i < int(sizeof modeMappings / sizeof modeMappings[0]); ++i) { + connect(modeMappings[i].action, SIGNAL(triggered()), &m_modeSignalMapper, SLOT(map())); + m_modeSignalMapper.setMapping(modeMappings[i].action, int(modeMappings[i].mode)); + } connect(&m_modeSignalMapper, SIGNAL(mapped(int)), SLOT(setNavigationMode(int))); + + const struct { + QObject *button; + Dialog dialog; + } openDialogMappings[] = { + {ui->m_buttonGetOpenFileName, DialogGetOpenFileName}, + {ui->m_buttonGetSaveFileName, DialogGetSaveFileName}, + {ui->m_buttonGetExistingDirectory, DialogGetExistingDirectory}, + {ui->m_buttonGetColor, DialogGetColor}, + {ui->m_buttonGetFont, DialogGetFont}, + {ui->m_buttonQuestion, DialogQuestion}, + {ui->m_buttonAboutQt, DialogAboutQt}, + {ui->m_buttonGetItem, DialogGetItem} + }; + for (int i = 0; i < int(sizeof openDialogMappings / sizeof openDialogMappings[0]); ++i) { + connect(openDialogMappings[i].button, SIGNAL(clicked()), &m_dialogSignalMapper, SLOT(map())); + m_dialogSignalMapper.setMapping(openDialogMappings[i].button, int(openDialogMappings[i].dialog)); + } + connect(&m_dialogSignalMapper, SIGNAL(mapped(int)), SLOT(openDialog(int))); } ~KeypadNavigation() @@ -83,16 +111,60 @@ public: delete ui; } -public slots: +protected slots: void setNavigationMode(int mode) { QApplication::setNavigationMode(Qt::NavigationMode(mode)); } + void openDialog(int dialog) + { + switch (Dialog(dialog)) { + case DialogGetOpenFileName: + QFileDialog::getOpenFileName(this, QLatin1String("getOpenFileName")); + break; + case DialogGetSaveFileName: + QFileDialog::getSaveFileName(this, QLatin1String("getSaveFileName")); + break; + case DialogGetExistingDirectory: + QFileDialog::getExistingDirectory(this, QLatin1String("getExistingDirectory")); + break; + case DialogGetColor: + QColorDialog::getColor(QColor(Qt::green), this, QLatin1String("getColor")); + break; + case DialogGetFont: + QFontDialog::getFont(0, this); + break; + case DialogQuestion: + QMessageBox::question(this, QLatin1String("question"), QLatin1String("Hola, que tal?")); + break; + case DialogAboutQt: + QMessageBox::aboutQt(this); + break; + case DialogGetItem: + QInputDialog::getItem(this, QLatin1String("getItem"), QLatin1String("Choose a color"), QColor::colorNames()); + break; + default: + break; + } + } + private: + enum Dialog { + DialogGetOpenFileName, + DialogGetSaveFileName, + DialogGetExistingDirectory, + DialogGetColor, + DialogGetFont, + DialogQuestion, + DialogAboutQt, + DialogGetItem + }; + Ui_KeypadNavigation *ui; QSignalMapper m_layoutSignalMapper; QSignalMapper m_modeSignalMapper; + QSignalMapper m_dialogSignalMapper; }; int main(int argc, char *argv[]) diff --git a/tools/designer/translations/translations.pro b/tools/designer/translations/translations.pro index c8cd76d..fd782b0 100644 --- a/tools/designer/translations/translations.pro +++ b/tools/designer/translations/translations.pro @@ -134,6 +134,7 @@ TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/designer_de.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_ja.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_pl.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_ru.ts \ + $$[QT_INSTALL_TRANSLATIONS]/designer_sl.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_zh_CN.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_zh_TW.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_untranslated.ts diff --git a/tools/linguist/shared/xliff.cpp b/tools/linguist/shared/xliff.cpp index d81f3e8..989279f 100644 --- a/tools/linguist/shared/xliff.cpp +++ b/tools/linguist/shared/xliff.cpp @@ -500,7 +500,9 @@ bool XLIFFHandler::startElement(const QString& namespaceURI, } else if (localName == QLatin1String("file")) { m_fileName = atts.value(QLatin1String("original")); m_language = atts.value(QLatin1String("target-language")); + m_language.replace(QLatin1Char('-'), QLatin1Char('_')); m_sourceLanguage = atts.value(QLatin1String("source-language")); + m_sourceLanguage.replace(QLatin1Char('-'), QLatin1Char('_')); } else if (localName == QLatin1String("group")) { if (atts.value(QLatin1String("restype")) == QLatin1String(restypeContext)) { m_context = atts.value(QLatin1String("resname")); @@ -773,14 +775,19 @@ bool saveXLIFF(const Translator &translator, QIODevice &dev, ConversionData &cd) << "\" xmlns:trolltech=\"" << TrollTsNamespaceURI << "\">\n"; ++indent; writeExtras(ts, indent, translator.extras(), drops); + QString sourceLanguageCode = translator.sourceLanguageCode(); + if (sourceLanguageCode.isEmpty() || sourceLanguageCode == QLatin1String("C")) + sourceLanguageCode = QLatin1String("en"); + else + sourceLanguageCode.replace(QLatin1Char('_'), QLatin1Char('-')); + QString languageCode = translator.languageCode(); + languageCode.replace(QLatin1Char('_'), QLatin1Char('-')); foreach (const QString &fn, fileOrder) { writeIndent(ts, indent); ts << "<file original=\"" << fn << "\"" << " datatype=\"" << dataType(messageOrder[fn].begin()->first()) << "\"" - << " source-language=\"" - << (translator.sourceLanguageCode().isEmpty() ? - QByteArray("en") : translator.sourceLanguageCode().toLatin1()) << "\"" - << " target-language=\"" << translator.languageCode() << "\"" + << " source-language=\"" << sourceLanguageCode.toLatin1() << "\"" + << " target-language=\"" << languageCode.toLatin1() << "\"" << "><body>\n"; ++indent; diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 5406017..2757cd8 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -330,7 +330,65 @@ void HtmlGenerator::generateTree(const Tree *tree, CodeMarker *marker) #ifdef ZZZ_QDOC_QML findAllQmlClasses(tree->root()); #endif - findAllSince(tree->root(),tree->version()); + findAllSince(tree->root()); + +#if 0 + if (!sinceVersions.isEmpty()) { + SinceVersionMap::const_iterator v = sinceVersions.constEnd(); + do { + --v; + qDebug() << "SINCE:" << v.key(); + if (!v.value().isEmpty()) { + QString type; + SinceNodeMultiMap::const_iterator n = v.value().constBegin(); + while (n != v.value().constEnd()) { + switch (n.value()->type()) { + case Node::Namespace: + type = "namespace"; + break; + case Node::Class: + type = "class"; + break; + case Node::Fake: + type = "fake"; + break; + case Node::Enum: + type = "enum"; + break; + case Node::Typedef: + type = "typedef"; + break; + case Node::Function: + type = "function"; + break; + case Node::Property: + type = "property"; + break; + case Node::Variable: + type = "variable"; + break; + case Node::Target: + type = "target"; + break; + case Node::QmlProperty: + type = "QML property"; + break; + case Node::QmlSignal: + type = "QML signal"; + break; + case Node::QmlMethod: + type = "QML method"; + break; + default: + type = "No type"; + } + qDebug() << " " << type << n.key(); + ++n; + } + } + } while (v != sinceVersions.constBegin()); + } +#endif PageGenerator::generateTree(tree, marker); @@ -655,21 +713,32 @@ int HtmlGenerator::generateAtom(const Atom *atom, break; case Atom::SinceList: { - QList<Node*> values; - if (atom->string() == "classes") { - values = sinceClasses.values(); - } - else if (atom->string() == "functions") { - values = sinceFunctions.values(); - } - if (!values.isEmpty()) { - QMap<QString, const Node*> nodeMap; - for (int i=0; i<values.size(); ++i) { - const Node* n = values.at(i); - nodeMap.insert(n->nameForLists(),n); + QList<Node*> nodes; + SinceVersionMap::const_iterator v; + v = sinceVersions.find(atom->string()); + if ((v != sinceVersions.constEnd()) && !v.value().isEmpty()) { + for (int i=0; !Node::typeName(i).isEmpty(); i++) { + Node::Type t = (Node::Type) i; + SinceNodeMultiMap::const_iterator n=v.value().constBegin(); + QMultiMap<QString, const Node*> nodeMap; + while (n != v.value().constEnd()) { + const Node* node = n.value(); + if (node->type() == t) + nodeMap.insert(node->nameForLists(),node); + ++n; + } + if (!nodeMap.isEmpty()) { + out() << "<h2>" + << Node::typeName(i) + << " new in Qt " + << atom->string() + << "<h2>"; + generateAnnotatedList(relative, marker, nodeMap); + nodeMap.clear(); + } } - generateAnnotatedList(relative, marker, nodeMap); } + } break; case Atom::Image: @@ -3517,22 +3586,21 @@ void HtmlGenerator::findAllClasses(const InnerNode *node) /*! For generating the "Since x.y" page. */ -void HtmlGenerator::findAllSince(const InnerNode *node, QString version) +void HtmlGenerator::findAllSince(const InnerNode *node) { - const QRegExp versionSeparator("[\\-\\.]"); - const int minorIndex = version.indexOf(versionSeparator); - const int patchIndex = version.indexOf(versionSeparator, minorIndex+1); - version = version.left(patchIndex); - NodeList::const_iterator c = node->childNodes().constBegin(); while (c != node->childNodes().constEnd()) { - if (((*c)->access() != Node::Private) && ((*c)->since() == version)) { + QString sinceVersion = (*c)->since(); + if (((*c)->access() != Node::Private) && !sinceVersion.isEmpty()) { + SinceVersionMap::iterator vmap = sinceVersions.find(sinceVersion); + if (vmap == sinceVersions.end()) + vmap = sinceVersions.insert(sinceVersion,SinceNodeMultiMap()); if ((*c)->type() == Node::Function) { FunctionNode *func = static_cast<FunctionNode *>(*c); if ((func->status() > Node::Obsolete) && (func->metaness() != FunctionNode::Ctor) && (func->metaness() != FunctionNode::Dtor)) { - sinceFunctions.insert(func->name(), func); + vmap.value().insert(func->name(),(*c)); } } else if ((*c)->url().isEmpty()) { @@ -3542,17 +3610,33 @@ void HtmlGenerator::findAllSince(const InnerNode *node, QString version) (*c)->parent()->type() == Node::Namespace && !(*c)->parent()->name().isEmpty()) className = (*c)->parent()->name()+"::"+className; - sinceClasses.insert(className, *c); + vmap.value().insert(className,(*c)); } } + else { + QString name = (*c)->name(); + if ((*c)->parent() && + (*c)->parent()->type() == Node::Namespace && + !(*c)->parent()->name().isEmpty()) + name = (*c)->parent()->name()+"::"+name; + vmap.value().insert(name,(*c)); + qDebug() << "GOT HEAH" << name; + } if ((*c)->isInnerNode()) { - findAllSince(static_cast<InnerNode *>(*c),version); + findAllSince(static_cast<InnerNode *>(*c)); } } ++c; } } +#if 0 + const QRegExp versionSeparator("[\\-\\.]"); + const int minorIndex = version.indexOf(versionSeparator); + const int patchIndex = version.indexOf(versionSeparator, minorIndex+1); + version = version.left(patchIndex); +#endif + void HtmlGenerator::findAllFunctions(const InnerNode *node) { NodeList::ConstIterator c = node->childNodes().begin(); diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index 24e2986..3f6e564 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -67,6 +67,9 @@ struct NavigationBar }; #endif +typedef QMultiMap<QString, Node*> SinceNodeMultiMap; +typedef QMap<QString, SinceNodeMultiMap> SinceVersionMap; + class HelpProjectWriter; class HtmlGenerator : public PageGenerator @@ -216,7 +219,7 @@ class HtmlGenerator : public PageGenerator #ifdef ZZZ_QDOC_QML void findAllQmlClasses(const InnerNode *node); #endif - void findAllSince(const InnerNode *node, QString version); + void findAllSince(const InnerNode *node); static int hOffset(const Node *node); static bool isThreeColumnEnumValueTable(const Atom *atom); virtual QString getLink(const Atom *atom, @@ -286,8 +289,7 @@ class HtmlGenerator : public PageGenerator #endif QMap<QString, QMap<QString, const Node *> > funcIndex; QMap<Text, const Node *> legaleseTexts; - QMap<QString, Node*> sinceClasses; - QMap<QString, Node*> sinceFunctions; + SinceVersionMap sinceVersions; }; #define HTMLGENERATOR_ADDRESS "address" diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index b44ede0..d547d20 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -48,6 +48,23 @@ QT_BEGIN_NAMESPACE +QString Node::typeNames[] = + { + "Namespaces", + "Classes", + "Fake", + "Enums", + "Typedefs", + "Functions and Macros", + "Properties", + "Variables", + "Targets", + "Qml Properties", + "Qml Signals", + "Qml Methods", + "" + }; + /*! \class Node \brief A node in a Tree. diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h index fdef920..09f38d2 100644 --- a/tools/qdoc3/node.h +++ b/tools/qdoc3/node.h @@ -76,9 +76,11 @@ class Node Target, QmlProperty, QmlSignal, - QmlMethod + QmlMethod, + LastType #else - Target + Target, + LastType #endif }; @@ -173,10 +175,13 @@ class Node virtual QString fileBase() const; + static QString typeName(int i) { return typeNames[i]; } + protected: Node(Type type, InnerNode *parent, const QString& name); private: + static QString typeNames[]; #ifdef Q_WS_WIN Type typ; Access acc; diff --git a/tools/qvfb/qvfb.pro b/tools/qvfb/qvfb.pro index 247337a..dde7e8d 100644 --- a/tools/qvfb/qvfb.pro +++ b/tools/qvfb/qvfb.pro @@ -9,6 +9,7 @@ target.path=$$[QT_INSTALL_BINS] INSTALLS += target DEPENDPATH = ../../include +INCLUDEPATH += ../../src/gui/embedded FORMS = config.ui HEADERS = qvfb.h \ @@ -19,9 +20,9 @@ HEADERS = qvfb.h \ qvfbprotocol.h \ qvfbshmem.h \ qvfbmmap.h \ - qvfbhdr.h \ - qlock_p.h \ - qwssignalhandler_p.h + ../../src/gui/embedded/qvfbhdr.h \ + ../../src/gui/embedded/qlock_p.h \ + ../../src/gui/embedded/qwssignalhandler_p.h SOURCES = qvfb.cpp \ qvfbview.cpp \ @@ -31,8 +32,8 @@ SOURCES = qvfb.cpp \ qvfbprotocol.cpp \ qvfbshmem.cpp \ qvfbmmap.cpp \ - qlock.cpp \ - qwssignalhandler.cpp + ../../src/gui/embedded/qlock.cpp \ + ../../src/gui/embedded/qwssignalhandler.cpp include($$QT_SOURCE_TREE/tools/shared/deviceskin/deviceskin.pri) diff --git a/tools/qvfb/translations/translations.pro b/tools/qvfb/translations/translations.pro index f667bb8..17579f7 100644 --- a/tools/qvfb/translations/translations.pro +++ b/tools/qvfb/translations/translations.pro @@ -9,10 +9,10 @@ HEADERS = ../qvfb.h \ ../qvfbprotocol.h \ ../qvfbshmem.h \ ../qvfbmmap.h \ - ../qvfbhdr.h \ - ../qlock_p.h \ - ../qwssignalhandler_p.h \ - ../../shared/deviceskin/deviceskin.cpp + ../../../src/gui/embedded/qvfbhdr.h \ + ../../../src/gui/embedded/qlock_p.h \ + ../../../src/gui/embedded/qwssignalhandler_p.h \ + ../../shared/deviceskin/deviceskin.h SOURCES = ../qvfb.cpp \ ../qvfbview.cpp \ @@ -22,8 +22,8 @@ SOURCES = ../qvfb.cpp \ ../qvfbprotocol.cpp \ ../qvfbshmem.cpp \ ../qvfbmmap.cpp \ - ../qlock.cpp \ - ../qwssignalhandler.cpp \ + ../../../src/gui/embedded/qlock.cpp \ + ../../../src/gui/embedded/qwssignalhandler.cpp \ ../../shared/deviceskin/deviceskin.cpp TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/qvfb_pl.ts \ diff --git a/translations/designer_sl.ts b/translations/designer_sl.ts new file mode 100644 index 0000000..bfb92bf --- /dev/null +++ b/translations/designer_sl.ts @@ -0,0 +1,7031 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sl_SI"> +<context> + <name>AbstractFindWidget</name> + <message> + <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="+127"/> + <source>&Previous</source> + <translation>&Predhodni</translation> + </message> + <message> + <location line="+8"/> + <source>&Next</source> + <translation>&Naslednji</translation> + </message> + <message> + <location line="+24"/> + <source>&Case sensitive</source> + <translation>O&bčutljiv na velikost črk</translation> + </message> + <message> + <location line="+8"/> + <source>Whole &words</source> + <translation>&Cele besede</translation> + </message> + <message> + <location line="+12"/> + <source><img src=":/trolltech/shared/images/wrap.png">&nbsp;Search wrapped</source> + <translation><img src=":/trolltech/shared/images/wrap.png">&nbsp;Iskanje se nadaljuje na drugem koncu</translation> + </message> +</context> +<context> + <name>AddLinkDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui"/> + <source>Insert Link</source> + <translation>Vstavi povezavo</translation> + </message> + <message> + <location/> + <source>Title:</source> + <translation>Besedilo:</translation> + </message> + <message> + <location/> + <source>URL:</source> + <translation>URL:</translation> + </message> +</context> +<context> + <name>AppFontDialog</name> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="+418"/> + <source>Additional Fonts</source> + <translation>Dodatne pisave</translation> + </message> +</context> +<context> + <name>AppFontManager</name> + <message> + <location line="-267"/> + <source>'%1' is not a file.</source> + <translation>»%1« ni datoteka.</translation> + </message> + <message> + <location line="+4"/> + <source>The font file '%1' does not have read permissions.</source> + <translation>Datoteka s pisavo »%1« nima dovoljenj za branje.</translation> + </message> + <message> + <location line="+8"/> + <source>The font file '%1' is already loaded.</source> + <translation>Datoteka s pisavo »%1« je že naložena.</translation> + </message> + <message> + <location line="+7"/> + <source>The font file '%1' could not be loaded.</source> + <translation>Datoteke s pisavo »%1« ni bilo moč naložiti.</translation> + </message> + <message> + <location line="+17"/> + <source>'%1' is not a valid font id.</source> + <translation>»%1« ni veljaven ID za pisavo.</translation> + </message> + <message> + <location line="+11"/> + <source>There is no loaded font matching the id '%1'.</source> + <translation>Ni naložene pisave, ki bi se ujemala z ID-jem »%1«.</translation> + </message> + <message> + <location line="+15"/> + <source>The font '%1' (%2) could not be unloaded.</source> + <translation>Pisave »%1« (%2) ni bilo moč odstraniti.</translation> + </message> +</context> +<context> + <name>AppFontWidget</name> + <message> + <location line="+26"/> + <source>Fonts</source> + <translation>Pisave</translation> + </message> + <message> + <location line="+58"/> + <source>Add font files</source> + <translation>Dodaj datoteke s pisavami</translation> + </message> + <message> + <location line="+5"/> + <source>Remove current font file</source> + <translation>Odstrani trenutno datoteko s pisavo</translation> + </message> + <message> + <location line="+4"/> + <source>Remove all font files</source> + <translation>Odstrani vse datoteke s pisavami</translation> + </message> + <message> + <location line="+19"/> + <source>Add Font Files</source> + <translation>Dodaj datoteke s pisavami</translation> + </message> + <message> + <location line="+1"/> + <source>Font files (*.ttf)</source> + <translation>Datoteke s pisavami (*.ttf)</translation> + </message> + <message> + <location line="+13"/> + <source>Error Adding Fonts</source> + <translation>Napaka pri dodajanju pisav</translation> + </message> + <message> + <location line="+24"/> + <source>Error Removing Fonts</source> + <translation>Napaka pri odstranjevanju pisav</translation> + </message> + <message> + <location line="+22"/> + <source>Remove Fonts</source> + <translation>Odstrani pisave</translation> + </message> + <message> + <location line="+0"/> + <source>Would you like to remove all fonts?</source> + <translation>Ali želite odstraniti vse pisave?</translation> + </message> +</context> +<context> + <name>AppearanceOptionsWidget</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location/> + <source>User Interface Mode</source> + <translation>Način uporabniškega vmesnika</translation> + </message> +</context> +<context> + <name>AssistantClient</name> + <message> + <location filename="../tools/designer/src/designer/assistantclient.cpp" line="+100"/> + <source>Unable to send request: Assistant is not responding.</source> + <translation>Ni moč poslati zahtevka: pomočnik se ne odziva.</translation> + </message> + <message> + <location line="+39"/> + <source>The binary '%1' does not exist.</source> + <translation>Program »%1« ne obstaja.</translation> + </message> + <message> + <location line="+9"/> + <source>Unable to launch assistant (%1).</source> + <translation>Ni moč zaganti pomočnika (%1).</translation> + </message> +</context> +<context> + <name>BrushPropertyManager</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="+52"/> + <source>No brush</source> + <translation>Brez čopiča</translation> + </message> + <message> + <location line="+1"/> + <source>Solid</source> + <translation>Enobarven</translation> + </message> + <message> + <location line="+1"/> + <source>Dense 1</source> + <translation>Gost 1</translation> + </message> + <message> + <location line="+1"/> + <source>Dense 2</source> + <translation>Gost 2</translation> + </message> + <message> + <location line="+1"/> + <source>Dense 3</source> + <translation>Gost 3</translation> + </message> + <message> + <location line="+1"/> + <source>Dense 4</source> + <translation>Gost 4</translation> + </message> + <message> + <location line="+1"/> + <source>Dense 5</source> + <translation>Gost 5</translation> + </message> + <message> + <location line="+1"/> + <source>Dense 6</source> + <translation>Gost 6</translation> + </message> + <message> + <location line="+1"/> + <source>Dense 7</source> + <translation>Gost 7</translation> + </message> + <message> + <location line="+1"/> + <source>Horizontal</source> + <translation>Vodoraven</translation> + </message> + <message> + <location line="+1"/> + <source>Vertical</source> + <translation>Navpičen</translation> + </message> + <message> + <location line="+1"/> + <source>Cross</source> + <translation>Križ</translation> + </message> + <message> + <location line="+1"/> + <source>Backward diagonal</source> + <translation>Poševen nazaj</translation> + </message> + <message> + <location line="+1"/> + <source>Forward diagonal</source> + <translation>Poševen naprej</translation> + </message> + <message> + <location line="+1"/> + <source>Crossing diagonal</source> + <translation>Poševen prekrižan</translation> + </message> + <message> + <location line="+83"/> + <source>Style</source> + <translation>Slog</translation> + </message> + <message> + <location line="+11"/> + <source>Color</source> + <translation>Barva</translation> + </message> + <message> + <location line="+105"/> + <source>[%1, %2]</source> + <translation>[%1, %2]</translation> + </message> +</context> +<context> + <name>Command</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="+208"/> + <location line="+258"/> + <source>Change signal</source> + <translation>Spremeni signal</translation> + </message> + <message> + <location line="-256"/> + <location line="+268"/> + <source>Change slot</source> + <translation>Spremeni režo</translation> + </message> + <message> + <location line="-220"/> + <source>Change signal-slot connection</source> + <translation>Spremeni povezavo signal-reža</translation> + </message> + <message> + <location line="+234"/> + <source>Change sender</source> + <translation>Spremeni pošiljatelja</translation> + </message> + <message> + <location line="+18"/> + <source>Change receiver</source> + <translation>Spremeni prejemnika</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="+143"/> + <source>Add connection</source> + <translation>Dodaj povezavo</translation> + </message> + <message> + <location line="+54"/> + <source>Adjust connection</source> + <translation>Prilagodi povezavo</translation> + </message> + <message> + <location line="+19"/> + <source>Delete connections</source> + <translation>Zbriši povezave</translation> + </message> + <message> + <location line="+58"/> + <source>Change source</source> + <translation>Spremeni izvor</translation> + </message> + <message> + <location line="+2"/> + <source>Change target</source> + <translation>Spremeni cilj</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="+149"/> + <source>Insert '%1'</source> + <translation>Vstavi »%1«</translation> + </message> + <message> + <location line="+167"/> + <source>Raise '%1'</source> + <translation>Dvigni »%1«</translation> + </message> + <message> + <location line="+33"/> + <source>Lower '%1'</source> + <translation>Spusti »%1«</translation> + </message> + <message> + <location line="+113"/> + <source>Delete '%1'</source> + <translation>Zbriši »%1«</translation> + </message> + <message> + <location line="+119"/> + <source>Reparent '%1'</source> + <translation>Spremeni starša od »%1«</translation> + </message> + <message> + <location line="+53"/> + <source>Promote to custom widget</source> + <translation>Povišaj v gradnik po meri</translation> + </message> + <message> + <location line="+42"/> + <source>Demote from custom widget</source> + <translation>Ponižaj iz gradnika po meri</translation> + </message> + <message> + <location line="+79"/> + <source>Lay out using grid</source> + <translation>Razporedi z uporabo mreže</translation> + </message> + <message> + <location line="+3"/> + <source>Lay out vertically</source> + <translation>Razporedi navpično</translation> + </message> + <message> + <location line="+3"/> + <source>Lay out horizontally</source> + <translation>Razporedi vodoravno</translation> + </message> + <message> + <location line="+41"/> + <source>Break layout</source> + <translation>Razbij razporeditev</translation> + </message> + <message> + <location line="+240"/> + <location line="+235"/> + <location line="+78"/> + <source>Move Page</source> + <translation>Premakni stran</translation> + </message> + <message> + <location line="-279"/> + <location line="+123"/> + <location line="+188"/> + <location line="+666"/> + <source>Delete Page</source> + <translation>Zbriši stran</translation> + </message> + <message> + <location line="-939"/> + <location line="+123"/> + <source>Page</source> + <translation>Stran</translation> + </message> + <message> + <location line="+860"/> + <source>page</source> + <translation>stran</translation> + </message> + <message> + <location line="-978"/> + <location line="+123"/> + <location line="+186"/> + <location line="+667"/> + <source>Insert Page</source> + <translation>Vstavi stran</translation> + </message> + <message> + <location line="-647"/> + <source>Change Tab order</source> + <translation>Spremeni vrstni red tabulatorke</translation> + </message> + <message> + <location line="+28"/> + <source>Create Menu Bar</source> + <translation>Ustvari menijsko vrstico</translation> + </message> + <message> + <location line="+44"/> + <source>Delete Menu Bar</source> + <translation>Zbriši menijsko vrstico</translation> + </message> + <message> + <location line="+47"/> + <source>Create Status Bar</source> + <translation>Ustvari vrstico stanja</translation> + </message> + <message> + <location line="+42"/> + <source>Delete Status Bar</source> + <translation>Zbriši vrstico stanja</translation> + </message> + <message> + <location line="+45"/> + <source>Add Tool Bar</source> + <translation>Dodaj orodjarno</translation> + </message> + <message> + <location line="+59"/> + <source>Add Dock Window</source> + <translation>Dodaj podokno</translation> + </message> + <message> + <location line="+53"/> + <source>Adjust Size of '%1'</source> + <translation>Prilagodi velikost za »%1«</translation> + </message> + <message> + <location line="+57"/> + <source>Change Form Layout Item Geometry</source> + <translation>Spremeni geometrijo razporeditve na obrazcu</translation> + </message> + <message> + <location line="+95"/> + <source>Change Layout Item Geometry</source> + <translation>Spremeni geometrijo razporeda</translation> + </message> + <message> + <location line="+576"/> + <source>Change Table Contents</source> + <translation>Spremeni vsebino tabele</translation> + </message> + <message> + <location line="+107"/> + <source>Change Tree Contents</source> + <translation>Spremeni vsebino drevesa</translation> + </message> + <message> + <location line="+74"/> + <location line="+146"/> + <source>Add action</source> + <translation>Dodaj dejanje</translation> + </message> + <message> + <location line="-120"/> + <location line="+126"/> + <source>Remove action</source> + <translation>Odstrani dejanje</translation> + </message> + <message> + <location line="+53"/> + <source>Add menu</source> + <translation>Dodaj meni</translation> + </message> + <message> + <location line="+6"/> + <source>Remove menu</source> + <translation>Odstrani meni</translation> + </message> + <message> + <location line="+6"/> + <source>Create submenu</source> + <translation>Ustvari podmeni</translation> + </message> + <message> + <location line="+31"/> + <source>Delete Tool Bar</source> + <translation>Zbriši orodjarno</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1195"/> + <source>Set action text</source> + <translation>Nastavi besedilo dejanja</translation> + </message> + <message> + <location line="+3"/> + <source>Insert action</source> + <translation>Vstavi dejanje</translation> + </message> + <message> + <location line="+89"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+907"/> + <source>Move action</source> + <translation>Premakni dejanje</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-424"/> + <source>Change Title</source> + <translation>Spremeni naslov</translation> + </message> + <message> + <location line="+2"/> + <source>Insert Menu</source> + <translation>Vstavi meni</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="+202"/> + <source>Change signals/slots</source> + <translation>Spremeni signale/reže</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="-867"/> + <source>Delete Subwindow</source> + <translation>Zbriši podokno</translation> + </message> + <message> + <location line="+44"/> + <source>Insert Subwindow</source> + <translation>Vstavi podokno</translation> + </message> + <message> + <location line="+2"/> + <source>subwindow</source> + <translation>podokno</translation> + </message> + <message> + <location line="+1"/> + <source>Subwindow</source> + <translation>Podokno</translation> + </message> + <message> + <location line="-1821"/> + <source>Change Z-order of '%1'</source> + <translation>Spremeni vrstni red v smeri Z od »%1«</translation> + </message> + <message> + <location line="+625"/> + <source>Simplify Grid Layout</source> + <translation>Poenostavi razporeditev v mrežo</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+221"/> + <source>Create button group</source> + <translation>Ustvari skupino gumbov</translation> + </message> + <message> + <location line="+27"/> + <source>Break button group</source> + <translation>Razbij skupino gumbov</translation> + </message> + <message> + <location line="+9"/> + <source>Break button group '%1'</source> + <translation>Razbij skupino gumbov »%1«</translation> + </message> + <message> + <location line="+17"/> + <source>Add buttons to group</source> + <translation>Dodaj gumbe v skupino</translation> + </message> + <message> + <location line="+8"/> + <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="+458"/> + <source>Add '%1' to '%2'</source> + <extracomment>Command description for adding buttons to a QButtonGroup</extracomment> + <translation>Dodaj »%1« v »%2«</translation> + </message> + <message> + <location line="+14"/> + <source>Remove buttons from group</source> + <translation>Odstrani gumbe iz te skupine</translation> + </message> + <message> + <location line="+15"/> + <source>Remove '%1' from '%2'</source> + <extracomment>Command description for removing buttons from a QButtonGroup</extracomment> + <translation>Odstrani »%1« iz »%2«</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="+349"/> + <source>Morph %1/'%2' into %3</source> + <extracomment>MorphWidgetCommand description</extracomment> + <translation>Pretvori %1/»%2« v %3</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command2.cpp" line="+154"/> + <source>Change layout of '%1' from %2 to %3</source> + <translation>Spremeni razpored od »%1« iz %2 v %3</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/scriptcommand.cpp" line="+55"/> + <source>Change script</source> + <translation>Spremeni skript</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="+1213"/> + <source>Changed '%1' of '%2'</source> + <translation>Spremenil »%1« od »%2«</translation> + </message> + <message numerus="yes"> + <location line="+3"/> + <source>Changed '%1' of %n objects</source> + <translation> + <numerusform>Spremenil »%1« od %n objekta</numerusform> + <numerusform>Spremenil »%1« od %n objektov</numerusform> + <numerusform>Spremenil »%1« od %n objektov</numerusform> + <numerusform>Spremenil »%1« od %n objektov</numerusform> + </translation> + </message> + <message> + <location line="+76"/> + <source>Reset '%1' of '%2'</source> + <translation>Ponastavi »%1« od »%2«</translation> + </message> + <message numerus="yes"> + <location line="+3"/> + <source>Reset '%1' of %n objects</source> + <translation> + <numerusform>Ponastavi »%1« od %n objekta</numerusform> + <numerusform>Ponastavi »%1« od %n objektov</numerusform> + <numerusform>Ponastavi »%1« od %n objektov</numerusform> + <numerusform>Ponastavi »%1« od %n objektov</numerusform> + </translation> + </message> + <message> + <location line="+89"/> + <source>Add dynamic property '%1' to '%2'</source> + <translation>Dodaj dinamično lastnost »%1« k »%2«</translation> + </message> + <message numerus="yes"> + <location line="+3"/> + <source>Add dynamic property '%1' to %n objects</source> + <translation> + <numerusform>Dodaj dinamično lastnost »%1« k %n objektu</numerusform> + <numerusform>Dodaj dinamično lastnost »%1« k %n objektoma</numerusform> + <numerusform>Dodaj dinamično lastnost »%1« k %n objektom</numerusform> + <numerusform>Dodaj dinamično lastnost »%1« k %n objektom</numerusform> + </translation> + </message> + <message> + <location line="+86"/> + <source>Remove dynamic property '%1' from '%2'</source> + <translation>Odstrani dinamično lastnost »%1« od »%2«</translation> + </message> + <message numerus="yes"> + <location line="+3"/> + <source>Remove dynamic property '%1' from %n objects</source> + <translation> + <numerusform>Odstrani dinamično lastnost »%1« od %n objekta</numerusform> + <numerusform>Odstrani dinamično lastnost »%1« od %n objektov</numerusform> + <numerusform>Odstrani dinamično lastnost »%1« od %n objektov</numerusform> + <numerusform>Odstrani dinamično lastnost »%1« od %n objektov</numerusform> + </translation> + </message> +</context> +<context> + <name>ConnectDialog</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui"/> + <source>Configure Connection</source> + <translation>Nastavi povezavo</translation> + </message> + <message> + <location/> + <source>GroupBox</source> + <translation>Skupina</translation> + </message> + <message> + <location/> + <source>Edit...</source> + <translation>Urejanje ...</translation> + </message> + <message> + <location/> + <source>Show signals and slots inherited from QWidget</source> + <translation>Prikaži signale in reže podedovane od QWidget</translation> + </message> +</context> +<context> + <name>ConnectionDelegate</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+643"/> + <source><object></source> + <translation><objekt></translation> + </message> + <message> + <location line="+18"/> + <source><signal></source> + <translation><signal></translation> + </message> + <message> + <location line="+0"/> + <source><slot></source> + <translation><reža></translation> + </message> +</context> +<context> + <name>DPI_Chooser</name> + <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="+69"/> + <source>Standard (96 x 96)</source> + <extracomment>Embedded device standard screen resolution</extracomment> + <translation>Običajna (96 × 96)</translation> + </message> + <message> + <location line="+2"/> + <source>Greenphone (179 x 185)</source> + <extracomment>Embedded device screen resolution</extracomment> + <translation>Greenphone (179 × 185)</translation> + </message> + <message> + <location line="+2"/> + <source>High (192 x 192)</source> + <extracomment>Embedded device high definition screen resolution</extracomment> + <translation>Visoka (192 × 192)</translation> + </message> +</context> +<context> + <name>Designer</name> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+449"/> + <source>Qt Designer</source> + <translation>Qt Designer</translation> + </message> + <message> + <location line="+10"/> + <source>This file contains top level spacers.<br>They have <b>NOT</b> been saved into the form.</source> + <translation>Ta datoteka vsebuje praznine, ki so na vrhu.<br><b>Niso</b> bile shranjene v ta obrazec.</translation> + </message> + <message> + <location line="+2"/> + <source>Perhaps you forgot to create a layout?</source> + <translation>Morda ste pozabili ustvariti razpored?</translation> + </message> + <message> + <location line="+173"/> + <source>Invalid UI file: The root element <ui> is missing.</source> + <translation>Neveljavna datoteka UI: manjka vrhnji element <ui>.</translation> + </message> + <message> + <location line="+6"/> + <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> + <translation>Prišlo je do napake med branjem datoteke UI v vrstici %1, stolpcu %2: %3</translation> + </message> + <message> + <location line="+26"/> + <source>This file cannot be read because it was created using %1.</source> + <translation>Te datoteke ni moč prebrati, ker je bila ustvarjena z %1.</translation> + </message> + <message> + <location line="+14"/> + <source>This file was created using Designer from Qt-%1 and cannot be read.</source> + <translation>Ta datoteka je bila ustvarjena s Qt Designerjem iz Qt %1 in je ni moč prebrati.</translation> + </message> + <message> + <location line="+82"/> + <source>This file cannot be read because the extra info extension failed to load.</source> + <translation>Te datoteke ni moč prebrati, ker je spodletelo nalaganje razširitve za dodatne podatke.</translation> + </message> + <message> + <location line="-52"/> + <source>The converted file could not be read.</source> + <translation>Pretvorjene datoteke ni bilo moč prebrati.</translation> + </message> + <message> + <location line="+4"/> + <source>This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer.</source> + <translation>Ta datoteka je bila ustvarjena s Qt Designerjem iz Qt %1 in bo pretvorjena v novo obliko.</translation> + </message> + <message> + <location line="+3"/> + <source>The old form has not been touched, but you will have to save the form under a new name.</source> + <translation>Stara oblika ni bila spremenjena, vendar boste novo obliko morali shraniti pod novim imenom.</translation> + </message> + <message> + <location line="+11"/> + <source>This file was created using Designer from Qt-%1 and could not be read: +%2</source> + <translation>Ta datoteka je bila ustvarjena s Qt Designerjem iz Qt %1 in je ni bilo moč prebrati: +%2</translation> + </message> + <message> + <location line="+3"/> + <source>Please run it through <b>uic3&nbsp;-convert</b> to convert it to Qt-4's ui format.</source> + <translation>Poženite jo skozi <b>uic3&nbsp;-convert</b> in jo tako pretvorite v zapis UI za Qt 4.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="+339"/> + <source>Custom Widgets</source> + <translation>Gradniki po meri</translation> + </message> + <message> + <location line="+12"/> + <source>Promoted Widgets</source> + <translation>Povišani gradniki</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="+682"/> + <source>Unable to launch %1.</source> + <translation>Ni moč zagnati %1.</translation> + </message> + <message> + <location line="+4"/> + <source>%1 timed out.</source> + <translation>Čas za %1 je potekel.</translation> + </message> +</context> +<context> + <name>DesignerMetaEnum</name> + <message> + <location line="-513"/> + <source>%1 is not a valid enumeration value of '%2'.</source> + <translation>%1 ni veljavna vrednost številčenja od »%2«.</translation> + </message> + <message> + <location line="+5"/> + <source>'%1' could not be converted to an enumeration value of type '%2'.</source> + <translation>»%1« ne more biti pretvorjeno v vrednost številčenja vrste »%2«.</translation> + </message> +</context> +<context> + <name>DesignerMetaFlags</name> + <message> + <location line="+78"/> + <source>'%1' could not be converted to a flag value of type '%2'.</source> + <translation>»%1« ne more biti pretvorjeno v vrednost zastavice vrste »%2«.</translation> + </message> +</context> +<context> + <name>DeviceProfile</name> + <message> + <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="+397"/> + <source>'%1' is not a number.</source> + <extracomment>Reading a number for an embedded device profile</extracomment> + <translation>»%1« ni številka.</translation> + </message> + <message> + <location line="+23"/> + <source>An invalid tag <%1> was encountered.</source> + <translation>Dosežena je bila neveljavna oznaka <%1>.</translation> + </message> +</context> +<context> + <name>DeviceProfileDialog</name> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui"/> + <source>&Family</source> + <translation>&Družina</translation> + </message> + <message> + <location/> + <source>&Point Size</source> + <translation>&Velikost točke</translation> + </message> + <message> + <location/> + <source>Style</source> + <translation>Slog</translation> + </message> + <message> + <location/> + <source>Device DPI</source> + <translation>Ločljivost (točk/palec)</translation> + </message> + <message> + <location/> + <source>Name</source> + <translation>Ime</translation> + </message> +</context> +<context> + <name>DeviceSkin</name> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="+79"/> + <source>The image file '%1' could not be loaded.</source> + <translation>Slikovne datoteke »%1« ni bilo moč naložiti.</translation> + </message> + <message> + <location line="+64"/> + <source>The skin directory '%1' does not contain a configuration file.</source> + <translation>Mapa s temo »%1« ne vsebuje nastavitvene datoteke.</translation> + </message> + <message> + <location line="+5"/> + <source>The skin configuration file '%1' could not be opened.</source> + <translation>Nastavitvene datoteke za temo »%1« ni bilo moč odpreti.</translation> + </message> + <message> + <location line="+76"/> + <source>Syntax error: %1</source> + <translation>Skladenjska napaka: %1</translation> + </message> + <message> + <location line="+54"/> + <source>The skin cursor image file '%1' does not exist.</source> + <translation>Slikovna datoteka s kazalcem za temo »%1« ne obstaja.</translation> + </message> + <message> + <location line="+25"/> + <source>Syntax error in area definition: %1</source> + <translation>Skladenjska napaka pri določitvi območja: %1</translation> + </message> + <message> + <location line="+38"/> + <source>Mismatch in number of areas, expected %1, got %2.</source> + <translation>Neujemanje v številu območij, pričakovano %1, dobljeno %2.</translation> + </message> + <message> + <location line="-187"/> + <source>The skin configuration file '%1' could not be read: %2</source> + <translation>Nastavitvene datoteke za temo »%1« ni bilo moč prebrati: %2</translation> + </message> + <message> + <location line="+91"/> + <source>The skin "up" image file '%1' does not exist.</source> + <translation>Datoteka slike »up« teme »%1« ne obstaja.</translation> + </message> + <message> + <location line="+10"/> + <source>The skin "down" image file '%1' does not exist.</source> + <translation>Datoteka slike »down« teme »%1« ne obstaja.</translation> + </message> + <message> + <location line="+11"/> + <source>The skin "closed" image file '%1' does not exist.</source> + <translation>Datoteka slike »closed« teme »%1« ne obstaja.</translation> + </message> +</context> +<context> + <name>EmbeddedOptionsControl</name> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="+307"/> + <source><html><table><tr><td><b>Font</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Resolution</b></td><td>%4 x %5</td></tr></table></html></source> + <extracomment>Format embedded device profile description</extracomment> + <translation><html><table><tr><td><b>Pisava</b></td><td>%1, %2</td></tr><tr><td><b>Slog</b></td><td>%3</td></tr><tr><td><b>Ločljivost</b></td><td>%4 × %5</td></tr></table></html></translation> + </message> +</context> +<context> + <name>EmbeddedOptionsPage</name> + <message> + <location line="+103"/> + <source>Embedded Design</source> + <extracomment>Tab in preferences dialog</extracomment> + <translation>Vgrajena zasnova</translation> + </message> + <message> + <location line="+10"/> + <source>Device Profiles</source> + <extracomment>EmbeddedOptionsControl group box"</extracomment> + <translation>Profili naprav</translation> + </message> +</context> +<context> + <name>FontPanel</name> + <message> + <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/> + <source>Font</source> + <translation>Pisava</translation> + </message> + <message> + <location line="+11"/> + <source>&Writing system</source> + <translation>S&istem pisanja</translation> + </message> + <message> + <location line="+3"/> + <source>&Family</source> + <translation>&Družina</translation> + </message> + <message> + <location line="+4"/> + <source>&Style</source> + <translation>&Slog</translation> + </message> + <message> + <location line="+4"/> + <source>&Point size</source> + <translation>&Velikost točke</translation> + </message> +</context> +<context> + <name>FontPropertyManager</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="+62"/> + <source>PreferDefault</source> + <translation>Prednost ima privzeto</translation> + </message> + <message> + <location line="+1"/> + <source>NoAntialias</source> + <translation>Brez glajenja robov</translation> + </message> + <message> + <location line="+1"/> + <source>PreferAntialias</source> + <translation>Prednost ima glajenje robov</translation> + </message> + <message> + <location line="+61"/> + <source>Antialiasing</source> + <translation>Glajenje robov</translation> + </message> +</context> +<context> + <name>FormBuilder</name> + <message> + <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+359"/> + <source>Invalid stretch value for '%1': '%2'</source> + <extracomment>Parsing layout stretch values</extracomment> + <translation>Neveljavna vrednost razširjanja za »%1«: »%2«</translation> + </message> + <message> + <location line="+62"/> + <source>Invalid minimum size for '%1': '%2'</source> + <extracomment>Parsing grid layout minimum size values</extracomment> + <translation>Neveljavna najmanjša velikost za »%1«: »%2«</translation> + </message> +</context> +<context> + <name>FormEditorOptionsPage</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="+91"/> + <source>%1 %</source> + <translation>%1 %</translation> + </message> + <message> + <location line="+4"/> + <source>Preview Zoom</source> + <translation>Povečava ogleda</translation> + </message> + <message> + <location line="+2"/> + <source>Default Zoom</source> + <translation>Privzeta povečava</translation> + </message> + <message> + <location line="+29"/> + <source>Forms</source> + <extracomment>Tab in preferences dialog</extracomment> + <translation>Obrazci</translation> + </message> + <message> + <location line="+13"/> + <source>Default Grid</source> + <translation>Privzeta mreža</translation> + </message> +</context> +<context> + <name>FormLayoutRowDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui"/> + <source>Add Form Layout Row</source> + <translation>Dodaj vrstico razporeditve na obrazcu</translation> + </message> + <message> + <location/> + <source>&Label text:</source> + <translation>&Besedilo oznake:</translation> + </message> + <message> + <location/> + <source>Field &type:</source> + <translation>&Vrsta polja:</translation> + </message> + <message> + <location/> + <source>&Field name:</source> + <translation>&Ime polja:</translation> + </message> + <message> + <location/> + <source>&Buddy:</source> + <translation>&Kolega:</translation> + </message> + <message> + <location/> + <source>&Row:</source> + <translation>&Vrstica:</translation> + </message> + <message> + <location/> + <source>Label &name:</source> + <translation>&Ime oznake:</translation> + </message> +</context> +<context> + <name>FormWindow</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="+1701"/> + <source>Unexpected element <%1></source> + <translation>Nepričakovan element <%1></translation> + </message> + <message> + <location line="+7"/> + <source>Error while pasting clipboard contents at line %1, column %2: %3</source> + <translation>Napaka pri lepljenju vsebine odložišča v vrstici %1, stolpcu %2: %3</translation> + </message> +</context> +<context> + <name>FormWindowSettings</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui"/> + <source>Form Settings</source> + <translation>Nastavitve obrazca</translation> + </message> + <message> + <location/> + <source>Layout &Default</source> + <translation>&Privzeto za razpored</translation> + </message> + <message> + <location/> + <source>&Spacing:</source> + <translation>&Razmik:</translation> + </message> + <message> + <location/> + <source>&Margin:</source> + <translation>&Rob:</translation> + </message> + <message> + <location/> + <source>&Layout Function</source> + <translation>&Funkcija za razpored</translation> + </message> + <message> + <location/> + <source>Ma&rgin:</source> + <translation>R&ob:</translation> + </message> + <message> + <location/> + <source>Spa&cing:</source> + <translation>R&azmik:</translation> + </message> + <message> + <location/> + <source>Embedded Design</source> + <translation>Vgrajena zasnova</translation> + </message> + <message> + <location/> + <source>&Author</source> + <translation>&Avtor</translation> + </message> + <message> + <location/> + <source>&Include Hints</source> + <translation>Namigi za &vključevanje</translation> + </message> + <message> + <location/> + <source>&Pixmap Function</source> + <translation>F&unkcija za sličico</translation> + </message> + <message> + <location/> + <source>Grid</source> + <translation>Mreža</translation> + </message> +</context> +<context> + <name>IconSelector</name> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="+352"/> + <source>All Pixmaps (</source> + <translation>Vse sličice (</translation> + </message> +</context> +<context> + <name>ItemPropertyBrowser</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+66"/> + <source>XX Icon Selected off</source> + <extracomment>Sample string to determinate the width for the first column of the list item property browser</extracomment> + <translation>XX Ikona Izbrano izklopljeno</translation> + </message> +</context> +<context> + <name>MainWindowBase</name> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+119"/> + <source>Main</source> + <extracomment>Not currently used (main tool bar)</extracomment> + <translation>Glavna</translation> + </message> + <message> + <location line="+6"/> + <source>File</source> + <translation>Datoteka</translation> + </message> + <message> + <location line="+1"/> + <source>Edit</source> + <translation>Urejanje</translation> + </message> + <message> + <location line="+1"/> + <source>Tools</source> + <translation>Orodja</translation> + </message> + <message> + <location line="+1"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location line="+7"/> + <source>Qt Designer</source> + <translation>Qt Designer</translation> + </message> +</context> +<context> + <name>NewForm</name> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="+79"/> + <source>C&reate</source> + <translation>&Ustvari</translation> + </message> + <message> + <location line="+1"/> + <source>Recent</source> + <translation>Nedavno</translation> + </message> + <message> + <location line="+32"/> + <source>&Close</source> + <translation>&Zapri</translation> + </message> + <message> + <location line="+3"/> + <source>&Open...</source> + <translation>&Odpri ...</translation> + </message> + <message> + <location line="+4"/> + <source>&Recent Forms</source> + <translation>&Nedavni obrazci</translation> + </message> + <message> + <location line="+64"/> + <source>Read error</source> + <translation>Napaka pri branju</translation> + </message> + <message> + <location line="-100"/> + <source>New Form</source> + <translation>Nov obrazec</translation> + </message> + <message> + <location line="-5"/> + <source>Show this Dialog on Startup</source> + <translation>Prikaži to pogovorno okno ob zagonu</translation> + </message> + <message> + <location line="+128"/> + <source>A temporary form file could not be created in %1.</source> + <translation>Začasne datoteke obrazca v %1 ni bilo moč ustvariti.</translation> + </message> + <message> + <location line="+6"/> + <source>The temporary form file %1 could not be written.</source> + <translation>V začasno datoteko obrazca %1 ni bilo moč pisati.</translation> + </message> +</context> +<context> + <name>ObjectInspectorModel</name> + <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="+360"/> + <source>Object</source> + <translation>Objekt</translation> + </message> + <message> + <location line="+1"/> + <source>Class</source> + <translation>Razred</translation> + </message> + <message> + <location line="+35"/> + <source>separator</source> + <translation>ločitelj</translation> + </message> + <message> + <location line="+98"/> + <source><noname></source> + <translation><neimenovano></translation> + </message> +</context> +<context> + <name>ObjectNameDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="+158"/> + <source>Change Object Name</source> + <translation>Spremeni ime objekta</translation> + </message> + <message> + <location line="+4"/> + <source>Object Name</source> + <translation>Ime objekta</translation> + </message> +</context> +<context> + <name>PluginDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.ui"/> + <source>Plugin Information</source> + <translation>Podatki o vstavkih</translation> + </message> + <message> + <location/> + <source>1</source> + <translation>1</translation> + </message> +</context> +<context> + <name>PreferencesDialog</name> + <message> + <location filename="../tools/designer/src/designer/preferencesdialog.ui"/> + <source>Preferences</source> + <translation>Nastavitve</translation> + </message> +</context> +<context> + <name>PreviewConfigurationWidget</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location/> + <source>Print/Preview Configuration</source> + <translation>Nastavitev tiskanja/ogleda</translation> + </message> + <message> + <location/> + <source>Style</source> + <translation>Slog</translation> + </message> + <message> + <location/> + <source>Style sheet</source> + <translation>Slogovna predloga</translation> + </message> + <message> + <location/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location/> + <source>Device skin</source> + <translation>Tema naprave</translation> + </message> +</context> +<context> + <name>PromotionModel</name> + <message> + <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="+112"/> + <source>Not used</source> + <extracomment>Usage of promoted widgets</extracomment> + <translation>Ni uporabljeno</translation> + </message> +</context> +<context> + <name>Q3WizardContainer</name> + <message> + <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="+172"/> + <location line="+5"/> + <source>Page</source> + <translation>Stran</translation> + </message> +</context> +<context> + <name>QAbstractFormBuilder</name> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="+206"/> + <source>Unexpected element <%1></source> + <translation>Nepričakovan element <%1></translation> + </message> + <message> + <location line="+5"/> + <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> + <translation>Prišlo je do napake med branjem datoteke UI v vrstici %1, stolpcu %2: %3</translation> + </message> + <message> + <location line="+6"/> + <source>Invalid UI file: The root element <ui> is missing.</source> + <translation>Neveljavna datoteka UI: manjka vrhnji element <ui>.</translation> + </message> + <message> + <location line="+119"/> + <source>The creation of a widget of the class '%1' failed.</source> + <translation>Ustvarjanje gradnika razreda »%1« ni uspelo.</translation> + </message> + <message> + <location line="+296"/> + <source>Attempt to add child that is not of class QWizardPage to QWizard.</source> + <translation>Poskus dodajanja podgradnika, ki ni razreda QWizardPage ali QWizard.</translation> + </message> + <message> + <location line="+86"/> + <source>Attempt to add a layout to a widget '%1' (%2) which already has a layout of non-box type %3. +This indicates an inconsistency in the ui-file.</source> + <translation>Poskus dodajanja razporeda gradniku »%1« (%2), ki že ima razpored ne-okvirne vrste %3. +To nakazuje na neskladnost v datoteki *.ui.</translation> + </message> + <message> + <location line="+144"/> + <source>Empty widget item in %1 '%2'.</source> + <translation>Prazna postavka gradnika v %1 »%2«.</translation> + </message> + <message> + <location line="+680"/> + <source>Flags property are not supported yet.</source> + <translation>Lastnosti z zastavicami še niso podprte.</translation> + </message> + <message> + <location line="+81"/> + <source>While applying tab stops: The widget '%1' could not be found.</source> + <translation>Med uveljavljanjem postankov tabulatorke: gradnika »%1« ni bilo moč najti.</translation> + </message> + <message> + <location line="+908"/> + <source>Invalid QButtonGroup reference '%1' referenced by '%2'.</source> + <translation>Neveljavna referenca »%1« na QButtonGroup od »%2«.</translation> + </message> + <message> + <location line="+511"/> + <source>This version of the uitools library is linked without script support.</source> + <translation>Ta različica knjižnice uitools nima podpore za skripte.</translation> + </message> +</context> +<context> + <name>QAxWidgetPlugin</name> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="+75"/> + <source>ActiveX control</source> + <translation>Kontrolnik ActiveX</translation> + </message> + <message> + <location line="+5"/> + <source>ActiveX control widget</source> + <translation>Gradnik kontrolnika ActiveX</translation> + </message> +</context> +<context> + <name>QAxWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="+119"/> + <source>Set Control</source> + <translation>Nastavi kontrolnik</translation> + </message> + <message> + <location line="+1"/> + <source>Reset Control</source> + <translation>Ponastavi kontrolnik</translation> + </message> + <message> + <location line="+41"/> + <source>Licensed Control</source> + <translation>Licenciran kontrolnik</translation> + </message> + <message> + <location line="+1"/> + <source>The control requires a design-time license</source> + <translation>Kontrolnik potrebuje licenco za čas snovanja</translation> + </message> +</context> +<context> + <name>QCoreApplication</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="+83"/> + <source>%1 is not a promoted class.</source> + <translation>%1 ni povišan razred.</translation> + </message> + <message> + <location line="+65"/> + <source>The base class %1 is invalid.</source> + <translation>Osnovni razred %1 ni veljaven.</translation> + </message> + <message> + <location line="+7"/> + <source>The class %1 already exists.</source> + <translation>Razred %1 že obstaja.</translation> + </message> + <message> + <location line="+9"/> + <source>Promoted Widgets</source> + <translation>Povišani gradniki</translation> + </message> + <message> + <location line="+126"/> + <source>The class %1 cannot be removed</source> + <translation>Razreda %1 ni moč odstraniti</translation> + </message> + <message> + <location line="+9"/> + <source>The class %1 cannot be removed because it is still referenced.</source> + <translation>Razreda %1 ni moč odstraniti, ker se nanj še vedno nanašajo reference.</translation> + </message> + <message> + <location line="+10"/> + <source>The class %1 cannot be renamed</source> + <translation>Razreda %1 ni moč preimenovati</translation> + </message> + <message> + <location line="+7"/> + <source>The class %1 cannot be renamed to an empty name.</source> + <translation>Razreda %1 ni moč preimenovati s praznim imenom.</translation> + </message> + <message> + <location line="+5"/> + <source>There is already a class named %1.</source> + <translation>Razred z imenom %1 že obstaja.</translation> + </message> + <message> + <location line="+29"/> + <source>Cannot set an empty include file.</source> + <translation>Ni moč nastaviti prazne vključene datoteke.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="+88"/> + <source>Exception at line %1: %2</source> + <translation>Izjema v vrstici %1: %2</translation> + </message> + <message> + <location line="+36"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> + <message> + <location line="+50"/> + <source>An error occurred while running the script for %1: %2 +Script: %3</source> + <translation>Prišlo je do napake pri zaganjanju skripta za %1: %2 +Skript: %3</translation> + </message> +</context> +<context> + <name>QDesigner</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner.cpp" line="+141"/> + <source>%1 - warning</source> + <translation>%1 - opozorilo</translation> + </message> + <message> + <location line="+96"/> + <source>Qt Designer</source> + <translation>Qt Designer</translation> + </message> + <message> + <location line="+1"/> + <source>This application cannot be used for the Console edition of Qt</source> + <translation>Programa ni moč uporabiti za konzolno izdajo Qt</translation> + </message> +</context> +<context> + <name>QDesignerActions</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="+178"/> + <source>Edit Widgets</source> + <translation>Urejanje gradnikov</translation> + </message> + <message> + <location line="+10"/> + <source>&Quit</source> + <translation>Konča&j</translation> + </message> + <message> + <location line="+3"/> + <source>&Minimize</source> + <translation>Po&manjšaj</translation> + </message> + <message> + <location line="+2"/> + <source>Bring All to Front</source> + <translation>Prinesi vse v ospredje</translation> + </message> + <message> + <location line="+2"/> + <source>Preferences...</source> + <translation>Nastavitve ...</translation> + </message> + <message> + <location line="+298"/> + <source>Clear &Menu</source> + <translation>Počisti &meni</translation> + </message> + <message> + <location line="-233"/> + <source>CTRL+SHIFT+S</source> + <translation>CTRL+SHIFT+S</translation> + </message> + <message> + <location line="+113"/> + <source>CTRL+R</source> + <translation>CTRL+R</translation> + </message> + <message> + <location line="+18"/> + <source>CTRL+M</source> + <translation>CTRL+M</translation> + </message> + <message> + <location line="+31"/> + <source>Qt Designer &Help</source> + <translation>P&riročnik za Qt Designer</translation> + </message> + <message> + <location line="+7"/> + <source>Current Widget Help</source> + <translation>Pomoč za trenutni gradnik</translation> + </message> + <message> + <location line="+7"/> + <source>What's New in Qt Designer?</source> + <translation>Kaj je novega v Qt Designerju?</translation> + </message> + <message> + <location line="+7"/> + <source>About Plugins</source> + <translation>O vstavkih</translation> + </message> + <message> + <location line="+6"/> + <location line="+601"/> + <source>About Qt Designer</source> + <translation>O Qt Designer</translation> + </message> + <message> + <location line="-595"/> + <source>About Qt</source> + <translation>O Qt</translation> + </message> + <message> + <location line="+121"/> + <location line="+197"/> + <source>Open Form</source> + <translation>Odpri obrazec</translation> + </message> + <message> + <location line="-196"/> + <location line="+37"/> + <location line="+160"/> + <source>Designer UI files (*.%1);;All Files (*)</source> + <translation>Designerjeve datoteke UI (*.%1);;Vse datoteke (*)</translation> + </message> + <message> + <location line="-620"/> + <source>%1 already exists. +Do you want to replace it?</source> + <translation>%1 že obstaja. +Ali jo želite nadomestiti?</translation> + </message> + <message> + <location line="-26"/> + <source>Saved %1.</source> + <translation>Shranil %1.</translation> + </message> + <message> + <location line="+68"/> + <source>Additional Fonts...</source> + <translation>Dodatne pisave ...</translation> + </message> + <message> + <location line="+303"/> + <source>&Recent Forms</source> + <translation>N&edavni obrazci</translation> + </message> + <message> + <location line="+202"/> + <source>Designer</source> + <translation>Qt Designer</translation> + </message> + <message> + <location line="+0"/> + <source>Feature not implemented yet!</source> + <translation>Zmožnost še ni izdelana.</translation> + </message> + <message> + <location line="+59"/> + <source>Read error</source> + <translation>Napaka pri branju</translation> + </message> + <message> + <location line="+1"/> + <source>%1 +Do you want to update the file location or generate a new form?</source> + <translation>%1 +Ali želite posodobiti lokacijo datoteke ali ustvariti nov obrazec?</translation> + </message> + <message> + <location line="+3"/> + <source>&Update</source> + <translation>&Posodobi</translation> + </message> + <message> + <location line="+1"/> + <source>&New Form</source> + <translation>&Nov obrazec</translation> + </message> + <message> + <location line="+77"/> + <location line="+40"/> + <source>Save Form?</source> + <translation>Shranim obrazec?</translation> + </message> + <message> + <location line="-39"/> + <source>Could not open file</source> + <translation>Ni bilo moč odpreti datoteke</translation> + </message> + <message> + <location line="+10"/> + <source>Select New File</source> + <translation>Izberite novo datoteko</translation> + </message> + <message> + <location line="+30"/> + <source>Could not write file</source> + <translation>Ni bilo moč zapisati datoteke</translation> + </message> + <message> + <location line="+201"/> + <source>&Close Preview</source> + <translation>&Zapri ogled</translation> + </message> + <message> + <location line="-898"/> + <source>Save &Image...</source> + <translation>S&hrani sliko ...</translation> + </message> + <message> + <location line="+1"/> + <source>&Print...</source> + <translation>&Natisni ...</translation> + </message> + <message> + <location line="+660"/> + <source>The file %1 could not be opened. +Reason: %2 +Would you like to retry or select a different file?</source> + <translation>Datoteke %1 ni bilo moč odpreti. +Razlog: %2 +Ali žalite poskusiti znova ali izbrati drugo datoteko?</translation> + </message> + <message> + <location line="+39"/> + <source>It was not possible to write the entire file %1 to disk. +Reason:%2 +Would you like to retry?</source> + <translation>Celotne datoteke %1 ni bilo moč zapisati na disk. +Razlog: %2 +Ali želite poskusiti znova?</translation> + </message> + <message> + <location line="+239"/> + <location line="+23"/> + <source>The backup file %1 could not be written.</source> + <translation>Varnostne kopije datoteke %1 ni bilo moč zapisati.</translation> + </message> + <message> + <location line="+107"/> + <source>The backup directory %1 could not be created.</source> + <translation>Mape %1 za varnostne kopije ni bilo moč ustvariti.</translation> + </message> + <message> + <location line="+6"/> + <source>The temporary backup directory %1 could not be created.</source> + <translation>Začasne mape %1 za varnostne kopije ni bilo moč ustvariti.</translation> + </message> + <message> + <location line="+54"/> + <source>Image files (*.%1)</source> + <translation>Slikovne datoteke (*.%1)</translation> + </message> + <message> + <location line="+9"/> + <location line="+17"/> + <source>Save Image</source> + <translation>Shrani sliko</translation> + </message> + <message> + <location line="+1"/> + <source>The file %1 could not be written.</source> + <translation>Datoteke %1 ni bilo moč zapisati.</translation> + </message> + <message> + <location line="-1163"/> + <source>&New...</source> + <translation>&Nova ...</translation> + </message> + <message> + <location line="+1"/> + <source>&Open...</source> + <translation>&Odpri ...</translation> + </message> + <message> + <location line="+1"/> + <source>&Save</source> + <translation>&Shrani</translation> + </message> + <message> + <location line="+1"/> + <source>Save &As...</source> + <translation>Shrani &kot ...</translation> + </message> + <message> + <location line="+1"/> + <source>Save A&ll</source> + <translation>Shrani &vse</translation> + </message> + <message> + <location line="+1"/> + <source>Save As &Template...</source> + <translation>Shrani kot &predlogo ...</translation> + </message> + <message> + <location line="+1"/> + <location line="+901"/> + <source>&Close</source> + <translation>&Zapri</translation> + </message> + <message> + <location line="-896"/> + <source>View &Code...</source> + <translation>Prikaži &kodo ...</translation> + </message> + <message> + <location line="+424"/> + <location line="+248"/> + <source>Save Form As</source> + <translation>Shrani obrazec kot</translation> + </message> + <message> + <location line="+429"/> + <source>Preview failed</source> + <translation>Ogled ni uspel</translation> + </message> + <message> + <location line="-575"/> + <source>Code generation failed</source> + <translation>Ustvarjanje kode ni uspelo</translation> + </message> + <message> + <location line="+328"/> + <location line="+34"/> + <source>Assistant</source> + <translation>Pomočnik</translation> + </message> + <message> + <location line="+259"/> + <source>Saved image %1.</source> + <translation>Shranil sliko %1.</translation> + </message> + <message> + <location line="+18"/> + <source>Please close all forms to enable the loading of additional fonts.</source> + <translation>Da bi omogočili nalaganje dodatnih pisav zaprite vse obrazce.</translation> + </message> + <message> + <location line="+52"/> + <source>Printed %1.</source> + <translation>Natisnil %1.</translation> + </message> + <message> + <location line="-1149"/> + <source>ALT+CTRL+S</source> + <translation>ALT+CTRL+S</translation> + </message> +</context> +<context> + <name>QDesignerAppearanceOptionsPage</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="+138"/> + <source>Appearance</source> + <extracomment>Tab in preferences dialog</extracomment> + <translation>Videz</translation> + </message> +</context> +<context> + <name>QDesignerAppearanceOptionsWidget</name> + <message> + <location line="-53"/> + <source>Docked Window</source> + <translation>Zasidrana okna</translation> + </message> + <message> + <location line="+1"/> + <source>Multiple Top-Level Windows</source> + <translation>Več ločenih oken</translation> + </message> + <message> + <location line="+5"/> + <source>Toolwindow Font</source> + <translation>Pisava oken z orodji</translation> + </message> +</context> +<context> + <name>QDesignerAxWidget</name> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="-71"/> + <source>Reset control</source> + <translation>Ponastavi kontrolnik</translation> + </message> + <message> + <location line="+2"/> + <source>Set control</source> + <translation>Nastavi kontrolnik</translation> + </message> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="+179"/> + <source>Control loaded</source> + <translation>Kontrolnik je naložen</translation> + </message> + <message> + <location line="+40"/> + <source>A COM exception occurred when executing a meta call of type %1, index %2 of "%3".</source> + <translation>med izvajanjem meta-klica vrste %1 je prišlo do izjeme COM, indeks %2 od »%3«.</translation> + </message> +</context> +<context> + <name>QDesignerFormBuilder</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="+89"/> + <source>Script errors occurred:</source> + <translation>Prišlo je do napak v skriptu:</translation> + </message> + <message> + <location line="+307"/> + <source>The preview failed to build.</source> + <translation>Grajenje ogleda ni uspelo.</translation> + </message> + <message> + <location line="+65"/> + <source>Designer</source> + <translation>Qt Designer</translation> + </message> +</context> +<context> + <name>QDesignerFormWindow</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="+217"/> + <source>%1 - %2[*]</source> + <translation>%1 - %2[*]</translation> + </message> + <message> + <location line="+10"/> + <source>Save Form?</source> + <translation>Shranim obrazec?</translation> + </message> + <message> + <location line="+1"/> + <source>Do you want to save the changes to this document before closing?</source> + <translation>Ali želite pred zaprtjem shraniti spremembe v tem dokumentu?</translation> + </message> + <message> + <location line="+2"/> + <source>If you don't save, your changes will be lost.</source> + <translation>Če ne shranite, bodo spremembe izgubljene.</translation> + </message> +</context> +<context> + <name>QDesignerMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1181"/> + <source>Type Here</source> + <translation>Pišite sem</translation> + </message> + <message> + <location line="+3"/> + <source>Add Separator</source> + <translation>Dodaj ločnico</translation> + </message> + <message> + <location line="+371"/> + <source>Insert separator</source> + <translation>Vstavi ločnico</translation> + </message> + <message> + <location line="+5"/> + <source>Remove separator</source> + <translation>Odstrani ločnico</translation> + </message> + <message> + <location line="+2"/> + <source>Remove action '%1'</source> + <translation>Odstrani dejanje »%1«</translation> + </message> + <message> + <location line="+25"/> + <location line="+650"/> + <source>Add separator</source> + <translation>Dodaj ločnico</translation> + </message> + <message> + <location line="-348"/> + <source>Insert action</source> + <translation>Vstavi dejanje</translation> + </message> +</context> +<context> + <name>QDesignerMenuBar</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-375"/> + <source>Type Here</source> + <translation>Pišite sem</translation> + </message> + <message> + <location line="+298"/> + <source>Remove Menu '%1'</source> + <translation>Odstrani meni »%1«</translation> + </message> + <message> + <location line="+12"/> + <source>Remove Menu Bar</source> + <translation>Odstrani menijsko vrstico</translation> + </message> + <message> + <location line="+70"/> + <source>Menu</source> + <translation>Meni</translation> + </message> +</context> +<context> + <name>QDesignerPluginManager</name> + <message> + <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="+271"/> + <source>An XML error was encountered when parsing the XML of the custom widget %1: %2</source> + <translation>Med razčlenjevanjem datoteke XML gradnika po meri %1 je prišlo do napake XML: %2</translation> + </message> + <message> + <location line="+5"/> + <source>A required attribute ('%1') is missing.</source> + <translation>Manjka obvezna lastnost (»%1«).</translation> + </message> + <message> + <location line="+38"/> + <source>An invalid property specification ('%1') was encountered. Supported types: %2</source> + <translation>Dosežena je bila neveljavna specifikacija lastnosti (»%1«). Podprte vrste: %2</translation> + </message> + <message> + <location line="+20"/> + <source>'%1' is not a valid string property specification.</source> + <translation>»%1« ni veljavna specifikacija lastnosti z nizom.</translation> + </message> + <message> + <location line="+40"/> + <source>The XML of the custom widget %1 does not contain any of the elements <widget> or <ui>.</source> + <translation>XML gradnika po meri »%1« ne vsebuje niti elementa <widget> niti <ui>.</translation> + </message> + <message> + <location line="+12"/> + <source>The class attribute for the class %1 is missing.</source> + <translation>Manjka razredna lastnost za razred %1.</translation> + </message> + <message> + <location line="+4"/> + <source>The class attribute for the class %1 does not match the class name %2.</source> + <translation>Razredna lastnost za razred %1 se ne ujema z razredovim imenom %2.</translation> + </message> +</context> +<context> + <name>QDesignerPropertySheet</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+754"/> + <source>Dynamic Properties</source> + <translation>Dinamične lastnosti</translation> + </message> +</context> +<context> + <name>QDesignerResource</name> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+492"/> + <source>The layout type '%1' is not supported, defaulting to grid.</source> + <translation>Vrsta razpored »%1« ni podprta, preklapljam na mrežo.</translation> + </message> + <message> + <location line="+243"/> + <source>The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%4) when queried for page #%5. +Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source> + <translation>Ko je bila povprašana po strani št. %5, je razširitev vsebnika gradnika »%1« (%2) vrnila gradnik, s katerim ne upravlja Qt Designer »%3« (%4). +Strani vsebnikov naj bi bile dodane z navedbo v XML-u, ki ga vrne metoda domXml() gradnika po meri.</translation> + </message> + <message> + <location line="+599"/> + <source>Unexpected element <%1></source> + <extracomment>Parsing clipboard contents</extracomment> + <translation>Nepričakovan element <%1></translation> + </message> + <message> + <location line="+6"/> + <source>Error while pasting clipboard contents at line %1, column %2: %3</source> + <extracomment>Parsing clipboard contents</extracomment> + <translation>Napaka pri lepljenju vsebine odložišča v vrstici %1, stolpcu %2: %3</translation> + </message> + <message> + <location line="+6"/> + <source>Error while pasting clipboard contents: The root element <ui> is missing.</source> + <extracomment>Parsing clipboard contents</extracomment> + <translation>Napaka pri lepljenju vsebine odložišča: manjka vrhnji element <ui>.</translation> + </message> +</context> +<context> + <name>QDesignerSharedSettings</name> + <message> + <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="+83"/> + <source>The template path %1 could not be created.</source> + <translation>Poti %1 za predlogo ni bilo moč ustvariti.</translation> + </message> + <message> + <location line="+184"/> + <source>An error has been encountered while parsing device profile XML: %1</source> + <translation>Med razčlenjevanjem XML-a profila naprave je prišlo do napake: %1</translation> + </message> +</context> +<context> + <name>QDesignerToolWindow</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="+190"/> + <source>Property Editor</source> + <translation>Urejevalnik lastnosti</translation> + </message> + <message> + <location line="+54"/> + <source>Action Editor</source> + <translation>Urejevalnik dejanj</translation> + </message> + <message> + <location line="+42"/> + <source>Object Inspector</source> + <translation>Preiskovalnik objektov</translation> + </message> + <message> + <location line="+35"/> + <source>Resource Browser</source> + <translation>Brskalnik po virih</translation> + </message> + <message> + <location line="+34"/> + <source>Signal/Slot Editor</source> + <translation>Urejevalnik signalov/rež</translation> + </message> + <message> + <location line="+41"/> + <source>Widget Box</source> + <translation>Podokno z gradniki</translation> + </message> +</context> +<context> + <name>QDesignerWorkbench</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="+199"/> + <source>&File</source> + <translation>&Datoteka</translation> + </message> + <message> + <location line="+6"/> + <source>F&orm</source> + <translation>&Obrazec</translation> + </message> + <message> + <location line="+1"/> + <source>Preview in</source> + <translation>Ogled v</translation> + </message> + <message> + <location line="+8"/> + <source>&Window</source> + <translation>O&kno</translation> + </message> + <message> + <location line="+2"/> + <source>&Help</source> + <translation>&Pomoč</translation> + </message> + <message> + <location line="-15"/> + <source>Edit</source> + <translation>Urejanje</translation> + </message> + <message> + <location line="+38"/> + <source>Toolbars</source> + <translation>Orodjarne</translation> + </message> + <message> + <location line="+465"/> + <source>Save Forms?</source> + <translation>Shranim obrazce?</translation> + </message> + <message> + <location line="-494"/> + <source>&View</source> + <translation>&Videz</translation> + </message> + <message> + <location line="+2"/> + <source>&Settings</source> + <translation>&Nastavitve</translation> + </message> + <message> + <location line="+204"/> + <source>Widget Box</source> + <translation>Podokno z gradniki</translation> + </message> + <message> + <location line="+292"/> + <source>If you do not review your documents, all your changes will be lost.</source> + <translation>Če ne pregledate svojih dokumentov, bodo vse spremembe izgubljene.</translation> + </message> + <message> + <location line="+1"/> + <source>Discard Changes</source> + <translation>Zavrzi spremembe</translation> + </message> + <message> + <location line="+2"/> + <source>Review Changes</source> + <translation>Pregled sprememb</translation> + </message> + <message> + <location line="+95"/> + <source>Backup Information</source> + <translation>Podatki o varnostnih kopijah</translation> + </message> + <message> + <location line="+1"/> + <source>The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them?</source> + <translation>Zadnja seja Qt Designerja ni bila končana pravilno. Na disku so ostale varnostne kopije datotek. Ali jih želite naložiti?</translation> + </message> + <message> + <location line="+111"/> + <source>The file <b>%1</b> could not be opened.</source> + <translation>Datoteke <b>%1</b> ni bilo moč odpreti.</translation> + </message> + <message> + <location line="+46"/> + <source>The file <b>%1</b> is not a valid Designer UI file.</source> + <translation>Datoteka <b>%1</b> ni veljavna Designerjeva datoteka UI.</translation> + </message> + <message numerus="yes"> + <location line="-259"/> + <source>There are %n forms with unsaved changes. Do you want to review these changes before quitting?</source> + <translation> + <numerusform>Odprt je %n obrazec z neshranjenimi spremembami. Ali želite pred zaprtjem pregledati te spremembe?</numerusform> + <numerusform>Odprta sta %n obrazca z neshranjenimi spremembami. Ali želite pred zaprtjem pregledati te spremembe?</numerusform> + <numerusform>Odprti so %n obrazci z neshranjenimi spremembami. Ali želite pred zaprtjem pregledati te spremembe?</numerusform> + <numerusform>Odprtih je %n obrazcev z neshranjenimi spremembami. Ali želite pred zaprtjem pregledati te spremembe?</numerusform> + </translation> + </message> +</context> +<context> + <name>QFormBuilder</name> + <message> + <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+163"/> + <source>An empty class name was passed on to %1 (object name: '%2').</source> + <extracomment>Empty class name passed to widget factory method</extracomment> + <translation>Prazno ime razreda je bilo posredovano do %1 (ime objekta: »%2«).</translation> + </message> + <message> + <location line="+56"/> + <source>QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'.</source> + <translation>QFormBuilder ni mogel ustvariti gradnika po meri razreda »%1«; uporabljen je bil osnovni razred »%2«.</translation> + </message> + <message> + <location line="+6"/> + <source>QFormBuilder was unable to create a widget of the class '%1'.</source> + <translation>QFormBuilder ni mogel ustvariti gradnika razreda »%1«.</translation> + </message> + <message> + <location line="+61"/> + <source>The layout type `%1' is not supported.</source> + <translation>Vrsta razporeda »%1« ni podprta.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="+106"/> + <source>The set-type property %1 could not be read.</source> + <translation>Lastnosti %1 z vrsto množice ni bilo moč prebrati.</translation> + </message> + <message> + <location line="+23"/> + <source>The enumeration-type property %1 could not be read.</source> + <translation>Lastnosti %1 z vrsto naštevanja ni bilo moč prebrati.</translation> + </message> + <message> + <location line="+190"/> + <source>Reading properties of the type %1 is not supported yet.</source> + <translation>Branje lastnosti vrste %1 še ni podprto.</translation> + </message> + <message> + <location line="+266"/> + <source>The property %1 could not be written. The type %2 is not supported yet.</source> + <translation>Lastnosti %1 ni bilo moč zapisati. Vrsta %2 še ni podprta.</translation> + </message> +</context> +<context> + <name>QStackedWidgetEventFilter</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="+194"/> + <source>Previous Page</source> + <translation>Predhodna stran</translation> + </message> + <message> + <location line="+1"/> + <source>Next Page</source> + <translation>Naslednja stran</translation> + </message> + <message> + <location line="+1"/> + <source>Delete</source> + <translation>Zbriši</translation> + </message> + <message> + <location line="+1"/> + <source>Before Current Page</source> + <translation>Pred trenutno stran</translation> + </message> + <message> + <location line="+1"/> + <source>After Current Page</source> + <translation>Za trenutno stran</translation> + </message> + <message> + <location line="+1"/> + <source>Change Page Order...</source> + <translation>Spremeni vrstni red strani ...</translation> + </message> + <message> + <location line="+72"/> + <source>Change Page Order</source> + <translation>Spremeni vrstni red strani</translation> + </message> + <message> + <location line="+49"/> + <source>Page %1 of %2</source> + <translation>Stran %1 od %2</translation> + </message> + <message> + <location line="+10"/> + <location line="+4"/> + <source>Insert Page</source> + <translation>Vstavi stran</translation> + </message> +</context> +<context> + <name>QStackedWidgetPreviewEventFilter</name> + <message> + <location line="-153"/> + <source>Go to previous page of %1 '%2' (%3/%4).</source> + <translation>Pojdi na predhodno stran od %1 »%2« (%3/%4).</translation> + </message> + <message> + <location line="+4"/> + <source>Go to next page of %1 '%2' (%3/%4).</source> + <translation>Pojdi na naslednjo stran od %1 »%2« (%3/%4).</translation> + </message> +</context> +<context> + <name>QTabWidgetEventFilter</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="+89"/> + <source>Delete</source> + <translation>Zbriši</translation> + </message> + <message> + <location line="+1"/> + <source>Before Current Page</source> + <translation>Pred trenutno stran</translation> + </message> + <message> + <location line="+1"/> + <source>After Current Page</source> + <translation>Za trenutno stran</translation> + </message> + <message> + <location line="+283"/> + <source>Page %1 of %2</source> + <translation>Stran %1 od %2</translation> + </message> + <message> + <location line="+10"/> + <location line="+4"/> + <source>Insert Page</source> + <translation>Vstavi stran</translation> + </message> +</context> +<context> + <name>QToolBoxHelper</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="+64"/> + <source>Delete Page</source> + <translation>Zbriši stran</translation> + </message> + <message> + <location line="+1"/> + <source>Before Current Page</source> + <translation>Pred trenutno stran</translation> + </message> + <message> + <location line="+1"/> + <source>After Current Page</source> + <translation>Za trenutno stran</translation> + </message> + <message> + <location line="+1"/> + <source>Change Page Order...</source> + <translation>Spremeni vrsti red strani ...</translation> + </message> + <message> + <location line="+116"/> + <source>Change Page Order</source> + <translation>Spremeni vrstni red strani</translation> + </message> + <message> + <location line="+44"/> + <source>Page %1 of %2</source> + <translation>Stran %1 od %2</translation> + </message> + <message> + <location line="+12"/> + <source>Insert Page</source> + <translation>Vstavi stran</translation> + </message> +</context> +<context> + <name>QtBoolEdit</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+226"/> + <location line="+10"/> + <location line="+25"/> + <source>True</source> + <translation>Pravilno</translation> + </message> + <message> + <location line="-25"/> + <location line="+25"/> + <source>False</source> + <translation>Napačno</translation> + </message> +</context> +<context> + <name>QtBoolPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1469"/> + <source>True</source> + <translation>Pravilno</translation> + </message> + <message> + <location line="+1"/> + <source>False</source> + <translation>Napačno</translation> + </message> +</context> +<context> + <name>QtCharEdit</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1581"/> + <source>Clear Char</source> + <translation>Počisti znak</translation> + </message> +</context> +<context> + <name>QtColorEditWidget</name> + <message> + <location line="+605"/> + <source>...</source> + <translation>...</translation> + </message> +</context> +<context> + <name>QtColorPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4743"/> + <source>Red</source> + <translation>Rdeča</translation> + </message> + <message> + <location line="+8"/> + <source>Green</source> + <translation>Zelena</translation> + </message> + <message> + <location line="+8"/> + <source>Blue</source> + <translation>Modra</translation> + </message> + <message> + <location line="+8"/> + <source>Alpha</source> + <translation>Alfa</translation> + </message> +</context> +<context> + <name>QtCursorDatabase</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-206"/> + <source>Arrow</source> + <translation>Puščica</translation> + </message> + <message> + <location line="+2"/> + <source>Up Arrow</source> + <translation>Puščica navzgor</translation> + </message> + <message> + <location line="+2"/> + <source>Cross</source> + <translation>Križec</translation> + </message> + <message> + <location line="+2"/> + <source>Wait</source> + <translation>Čakanje</translation> + </message> + <message> + <location line="+2"/> + <source>IBeam</source> + <translation>Črtica |</translation> + </message> + <message> + <location line="+2"/> + <source>Size Vertical</source> + <translation>Velikost navpično</translation> + </message> + <message> + <location line="+2"/> + <source>Size Horizontal</source> + <translation>Velikost vodoravno</translation> + </message> + <message> + <location line="+2"/> + <source>Size Backslash</source> + <translation>Velikost poševno nazaj</translation> + </message> + <message> + <location line="+2"/> + <source>Size Slash</source> + <translation>Velikost poševno</translation> + </message> + <message> + <location line="+2"/> + <source>Size All</source> + <translation>Velikost v vse smeri</translation> + </message> + <message> + <location line="+2"/> + <source>Blank</source> + <translation>Prazno</translation> + </message> + <message> + <location line="+2"/> + <source>Split Vertical</source> + <translation>Razdelitev navpično</translation> + </message> + <message> + <location line="+2"/> + <source>Split Horizontal</source> + <translation>Razdelitev vodoravno</translation> + </message> + <message> + <location line="+2"/> + <source>Pointing Hand</source> + <translation>Roka, ki kaže</translation> + </message> + <message> + <location line="+2"/> + <source>Forbidden</source> + <translation>Prepovedano</translation> + </message> + <message> + <location line="+2"/> + <source>Open Hand</source> + <translation>Odprta dlan</translation> + </message> + <message> + <location line="+2"/> + <source>Closed Hand</source> + <translation>Zaprta dlan</translation> + </message> + <message> + <location line="+2"/> + <source>What's This</source> + <translation>Kaj je to</translation> + </message> + <message> + <location line="+2"/> + <source>Busy</source> + <translation>Zasedeno</translation> + </message> +</context> +<context> + <name>QtFontEditWidget</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+198"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location line="+20"/> + <source>Select Font</source> + <translation>Izberite pisavo</translation> + </message> +</context> +<context> + <name>QtFontPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-351"/> + <source>Family</source> + <translation>Družina</translation> + </message> + <message> + <location line="+13"/> + <source>Point Size</source> + <translation>Velikost točke</translation> + </message> + <message> + <location line="+8"/> + <source>Bold</source> + <translation>Polkrepko</translation> + </message> + <message> + <location line="+7"/> + <source>Italic</source> + <translation>Ležeče</translation> + </message> + <message> + <location line="+7"/> + <source>Underline</source> + <translation>Podčrtano</translation> + </message> + <message> + <location line="+7"/> + <source>Strikeout</source> + <translation>Prečrtano</translation> + </message> + <message> + <location line="+7"/> + <source>Kerning</source> + <translation>Spodsekavanje</translation> + </message> +</context> +<context> + <name>QtGradientDialog</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui"/> + <source>Edit Gradient</source> + <translation>Uredi preliv</translation> + </message> +</context> +<context> + <name>QtGradientEditor</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="+431"/> + <source>Start X</source> + <translation>Začetni X</translation> + </message> + <message> + <location line="+4"/> + <source>Start Y</source> + <translation>Začetni Y</translation> + </message> + <message> + <location line="+4"/> + <source>Final X</source> + <translation>Končni X</translation> + </message> + <message> + <location line="+4"/> + <source>Final Y</source> + <translation>Končni Y</translation> + </message> + <message> + <location line="+7"/> + <location line="+24"/> + <source>Central X</source> + <translation>Središčni X</translation> + </message> + <message> + <location line="-20"/> + <location line="+24"/> + <source>Central Y</source> + <translation>Središčni Y</translation> + </message> + <message> + <location line="-20"/> + <source>Focal X</source> + <translation>Žariščni X</translation> + </message> + <message> + <location line="+4"/> + <source>Focal Y</source> + <translation>Žariščni Y</translation> + </message> + <message> + <location line="+4"/> + <source>Radius</source> + <translation>Polmer</translation> + </message> + <message> + <location line="+16"/> + <source>Angle</source> + <translation>Kot</translation> + </message> + <message> + <location line="+288"/> + <source>Linear</source> + <translation>Linearen</translation> + </message> + <message> + <location line="+1"/> + <source>Radial</source> + <translation>Radialen</translation> + </message> + <message> + <location line="+1"/> + <source>Conical</source> + <translation>Stožčast</translation> + </message> + <message> + <location line="+20"/> + <source>Pad</source> + <translation>Zapolni</translation> + </message> + <message> + <location line="+1"/> + <source>Repeat</source> + <translation>Ponovi</translation> + </message> + <message> + <location line="+1"/> + <source>Reflect</source> + <translation>Odbij</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location/> + <source>Gradient Editor</source> + <translation>Urejevalnik preliva</translation> + </message> + <message> + <location/> + <source>1</source> + <translation>1</translation> + </message> + <message> + <location/> + <source>2</source> + <translation>2</translation> + </message> + <message> + <location/> + <source>3</source> + <translation>3</translation> + </message> + <message> + <location/> + <source>4</source> + <translation>4</translation> + </message> + <message> + <location/> + <source>5</source> + <translation>5</translation> + </message> + <message> + <location/> + <source>Gradient Stops Editor</source> + <translation>Urejevalnik postankov preliva</translation> + </message> + <message> + <location/> + <source>This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag & drop the handle to reposition it. Use right mouse button to popup context menu with extra actions.</source> + <translation>To območje vam omogoča urejanje postankov preliva. Da podvojite obstoječo ročko postanka dvokliknite nanjo. Za ustvaritev novega postanka dvokliknite izven obstoječih ročic postankov. Da spremenite položaj postanka povlecite in spustite njegovo ročko. Če kliknete z desnim gumbom miške, se bo pojavil priročni meni z dodatnimi dejanji.</translation> + </message> + <message> + <location/> + <source>Zoom</source> + <translation>Povečava</translation> + </message> + <message> + <location/> + <source>Position</source> + <translation>Položaj</translation> + </message> + <message> + <location/> + <source>Hue</source> + <translation>Odtenek</translation> + </message> + <message> + <location/> + <source>H</source> + <translation>H</translation> + </message> + <message> + <location/> + <source>Saturation</source> + <translation>Zasičenost</translation> + </message> + <message> + <location/> + <source>S</source> + <translation>S</translation> + </message> + <message> + <location/> + <source>Sat</source> + <translation>Zas.</translation> + </message> + <message> + <location/> + <source>Value</source> + <translation>Vrednost</translation> + </message> + <message> + <location/> + <source>V</source> + <translation>V</translation> + </message> + <message> + <location/> + <source>Val</source> + <translation>Vre.</translation> + </message> + <message> + <location/> + <source>Alpha</source> + <translation>Alfa</translation> + </message> + <message> + <location/> + <source>A</source> + <translation>A</translation> + </message> + <message> + <location/> + <source>Type</source> + <translation>Vrsta</translation> + </message> + <message> + <location/> + <source>Spread</source> + <translation>Razširitev</translation> + </message> + <message> + <location/> + <source>Color</source> + <translation>Barva</translation> + </message> + <message> + <location/> + <source>Current stop's color</source> + <translation>Barva trenutnega postanka</translation> + </message> + <message> + <location/> + <source>HSV</source> + <translation>HSV</translation> + </message> + <message> + <location/> + <source>RGB</source> + <translation>RGB</translation> + </message> + <message> + <location/> + <source>Current stop's position</source> + <translation>Položaj trenutnega postanka</translation> + </message> + <message> + <location/> + <source>%</source> + <translation> %</translation> + </message> + <message> + <location/> + <source>Zoom In</source> + <translation>Povečaj</translation> + </message> + <message> + <location/> + <source>Zoom Out</source> + <translation>Zmanjšaj</translation> + </message> + <message> + <location/> + <source>Toggle details extension</source> + <translation>Preklopi prikaz podrobnosti</translation> + </message> + <message> + <location/> + <source>></source> + <translation>></translation> + </message> + <message> + <location/> + <source>Linear Type</source> + <translation>Linearna vrsta</translation> + </message> + <message> + <location/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location/> + <source>Radial Type</source> + <translation>Radialna vrsta</translation> + </message> + <message> + <location/> + <source>Conical Type</source> + <translation>Stožčasta vrsta</translation> + </message> + <message> + <location/> + <source>Pad Spread</source> + <translation>Razširitev z zapolnitvijo</translation> + </message> + <message> + <location/> + <source>Repeat Spread</source> + <translation>Razširitev s ponovitvijo</translation> + </message> + <message> + <location/> + <source>Reflect Spread</source> + <translation>Razširitev z odbojem</translation> + </message> + <message> + <location/> + <source>This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient's type such as start and final point, radius, etc. by drag & drop.</source> + <translation>To območje prikazuje ogled urejevanega preliva. Omogoča vam tudi urejanje parametrov, ki so specifični za vrsto preliva, na primer začetna in končna točka, polmer in podobno. Za to uporabite vlečenje in spuščanje.</translation> + </message> + <message> + <location/> + <source>Show HSV specification</source> + <translation>Prikaži specifikacijo HSV</translation> + </message> + <message> + <location/> + <source>Show RGB specification</source> + <translation>Prikaži specifikacijo RGB</translation> + </message> + <message> + <location/> + <source>Reset Zoom</source> + <translation>Ponastavi povečavo</translation> + </message> +</context> +<context> + <name>QtGradientStopsWidget</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="+947"/> + <source>New Stop</source> + <translation>Nov postanek</translation> + </message> + <message> + <location line="+1"/> + <source>Delete</source> + <translation>Zbriši</translation> + </message> + <message> + <location line="+1"/> + <source>Flip All</source> + <translation>Obrni vse</translation> + </message> + <message> + <location line="+1"/> + <source>Select All</source> + <translation>Izberi vse</translation> + </message> + <message> + <location line="+1"/> + <source>Zoom In</source> + <translation>Povečaj</translation> + </message> + <message> + <location line="+1"/> + <source>Zoom Out</source> + <translation>Zmanjšaj</translation> + </message> + <message> + <location line="+1"/> + <source>Reset Zoom</source> + <translation>Ponastavi povečavo</translation> + </message> +</context> +<context> + <name>QtGradientView</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+107"/> + <source>Grad</source> + <translation>Preliv</translation> + </message> + <message> + <location line="+26"/> + <source>Remove Gradient</source> + <translation>Odstrani preliv</translation> + </message> + <message> + <location line="+1"/> + <source>Are you sure you want to remove the selected gradient?</source> + <translation>Ali res želite odstraniti izbrani preliv?</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+74"/> + <source>New...</source> + <translation>Nov ...</translation> + </message> + <message> + <location/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> + <source>Edit...</source> + <translation>Urejanje ...</translation> + </message> + <message> + <location/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> + <source>Rename</source> + <translation>Preimenuj</translation> + </message> + <message> + <location/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> + <source>Remove</source> + <translation>Odstrani</translation> + </message> + <message> + <location/> + <source>Gradient View</source> + <translation>Prikaz preliva</translation> + </message> +</context> +<context> + <name>QtGradientViewDialog</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui"/> + <source>Select Gradient</source> + <translation>Izberite preliv</translation> + </message> +</context> +<context> + <name>QtKeySequenceEdit</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+221"/> + <source>Clear Shortcut</source> + <translation>Počisti bližnjico</translation> + </message> +</context> +<context> + <name>QtLocalePropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-3541"/> + <source>%1, %2</source> + <translation>%1, %2</translation> + </message> + <message> + <location line="+53"/> + <source>Language</source> + <translation>Jezik</translation> + </message> + <message> + <location line="+8"/> + <source>Country</source> + <translation>Država</translation> + </message> +</context> +<context> + <name>QtPointFPropertyManager</name> + <message> + <location line="+411"/> + <source>(%1, %2)</source> + <translation>(%1, %2)</translation> + </message> + <message> + <location line="+71"/> + <source>X</source> + <translation>X</translation> + </message> + <message> + <location line="+8"/> + <source>Y</source> + <translation>Y</translation> + </message> +</context> +<context> + <name>QtPointPropertyManager</name> + <message> + <location line="-320"/> + <source>(%1, %2)</source> + <translation>(%1, %2)</translation> + </message> + <message> + <location line="+37"/> + <source>X</source> + <translation>X</translation> + </message> + <message> + <location line="+7"/> + <source>Y</source> + <translation>Y</translation> + </message> +</context> +<context> + <name>QtPropertyBrowserUtils</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-136"/> + <source>[%1, %2, %3] (%4)</source> + <translation>[%1, %2, %3] (%4)</translation> + </message> + <message> + <location line="+30"/> + <source>[%1, %2]</source> + <translation>[%1, %2]</translation> + </message> +</context> +<context> + <name>QtRectFPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1706"/> + <source>[(%1, %2), %3 x %4]</source> + <translation>[(%1, %2), %3 × %4]</translation> + </message> + <message> + <location line="+156"/> + <source>X</source> + <translation>X</translation> + </message> + <message> + <location line="+8"/> + <source>Y</source> + <translation>Y</translation> + </message> + <message> + <location line="+8"/> + <source>Width</source> + <translation>Širina</translation> + </message> + <message> + <location line="+9"/> + <source>Height</source> + <translation>Višina</translation> + </message> +</context> +<context> + <name>QtRectPropertyManager</name> + <message> + <location line="-612"/> + <source>[(%1, %2), %3 x %4]</source> + <translation>[(%1, %2), %3 × %4]</translation> + </message> + <message> + <location line="+120"/> + <source>X</source> + <translation>X</translation> + </message> + <message> + <location line="+7"/> + <source>Y</source> + <translation>Y</translation> + </message> + <message> + <location line="+7"/> + <source>Width</source> + <translation>Širina</translation> + </message> + <message> + <location line="+8"/> + <source>Height</source> + <translation>Višina</translation> + </message> +</context> +<context> + <name>QtResourceEditorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="+76"/> + <source>%1 already exists. +Do you want to replace it?</source> + <translation>%1 že obstaja. +Ali jo želite nadomestiti?</translation> + </message> + <message> + <location line="+5"/> + <source>The file does not appear to be a resource file; element '%1' was found where '%2' was expected.</source> + <translation>Kot kaže datoteka ni datoteka z viri. Najden je bil element »%1«, pričakovan pa element »%2«.</translation> + </message> + <message> + <location line="+902"/> + <source>%1 [read-only]</source> + <translation>%1 [samo za branje]</translation> + </message> + <message> + <location line="+2"/> + <location line="+198"/> + <source>%1 [missing]</source> + <translation>%1 [manjka]</translation> + </message> + <message> + <location line="-72"/> + <source><no prefix></source> + <translation><brez predpone></translation> + </message> + <message> + <location line="+320"/> + <location line="+566"/> + <source>New Resource File</source> + <translation>Nova datoteka z viri</translation> + </message> + <message> + <location line="-564"/> + <location line="+25"/> + <source>Resource files (*.qrc)</source> + <translation>Datoteke z viri (*.qrc)</translation> + </message> + <message> + <location line="-2"/> + <source>Import Resource File</source> + <translation>Uvozi datoteko z viri</translation> + </message> + <message> + <location line="+112"/> + <source>newPrefix</source> + <translation>novaPredpona</translation> + </message> + <message> + <location line="+49"/> + <source>Add Files</source> + <translation>Dodaj datoteke</translation> + </message> + <message> + <location line="+21"/> + <source>Incorrect Path</source> + <translation>Nepravilna pot</translation> + </message> + <message> + <location line="+3"/> + <location line="+19"/> + <location line="+212"/> + <location line="+7"/> + <source>Copy</source> + <translation>Skopiraj</translation> + </message> + <message> + <location line="-236"/> + <source>Copy As...</source> + <translation>Skopiraj kot ...</translation> + </message> + <message> + <location line="+2"/> + <source>Keep</source> + <translation>Obdrži</translation> + </message> + <message> + <location line="+2"/> + <source>Skip</source> + <translation>Preskoči</translation> + </message> + <message> + <location line="+87"/> + <source>Clone Prefix</source> + <translation>Kloniraj predpono</translation> + </message> + <message> + <location line="+1"/> + <source>Enter the suffix which you want to add to the names of the cloned files. +This could for example be a language extension like "_de".</source> + <translation>Vnesite pripono, ki jo želite dodati imenom kloniranih datotek. +To bi, na primer, lahko bila pripona jezika kot je »_sl«.</translation> + </message> + <message> + <location line="+113"/> + <location line="+4"/> + <source>Copy As</source> + <translation>Skopiraj kot</translation> + </message> + <message> + <location line="+1"/> + <source><p>The selected file:</p><p>%1</p><p>is outside of the current resource file's directory:</p><p>%2</p><p>Please select another path within this directory.<p></source> + <translation><p>Izbrana datoteka:</p><p>%1</p><p>je izven mape trenutne datoteke z viri:</p><p>%2</p><p>Izberite drugo pot znotraj te mape.<p></translation> + </message> + <message> + <location line="+20"/> + <source>Could not overwrite %1.</source> + <translation>Ni bilo moč nadomestiti %1.</translation> + </message> + <message> + <location line="-289"/> + <source><p><b>Warning:</b> The file</p><p>%1</p><p>is outside of the current resource file's parent directory.</p></source> + <translation><p><b>Opozorilo:</b> Datoteka</p><p>%1</p><p>je izven matične mape trenutne datoteke z viri.</p></translation> + </message> + <message> + <location line="+8"/> + <source><p>To resolve the issue, press:</p><table><tr><th align="left">Copy</th><td>to copy the file to the resource file's parent directory.</td></tr><tr><th align="left">Copy As...</th><td>to copy the file into a subdirectory of the resource file's parent directory.</td></tr><tr><th align="left">Keep</th><td>to use its current location.</td></tr></table></source> + <translation><p>Da razrešite težavo, kliknite:</p><table><tr><th align="left">Skopiraj</th><td>da skopirate datoteko v matično mapo datoteke z viri</td></tr><tr><th align="left">Skopiraj kot ...</th><td>da skopirate datoteko v podmapo matične mape datoteke z viri</td></tr><tr><th align="left">Obdrži</th><td>da uporabite trenutno lokacijo</td></tr></table></translation> + </message> + <message> + <location line="+288"/> + <source>Could not copy +%1 +to +%2</source> + <translation>Ni bilo moč skopirati +%1 +v +%2</translation> + </message> + <message> + <location line="+35"/> + <source>A parse error occurred at line %1, column %2 of %3: +%4</source> + <translation>Prišlo je do napake razčlenjevanja v vrstici %1, stolpcu %2 v %3: +%4</translation> + </message> + <message> + <location line="+12"/> + <source>Save Resource File</source> + <translation>Shrani datoteko z viri</translation> + </message> + <message> + <location line="+34"/> + <source>Edit Resources</source> + <translation>Urejanje virov</translation> + </message> + <message> + <location line="+35"/> + <source>New...</source> + <translation>Nova ...</translation> + </message> + <message> + <location line="+2"/> + <source>Open...</source> + <translation>Odpri ...</translation> + </message> + <message> + <location line="+2"/> + <location line="+11"/> + <source>Remove</source> + <translation>Odstrani</translation> + </message> + <message> + <location line="-10"/> + <location line="+11"/> + <source>Move Up</source> + <translation>Premakni gor</translation> + </message> + <message> + <location line="-10"/> + <location line="+11"/> + <source>Move Down</source> + <translation>Pomakni dol</translation> + </message> + <message> + <location line="-9"/> + <location line="+1"/> + <source>Add Prefix</source> + <translation>Dodaj predpono</translation> + </message> + <message> + <location line="+1"/> + <source>Add Files...</source> + <translation>Dodaj datoteke ...</translation> + </message> + <message> + <location line="+1"/> + <source>Change Prefix</source> + <translation>Spremeni predpono</translation> + </message> + <message> + <location line="+1"/> + <source>Change Language</source> + <translation>Spremeni jezik</translation> + </message> + <message> + <location line="+1"/> + <source>Change Alias</source> + <translation>Spremeni drugo ime</translation> + </message> + <message> + <location line="+1"/> + <source>Clone Prefix...</source> + <translation>Kloniraj predpono ...</translation> + </message> + <message> + <location line="+37"/> + <source>Prefix / Path</source> + <translation>Predpona / pot</translation> + </message> + <message> + <location line="+1"/> + <source>Language / Alias</source> + <translation>Jezik / drugo ime</translation> + </message> + <message> + <location line="+117"/> + <source><html><p><b>Warning:</b> There have been problems while reloading the resources:</p><pre>%1</pre></html></source> + <translation><html><p><b>Opozorilo:</b> Med ponovnim nalaganjem virov je prišlo do težav:</p><pre>%1</pre></html></translation> + </message> + <message> + <location line="+2"/> + <source>Resource Warning</source> + <translation>Opozorilo o virih</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui"/> + <source>Dialog</source> + <translation>Pogovorno okno</translation> + </message> + <message> + <location/> + <source>New File</source> + <translation>Nova datoteka</translation> + </message> + <message> + <location/> + <source>N</source> + <translation>N</translation> + </message> + <message> + <location/> + <source>Remove File</source> + <translation>Odstrani datoteko</translation> + </message> + <message> + <location/> + <source>R</source> + <translation>R</translation> + </message> + <message> + <location/> + <source>I</source> + <translation>I</translation> + </message> + <message> + <location/> + <source>New Resource</source> + <translation>Nov vir</translation> + </message> + <message> + <location/> + <source>A</source> + <translation>A</translation> + </message> + <message> + <location/> + <source>Remove Resource or File</source> + <translation>Odstrani vir ali datoteko</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="-239"/> + <source>Could not write %1: %2</source> + <translation>Ni moč zapisati %1: %2</translation> + </message> + <message> + <location line="+71"/> + <source>Open Resource File</source> + <translation>Odpri datoteko z viri</translation> + </message> +</context> +<context> + <name>QtResourceView</name> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="+566"/> + <source>Size: %1 x %2 +%3</source> + <translation>Velikost: %1 × %2 +%3</translation> + </message> + <message> + <location line="+20"/> + <source>Edit Resources...</source> + <translation>Urejanje virov ...</translation> + </message> + <message> + <location line="+6"/> + <source>Reload</source> + <translation>Znova naloži</translation> + </message> + <message> + <location line="+7"/> + <source>Copy Path</source> + <translation>Skopiraj pot</translation> + </message> +</context> +<context> + <name>QtResourceViewDialog</name> + <message> + <location line="+250"/> + <source>Select Resource</source> + <translation>Izberite vir</translation> + </message> +</context> +<context> + <name>QtSizeFPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-535"/> + <source>%1 x %2</source> + <translation>%1 × %2</translation> + </message> + <message> + <location line="+130"/> + <source>Width</source> + <translation>Širina</translation> + </message> + <message> + <location line="+9"/> + <source>Height</source> + <translation>Višina</translation> + </message> +</context> +<context> + <name>QtSizePolicyPropertyManager</name> + <message> + <location line="+1709"/> + <location line="+1"/> + <source><Invalid></source> + <translation><neveljavno></translation> + </message> + <message> + <location line="+1"/> + <source>[%1, %2, %3, %4]</source> + <translation>[%1, %2, %3, %4]</translation> + </message> + <message> + <location line="+45"/> + <source>Horizontal Policy</source> + <translation>Vodoravna politika</translation> + </message> + <message> + <location line="+9"/> + <source>Vertical Policy</source> + <translation>Navpična politika</translation> + </message> + <message> + <location line="+9"/> + <source>Horizontal Stretch</source> + <translation>Vodoravna praznina</translation> + </message> + <message> + <location line="+8"/> + <source>Vertical Stretch</source> + <translation>Navpična praznina</translation> + </message> +</context> +<context> + <name>QtSizePropertyManager</name> + <message> + <location line="-2286"/> + <source>%1 x %2</source> + <translation>%1 × %2</translation> + </message> + <message> + <location line="+96"/> + <source>Width</source> + <translation>Širina</translation> + </message> + <message> + <location line="+8"/> + <source>Height</source> + <translation>Višina</translation> + </message> +</context> +<context> + <name>QtToolBarDialog</name> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="+1784"/> + <source>< S E P A R A T O R ></source> + <translation>< L O Č I T E L J ></translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui"/> + <source>Customize Toolbars</source> + <translation>Prilagodi orodjarne</translation> + </message> + <message> + <location/> + <source>1</source> + <translation>1</translation> + </message> + <message> + <location/> + <source>Actions</source> + <translation>Dejanja</translation> + </message> + <message> + <location/> + <source>Toolbars</source> + <translation>Orodjarne</translation> + </message> + <message> + <location/> + <source>New</source> + <translation>Novo</translation> + </message> + <message> + <location/> + <source>Remove</source> + <translation>Odstrani</translation> + </message> + <message> + <location/> + <source>Rename</source> + <translation>Preimenuj</translation> + </message> + <message> + <location/> + <source>Up</source> + <translation>Gor</translation> + </message> + <message> + <location/> + <source><-</source> + <translation><-</translation> + </message> + <message> + <location/> + <source>-></source> + <translation>-></translation> + </message> + <message> + <location/> + <source>Down</source> + <translation>Dol</translation> + </message> + <message> + <location/> + <source>Current Toolbar Actions</source> + <translation>Trenutna dejanja v orodjarni</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="-544"/> + <source>Custom Toolbar</source> + <translation>Orodjarna po meri</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui"/> + <source>Add new toolbar</source> + <translation>Dodaj novo orodjarno</translation> + </message> + <message> + <location/> + <source>Remove selected toolbar</source> + <translation>Odstrani izbrano orodjarno</translation> + </message> + <message> + <location/> + <source>Rename toolbar</source> + <translation>Preimenuj orodjarno</translation> + </message> + <message> + <location/> + <source>Move action up</source> + <translation>Premakni dejanje gor</translation> + </message> + <message> + <location/> + <source>Remove action from toolbar</source> + <translation>Odstrani dejanje iz orodjarne</translation> + </message> + <message> + <location/> + <source>Add action to toolbar</source> + <translation>Dodaj dejanje v orodjarno</translation> + </message> + <message> + <location/> + <source>Move action down</source> + <translation>Premakni dejanje dol</translation> + </message> +</context> +<context> + <name>QtTreePropertyBrowser</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="+442"/> + <source>Property</source> + <translation>Lastnost</translation> + </message> + <message> + <location line="+1"/> + <source>Value</source> + <translation>Vrednost</translation> + </message> +</context> +<context> + <name>SaveFormAsTemplate</name> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="+72"/> + <source>Add path...</source> + <translation>Dodaj pot ...</translation> + </message> + <message> + <location line="+23"/> + <source>Template Exists</source> + <translation>Predloga obstaja</translation> + </message> + <message> + <location line="+1"/> + <source>A template with the name %1 already exists. +Do you want overwrite the template?</source> + <translation>Predloga z imenom %1 že obstaja. +Ali želite nadomestiti predlogo?</translation> + </message> + <message> + <location line="+3"/> + <source>Overwrite Template</source> + <translation>Nadomesti predlogo</translation> + </message> + <message> + <location line="+7"/> + <source>Open Error</source> + <translation>Napaka pri odpiranju</translation> + </message> + <message> + <location line="+1"/> + <source>There was an error opening template %1 for writing. Reason: %2</source> + <translation>Prišlo je do napake pri odpiranju predloge %1 za pisanje. Razlog: %2</translation> + </message> + <message> + <location line="+13"/> + <source>Write Error</source> + <translation>Napaka pri pisanju</translation> + </message> + <message> + <location line="+1"/> + <source>There was an error writing the template %1 to disk. Reason: %2</source> + <translation>Prišlo je do napake pri pisanju predloge %1 na disk. Razlog: %2</translation> + </message> + <message> + <location line="+27"/> + <source>Pick a directory to save templates in</source> + <translation>Izberite mapo za shranjevanje predlog</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.ui"/> + <source>Save Form As Template</source> + <translation>Shranjevanje obrazca kot predloge</translation> + </message> + <message> + <location/> + <source>&Category:</source> + <translation>&Kategorija:</translation> + </message> + <message> + <location/> + <source>&Name:</source> + <translation>&Ime:</translation> + </message> +</context> +<context> + <name>ScriptErrorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="+59"/> + <source>An error occurred while running the scripts for "%1": +</source> + <translation>Prišlo je do napake med poganjanjem skriptov za »%1«: +</translation> + </message> +</context> +<context> + <name>SelectSignalDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui"/> + <source>Go to slot</source> + <translation>Pojdi na režo</translation> + </message> + <message> + <location/> + <source>Select signal</source> + <translation>Izbiranje signala</translation> + </message> + <message> + <location/> + <source>signal</source> + <translation>signal</translation> + </message> + <message> + <location/> + <source>class</source> + <translation>razred</translation> + </message> +</context> +<context> + <name>SignalSlotConnection</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="-358"/> + <source>SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4)</source> + <translation>POŠILJATELJ(%1), SIGNAL(%2), PREJEMNIK (%3), REŽA(%4)</translation> + </message> +</context> +<context> + <name>SignalSlotDialogClass</name> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui"/> + <source>Signals and slots</source> + <translation>Signali in reže</translation> + </message> + <message> + <location/> + <source>Slots</source> + <translation>Reže</translation> + </message> + <message> + <location/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location/> + <source>Signals</source> + <translation>Signali</translation> + </message> + <message> + <location/> + <source>Add</source> + <translation>Dodaj</translation> + </message> + <message> + <location/> + <source>Delete</source> + <translation>Zbriši</translation> + </message> +</context> +<context> + <name>Spacer</name> + <message> + <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="+275"/> + <source>Horizontal Spacer '%1', %2 x %3</source> + <translation>Vodoravni ločitelj »%1«, %2 x %3</translation> + </message> + <message> + <location line="+0"/> + <source>Vertical Spacer '%1', %2 x %3</source> + <translation>Navpični ločitelj »%1«, %2 x %3</translation> + </message> +</context> +<context> + <name>TemplateOptionsPage</name> + <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="+156"/> + <source>Template Paths</source> + <extracomment>Tab in preferences dialog</extracomment> + <translation>Poti za predloge</translation> + </message> +</context> +<context> + <name>ToolBarManager</name> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+89"/> + <source>Configure Toolbars...</source> + <translation>Nastavi orodjarne ...</translation> + </message> + <message> + <location line="+15"/> + <source>Window</source> + <translation>Okno</translation> + </message> + <message> + <location line="+1"/> + <source>Help</source> + <translation>Pomoč</translation> + </message> + <message> + <location line="+7"/> + <source>Style</source> + <translation>Slog</translation> + </message> + <message> + <location line="+2"/> + <source>Dock views</source> + <translation>Podokna</translation> + </message> + <message> + <location line="+6"/> + <source>Toolbars</source> + <translation>Orodjarne</translation> + </message> +</context> +<context> + <name>VersionDialog</name> + <message> + <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+171"/> + <source><h3>%1</h3><br/><br/>Version %2</source> + <translation><h3>%1</h3><br/><br/>Različica %2</translation> + </message> + <message> + <location line="+1"/> + <source>Qt Designer</source> + <translation>Qt Designer</translation> + </message> + <message> + <location line="+1"/> + <source><br/>Qt Designer is a graphical user interface designer for Qt applications.<br/></source> + <translation><br/>Qt Designer je snovalnik grafičnih uporabniških vmesnikov za Qt programe.<br/></translation> + </message> + <message> + <location line="+2"/> + <source>%1<br/>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</source> + <translation>%1<br/>Avtorske pravice © 2009 Nokia Corporation in/ali njene podružnice.</translation> + </message> +</context> +<context> + <name>WidgetDataBase</name> + <message> + <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="+814"/> + <source>The file contains a custom widget '%1' whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged.</source> + <translation>Datoteka vsebuje gradnik po meri »%1«, katerega osnovni razred (%2) se razlikuje od trenutnega vnosa v podatkovni zbirki gradnikov (%3). Podatkovna zbirka gradnikov je ostala nespremenjena.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ActionEditor</name> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="+139"/> + <source>Actions</source> + <translation>Dejanja</translation> + </message> + <message> + <location line="-16"/> + <source>New...</source> + <translation>Novo ...</translation> + </message> + <message> + <location line="+7"/> + <source>Delete</source> + <translation>Zbriši</translation> + </message> + <message> + <location line="+313"/> + <source>New action</source> + <translation>Novo dejanje</translation> + </message> + <message> + <location line="+98"/> + <source>Edit action</source> + <translation>Uredi dejanje</translation> + </message> + <message> + <location line="-417"/> + <source>Edit...</source> + <translation>Uredi ...</translation> + </message> + <message> + <location line="+1"/> + <source>Go to slot...</source> + <translation>Pojdi na režo ...</translation> + </message> + <message> + <location line="+1"/> + <source>Copy</source> + <translation>Skopiraj</translation> + </message> + <message> + <location line="+1"/> + <source>Cut</source> + <translation>Izreži</translation> + </message> + <message> + <location line="+1"/> + <source>Paste</source> + <translation>Prilepi</translation> + </message> + <message> + <location line="+1"/> + <source>Select all</source> + <translation>Izberi vse</translation> + </message> + <message> + <location line="+62"/> + <source>Icon View</source> + <translation>Prikaz ikon</translation> + </message> + <message> + <location line="+6"/> + <source>Detailed View</source> + <translation>Prikaz podrobnosti</translation> + </message> + <message> + <location line="+413"/> + <source>Remove actions</source> + <translation>Odstrani dejanja</translation> + </message> + <message> + <location line="+0"/> + <source>Remove action '%1'</source> + <translation>Odstrani dejanje »%1«</translation> + </message> + <message> + <location line="+186"/> + <source>Used In</source> + <translation>Uporabljeno v</translation> + </message> + <message> + <location line="-608"/> + <source>Configure Action Editor</source> + <translation>Nastavi urejevalnik dejanj</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ActionModel</name> + <message> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+95"/> + <source>Name</source> + <translation>Ime</translation> + </message> + <message> + <location line="+1"/> + <source>Used</source> + <translation>Uporabljeno</translation> + </message> + <message> + <location line="+1"/> + <source>Text</source> + <translation>Besedilo</translation> + </message> + <message> + <location line="+1"/> + <source>Shortcut</source> + <translation>Bližnjica</translation> + </message> + <message> + <location line="+1"/> + <source>Checkable</source> + <translation>Stikalo</translation> + </message> + <message> + <location line="+1"/> + <source>ToolTip</source> + <translation>Namig</translation> + </message> +</context> +<context> + <name>qdesigner_internal::BrushManagerProxy</name> + <message> + <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="+219"/> + <source>The element '%1' is missing the required attribute '%2'.</source> + <translation>Elementu »%1« manjka obvezna lastnost »%2«.</translation> + </message> + <message> + <location line="+11"/> + <source>Empty brush name encountered.</source> + <translation>Doseženo je bilo prazno ime čopiča.</translation> + </message> + <message> + <location line="+10"/> + <source>An unexpected element '%1' was encountered.</source> + <translation>Dosežen je bil nepričakovan element »%1«.</translation> + </message> + <message> + <location line="+7"/> + <source>An error occurred when reading the brush definition file '%1' at line line %2, column %3: %4</source> + <translation>Prišlo je do napake pri branju datoteke z definicijo čopiča »%1«, v vrstici %2 in stolpcu %3: %4</translation> + </message> + <message> + <location line="+43"/> + <source>An error occurred when reading the resource file '%1' at line %2, column %3: %4</source> + <translation>Prišlo je do napake pri branju datoteke z viri »%1«, v vrstici %2 in stolpcu %3: %4</translation> + </message> +</context> +<context> + <name>qdesigner_internal::BuddyEditor</name> + <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="+261"/> + <source>Add buddy</source> + <translation>Dodaj kolega</translation> + </message> + <message> + <location line="+52"/> + <source>Remove buddies</source> + <translation>Odstrani kolege</translation> + </message> + <message numerus="yes"> + <location line="+24"/> + <source>Remove %n buddies</source> + <translation> + <numerusform>Odstrani %n kolega</numerusform> + <numerusform>Odstrani %n kolega</numerusform> + <numerusform>Odstrani %n kolege</numerusform> + <numerusform>Odstrani %n kolegov</numerusform> + </translation> + </message> + <message numerus="yes"> + <location line="+51"/> + <source>Add %n buddies</source> + <translation> + <numerusform>Dodaj %n kolega</numerusform> + <numerusform>Dodaj %n kolega</numerusform> + <numerusform>Dodaj %n kolege</numerusform> + <numerusform>Dodaj %n kolegov</numerusform> + </translation> + </message> + <message> + <location line="+47"/> + <source>Set automatically</source> + <translation>Nastavi samodejno</translation> + </message> +</context> +<context> + <name>qdesigner_internal::BuddyEditorPlugin</name> + <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_plugin.cpp" line="+73"/> + <source>Edit Buddies</source> + <translation>Urejanje kolegov</translation> + </message> +</context> +<context> + <name>qdesigner_internal::BuddyEditorTool</name> + <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_tool.cpp" line="+56"/> + <source>Edit Buddies</source> + <translation>Urejanje kolegov</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ButtonGroupMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+7"/> + <source>Select members</source> + <translation>Izberi člane</translation> + </message> + <message> + <location line="+1"/> + <source>Break</source> + <translation>Razbij</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ButtonTaskMenu</name> + <message> + <location line="+121"/> + <source>Assign to button group</source> + <translation>Dodeli skupini gumbov</translation> + </message> + <message> + <location line="+2"/> + <source>Button group</source> + <translation>Skupina gumbov</translation> + </message> + <message> + <location line="+1"/> + <source>New button group</source> + <translation>Novi skupini gumbov</translation> + </message> + <message> + <location line="+1"/> + <source>Change text...</source> + <translation>Spremeni besedilo ...</translation> + </message> + <message> + <location line="+1"/> + <source>None</source> + <translation>Nobeni</translation> + </message> + <message> + <location line="+101"/> + <source>Button group '%1'</source> + <translation>Skupina gumbov »%1«</translation> + </message> +</context> +<context> + <name>qdesigner_internal::CodeDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="+95"/> + <source>Save...</source> + <translation>Shrani ...</translation> + </message> + <message> + <location line="+4"/> + <source>Copy All</source> + <translation>Skopiraj vse</translation> + </message> + <message> + <location line="+5"/> + <source>&Find in Text...</source> + <translation>&Najdi v besedilu ...</translation> + </message> + <message> + <location line="+75"/> + <source>A temporary form file could not be created in %1.</source> + <translation>Začasne datoteke obrazca v %1 ni bilo moč ustvariti.</translation> + </message> + <message> + <location line="+6"/> + <source>The temporary form file %1 could not be written.</source> + <translation>V začasno datoteko obrazca %1 ni bilo moč pisati.</translation> + </message> + <message> + <location line="+21"/> + <source>%1 - [Code]</source> + <translation>%1 - [koda]</translation> + </message> + <message> + <location line="+23"/> + <source>Save Code</source> + <translation>Shrani kodo</translation> + </message> + <message> + <location line="+0"/> + <source>Header Files (*.%1)</source> + <translation>Datoteke z glavo (*.%1)</translation> + </message> + <message> + <location line="+6"/> + <source>The file %1 could not be opened: %2</source> + <translation>Datoteke »%1« ni bilo moč odpreti: %2</translation> + </message> + <message> + <location line="+5"/> + <source>The file %1 could not be written: %2</source> + <translation>Datoteke »%1« ni bilo moč zapisati: %2</translation> + </message> + <message> + <location line="+11"/> + <source>%1 - Error</source> + <translation>%1 - napaka</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ColorAction</name> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="+246"/> + <source>Text Color</source> + <translation>Barva besedila</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ComboBoxTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="+68"/> + <source>Edit Items...</source> + <translation>Uredi postavke ...</translation> + </message> + <message> + <location line="+38"/> + <source>Change Combobox Contents</source> + <translation>Spreminjanje vsebine spustnega seznama</translation> + </message> +</context> +<context> + <name>qdesigner_internal::CommandLinkButtonTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+156"/> + <source>Change description...</source> + <translation>Spremeni opis ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ConnectionEdit</name> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="+1313"/> + <source>Select All</source> + <translation>Izberi vse</translation> + </message> + <message> + <location line="+3"/> + <source>Deselect All</source> + <translation>Odizberi vse</translation> + </message> + <message> + <location line="+5"/> + <source>Delete</source> + <translation>Zbriši</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ConnectionModel</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="-465"/> + <source>Sender</source> + <translation>Pošiljatelj</translation> + </message> + <message> + <location line="+1"/> + <source>Signal</source> + <translation>Signal</translation> + </message> + <message> + <location line="+1"/> + <source>Receiver</source> + <translation>Prejemnik</translation> + </message> + <message> + <location line="+1"/> + <source>Slot</source> + <translation>Reža</translation> + </message> + <message> + <location line="+90"/> + <source><sender></source> + <translation><pošiljatelj></translation> + </message> + <message> + <location line="+1"/> + <source><signal></source> + <translation><signal></translation> + </message> + <message> + <location line="+1"/> + <source><receiver></source> + <translation><prejemnik></translation> + </message> + <message> + <location line="+1"/> + <source><slot></source> + <translation><reža></translation> + </message> + <message> + <location line="+110"/> + <source>Signal and Slot Editor</source> + <translation>Urejevalnik signalov in rež</translation> + </message> + <message> + <location line="-2"/> + <source>The connection already exists!<br>%1</source> + <translation>Povezava že obstaja!<br>%1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ContainerWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="+107"/> + <source>Insert Page Before Current Page</source> + <translation>Vstavi stran pred trenutno stran</translation> + </message> + <message> + <location line="+4"/> + <source>Insert Page After Current Page</source> + <translation>Vstavi stran za trenutno stran</translation> + </message> + <message> + <location line="+8"/> + <source>Add Subwindow</source> + <translation>Dodaj podokno</translation> + </message> + <message> + <location line="-40"/> + <source>Delete</source> + <translation>Zbriši</translation> + </message> + <message> + <location line="+25"/> + <source>Insert</source> + <translation>Vstavi</translation> + </message> + <message> + <location line="+53"/> + <source>Subwindow</source> + <translation>Podokno</translation> + </message> + <message> + <location line="+2"/> + <source>Page</source> + <translation>Stran %1</translation> + </message> + <message> + <location line="+1"/> + <source>Page %1 of %2</source> + <translation>Stran %1 od %2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::DPI_Chooser</name> + <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="+27"/> + <source>System (%1 x %2)</source> + <extracomment>System resolution</extracomment> + <translation>Sistemska (%1 x %2)</translation> + </message> + <message> + <location line="+7"/> + <source>User defined</source> + <translation>Uporabniško določena</translation> + </message> + <message> + <location line="+18"/> + <source> x </source> + <extracomment>DPI X/Y separator</extracomment> + <translation> x </translation> + </message> +</context> +<context> + <name>qdesigner_internal::DesignerPropertyManager</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="+647"/> + <location line="+6"/> + <source>AlignLeft</source> + <translation>Poravnaj levo</translation> + </message> + <message> + <location line="-5"/> + <source>AlignHCenter</source> + <translation>Poravnaj sredinsko (vodoravno)</translation> + </message> + <message> + <location line="+1"/> + <source>AlignRight</source> + <translation>Poravnaj desno</translation> + </message> + <message> + <location line="+1"/> + <source>AlignJustify</source> + <translation>Poravnaj obojestransko</translation> + </message> + <message> + <location line="+9"/> + <source>AlignTop</source> + <translation>Poravnaj na vrh</translation> + </message> + <message> + <location line="+1"/> + <location line="+4"/> + <source>AlignVCenter</source> + <translation>Poravnaj sredinsko (navpično)</translation> + </message> + <message> + <location line="-3"/> + <source>AlignBottom</source> + <translation>Poravnaj na dno</translation> + </message> + <message> + <location line="+565"/> + <source>%1, %2</source> + <translation>%1, %2</translation> + </message> + <message numerus="yes"> + <location line="+6"/> + <source>Customized (%n roles)</source> + <translation> + <numerusform>Po meri (%n vloga)</numerusform> + <numerusform>Po meri (%n vlogi)</numerusform> + <numerusform>Po meri (%n vloge)</numerusform> + <numerusform>Po meri (%n vlog)</numerusform> + </translation> + </message> + <message> + <location line="+1"/> + <source>Inherited</source> + <translation>Podedovano</translation> + </message> + <message> + <location line="+566"/> + <source>Horizontal</source> + <translation>Vodoravno</translation> + </message> + <message> + <location line="+9"/> + <source>Vertical</source> + <translation>Navpično</translation> + </message> + <message> + <location line="+15"/> + <source>Normal Off</source> + <translation>Normalna in izključena</translation> + </message> + <message> + <location line="+1"/> + <source>Normal On</source> + <translation>Normalna in vključena</translation> + </message> + <message> + <location line="+1"/> + <source>Disabled Off</source> + <translation>Onemogočena in izključena</translation> + </message> + <message> + <location line="+1"/> + <source>Disabled On</source> + <translation>Onemogočena in vključena</translation> + </message> + <message> + <location line="+1"/> + <source>Active Off</source> + <translation>Aktivna in izključena</translation> + </message> + <message> + <location line="+1"/> + <source>Active On</source> + <translation>Aktivna in vključena</translation> + </message> + <message> + <location line="+1"/> + <source>Selected Off</source> + <translation>Izbrana in izključena</translation> + </message> + <message> + <location line="+1"/> + <source>Selected On</source> + <translation>Izbrana in vključena</translation> + </message> + <message> + <location line="+7"/> + <location line="+21"/> + <source>translatable</source> + <translation>prevedljivo</translation> + </message> + <message> + <location line="-15"/> + <location line="+21"/> + <source>disambiguation</source> + <translation>razločitev</translation> + </message> + <message> + <location line="-15"/> + <location line="+21"/> + <source>comment</source> + <translation>komentar</translation> + </message> +</context> +<context> + <name>qdesigner_internal::DeviceProfileDialog</name> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="+63"/> + <source>Device Profiles (*.%1)</source> + <translation>Profili naprav (*.%1)</translation> + </message> + <message> + <location line="+31"/> + <source>Default</source> + <translation>Privzeti</translation> + </message> + <message> + <location line="+67"/> + <source>Save Profile</source> + <translation>Shrani profil</translation> + </message> + <message> + <location line="+10"/> + <source>Save Profile - Error</source> + <translation>Shranjevanje profila - napaka</translation> + </message> + <message> + <location line="+0"/> + <source>Unable to open the file '%1' for writing: %2</source> + <translation>Datoteke »%1« ni moč odpreti za pisanje: %2</translation> + </message> + <message> + <location line="+8"/> + <source>Open profile</source> + <translation>Odpri profil</translation> + </message> + <message> + <location line="+6"/> + <location line="+6"/> + <source>Open Profile - Error</source> + <translation>Odpiranje profila - napaka</translation> + </message> + <message> + <location line="-6"/> + <source>Unable to open the file '%1' for reading: %2</source> + <translation>Datoteke »%1« ni moč odpreti za branje: %2</translation> + </message> + <message> + <location line="+6"/> + <source>'%1' is not a valid profile: %2</source> + <translation>»%1« ni veljaven profil: %2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::Dialog</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui"/> + <source>Dialog</source> + <translation>PogovornoOkno</translation> + </message> + <message> + <location/> + <source>StringList</source> + <translation>SeznamNizov</translation> + </message> + <message> + <location/> + <source>New String</source> + <translation>Nov niz</translation> + </message> + <message> + <location/> + <source>&New</source> + <translation>&Nov</translation> + </message> + <message> + <location/> + <source>Delete String</source> + <translation>Z&briši niz</translation> + </message> + <message> + <location/> + <source>&Delete</source> + <translation>&Zbriši</translation> + </message> + <message> + <location/> + <source>&Value:</source> + <translation>&Vrednost:</translation> + </message> + <message> + <location/> + <source>Move String Up</source> + <translation>Premakni niz gor</translation> + </message> + <message> + <location/> + <source>Up</source> + <translation>Gor</translation> + </message> + <message> + <location/> + <source>Move String Down</source> + <translation>Premakni niz dol</translation> + </message> + <message> + <location/> + <source>Down</source> + <translation>Dol</translation> + </message> +</context> +<context> + <name>qdesigner_internal::EmbeddedOptionsControl</name> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="-260"/> + <source>None</source> + <translation>Noben</translation> + </message> + <message> + <location line="+4"/> + <source>Add a profile</source> + <translation>Dodaj profil</translation> + </message> + <message> + <location line="+6"/> + <source>Edit the selected profile</source> + <translation>Uredi izbrani profil</translation> + </message> + <message> + <location line="+4"/> + <source>Delete the selected profile</source> + <translation>Zbriši izbrani profil</translation> + </message> + <message> + <location line="+22"/> + <source>Add Profile</source> + <translation>Dodaj profil</translation> + </message> + <message> + <location line="+7"/> + <source>New profile</source> + <translation>Nov profil</translation> + </message> + <message> + <location line="+35"/> + <source>Edit Profile</source> + <translation>Uredi profil</translation> + </message> + <message> + <location line="+26"/> + <source>Delete Profile</source> + <translation>Zbriši profil</translation> + </message> + <message> + <location line="+1"/> + <source>Would you like to delete the profile '%1'?</source> + <translation>Ali želite zbrisati profil »%1«?</translation> + </message> + <message> + <location line="+55"/> + <source>Default</source> + <translation>Privzeti</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FilterWidget</name> + <message> + <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+185"/> + <source><Filter></source> + <translation><filter></translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormEditor</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="+190"/> + <source>Resource File Changed</source> + <translation>Datoteka z viri je bila spremenjena</translation> + </message> + <message> + <location line="+1"/> + <source>The file "%1" has changed outside Designer. Do you want to reload it?</source> + <translation>Datoteka »%1« je bila spremenjena izven Qt Designerja. Ali jo želite naložiti znova?</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormLayoutMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="+24"/> + <source>Add form layout row...</source> + <translation>Dodaj vrstico razporeditve na obrazcu ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormWindow</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="-1267"/> + <source>Edit contents</source> + <translation>Uredi vsebino</translation> + </message> + <message> + <location line="+1"/> + <source>F2</source> + <translation>F2</translation> + </message> + <message> + <location line="+841"/> + <source>Resize</source> + <translation>Spremeni velikost</translation> + </message> + <message> + <location line="+218"/> + <location line="+15"/> + <source>Key Move</source> + <translation>Premik s tipko</translation> + </message> + <message> + <location line="+270"/> + <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source> + <translation>Ni moč prilepiti gradnikov. Qt Designer ni mogel najti vsebnika brez razporeditve, v katerega bi prilepil.</translation> + </message> + <message> + <location line="+2"/> + <source>Break the layout of the container you want to paste into, select this container and then paste again.</source> + <translation>Razbijte razporeditev za vsebnik, v katerega želite prilepiti, nato izberite vsebnik in prilepite znova.</translation> + </message> + <message> + <location line="+4"/> + <source>Paste error</source> + <translation>Napaka prilepljanja</translation> + </message> + <message> + <location line="+445"/> + <source>Lay out</source> + <translation>Razporedi</translation> + </message> + <message> + <location line="+493"/> + <location line="+55"/> + <source>Drop widget</source> + <translation>Spusti gradnik</translation> + </message> + <message numerus="yes"> + <location line="-1058"/> + <source>Paste %n action(s)</source> + <translation> + <numerusform>Prilepi %n dejanje</numerusform> + <numerusform>Prilepi %n dejanji</numerusform> + <numerusform>Prilepi %n dejanja</numerusform> + <numerusform>Prilepi %n dejanj</numerusform> + </translation> + </message> + <message> + <location line="-511"/> + <source>Insert widget '%1'</source> + <translation>Vstavi gradnik »%1«</translation> + </message> + <message numerus="yes"> + <location line="+513"/> + <source>Paste %n widget(s)</source> + <translation> + <numerusform>Prilepi %n gradnik</numerusform> + <numerusform>Prilepi %n gradnika</numerusform> + <numerusform>Prilepi %n gradnike</numerusform> + <numerusform>Prilepi %n gradnikov</numerusform> + </translation> + </message> + <message> + <location line="+1"/> + <source>Paste (%1 widgets, %2 actions)</source> + <translation>Prilepi (gradnikov: %1, dejanj: %2)</translation> + </message> + <message> + <location line="+466"/> + <source>Select Ancestor</source> + <translation>Izberi predhodnika</translation> + </message> + <message> + <location line="+576"/> + <source>A QMainWindow-based form does not contain a central widget.</source> + <translation>Obrazec temelječ na QMainWindow ne vsebuje osrednjega gradnika.</translation> + </message> + <message> + <location line="-797"/> + <source>Raise widgets</source> + <translation>Dvigni gradnike</translation> + </message> + <message> + <location line="+17"/> + <source>Lower widgets</source> + <translation>Spusti gradnike</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormWindowBase</name> + <message> + <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="+393"/> + <source>Delete</source> + <translation>Zbriši</translation> + </message> + <message> + <location line="+0"/> + <source>Delete '%1'</source> + <translation>Zbriši »%1«</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormWindowManager</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+364"/> + <source>Cu&t</source> + <translation>&Izreži</translation> + </message> + <message> + <location line="+3"/> + <source>Cuts the selected widgets and puts them on the clipboard</source> + <translation>Izreže izbrane gradnike in jih odloži na odložišče</translation> + </message> + <message> + <location line="+5"/> + <source>&Copy</source> + <translation>S&kopiraj</translation> + </message> + <message> + <location line="+3"/> + <source>Copies the selected widgets to the clipboard</source> + <translation>Skopira izbrane gradnike na odložišče</translation> + </message> + <message> + <location line="+5"/> + <source>&Paste</source> + <translation>Pri&lepi</translation> + </message> + <message> + <location line="+3"/> + <source>Pastes the clipboard's contents</source> + <translation>Prilepi vsebino odložišča</translation> + </message> + <message> + <location line="+5"/> + <source>&Delete</source> + <translation>&Zbriši</translation> + </message> + <message> + <location line="+2"/> + <source>Deletes the selected widgets</source> + <translation>Zbriše izbrane gradnike</translation> + </message> + <message> + <location line="+5"/> + <source>Select &All</source> + <translation>Izberi &vse</translation> + </message> + <message> + <location line="+3"/> + <source>Selects all widgets</source> + <translation>Izbere vse gradnike</translation> + </message> + <message> + <location line="+5"/> + <source>Bring to &Front</source> + <translation>Prinesi v o&spredje</translation> + </message> + <message> + <location line="+3"/> + <location line="+1"/> + <source>Raises the selected widgets</source> + <translation>Dvigne izbrane gradnike</translation> + </message> + <message> + <location line="+4"/> + <source>Send to &Back</source> + <translation>Pošlji v &ozadje</translation> + </message> + <message> + <location line="+3"/> + <location line="+1"/> + <source>Lowers the selected widgets</source> + <translation>Spusti izbrane gradnike</translation> + </message> + <message> + <location line="+4"/> + <source>Adjust &Size</source> + <translation>Prilagodi ve&likost</translation> + </message> + <message> + <location line="+3"/> + <source>Adjusts the size of the selected widget</source> + <translation>Prilagodi velikost izbranega gradnika</translation> + </message> + <message> + <location line="+6"/> + <source>Lay Out &Horizontally</source> + <translation>Razporedi &vodoravno</translation> + </message> + <message> + <location line="+3"/> + <source>Lays out the selected widgets horizontally</source> + <translation>Izbrane gradnike razporedi vodoravno</translation> + </message> + <message> + <location line="+6"/> + <source>Lay Out &Vertically</source> + <translation>Razporedi &navpično</translation> + </message> + <message> + <location line="+3"/> + <source>Lays out the selected widgets vertically</source> + <translation>Izbrane gradnike razporedi navpično</translation> + </message> + <message> + <location line="+17"/> + <source>Lay Out in a &Grid</source> + <translation>Razporedi v &mrežo</translation> + </message> + <message> + <location line="+3"/> + <source>Lays out the selected widgets in a grid</source> + <translation>Razporedi izbrane gradnike v mrežo</translation> + </message> + <message> + <location line="+7"/> + <source>Lay Out Horizontally in S&plitter</source> + <translation>Razporedi vodoravno v ra&zdelilnik</translation> + </message> + <message> + <location line="+3"/> + <source>Lays out the selected widgets horizontally in a splitter</source> + <translation>Izbrane gradnike razporedi vodoravno v razdelilnik</translation> + </message> + <message> + <location line="+7"/> + <source>Lay Out Vertically in Sp&litter</source> + <translation>Razporedi navpično v raz&delilnik</translation> + </message> + <message> + <location line="+3"/> + <source>Lays out the selected widgets vertically in a splitter</source> + <translation>Izbrane gradnike razporedi navpično v razdelilnik</translation> + </message> + <message> + <location line="+7"/> + <source>&Break Layout</source> + <translation>&Razbij razporeditev</translation> + </message> + <message> + <location line="+3"/> + <source>Breaks the selected layout</source> + <translation>Razbij izbrano razporeditev</translation> + </message> + <message> + <location line="+13"/> + <source>&Preview...</source> + <translation>Prikaži &ogled ...</translation> + </message> + <message> + <location line="+2"/> + <source>Preview current form</source> + <translation>Prikaže ogled trenutnega obrazca</translation> + </message> + <message> + <location line="+15"/> + <source>Form &Settings...</source> + <translation>&Nastavi obrazec ...</translation> + </message> + <message> + <location line="+92"/> + <source>Break Layout</source> + <translation>Razbij razporeditev</translation> + </message> + <message> + <location line="+26"/> + <source>Adjust Size</source> + <translation>Prilagodi velikost</translation> + </message> + <message> + <location line="+43"/> + <source>Could not create form preview</source> + <comment>Title of warning message box</comment> + <translation>Ni bilo moč ustvariti ogleda obrazca</translation> + </message> + <message> + <location line="+341"/> + <source>Form Settings - %1</source> + <translation>Nastavitve obrazca - %1</translation> + </message> + <message> + <location line="-525"/> + <source>Removes empty columns and rows</source> + <translation>Odstrani prazne stolpce in vrstice</translation> + </message> + <message> + <location line="-50"/> + <source>Lay Out in a &Form Layout</source> + <translation>Razporedi v razporeditev na &obrazcu</translation> + </message> + <message> + <location line="+3"/> + <source>Lays out the selected widgets in a form layout</source> + <translation>Razporedi izbrane gradnike v razporeditev na obrazcu</translation> + </message> + <message> + <location line="+45"/> + <source>Si&mplify Grid Layout</source> + <translation>Po&enostavi razporeditev v mrežo</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormWindowSettings</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="+193"/> + <source>None</source> + <translation>Noben</translation> + </message> + <message> + <location line="+1"/> + <source>Device Profile: %1</source> + <translation>Profil naprave: %1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::GridPanel</name> + <message> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location/> + <source>Grid</source> + <translation>Mreža</translation> + </message> + <message> + <location/> + <source>Visible</source> + <translation>Vidna</translation> + </message> + <message> + <location/> + <source>Grid &X</source> + <translation>Mreža &X</translation> + </message> + <message> + <location/> + <source>Snap</source> + <translation>Pripni</translation> + </message> + <message> + <location/> + <source>Reset</source> + <translation>Ponastavi</translation> + </message> + <message> + <location/> + <source>Grid &Y</source> + <translation>Mreža &Y</translation> + </message> +</context> +<context> + <name>qdesigner_internal::GroupBoxTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/groupbox_taskmenu.cpp" line="+82"/> + <source>Change title...</source> + <translation>Spremeni naslov ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::HtmlTextEdit</name> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="-58"/> + <source>Insert HTML entity</source> + <translation>Vstavi entiteto HTML</translation> + </message> +</context> +<context> + <name>qdesigner_internal::IconSelector</name> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="-24"/> + <source>The pixmap file '%1' cannot be read.</source> + <translation>Datoteke s sličico »%1« ni moč prebrati.</translation> + </message> + <message> + <location line="+6"/> + <source>The file '%1' does not appear to be a valid pixmap file: %2</source> + <translation>Kot kaže »%1« ni veljavna datoteka s sličico: %2</translation> + </message> + <message> + <location line="+9"/> + <source>The file '%1' could not be read: %2</source> + <translation>Datoteke »%1« ni bilo moč prebrati: %2</translation> + </message> + <message> + <location line="+40"/> + <source>Pixmap Read Error</source> + <translation>Napaka pri branju sličice</translation> + </message> + <message> + <location line="+54"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location line="+6"/> + <source>Normal Off</source> + <translation>Normalna in izključena</translation> + </message> + <message> + <location line="+1"/> + <source>Normal On</source> + <translation>Normalna in vključena</translation> + </message> + <message> + <location line="+1"/> + <source>Disabled Off</source> + <translation>Onemogočena in izključena</translation> + </message> + <message> + <location line="+1"/> + <source>Disabled On</source> + <translation>Onemogočena in vključena</translation> + </message> + <message> + <location line="+1"/> + <source>Active Off</source> + <translation>Aktivna in izključena</translation> + </message> + <message> + <location line="+1"/> + <source>Active On</source> + <translation>Aktivna in vključena</translation> + </message> + <message> + <location line="+1"/> + <source>Selected Off</source> + <translation>Izbrana in izključena</translation> + </message> + <message> + <location line="+1"/> + <source>Selected On</source> + <translation>Izbrana in vključena</translation> + </message> + <message> + <location line="+8"/> + <source>Choose Resource...</source> + <translation>Izberi vir ...</translation> + </message> + <message> + <location line="+1"/> + <source>Choose File...</source> + <translation>Izberi datoteko ...</translation> + </message> + <message> + <location line="+1"/> + <source>Reset</source> + <translation>Ponastavi</translation> + </message> + <message> + <location line="+1"/> + <source>Reset All</source> + <translation>Ponastavi vse</translation> + </message> + <message> + <location line="-85"/> + <source>Choose a Pixmap</source> + <translation>Izbiranje sličice</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ItemListEditor</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+358"/> + <source>Properties &<<</source> + <translation>Lastnosti &<<</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui"/> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+2"/> + <source>Properties &>></source> + <translation>Lastnosti &>></translation> + </message> + <message> + <location/> + <source>Items List</source> + <translation>Seznam postavk</translation> + </message> + <message> + <location/> + <source>New Item</source> + <translation>Nova postavka</translation> + </message> + <message> + <location/> + <source>&New</source> + <translation>&Nova</translation> + </message> + <message> + <location/> + <source>Delete Item</source> + <translation>Zbriši postavko</translation> + </message> + <message> + <location/> + <source>&Delete</source> + <translation>&Zbriši</translation> + </message> + <message> + <location/> + <source>Move Item Up</source> + <translation>Premakni postavko gor</translation> + </message> + <message> + <location/> + <source>U</source> + <translation>G</translation> + </message> + <message> + <location/> + <source>Move Item Down</source> + <translation>Premakni postavko dol</translation> + </message> + <message> + <location/> + <source>D</source> + <translation>D</translation> + </message> +</context> +<context> + <name>qdesigner_internal::LabelTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="+85"/> + <source>Change rich text...</source> + <translation>Spremeni bogato besedilo ...</translation> + </message> + <message> + <location line="+1"/> + <source>Change plain text...</source> + <translation>Spremeni navadno besedilo ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::LanguageResourceDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="-258"/> + <source>Choose Resource</source> + <translation>Izberite vir</translation> + </message> +</context> +<context> + <name>qdesigner_internal::LineEditTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/lineedit_taskmenu.cpp" line="+80"/> + <source>Change text...</source> + <translation>Spremeni besedilo ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ListWidgetEditor</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="+101"/> + <source>Edit List Widget</source> + <translation>Urejanje gradnika s seznamom</translation> + </message> + <message> + <location line="+19"/> + <source>Edit Combobox</source> + <translation>Urejanje spustnega seznama</translation> + </message> + <message> + <location line="-51"/> + <source>New Item</source> + <translation>Nova postavka</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ListWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="+67"/> + <source>Edit Items...</source> + <translation>Uredi postavke ...</translation> + </message> + <message> + <location line="+38"/> + <source>Change List Contents</source> + <translation>Spreminjanje vsebine seznama</translation> + </message> +</context> +<context> + <name>qdesigner_internal::MdiContainerWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="+118"/> + <source>Next Subwindow</source> + <translation>Naslednje podokno</translation> + </message> + <message> + <location line="+1"/> + <source>Previous Subwindow</source> + <translation>Predhodno podokno</translation> + </message> + <message> + <location line="+1"/> + <source>Tile</source> + <translation>Tlakuj</translation> + </message> + <message> + <location line="+1"/> + <source>Cascade</source> + <translation>V kaskado</translation> + </message> +</context> +<context> + <name>qdesigner_internal::MenuTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/menutaskmenu.cpp" line="+56"/> + <source>Remove</source> + <translation>Odstrani</translation> + </message> +</context> +<context> + <name>qdesigner_internal::MorphMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="+264"/> + <source>Morph into</source> + <translation>Pretvori v</translation> + </message> +</context> +<context> + <name>qdesigner_internal::NewActionDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui"/> + <source>New Action...</source> + <translation>Novo dejanje ...</translation> + </message> + <message> + <location/> + <source>&Text:</source> + <translation>&Besedilo:</translation> + </message> + <message> + <location/> + <source>&Icon:</source> + <translation>&Ikona:</translation> + </message> + <message> + <location/> + <source>Shortcut:</source> + <translation>Bližnjica:</translation> + </message> + <message> + <location/> + <source>Checkable:</source> + <translation>Stikalo:</translation> + </message> + <message> + <location/> + <source>ToolTip:</source> + <translation>Namig:</translation> + </message> + <message> + <location/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location/> + <source>Object &name:</source> + <translation>&Ime objekta:</translation> + </message> +</context> +<context> + <name>qdesigner_internal::NewDynamicPropertyDialog</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="+134"/> + <source>Set Property Name</source> + <translation>Nastavi ime lastnosti</translation> + </message> + <message> + <location line="+11"/> + <source>The current object already has a property named '%1'. +Please select another, unique one.</source> + <translation>Trenutni objekt že ima lastnost z imenom »%1«.Izberite drugo, edinstveno ime</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui"/> + <source>Create Dynamic Property</source> + <translation>Ustvari dinamično lastnost</translation> + </message> + <message> + <location/> + <source>Property Name</source> + <translation>Ime lastnosti</translation> + </message> + <message> + <location/> + <source>Property Type</source> + <translation>Vrsta lastnosti</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="+4"/> + <source>The '_q_' prefix is reserved for the Qt library. +Please select another name.</source> + <translation>Predpona »_q_« je rezervirana za knjižnico Qt.Izberite drugo ime.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui"/> + <source>horizontalSpacer</source> + <translation>vodoravnaPraznina</translation> + </message> +</context> +<context> + <name>qdesigner_internal::NewFormWidget</name> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="+104"/> + <source>Default size</source> + <translation>Privzeta velikost</translation> + </message> + <message> + <location line="+1"/> + <source>QVGA portrait (240x320)</source> + <translation>QVGA, pokončno (240x320)</translation> + </message> + <message> + <location line="+1"/> + <source>QVGA landscape (320x240)</source> + <translation>QVGA, ležeče (320x240)</translation> + </message> + <message> + <location line="+1"/> + <source>VGA portrait (480x640)</source> + <translation>VGA, pokončno (480x640)</translation> + </message> + <message> + <location line="+1"/> + <source>VGA landscape (640x480)</source> + <translation>VGA, ležeče (640x480)</translation> + </message> + <message> + <location line="+66"/> + <source>Widgets</source> + <extracomment>New Form Dialog Categories</extracomment> + <translation>Gradniki</translation> + </message> + <message> + <location line="+1"/> + <source>Custom Widgets</source> + <translation>Gradniki po meri</translation> + </message> + <message> + <location line="+18"/> + <source>None</source> + <translation>Nobena</translation> + </message> + <message> + <location line="+57"/> + <source>Error loading form</source> + <translation>Napaka pri nalaganju obrazca</translation> + </message> + <message> + <location line="+244"/> + <source>Unable to open the form template file '%1': %2</source> + <translation>Ni moč odpreti datoteke s predlogo obrazca »%1«: %2</translation> + </message> + <message> + <location line="+67"/> + <source>Internal error: No template selected.</source> + <translation>Notranja napaka: izbrane ni nobene predloge.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.ui"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location/> + <source>Choose a template for a preview</source> + <translation>Izberite predlogo za ogled</translation> + </message> + <message> + <location/> + <source>Embedded Design</source> + <translation>Vgrajena zasnova</translation> + </message> + <message> + <location/> + <source>Device:</source> + <translation>Naprava:</translation> + </message> + <message> + <location/> + <source>Screen Size:</source> + <translation>Velikost zaslona</translation> + </message> +</context> +<context> + <name>qdesigner_internal::NewPromotedClassPanel</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="+92"/> + <source>Add</source> + <translation>Dodaj</translation> + </message> + <message> + <location line="+2"/> + <source>New Promoted Class</source> + <translation>Nov povišan razred</translation> + </message> + <message> + <location line="+15"/> + <source>Base class name:</source> + <translation>Ime osnovnega razreda:</translation> + </message> + <message> + <location line="+1"/> + <source>Promoted class name:</source> + <translation>Ime povišanega razreda:</translation> + </message> + <message> + <location line="+1"/> + <source>Header file:</source> + <translation>Datoteka z glavo:</translation> + </message> + <message> + <location line="+1"/> + <source>Global include</source> + <translation>Globalna vključitev</translation> + </message> + <message> + <location line="+11"/> + <source>Reset</source> + <translation>Ponastavi</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ObjectInspector</name> + <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="+754"/> + <source>&Find in Text...</source> + <translation>&Najdi v besedilu ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name> + <message> + <location line="-438"/> + <source>Change Current Page</source> + <translation>Spreminjanje trenutne strani</translation> + </message> +</context> +<context> + <name>qdesigner_internal::OrderDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="+109"/> + <source>Index %1 (%2)</source> + <translation>Indeks %1 (%2)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.ui"/> + <source>Change Page Order</source> + <translation>Spreminjanje vrstnega reda strani</translation> + </message> + <message> + <location/> + <source>Page Order</source> + <translation>Vrstni red strani</translation> + </message> + <message> + <location/> + <source>Move page up</source> + <translation>Premakni stran gor</translation> + </message> + <message> + <location/> + <source>Move page down</source> + <translation>Premakni stran dol</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="+3"/> + <source>%1 %2</source> + <translation>%1 %2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PaletteEditor</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui"/> + <source>Edit Palette</source> + <translation>Urejanje palete</translation> + </message> + <message> + <location/> + <source>Tune Palette</source> + <translation>Nastavitev palete</translation> + </message> + <message> + <location/> + <source>Show Details</source> + <translation>Prikaži podrobnosti</translation> + </message> + <message> + <location/> + <source>Compute Details</source> + <translation>izračunaj podrobnosti</translation> + </message> + <message> + <location/> + <source>Quick</source> + <translation>Hitro</translation> + </message> + <message> + <location/> + <source>Preview</source> + <translation>Ogled</translation> + </message> + <message> + <location/> + <source>Disabled</source> + <translation>Onemogočeno</translation> + </message> + <message> + <location/> + <source>Inactive</source> + <translation>Neaktivno</translation> + </message> + <message> + <location/> + <source>Active</source> + <translation>Aktivno</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PaletteEditorButton</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditorbutton.cpp" line="+57"/> + <source>Change Palette</source> + <translation>Spremeni paleto</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PaletteModel</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="+374"/> + <source>Color Role</source> + <translation>Vloga barve</translation> + </message> + <message> + <location line="+2"/> + <source>Active</source> + <translation>Aktivno</translation> + </message> + <message> + <location line="+2"/> + <source>Inactive</source> + <translation>Neaktivno</translation> + </message> + <message> + <location line="+2"/> + <source>Disabled</source> + <translation>Onemogočeno</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PixmapEditor</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="-1539"/> + <source>Copy Path</source> + <translation>Skopiraj pot</translation> + </message> + <message> + <location line="+1"/> + <source>Paste Path</source> + <translation>Prilepi pot</translation> + </message> + <message> + <location line="-3"/> + <source>Choose Resource...</source> + <translation>Izberi vir ...</translation> + </message> + <message> + <location line="+1"/> + <source>Choose File...</source> + <translation>Izberi datoteko ...</translation> + </message> + <message> + <location line="+8"/> + <location line="+16"/> + <source>...</source> + <translation>...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PlainTextEditorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/plaintexteditor.cpp" line="+65"/> + <source>Edit text</source> + <translation>Uredi besedilo</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PluginDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="+72"/> + <source>Components</source> + <translation>Komponente</translation> + </message> + <message> + <location line="+13"/> + <source>Plugin Information</source> + <translation>Podatki o vstavkih</translation> + </message> + <message> + <location line="+4"/> + <source>Refresh</source> + <translation>Osveži</translation> + </message> + <message> + <location line="+1"/> + <source>Scan for newly installed custom widget plugins.</source> + <translation>Preveri razpoložljivost na novo nameščenih vstavkov za gradnike po meri.</translation> + </message> + <message> + <location line="+48"/> + <source>Qt Designer couldn't find any plugins</source> + <translation>Qt Designer ni našel nobenega vstavka</translation> + </message> + <message> + <location line="+3"/> + <source>Qt Designer found the following plugins</source> + <translation>Qt Designer je našel naslednje vstavke</translation> + </message> + <message> + <location line="+55"/> + <source>New custom widget plugins have been found.</source> + <translation>Najdeni so bili vstavki za nove gradnike po meri.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewActionGroup</name> + <message> + <location filename="../tools/designer/src/components/formeditor/previewactiongroup.cpp" line="+95"/> + <source>%1 Style</source> + <translation>Slog %1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewConfigurationWidget</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="+139"/> + <source>Default</source> + <translation>Privzeto</translation> + </message> + <message> + <location line="+22"/> + <source>None</source> + <translation>Brez</translation> + </message> + <message> + <location line="+6"/> + <source>Browse...</source> + <translation>Brskaj ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name> + <message> + <location line="+118"/> + <source>Load Custom Device Skin</source> + <translation>Naloži temo za napravo po meri</translation> + </message> + <message> + <location line="+2"/> + <source>All QVFB Skins (*.%1)</source> + <translation>Vse teme za QVFB (*.%1)</translation> + </message> + <message> + <location line="+16"/> + <source>%1 - Duplicate Skin</source> + <translation>%1 - podvojena tema</translation> + </message> + <message> + <location line="+1"/> + <source>The skin '%1' already exists.</source> + <translation>Tema »%1« že obstaja.</translation> + </message> + <message> + <location line="+14"/> + <source>%1 - Error</source> + <translation>%1 - napaka</translation> + </message> + <message> + <location line="+1"/> + <source>%1 is not a valid skin directory: +%2</source> + <translation>%1 ni veljavna mapa s temo: +%2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewDeviceSkin</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="+259"/> + <source>&Portrait</source> + <translation>&Pokončno</translation> + </message> + <message> + <location line="+2"/> + <source>Landscape (&CCW)</source> + <extracomment>Rotate form preview counter-clockwise</extracomment> + <translation>L&ežeče (v nasprotni smeri ure)</translation> + </message> + <message> + <location line="+2"/> + <source>&Landscape (CW)</source> + <extracomment>Rotate form preview clockwise</extracomment> + <translation>&Ležeče (v smeri ure)</translation> + </message> + <message> + <location line="+1"/> + <source>&Close</source> + <translation>&Zapri</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewManager</name> + <message> + <location line="+426"/> + <source>%1 - [Preview]</source> + <translation>%1 - [ogled]</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewMdiArea</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewframe.cpp" line="+72"/> + <source>The moose in the noose +ate the goose who was loose.</source> + <extracomment>Palette editor background</extracomment> + <translation>Šerif bo za vajo spet +skuhal domače žgance.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewWidget</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui"/> + <source>Preview Window</source> + <translation>Okno ogleda</translation> + </message> + <message> + <location/> + <source>LineEdit</source> + <translation>UrejevalnaVrstica</translation> + </message> + <message> + <location/> + <source>ComboBox</source> + <translation>SpustniSeznam</translation> + </message> + <message> + <location/> + <source>PushButton</source> + <translation>Gumb</translation> + </message> + <message> + <location/> + <source>ButtonGroup2</source> + <translation>SkupinaGumbov2</translation> + </message> + <message> + <location/> + <source>CheckBox1</source> + <translation>PotrditvenoPolje1</translation> + </message> + <message> + <location/> + <source>CheckBox2</source> + <translation>PotrditvenoPolje2</translation> + </message> + <message> + <location/> + <source>ButtonGroup</source> + <translation>SkupinaGumbov</translation> + </message> + <message> + <location/> + <source>RadioButton1</source> + <translation>IzbirniGumb1</translation> + </message> + <message> + <location/> + <source>RadioButton2</source> + <translation>IzbirniGumb2</translation> + </message> + <message> + <location/> + <source>RadioButton3</source> + <translation>IzbirniGumb3</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PromotionModel</name> + <message> + <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="+17"/> + <source>Name</source> + <translation>Ime</translation> + </message> + <message> + <location line="+1"/> + <source>Header file</source> + <translation>Datoteka z glavo</translation> + </message> + <message> + <location line="+1"/> + <source>Global include</source> + <translation>Globalna vključitev</translation> + </message> + <message> + <location line="+1"/> + <source>Usage</source> + <translation>Uporaba</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PromotionTaskMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="+85"/> + <source>Promoted widgets...</source> + <translation>Povišani gradniki ...</translation> + </message> + <message> + <location line="+1"/> + <source>Promote to ...</source> + <translation>Povišaj v ...</translation> + </message> + <message> + <location line="+2"/> + <source>Promote to</source> + <translation>Povišaj v</translation> + </message> + <message> + <location line="+1"/> + <source>Demote to %1</source> + <translation>Ponižaj v %1</translation> + </message> + <message> + <location line="-2"/> + <source>Change signals/slots...</source> + <translation>Spremeni signale/reže ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PropertyEditor</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="+183"/> + <source>Add Dynamic Property...</source> + <translation>Dodaj dinamično lastnost ...</translation> + </message> + <message> + <location line="+1"/> + <source>Remove Dynamic Property</source> + <translation>Odstrani dinamično lastnost</translation> + </message> + <message> + <location line="+3"/> + <source>Tree View</source> + <translation>Drevesni prikaz</translation> + </message> + <message> + <location line="+1"/> + <source>Drop Down Button View</source> + <translation>Gumb s spustim seznamom za prikaz</translation> + </message> + <message> + <location line="+597"/> + <source>Object: %1 +Class: %2</source> + <translation>Objekt: %1 +Razred: %2</translation> + </message> + <message> + <location line="-600"/> + <source>Sorting</source> + <translation>Razvrsti</translation> + </message> + <message> + <location line="+1"/> + <source>Color Groups</source> + <translation>Obarvaj skupine</translation> + </message> + <message> + <location line="+66"/> + <source>Configure Property Editor</source> + <translation>Nastavi urejevalnik lastnosti</translation> + </message> + <message> + <location line="-14"/> + <source>String...</source> + <translation>Niz ...</translation> + </message> + <message> + <location line="+3"/> + <source>Bool...</source> + <translation>Bool ...</translation> + </message> + <message> + <location line="+4"/> + <source>Other...</source> + <translation>Drugo ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PropertyLineEdit</name> + <message> + <location filename="../tools/designer/src/lib/shared/propertylineedit.cpp" line="+88"/> + <source>Insert line break</source> + <translation>Vstavi prelom vrstice</translation> + </message> +</context> +<context> + <name>qdesigner_internal::QDesignerPromotionDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="+85"/> + <source>Promoted Widgets</source> + <translation>Povišani gradniki</translation> + </message> + <message> + <location line="+7"/> + <source>Promoted Classes</source> + <translation>Povišani razredi</translation> + </message> + <message> + <location line="+60"/> + <source>Promote</source> + <translation>Povišaj</translation> + </message> + <message> + <location line="+169"/> + <source>%1 - Error</source> + <translation>%1 - napaka</translation> + </message> + <message> + <location line="-17"/> + <source>Change signals/slots...</source> + <translation>Spremeni signale/reže ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::QDesignerResource</name> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+277"/> + <source>Loading qrc file</source> + <translation>Nalaganje datoteke *.qrc</translation> + </message> + <message> + <location line="+1"/> + <source>The specified qrc file <p><b>%1</b></p><p>could not be found. Do you want to update the file location?</p></source> + <translation>Podane datoteke *.qrc <p><b>%1</b></p><p>ni bilo moč najti. Ali želite posodobiti lokacijo datoteke?</p></translation> + </message> + <message> + <location line="+6"/> + <source>New location for %1</source> + <translation>Nova lokacija za %1</translation> + </message> + <message> + <location line="+1"/> + <source>Resource files (*.qrc)</source> + <translation>Datoteke z viri (*.qrc)</translation> + </message> +</context> +<context> + <name>qdesigner_internal::QDesignerTaskMenu</name> + <message numerus="yes"> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="+560"/> + <source>Set size constraint on %n widget(s)</source> + <translation> + <numerusform>Nastavi omejitev velikosti za %n gradnik</numerusform> + <numerusform>Nastavi omejitev velikosti za %n gradnika</numerusform> + <numerusform>Nastavi omejitev velikosti za %n gradnike</numerusform> + <numerusform>Nastavi omejitev velikosti za %n gradnikov</numerusform> + </translation> + </message> + <message> + <location line="-492"/> + <source>Change objectName...</source> + <translation>Spremeni ime objekta ...</translation> + </message> + <message> + <location line="+1"/> + <source>Change toolTip...</source> + <translation>Spremeni namig ...</translation> + </message> + <message> + <location line="+1"/> + <source>Change whatsThis...</source> + <translation>Spremeni KajJeTo ...</translation> + </message> + <message> + <location line="+1"/> + <source>Change styleSheet...</source> + <translation>Spremeni slogovno predlogo ...</translation> + </message> + <message> + <location line="+3"/> + <source>Create Menu Bar</source> + <translation>Ustvari menijsko vrstico</translation> + </message> + <message> + <location line="+1"/> + <source>Add Tool Bar</source> + <translation>Dodaj orodjarno</translation> + </message> + <message> + <location line="+1"/> + <source>Create Status Bar</source> + <translation>Ustvari vrstico stanja</translation> + </message> + <message> + <location line="+1"/> + <source>Remove Status Bar</source> + <translation>Odstrani vrstico stanja</translation> + </message> + <message> + <location line="+1"/> + <source>Change script...</source> + <translation>Spremeni skript ...</translation> + </message> + <message> + <location line="+1"/> + <source>Change signals/slots...</source> + <translation>Spremeni signale/reže ...</translation> + </message> + <message> + <location line="+1"/> + <source>Go to slot...</source> + <translation>Pojdi na režo ...</translation> + </message> + <message> + <location line="+3"/> + <source>Size Constraints</source> + <translation>Omejitve velikosti</translation> + </message> + <message> + <location line="+4"/> + <source>Set Minimum Width</source> + <translation>Nastavi najmanjšo širino</translation> + </message> + <message> + <location line="+4"/> + <source>Set Minimum Height</source> + <translation>Nastavi najmanjšo višino</translation> + </message> + <message> + <location line="+4"/> + <source>Set Minimum Size</source> + <translation>Nastavi najmanjšo velikost</translation> + </message> + <message> + <location line="+6"/> + <source>Set Maximum Width</source> + <translation>Nastavi največjo širino</translation> + </message> + <message> + <location line="+4"/> + <source>Set Maximum Height</source> + <translation>Nastavi največjo višino</translation> + </message> + <message> + <location line="+4"/> + <source>Set Maximum Size</source> + <translation>Nastavi največjo velikost</translation> + </message> + <message> + <location line="+235"/> + <source>Edit ToolTip</source> + <translation>Uredi namig</translation> + </message> + <message> + <location line="+5"/> + <source>Edit WhatsThis</source> + <translation>Uredi KajJeTo</translation> + </message> + <message> + <location line="+144"/> + <source>no signals available</source> + <translation>na voljo ni nobenega signala</translation> + </message> +</context> +<context> + <name>qdesigner_internal::QDesignerWidgetBox</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="+123"/> + <location line="+13"/> + <source>Unexpected element <%1></source> + <translation>Nepričakovan element <%1></translation> + </message> + <message> + <location line="+7"/> + <source>A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4 +%5</source> + <translation>Prišlo je do napake razčlenjevanja v vrstici %1, stolpcu %2 kode XML za gradnik %3: %4 + +%5</translation> + </message> + <message> + <location line="+9"/> + <source>The XML code specified for the widget %1 does not contain any widget elements. +%2</source> + <translation>Koda XML za gradnik %1 ne vsebuje nobenega elementa gradnika. +%2</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="+349"/> + <source>An error has been encountered at line %1 of %2: %3</source> + <translation>Prišlo je do napake v vrstici %1 v %2: %3</translation> + </message> + <message> + <location line="+139"/> + <source>Unexpected element <%1> encountered when parsing for <widget> or <ui></source> + <translation>Med razčlenjevanjem za <widget> ali <ui> je bil dosežen nepričakovan element <%1>.</translation> + </message> + <message> + <location line="+19"/> + <source>Unexpected end of file encountered when parsing widgets.</source> + <translation>Med razčlenjevanjem gradnikov je bil dosežen nepričakovan konec datoteke.</translation> + </message> + <message> + <location line="+9"/> + <source>A widget element could not be found.</source> + <translation>Ni bilo moč najti elementa gradnika.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::QtGradientStopsController</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="+173"/> + <source>H</source> + <translation>H</translation> + </message> + <message> + <location line="+1"/> + <source>S</source> + <translation>S</translation> + </message> + <message> + <location line="+1"/> + <source>V</source> + <translation>V</translation> + </message> + <message> + <location line="+6"/> + <location line="+4"/> + <source>Hue</source> + <translation>Odtenek</translation> + </message> + <message> + <location line="-3"/> + <source>Sat</source> + <translation>Zasičenost</translation> + </message> + <message> + <location line="+1"/> + <source>Val</source> + <translation>Vrednost</translation> + </message> + <message> + <location line="+3"/> + <source>Saturation</source> + <translation>Zasičenost</translation> + </message> + <message> + <location line="+1"/> + <source>Value</source> + <translation>Vrednost</translation> + </message> + <message> + <location line="+22"/> + <source>R</source> + <translation>R</translation> + </message> + <message> + <location line="+1"/> + <source>G</source> + <translation>G</translation> + </message> + <message> + <location line="+1"/> + <source>B</source> + <translation>B</translation> + </message> + <message> + <location line="+6"/> + <source>Red</source> + <translation>Rdeča</translation> + </message> + <message> + <location line="+1"/> + <source>Green</source> + <translation>Zelena</translation> + </message> + <message> + <location line="+1"/> + <source>Blue</source> + <translation>Modra</translation> + </message> +</context> +<context> + <name>qdesigner_internal::RichTextEditorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="+436"/> + <source>Edit text</source> + <translation>Uredi besedilo</translation> + </message> + <message> + <location line="+30"/> + <source>&OK</source> + <translation>&V redu</translation> + </message> + <message> + <location line="+2"/> + <source>&Cancel</source> + <translation>&Prekliči</translation> + </message> + <message> + <location line="-9"/> + <source>Rich Text</source> + <translation>Bogato besedilo</translation> + </message> + <message> + <location line="+1"/> + <source>Source</source> + <translation>Izvorna koda</translation> + </message> +</context> +<context> + <name>qdesigner_internal::RichTextEditorToolBar</name> + <message> + <location line="-294"/> + <source>Bold</source> + <translation>Polkrepko</translation> + </message> + <message> + <location line="+1"/> + <source>CTRL+B</source> + <translation>Ctrl+B</translation> + </message> + <message> + <location line="+5"/> + <source>Italic</source> + <translation>Ležeče</translation> + </message> + <message> + <location line="+1"/> + <source>CTRL+I</source> + <translation>CTRL+I</translation> + </message> + <message> + <location line="+5"/> + <source>Underline</source> + <translation>Podčrtano</translation> + </message> + <message> + <location line="+1"/> + <source>CTRL+U</source> + <translation>CTRL+U</translation> + </message> + <message> + <location line="+13"/> + <source>Left Align</source> + <translation>Poravnaj levo</translation> + </message> + <message> + <location line="+5"/> + <source>Center</source> + <translation>Na sredino</translation> + </message> + <message> + <location line="+5"/> + <source>Right Align</source> + <translation>Poravnaj desno</translation> + </message> + <message> + <location line="+5"/> + <source>Justify</source> + <translation>Obojestransko</translation> + </message> + <message> + <location line="+9"/> + <source>Superscript</source> + <translation>Nadpisano</translation> + </message> + <message> + <location line="+6"/> + <source>Subscript</source> + <translation>Podpisano</translation> + </message> + <message> + <location line="+9"/> + <source>Insert &Link</source> + <translation>Vstavi &povezavo</translation> + </message> + <message> + <location line="+5"/> + <source>Insert &Image</source> + <translation>Vstavi &sliko</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ScriptDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="+66"/> + <source>Edit script</source> + <translation>Uredi skript</translation> + </message> + <message> + <location line="+5"/> + <source><html>Enter a Qt Script snippet to be executed while loading the form.<br>The widget and its children are accessible via the variables <i>widget</i> and <i>childWidgets</i>, respectively.</source> + <translation><html>Vnesite delček Qt Scripta, ki bo izveden med nalaganjem obrazca.<br>Gradnik in njegovi podgradniki so dostopni prek spremenljivk <i>widget</i> in <i>childWidgets</i>.</translation> + </message> + <message> + <location line="+51"/> + <source>Syntax error</source> + <translation>Skladenjska napaka</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ScriptErrorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="+27"/> + <source>Script errors</source> + <translation>Napake v skriptu</translation> + </message> +</context> +<context> + <name>qdesigner_internal::SignalSlotDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="+199"/> + <source>There is already a slot with the signature '%1'.</source> + <translation>Reža z odtisom »%1« že obstaja.</translation> + </message> + <message> + <location line="+5"/> + <source>There is already a signal with the signature '%1'.</source> + <translation>Signal z odtisom »%1« že obstaja.</translation> + </message> + <message> + <location line="+7"/> + <source>%1 - Duplicate Signature</source> + <translation>%1 - podvojen odtis</translation> + </message> + <message> + <location line="+21"/> + <location line="+76"/> + <source>Signals/Slots of %1</source> + <translation>Signali/reže od %1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::SignalSlotEditorPlugin</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="+72"/> + <source>Edit Signals/Slots</source> + <translation>Urejanje signalov/rež</translation> + </message> + <message> + <location line="+2"/> + <source>F4</source> + <translation>F4</translation> + </message> +</context> +<context> + <name>qdesigner_internal::SignalSlotEditorTool</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp" line="+58"/> + <source>Edit Signals/Slots</source> + <translation>Urejanje signalov/rež</translation> + </message> +</context> +<context> + <name>qdesigner_internal::StatusBarTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/toolbar_taskmenu.cpp" line="+81"/> + <source>Remove</source> + <translation>Odstrani</translation> + </message> +</context> +<context> + <name>qdesigner_internal::StringListEditorButton</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditorbutton.cpp" line="+56"/> + <source>Change String List</source> + <translation>Spreminjanje seznama nizov</translation> + </message> +</context> +<context> + <name>qdesigner_internal::StyleSheetEditorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="+97"/> + <source>Edit Style Sheet</source> + <translation>Urejanje slogovne predloge</translation> + </message> + <message> + <location line="-7"/> + <location line="+280"/> + <source>Valid Style Sheet</source> + <translation>Veljavna slogovna predloga</translation> + </message> + <message> + <location line="-278"/> + <source>Add Resource...</source> + <translation>Dodaj vir ...</translation> + </message> + <message> + <location line="+1"/> + <source>Add Gradient...</source> + <translation>Dodaj preliv ...</translation> + </message> + <message> + <location line="+1"/> + <source>Add Color...</source> + <translation>Dodaj barvo ...</translation> + </message> + <message> + <location line="+1"/> + <source>Add Font...</source> + <translation>Dodaj pisavo ...</translation> + </message> + <message> + <location line="+278"/> + <source>Invalid Style Sheet</source> + <translation>Neveljavna slogovna predloga</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TabOrderEditor</name> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="+363"/> + <source>Start from Here</source> + <translation>Začni od tu</translation> + </message> + <message> + <location line="+3"/> + <source>Restart</source> + <translation>Začni znova</translation> + </message> + <message> + <location line="+2"/> + <source>Tab Order List...</source> + <translation>Seznam vrstnega reda tabulatorke ...</translation> + </message> + <message> + <location line="+44"/> + <source>Tab Order List</source> + <translation>Seznam vrstnega reda tabulatorke</translation> + </message> + <message> + <location line="+1"/> + <source>Tab Order</source> + <translation>Vrstni red tabulatorke</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TabOrderEditorPlugin</name> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_plugin.cpp" line="+73"/> + <source>Edit Tab Order</source> + <translation>Urejanje vrstnega reda tabulatorke</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TabOrderEditorTool</name> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_tool.cpp" line="+57"/> + <source>Edit Tab Order</source> + <translation>Urejanja vrstnega reda tabulatorke</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TableWidgetEditor</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="+67"/> + <source>New Column</source> + <translation>Nov stolpec</translation> + </message> + <message> + <location line="+3"/> + <source>New Row</source> + <translation>Nova vrstica</translation> + </message> + <message> + <location line="+8"/> + <source>&Columns</source> + <translation>&Stolpci</translation> + </message> + <message> + <location line="+1"/> + <source>&Rows</source> + <translation>&Vrstice</translation> + </message> + <message> + <location line="+137"/> + <source>Properties &<<</source> + <translation>Lastnosti &<<</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui"/> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="+2"/> + <source>Properties &>></source> + <translation>Lastnosti &>></translation> + </message> + <message> + <location/> + <source>Edit Table Widget</source> + <translation>Urejanje gradnika s tabelo</translation> + </message> + <message> + <location/> + <source>&Items</source> + <translation>&Postavke</translation> + </message> + <message> + <location/> + <source>Table Items</source> + <translation>Postavke v tabeli</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TableWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp" line="+64"/> + <source>Edit Items...</source> + <translation>Uredi postavke ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TemplateOptionsWidget</name> + <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="-18"/> + <source>Pick a directory to save templates in</source> + <translation>Izberite mapo za shranjevanje predlog</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location/> + <source>Additional Template Paths</source> + <translation>Dodatne poti za predloge</translation> + </message> + <message> + <location/> + <source>...</source> + <translation>...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TextEditTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="+59"/> + <source>Change HTML...</source> + <translation>Spremeni HTML ...</translation> + </message> + <message> + <location line="-1"/> + <source>Edit HTML</source> + <translation>Urejanje HTML-ja</translation> + </message> + <message> + <location line="+10"/> + <source>Edit Text</source> + <translation>Urejanje besedila</translation> + </message> + <message> + <location line="+1"/> + <source>Change Plain Text...</source> + <translation>Spremeni navadno besedilo ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TextEditor</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="-204"/> + <source>Choose Resource...</source> + <translation>Izberi vir ...</translation> + </message> + <message> + <location line="+1"/> + <source>Choose File...</source> + <translation>Izberi datoteko ...</translation> + </message> + <message> + <location line="+123"/> + <source>Choose a File</source> + <translation>Izbiranje datoteke</translation> + </message> + <message> + <location line="-118"/> + <source>...</source> + <translation>...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ToolBarEventFilter</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="+234"/> + <source>Insert Separator</source> + <translation>Vstavi ločitelja</translation> + </message> + <message> + <location line="-65"/> + <source>Remove action '%1'</source> + <translation>Odstrani dejanje »%1«</translation> + </message> + <message> + <location line="+7"/> + <source>Remove Toolbar '%1'</source> + <translation>Odstrani orodjarno »%1«</translation> + </message> + <message> + <location line="-28"/> + <source>Insert Separator before '%1'</source> + <translation>Vstavi ločitelja pred »%1«</translation> + </message> + <message> + <location line="+9"/> + <source>Append Separator</source> + <translation>Dodaj ločitelja</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TreeWidgetEditor</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+76"/> + <source>&Columns</source> + <translation>&Stolpci</translation> + </message> + <message> + <location line="+69"/> + <source>Per column properties</source> + <translation>Lastnosti za stolpec</translation> + </message> + <message> + <location line="+1"/> + <source>Common properties</source> + <translation>Skupne lastnosti</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+53"/> + <source>New Item</source> + <translation>Nova postavka</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+194"/> + <source>Properties &<<</source> + <translation>Lastnosti &<<</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+2"/> + <source>Properties &>></source> + <translation>Lastnosti &>></translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="-327"/> + <source>New Column</source> + <translation>Nov stolpec</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/> + <source>Edit Tree Widget</source> + <translation>Urejanje gradnika z drevesom</translation> + </message> + <message> + <location/> + <source>&Items</source> + <translation>&Postavke</translation> + </message> + <message> + <location/> + <source>Tree Items</source> + <translation>Postavke v drevesu</translation> + </message> + <message> + <location/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+150"/> + <source>New Subitem</source> + <translation>Nova podpostavka</translation> + </message> + <message> + <location/> + <source>New &Subitem</source> + <translation>Nova &podpostavka</translation> + </message> + <message> + <location/> + <source>Delete Item</source> + <translation>Zbriši postavko</translation> + </message> + <message> + <location/> + <source>Move Item Left (before Parent Item)</source> + <translation>Premakni postavko levo (pred matično postavko)</translation> + </message> + <message> + <location/> + <source>L</source> + <translation>L</translation> + </message> + <message> + <location/> + <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source> + <translation>Premakni postavko desno (kot prvo podpostavko sledeče postavke)</translation> + </message> + <message> + <location/> + <source>R</source> + <translation>E</translation> + </message> + <message> + <location/> + <source>Move Item Up</source> + <translation>Premakni postavko gor</translation> + </message> + <message> + <location/> + <source>U</source> + <translation>G</translation> + </message> + <message> + <location/> + <source>Move Item Down</source> + <translation>Premakni postavko dol</translation> + </message> + <message> + <location/> + <source>D</source> + <translation>D</translation> + </message> + <message> + <location/> + <source>1</source> + <translation>1</translation> + </message> + <message> + <location/> + <source>&New</source> + <translation>&Nova</translation> + </message> + <message> + <location/> + <source>&Delete</source> + <translation>&Zbriši</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TreeWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp" line="+63"/> + <source>Edit Items...</source> + <translation>Uredi postavke ...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetBox</name> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetbox_dnditem.cpp" line="+115"/> + <source>Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML.</source> + <translation>Opozorilo: ustvarjanje gradnika v podoknu z gradniki ni uspelo. Za to je morda kriv neveljaven XML gradnika po meri.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetBoxTreeWidget</name> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="-268"/> + <source>Scratchpad</source> + <translation>Beležnica</translation> + </message> + <message> + <location line="+370"/> + <source>Custom Widgets</source> + <translation>Gradniki po meri</translation> + </message> + <message> + <location line="+263"/> + <source>Expand all</source> + <translation>Razširi vse</translation> + </message> + <message> + <location line="+1"/> + <source>Collapse all</source> + <translation>Skrči vse</translation> + </message> + <message> + <location line="+3"/> + <source>List View</source> + <translation>Prikaz seznama</translation> + </message> + <message> + <location line="+1"/> + <source>Icon View</source> + <translation>Prikaz ikon</translation> + </message> + <message> + <location line="+15"/> + <source>Remove</source> + <translation>Odstrani</translation> + </message> + <message> + <location line="+2"/> + <source>Edit name</source> + <translation>Urejanje imena</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetDataBase</name> + <message> + <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="-411"/> + <source>A custom widget plugin whose class name (%1) matches that of an existing class has been found.</source> + <translation>Najden je bil vstavek gradnika po meri, katerega ime (%1) je enako imenu obstoječega razreda.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetEditorTool</name> + <message> + <location filename="../tools/designer/src/components/formeditor/tool_widgeteditor.cpp" line="+67"/> + <source>Edit Widgets</source> + <translation>Urejanje gradnikov</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetFactory</name> + <message> + <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="+263"/> + <source>The custom widget factory registered for widgets of class %1 returned 0.</source> + <translation>Tovarna gradnikov po meri, ki je registrirana za gradnike razreda %1, je vrnila 0.</translation> + </message> + <message> + <location line="+44"/> + <source>A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2.</source> + <translation>Med ustvarjanjem gradnika z uporabo tovarne gradnikov po meri, ki je registrirana za gradnike razreda %1, je prišlo do neujemanja v imenu razreda. Tovarna je vrnila gradnik razreda %2.</translation> + </message> + <message> + <location line="+99"/> + <source>%1 Widget</source> + <translation>Gradnik %1</translation> + </message> + <message> + <location line="+90"/> + <source>The current page of the container '%1' (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget.</source> + <translation>Trenutne strani vsebnika »%1« (%2) med dodajanjem razporeda ni bilo moč določiti. To nakazuje na neskladnost v datoteki *.ui. Verjetno je na vsebovalnem gradniku zgrajen razpored.</translation> + </message> + <message> + <location line="+53"/> + <source>Attempt to add a layout to a widget '%1' (%2) which already has an unmanaged layout of type %3. +This indicates an inconsistency in the ui-file.</source> + <translation>Poskus dodajanja razporeda gradniku »%1« (%2), ki že ima neupravljan razpored vrste %3. +To nakazuje na neskladnost v datoteki *.ui.</translation> + </message> + <message> + <location line="+211"/> + <source>Cannot create style '%1'.</source> + <translation>Ni moč ustvariti sloga »%1«.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WizardContainerWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="-49"/> + <source>Next</source> + <translation>Naprej</translation> + </message> + <message> + <location line="+1"/> + <source>Back</source> + <translation>Nazaj</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ZoomMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/zoomwidget.cpp" line="+84"/> + <source>%1 %</source> + <extracomment>Zoom factor</extracomment> + <translation>%1 %</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ZoomablePreviewDeviceSkin</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="-270"/> + <source>&Zoom</source> + <translation>&Povečava</translation> + </message> +</context> +</TS> diff --git a/translations/qt_sl.ts b/translations/qt_sl.ts new file mode 100644 index 0000000..517ce71 --- /dev/null +++ b/translations/qt_sl.ts @@ -0,0 +1,10037 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="sl"> +<context> + <name>CloseButton</name> + <message> + <location filename="../src/gui/widgets/qtabbar.cpp" line="+2245"/> + <source>Close Tab</source> + <translation>Zapri zavihek</translation> + </message> +</context> +<context> + <name>FakeReply</name> + <message> + <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2191"/> + <source>Fake error !</source> + <translation>Lažna napaka.</translation> + </message> + <message> + <location line="+3"/> + <source>Invalid URL</source> + <translation>Neveljaven URL</translation> + </message> +</context> +<context> + <name>InputPrivate</name> + <message> + <location filename="../src/multimedia/audio/qaudioinput_alsa_p.cpp" line="+653"/> + <source>PUSH: read in bytes = %1 (frames=%2)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Phonon::</name> + <message> + <location filename="../src/3rdparty/phonon/phonon/phononnamespace.cpp" line="+55"/> + <source>Notifications</source> + <translation>Obvestila</translation> + </message> + <message> + <location line="+2"/> + <source>Music</source> + <translation>Glasba</translation> + </message> + <message> + <location line="+2"/> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <location line="+2"/> + <source>Communication</source> + <translation>Komunikacija</translation> + </message> + <message> + <location line="+2"/> + <source>Games</source> + <translation>Igre</translation> + </message> + <message> + <location line="+2"/> + <source>Accessibility</source> + <translation>Dostopnost</translation> + </message> +</context> +<context> + <name>Phonon::AudioOutput</name> + <message> + <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+377"/> + <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> + <translation><html>Naprava za predvajanje zvoka <b>%1</b> ne deluje.<br/>Preklapljanje na <b>%2</b>.</html></translation> + </message> + <message> + <location line="+13"/> + <source><html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html></source> + <translation><html>Preklapljanje na napravo za predvajanje zvoka <b>%1</b>,<br/>ki je ravnokar postala dostopna in ima višjo preferenco.</html></translation> + </message> + <message> + <location line="+3"/> + <source>Revert back to device '%1'</source> + <translation>Povrni nazaj na napravo »%1«</translation> + </message> +</context> +<context> + <name>Phonon::Gstreamer::Backend</name> + <message> + <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+171"/> + <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled.</source> + <translation>Opozorilo: kot kaže paket gstreamer0.10-plugins-good ni nameščen. + Nekatere možnosti predvajanja videa so onemogočene.</translation> + </message> + <message> + <location line="+5"/> + <source>Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled</source> + <translation>Opozorilo: kot kaže osnovni vstavki za GStreamer niso nameščeni. + Vsa podpora za zvok in video je onemogočena.</translation> + </message> +</context> +<context> + <name>Phonon::Gstreamer::MediaObject</name> + <message> + <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/> + <source>Cannot start playback. + +Check your Gstreamer installation and make sure you +have libgstreamer-plugins-base installed.</source> + <translation>Ni moč začeti predvajanja. + +Preverite namestitev GStreamerja in se prepričajte, +da je nameščen paket libgstreamer-plugins-base.</translation> + </message> + <message> + <location line="+113"/> + <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source> + <translation>Manjka potreben kodek. Za predvajanje te vsebine morate namestiti sledeče kodeke: %0</translation> + </message> + <message> + <location line="+676"/> + <location line="+8"/> + <location line="+15"/> + <location line="+9"/> + <location line="+6"/> + <location line="+19"/> + <location line="+339"/> + <location line="+24"/> + <source>Could not open media source.</source> + <translation>Ni moč odpreti večpredstavnostnega vira.</translation> + </message> + <message> + <location line="-407"/> + <source>Invalid source type.</source> + <translation>Neveljavna vrsta vira.</translation> + </message> + <message> + <location line="+381"/> + <source>Could not locate media source.</source> + <translation>Ni moč najti večpredstavnostnega vira.</translation> + </message> + <message> + <location line="+10"/> + <source>Could not open audio device. The device is already in use.</source> + <translation>Ni moč odpreti zvočne naprave. Naprava je že v uporabi.</translation> + </message> + <message> + <location line="+13"/> + <source>Could not decode media source.</source> + <translation>Ni moč dekodirati večpredstavnostnega vira.</translation> + </message> +</context> +<context> + <name>Phonon::MMF::AudioEqualizer</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+70"/> + <source>Frequency band, %1 Hz</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Phonon::VolumeSlider</name> + <message> + <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+42"/> + <location line="+18"/> + <location line="+129"/> + <location line="+15"/> + <source>Volume: %1%</source> + <translation>Glasnost: %1 %</translation> + </message> + <message> + <location line="-159"/> + <location line="+18"/> + <location line="+54"/> + <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> + <translation>Uporabite ta drsnik, da nastavite glasnost. Skrajno levi položaj je 0 %, skrajno desni pa %1 %.</translation> + </message> + <message> + <location line="+67"/> + <source>Muted</source> + <translation>Utišan</translation> + </message> +</context> +<context> + <name>Q3Accel</name> + <message> + <location filename="../src/qt3support/other/q3accel.cpp" line="+481"/> + <source>%1, %2 not defined</source> + <translation>%1, %2 ni definiran</translation> + </message> + <message> + <location line="+36"/> + <source>Ambiguous %1 not handled</source> + <translation>Brez rokovanja z dvoumnim %1</translation> + </message> +</context> +<context> + <name>Q3DataTable</name> + <message> + <location filename="../src/qt3support/sql/q3datatable.cpp" line="+285"/> + <source>True</source> + <translation>Pravilno</translation> + </message> + <message> + <location line="+1"/> + <source>False</source> + <translation>Napačno</translation> + </message> + <message> + <location line="+505"/> + <source>Insert</source> + <translation>Vstavi</translation> + </message> + <message> + <location line="+1"/> + <source>Update</source> + <translation>Posodobi</translation> + </message> + <message> + <location line="+1"/> + <source>Delete</source> + <translation>Izbriši</translation> + </message> +</context> +<context> + <name>Q3FileDialog</name> + <message> + <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+829"/> + <source>Copy or Move a File</source> + <translation>Skopiraj ali premakni datoteko</translation> + </message> + <message> + <location line="+8"/> + <source>Read: %1</source> + <translation>Branje: %1</translation> + </message> + <message> + <location line="+6"/> + <location line="+30"/> + <source>Write: %1</source> + <translation>Pisanje: %1</translation> + </message> + <message> + <location line="-22"/> + <location line="+1579"/> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> + <message> + <location line="-157"/> + <location line="+49"/> + <location line="+2149"/> + <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+112"/> + <source>All Files (*)</source> + <translation>Vse datoteke (*)</translation> + </message> + <message> + <location line="-2085"/> + <source>Name</source> + <translation>Ime</translation> + </message> + <message> + <location line="+1"/> + <source>Size</source> + <translation>Velikost</translation> + </message> + <message> + <location line="+2"/> + <source>Type</source> + <translation>Vrsta</translation> + </message> + <message> + <location line="+1"/> + <source>Date</source> + <translation>Datum</translation> + </message> + <message> + <location line="+1"/> + <source>Attributes</source> + <translation>Lastnosti</translation> + </message> + <message> + <location line="+35"/> + <location line="+2027"/> + <source>&OK</source> + <translation>&V redu</translation> + </message> + <message> + <location line="-1987"/> + <source>Look &in:</source> + <translation>Išči &v:</translation> + </message> + <message> + <location line="+1"/> + <location line="+1977"/> + <location line="+16"/> + <source>File &name:</source> + <translation>Ime &datoteke:</translation> + </message> + <message> + <location line="-1992"/> + <source>File &type:</source> + <translation>&Vrsta datoteke:</translation> + </message> + <message> + <location line="+7"/> + <source>Back</source> + <translation>Nazaj</translation> + </message> + <message> + <location line="+7"/> + <source>One directory up</source> + <translation>Za eno mapo navzgor</translation> + </message> + <message> + <location line="+9"/> + <source>Create New Folder</source> + <translation>Ustvari novo mapo</translation> + </message> + <message> + <location line="+18"/> + <source>List View</source> + <translation>Prikaz seznama</translation> + </message> + <message> + <location line="+8"/> + <source>Detail View</source> + <translation>Prikaz podrobnosti</translation> + </message> + <message> + <location line="+9"/> + <source>Preview File Info</source> + <translation>Podatki ogleda datoteke</translation> + </message> + <message> + <location line="+19"/> + <source>Preview File Contents</source> + <translation>Vsebina ogleda datoteke</translation> + </message> + <message> + <location line="+88"/> + <source>Read-write</source> + <translation>Branje in pisanje</translation> + </message> + <message> + <location line="+1"/> + <source>Read-only</source> + <translation>Samo za branje</translation> + </message> + <message> + <location line="+1"/> + <source>Write-only</source> + <translation>Samo za pisanje</translation> + </message> + <message> + <location line="+1"/> + <source>Inaccessible</source> + <translation>Nedostopno</translation> + </message> + <message> + <location line="+2"/> + <source>Symlink to File</source> + <translation>Simbolna povezava do datoteke</translation> + </message> + <message> + <location line="+1"/> + <source>Symlink to Directory</source> + <translation>Simbolna povezava do mape</translation> + </message> + <message> + <location line="+1"/> + <source>Symlink to Special</source> + <translation>Simbolna povezava do posebnega</translation> + </message> + <message> + <location line="+1"/> + <source>File</source> + <translation>Datoteka</translation> + </message> + <message> + <location line="+1"/> + <source>Dir</source> + <translation>Mapa</translation> + </message> + <message> + <location line="+1"/> + <source>Special</source> + <translation>Posebno</translation> + </message> + <message> + <location line="+704"/> + <location line="+1999"/> + <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+209"/> + <source>Open</source> + <translation>Odpri</translation> + </message> + <message> + <location line="-1889"/> + <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+71"/> + <source>Save As</source> + <translation>Shrani kot</translation> + </message> + <message> + <location line="+642"/> + <location line="+5"/> + <location line="+355"/> + <source>&Open</source> + <translation>&Odpri</translation> + </message> + <message> + <location line="-357"/> + <location line="+341"/> + <source>&Save</source> + <translation>&Shrani</translation> + </message> + <message> + <location line="-334"/> + <source>&Rename</source> + <translation>Pre&imenuj</translation> + </message> + <message> + <location line="+1"/> + <source>&Delete</source> + <translation>&Izbriši</translation> + </message> + <message> + <location line="+20"/> + <source>R&eload</source> + <translation>&Znova naloži</translation> + </message> + <message> + <location line="+4"/> + <source>Sort by &Name</source> + <translation>Razvrsti po &imenu</translation> + </message> + <message> + <location line="+2"/> + <source>Sort by &Size</source> + <translation>Razvrsti po &velikosti</translation> + </message> + <message> + <location line="+1"/> + <source>Sort by &Date</source> + <translation>Razvrsti po &datumu</translation> + </message> + <message> + <location line="+2"/> + <source>&Unsorted</source> + <translation>&Brez razvrščanja</translation> + </message> + <message> + <location line="+15"/> + <source>Sort</source> + <translation>Razvrsti</translation> + </message> + <message> + <location line="+4"/> + <source>Show &hidden files</source> + <translation>Prikaži &skrite datoteke</translation> + </message> + <message> + <location line="+31"/> + <source>the file</source> + <translation>datoteko</translation> + </message> + <message> + <location line="+2"/> + <source>the directory</source> + <translation>mapo</translation> + </message> + <message> + <location line="+2"/> + <source>the symlink</source> + <translation>simbolno povezavo</translation> + </message> + <message> + <location line="+3"/> + <source>Delete %1</source> + <translation>Izbriši %1</translation> + </message> + <message> + <location line="+1"/> + <source><qt>Are you sure you wish to delete %1 "%2"?</qt></source> + <translation><qt>Ali res želite izbrisati %1 »%2«?</qt></translation> + </message> + <message> + <location line="+2"/> + <source>&Yes</source> + <translation>&Da</translation> + </message> + <message> + <location line="+0"/> + <source>&No</source> + <translation>&Ne</translation> + </message> + <message> + <location line="+36"/> + <source>New Folder 1</source> + <translation>Nova mapa 1</translation> + </message> + <message> + <location line="+5"/> + <source>New Folder</source> + <translation>Nova mapa</translation> + </message> + <message> + <location line="+5"/> + <source>New Folder %1</source> + <translation>Nova mapa %1</translation> + </message> + <message> + <location line="+98"/> + <source>Find Directory</source> + <translation>Najdi mapo</translation> + </message> + <message> + <location line="+5"/> + <location line="+108"/> + <source>Directories</source> + <translation>Mape</translation> + </message> + <message> + <location line="-2"/> + <source>Directory:</source> + <translation>Mapa:</translation> + </message> + <message> + <location line="+40"/> + <location line="+1009"/> + <source>Error</source> + <translation>Napaka</translation> + </message> + <message> + <location line="-1008"/> + <source>%1 +File not found. +Check path and filename.</source> + <translation>%1 +Datoteke ni moč najti. +Preverite pot in ime datoteke.</translation> + </message> + <message> + <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="-191"/> + <source>All Files (*.*)</source> + <translation>Vse datoteke (*.*)</translation> + </message> + <message> + <location line="+264"/> + <source>Open </source> + <translation>Odpri </translation> + </message> + <message> + <location line="+107"/> + <source>Select a Directory</source> + <translation>Izberite mapo</translation> + </message> +</context> +<context> + <name>Q3LocalFs</name> + <message> + <location filename="../src/qt3support/network/q3localfs.cpp" line="+130"/> + <location line="+10"/> + <source>Could not read directory +%1</source> + <translation>Ni bilo moč brati mape +%1</translation> + </message> + <message> + <location line="+45"/> + <source>Could not create directory +%1</source> + <translation>Ni bilo moč ustvariti mape +%1</translation> + </message> + <message> + <location line="+34"/> + <source>Could not remove file or directory +%1</source> + <translation>Ni bilo moč odstraniti datoteke ali mape +%1</translation> + </message> + <message> + <location line="+27"/> + <source>Could not rename +%1 +to +%2</source> + <translation>Ni bilo moč preimenovati +%1 +v +%2</translation> + </message> + <message> + <location line="+25"/> + <source>Could not open +%1</source> + <translation>Ni moč odpreti +%1</translation> + </message> + <message> + <location line="+68"/> + <source>Could not write +%1</source> + <translation>Ni bilo moč zapisati +%1</translation> + </message> +</context> +<context> + <name>Q3MainWindow</name> + <message> + <location filename="../src/qt3support/widgets/q3mainwindow.cpp" line="+2051"/> + <source>Line up</source> + <translation>V vrsto</translation> + </message> + <message> + <location line="+2"/> + <source>Customize...</source> + <translation>Prilagodi ...</translation> + </message> +</context> +<context> + <name>Q3NetworkProtocol</name> + <message> + <location filename="../src/qt3support/network/q3networkprotocol.cpp" line="+854"/> + <source>Operation stopped by the user</source> + <translation>Dejanje zaustavil uporabnik</translation> + </message> +</context> +<context> + <name>Q3ProgressDialog</name> + <message> + <location filename="../src/qt3support/dialogs/q3progressdialog.cpp" line="+224"/> + <location line="+61"/> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> +</context> +<context> + <name>Q3TabDialog</name> + <message> + <location filename="../src/qt3support/dialogs/q3tabdialog.cpp" line="+190"/> + <location line="+824"/> + <source>OK</source> + <translation>V redu</translation> + </message> + <message> + <location line="-366"/> + <source>Apply</source> + <translation>Uveljavi</translation> + </message> + <message> + <location line="+43"/> + <source>Help</source> + <translation>Pomoč</translation> + </message> + <message> + <location line="+45"/> + <source>Defaults</source> + <translation>Privzetosti</translation> + </message> + <message> + <location line="+50"/> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> +</context> +<context> + <name>Q3TextEdit</name> + <message> + <location filename="../src/qt3support/text/q3textedit.cpp" line="+5429"/> + <source>&Undo</source> + <translation>&Razveljavi</translation> + </message> + <message> + <location line="+1"/> + <source>&Redo</source> + <translation>&Uveljavi</translation> + </message> + <message> + <location line="+5"/> + <source>Cu&t</source> + <translation>&Izreži</translation> + </message> + <message> + <location line="+1"/> + <source>&Copy</source> + <translation>S&kopiraj</translation> + </message> + <message> + <location line="+2"/> + <source>&Paste</source> + <translation>Pri&lepi</translation> + </message> + <message> + <location line="+3"/> + <source>Clear</source> + <translation>Počisti</translation> + </message> + <message> + <location line="+4"/> + <location line="+2"/> + <source>Select All</source> + <translation>Izberi vse</translation> + </message> +</context> +<context> + <name>Q3TitleBar</name> + <message> + <location filename="../src/plugins/accessible/compat/q3complexwidgets.cpp" line="+246"/> + <source>System</source> + <translation>Sistem</translation> + </message> + <message> + <location line="+3"/> + <source>Restore up</source> + <translation>Obnovi</translation> + </message> + <message> + <location line="+1"/> + <source>Minimize</source> + <translation>Pomanjšaj</translation> + </message> + <message> + <location line="+3"/> + <source>Restore down</source> + <translation>Obnovi</translation> + </message> + <message> + <location line="+1"/> + <source>Maximize</source> + <translation>Razpni</translation> + </message> + <message> + <location line="+2"/> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <location line="+18"/> + <source>Contains commands to manipulate the window</source> + <translation>Vsebuje ukaze za upravljanje z oknom</translation> + </message> + <message> + <location line="+3"/> + <source>Puts a minimized window back to normal</source> + <translation>Obnovi pomanjšano okno na običajno velikost</translation> + </message> + <message> + <location line="+1"/> + <source>Moves the window out of the way</source> + <translation>Umakne okno, da ni v napoto</translation> + </message> + <message> + <location line="+3"/> + <source>Puts a maximized window back to normal</source> + <translation>Obnovi razpeto okno</translation> + </message> + <message> + <location line="+1"/> + <source>Makes the window full screen</source> + <translation>Razpne okno čez ves zaslon</translation> + </message> + <message> + <location line="+2"/> + <source>Closes the window</source> + <translation>Zapre okno</translation> + </message> + <message> + <location line="+2"/> + <source>Displays the name of the window and contains controls to manipulate it</source> + <translation>Prikazuje ime okna in vsebuje gumbe za nadzor okna</translation> + </message> +</context> +<context> + <name>Q3ToolBar</name> + <message> + <location filename="../src/qt3support/widgets/q3toolbar.cpp" line="+692"/> + <source>More...</source> + <translation>Več ...</translation> + </message> +</context> +<context> + <name>Q3UrlOperator</name> + <message> + <location filename="../src/qt3support/network/q3urloperator.cpp" line="+386"/> + <location line="+260"/> + <location line="+4"/> + <source>The protocol `%1' is not supported</source> + <translation>Protokol »%1« ni podprt.</translation> + </message> + <message> + <location line="-260"/> + <source>The protocol `%1' does not support listing directories</source> + <translation>Protokol »%1« ne podpira izpisa seznama map.</translation> + </message> + <message> + <location line="+3"/> + <source>The protocol `%1' does not support creating new directories</source> + <translation>Protokol »%1« ne podpira ustvarjanja novih map.</translation> + </message> + <message> + <location line="+3"/> + <source>The protocol `%1' does not support removing files or directories</source> + <translation>Protokol »%1« ne podpira odstranjevanja datotek ali map.</translation> + </message> + <message> + <location line="+3"/> + <source>The protocol `%1' does not support renaming files or directories</source> + <translation>Protokol »%1« ne podpira preimenovanja datotek ali map.</translation> + </message> + <message> + <location line="+3"/> + <source>The protocol `%1' does not support getting files</source> + <translation>Protokol »%1« ne podpira prejemanja datotek.</translation> + </message> + <message> + <location line="+3"/> + <source>The protocol `%1' does not support putting files</source> + <translation>Protokol »%1« ne podpira pošiljanja datotek.</translation> + </message> + <message> + <location line="+243"/> + <location line="+4"/> + <source>The protocol `%1' does not support copying or moving files or directories</source> + <translation>Protokol »%1« ne podpira kopiranja ali premikanja datotek ali map.</translation> + </message> + <message> + <location line="+237"/> + <location line="+1"/> + <source>(unknown)</source> + <translation>(neznano)</translation> + </message> +</context> +<context> + <name>Q3Wizard</name> + <message> + <location filename="../src/qt3support/dialogs/q3wizard.cpp" line="+177"/> + <source>&Cancel</source> + <translation>&Prekliči</translation> + </message> + <message> + <location line="+1"/> + <source>< &Back</source> + <translation>< Na&zaj</translation> + </message> + <message> + <location line="+1"/> + <source>&Next ></source> + <translation>&Naprej ></translation> + </message> + <message> + <location line="+1"/> + <source>&Finish</source> + <translation>&Končaj</translation> + </message> + <message> + <location line="+1"/> + <source>&Help</source> + <translation>&Pomoč</translation> + </message> +</context> +<context> + <name>QAbstractSocket</name> + <message> + <location filename="../src/network/socket/qabstractsocket.cpp" line="+890"/> + <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+633"/> + <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+661"/> + <location line="+26"/> + <source>Host not found</source> + <translation>Ni moč najti gostitelja</translation> + </message> + <message> + <location line="+50"/> + <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+3"/> + <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+4"/> + <source>Connection refused</source> + <translation>Povezava je zavrnjena</translation> + </message> + <message> + <location line="+142"/> + <source>Connection timed out</source> + <translation>Čas za povezavo je potekel</translation> + </message> + <message> + <location line="-548"/> + <location line="+789"/> + <location line="+208"/> + <source>Operation on socket is not supported</source> + <translation>Dejanje na vtičnici ni podprto</translation> + </message> + <message> + <location line="+187"/> + <source>Socket operation timed out</source> + <translation>Čas za dejanje na vtičnici je potekel</translation> + </message> + <message> + <location line="+380"/> + <source>Socket is not connected</source> + <translation>Vtičnica ni povezana.</translation> + </message> + <message> + <location filename="../src/network/socket/qsocks5socketengine.cpp" line="-8"/> + <source>Network unreachable</source> + <translation>Omrežje ni dosegljivo</translation> + </message> +</context> +<context> + <name>QAbstractSpinBox</name> + <message> + <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1217"/> + <source>&Step up</source> + <translation>Korak &gor</translation> + </message> + <message> + <location line="+2"/> + <source>Step &down</source> + <translation>Korak &dol</translation> + </message> + <message> + <location line="-8"/> + <source>&Select All</source> + <translation>Izberi &vse</translation> + </message> +</context> +<context> + <name>QApplication</name> + <message> + <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/> + <source>Activate</source> + <translation>Aktiviraj</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qmessagebox.h" line="+354"/> + <source>Executable '%1' requires Qt %2, found Qt %3.</source> + <translation>Izvršljiva datoteka »%1« potrebuje Qt %2, najden pa je bil Qt %3.</translation> + </message> + <message> + <location line="+2"/> + <source>Incompatible Qt Library Error</source> + <translation>Napaka nezdružljivosti knjižnice Qt</translation> + </message> + <message> + <location filename="../src/gui/kernel/qapplication.cpp" line="+2306"/> + <source>QT_LAYOUT_DIRECTION</source> + <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> + <translation>LTR</translation> + </message> + <message> + <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+2"/> + <source>Activates the program's main window</source> + <translation>Aktivira glavno okno programa</translation> + </message> +</context> +<context> + <name>QAudioInputPrivate</name> + <message> + <location filename="../src/multimedia/audio/qaudioinput_alsa_p.cpp" line="-367"/> + <source>QAudioInput: snd_pcm_hw_params_any: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>QAudioInput: snd_pcm_hw_params_set_rate_resample: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioInput: snd_pcm_hw_params_set_access: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioInput: snd_pcm_hw_params_set_format: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioInput: snd_pcm_hw_params_set_channels: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioInput: snd_pcm_hw_params_set_rate_near: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioInput: snd_pcm_hw_params_set_buffer_time_near: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioInput: snd_pcm_hw_params_set_period_time_near: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioInput: snd_pcm_hw_params_set_periods_near: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioInput: snd_pcm_hw_params: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+98"/> + <source>PULL: read in bytes = %1 (frames=%2)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QAudioOutputPrivate</name> + <message> + <location filename="../src/multimedia/audio/qaudiooutput_alsa_p.cpp" line="+307"/> + <source>QAudioOutput: snd_pcm_hw_params_any: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>QAudioOutput: snd_pcm_hw_params_set_rate_resample: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioOutput: snd_pcm_hw_params_set_access: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioOutput: snd_pcm_hw_params_set_format: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioOutput: snd_pcm_hw_params_set_channels: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioOutput: snd_pcm_hw_params_set_rate_near: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioOutput: snd_pcm_hw_params_set_buffer_time_near: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioOutput: snd_pcm_hw_params_set_period_time_near: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioOutput: snd_pcm_hw_params_set_periods_near: err = %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>QAudioOutput: snd_pcm_hw_params: err = %1</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QAxSelect</name> + <message> + <location filename="../src/activeqt/container/qaxselect.ui"/> + <source>Select ActiveX Control</source> + <translation>Izberite kontrolnik ActiveX</translation> + </message> + <message> + <location/> + <source>OK</source> + <translation>V redu</translation> + </message> + <message> + <location/> + <source>&Cancel</source> + <translation>&Prekliči</translation> + </message> + <message> + <location/> + <source>COM &Object:</source> + <translation>&Objekt COM:</translation> + </message> +</context> +<context> + <name>QCheckBox</name> + <message> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+114"/> + <source>Uncheck</source> + <translation>Odznači</translation> + </message> + <message> + <location line="+3"/> + <source>Check</source> + <translation>Označi</translation> + </message> + <message> + <location line="+1"/> + <source>Toggle</source> + <translation>Preklopi</translation> + </message> +</context> +<context> + <name>QColorDialog</name> + <message> + <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1348"/> + <source>Hu&e:</source> + <translation>&Odtenek:</translation> + </message> + <message> + <location line="+1"/> + <source>&Sat:</source> + <translation>&Zasičenost:</translation> + </message> + <message> + <location line="+1"/> + <source>&Val:</source> + <translation>&Vrednost:</translation> + </message> + <message> + <location line="+1"/> + <source>&Red:</source> + <translation>&Rdeča:</translation> + </message> + <message> + <location line="+1"/> + <source>&Green:</source> + <translation>&Zelena:</translation> + </message> + <message> + <location line="+1"/> + <source>Bl&ue:</source> + <translation>&Modra:</translation> + </message> + <message> + <location line="+1"/> + <source>A&lpha channel:</source> + <translation>Kanal &alfa:</translation> + </message> + <message> + <location line="+101"/> + <source>Select Color</source> + <translation>Izberite barvo</translation> + </message> + <message> + <location line="+178"/> + <source>&Basic colors</source> + <translation>&Osnovne barve</translation> + </message> + <message> + <location line="+1"/> + <source>&Custom colors</source> + <translation>Barve po &meri</translation> + </message> + <message> + <location line="+1"/> + <source>&Add to Custom Colors</source> + <translation>&Dodaj lastnim barvam</translation> + </message> +</context> +<context> + <name>QComboBox</name> + <message> + <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1771"/> + <location line="+65"/> + <source>Open</source> + <translation>Odpri</translation> + </message> + <message> + <location filename="../src/gui/itemviews/qitemeditorfactory.cpp" line="+556"/> + <source>False</source> + <translation>Napačno</translation> + </message> + <message> + <location line="+1"/> + <source>True</source> + <translation>Pravilno</translation> + </message> + <message> + <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+0"/> + <source>Close</source> + <translation>Zapri</translation> + </message> +</context> +<context> + <name>QCoreApplication</name> + <message> + <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="+119"/> + <source>%1: key is empty</source> + <comment>QSystemSemaphore</comment> + <translation>%1: ključ je prazen</translation> + </message> + <message> + <location line="+12"/> + <source>%1: unable to make key</source> + <comment>QSystemSemaphore</comment> + <translation>%1: ni moč ustvariti ključa</translation> + </message> + <message> + <location line="+9"/> + <source>%1: ftok failed</source> + <comment>QSystemSemaphore</comment> + <translation>%1: funkcija ftok ni uspela</translation> + </message> + <message> + <location filename="../src/corelib/kernel/qsystemsemaphore_symbian.cpp" line="+65"/> + <source>%1: already exists</source> + <comment>QSystemSemaphore</comment> + <translation>%1: že obstaja</translation> + </message> + <message> + <location line="+4"/> + <source>%1: does not exist</source> + <comment>QSystemSemaphore</comment> + <translation type="unfinished">%1: ne obstaja</translation> + </message> + <message> + <location line="+5"/> + <source>%1: out of resources</source> + <comment>QSystemSemaphore</comment> + <translation>%1: zmanjkalo je virov</translation> + </message> + <message> + <location line="+4"/> + <source>%1: unknown error %2</source> + <comment>QSystemSemaphore</comment> + <translation>%1: neznana napaka %2</translation> + </message> +</context> +<context> + <name>QDB2Driver</name> + <message> + <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1254"/> + <source>Unable to connect</source> + <translation>Ni moč vzpostaviti povezave</translation> + </message> + <message> + <location line="+298"/> + <source>Unable to commit transaction</source> + <translation>Ni moč udejaniti transakcije</translation> + </message> + <message> + <location line="+17"/> + <source>Unable to rollback transaction</source> + <translation>Ni moč razveljaviti transakcije</translation> + </message> + <message> + <location line="+15"/> + <source>Unable to set autocommit</source> + <translation>Ni moč nastaviti samodejnega udejanjanja</translation> + </message> +</context> +<context> + <name>QDB2Result</name> + <message> + <location line="-1031"/> + <location line="+240"/> + <source>Unable to execute statement</source> + <translation>Ni moč izvesti izjave</translation> + </message> + <message> + <location line="-203"/> + <source>Unable to prepare statement</source> + <translation>Ni moč pripraviti izjave</translation> + </message> + <message> + <location line="+193"/> + <source>Unable to bind variable</source> + <translation>Ni moč prikleniti spremenljivke</translation> + </message> + <message> + <location line="+89"/> + <source>Unable to fetch record %1</source> + <translation>Ni moč pridobiti zapisa %1</translation> + </message> + <message> + <location line="+19"/> + <source>Unable to fetch next</source> + <translation>Ni moč pridobiti sledečega</translation> + </message> + <message> + <location line="+21"/> + <source>Unable to fetch first</source> + <translation>Ni moč pridobiti prvega</translation> + </message> +</context> +<context> + <name>QDateTimeEdit</name> + <message> + <location filename="../src/gui/widgets/qdatetimeedit.cpp" line="+2287"/> + <source>AM</source> + <translation>dop.</translation> + </message> + <message> + <location line="+0"/> + <source>am</source> + <translation>dop.</translation> + </message> + <message> + <location line="+2"/> + <source>PM</source> + <translation>pop.</translation> + </message> + <message> + <location line="+0"/> + <source>pm</source> + <translation>pop.</translation> + </message> +</context> +<context> + <name>QDial</name> + <message> + <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+951"/> + <source>QDial</source> + <translation>QDial</translation> + </message> + <message> + <location line="+2"/> + <source>SpeedoMeter</source> + <translation>SpeedoMeter</translation> + </message> + <message> + <location line="+2"/> + <source>SliderHandle</source> + <translation>SliderHandle</translation> + </message> +</context> +<context> + <name>QDialog</name> + <message> + <location filename="../src/gui/dialogs/qdialog.cpp" line="+636"/> + <source>What's This?</source> + <translation>Kaj je to?</translation> + </message> + <message> + <location line="-135"/> + <source>Done</source> + <translation>Opravljeno</translation> + </message> +</context> +<context> + <name>QDialogButtonBox</name> + <message> + <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1872"/> + <location line="+464"/> + <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+619"/> + <source>OK</source> + <translation>V redu</translation> + </message> + <message> + <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+0"/> + <source>&OK</source> + <translation>&V redu</translation> + </message> + <message> + <location line="+3"/> + <source>&Save</source> + <translation>&Shrani</translation> + </message> + <message> + <location line="+0"/> + <source>Save</source> + <translation>Shrani</translation> + </message> + <message> + <location line="+3"/> + <source>Open</source> + <translation>Odpri</translation> + </message> + <message> + <location line="+3"/> + <source>&Cancel</source> + <translation>&Prekliči</translation> + </message> + <message> + <location line="+0"/> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> + <message> + <location line="+3"/> + <source>&Close</source> + <translation>&Zapri</translation> + </message> + <message> + <location line="+0"/> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <location line="+3"/> + <source>Apply</source> + <translation>Uveljavi</translation> + </message> + <message> + <location line="+3"/> + <source>Reset</source> + <translation>Ponastavi</translation> + </message> + <message> + <location line="+3"/> + <source>Help</source> + <translation>Pomoč</translation> + </message> + <message> + <location line="+4"/> + <source>Don't Save</source> + <translation>Ne shrani</translation> + </message> + <message> + <location line="+4"/> + <source>Discard</source> + <translation>Zavrzi</translation> + </message> + <message> + <location line="+3"/> + <source>&Yes</source> + <translation>&Da</translation> + </message> + <message> + <location line="+3"/> + <source>Yes to &All</source> + <translation>Da za &vse</translation> + </message> + <message> + <location line="+3"/> + <source>&No</source> + <translation>&Ne</translation> + </message> + <message> + <location line="+3"/> + <source>N&o to All</source> + <translation>N&e za vse</translation> + </message> + <message> + <location line="+3"/> + <source>Save All</source> + <translation>Shrani vse</translation> + </message> + <message> + <location line="+3"/> + <source>Abort</source> + <translation>Prekini</translation> + </message> + <message> + <location line="+3"/> + <source>Retry</source> + <translation>Poskusi znova</translation> + </message> + <message> + <location line="+3"/> + <source>Ignore</source> + <translation>Spreglej</translation> + </message> + <message> + <location line="+3"/> + <source>Restore Defaults</source> + <translation>Obnovi privzete vrednosti</translation> + </message> + <message> + <location line="-29"/> + <source>Close without Saving</source> + <translation>Zapri brez shranjevanja</translation> + </message> +</context> +<context> + <name>QDirModel</name> + <message> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+457"/> + <source>Name</source> + <translation>Ime</translation> + </message> + <message> + <location line="+1"/> + <source>Size</source> + <translation>Velikost</translation> + </message> + <message> + <location line="+3"/> + <source>Kind</source> + <comment>Match OS X Finder</comment> + <translation>Vrste</translation> + </message> + <message> + <location line="+2"/> + <source>Type</source> + <comment>All other platforms</comment> + <translation>Vrsta</translation> + </message> + <message> + <location line="+6"/> + <source>Date Modified</source> + <translation>Datum spremembe</translation> + </message> +</context> +<context> + <name>QDockWidget</name> + <message> + <location filename="../src/plugins/accessible/widgets/qaccessiblewidgets.cpp" line="+1239"/> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <location line="+2"/> + <source>Dock</source> + <translation>Zasidraj</translation> + </message> + <message> + <location line="+1"/> + <source>Float</source> + <translation>Naj lebdi</translation> + </message> +</context> +<context> + <name>QDoubleSpinBox</name> + <message> + <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-537"/> + <source>More</source> + <translation>Več</translation> + </message> + <message> + <location line="+2"/> + <source>Less</source> + <translation>Manj</translation> + </message> +</context> +<context> + <name>QErrorMessage</name> + <message> + <location filename="../src/gui/dialogs/qerrormessage.cpp" line="+208"/> + <source>Debug Message:</source> + <translation>Sporočilo razhroščevanja:</translation> + </message> + <message> + <location line="+3"/> + <source>Warning:</source> + <translation>Opozorilo:</translation> + </message> + <message> + <location line="+3"/> + <source>Fatal Error:</source> + <translation>Usodna napaka:</translation> + </message> + <message> + <location line="+199"/> + <source>&Show this message again</source> + <translation>&To sporočilo naslednjič spet prikaži</translation> + </message> + <message> + <location line="+1"/> + <source>&OK</source> + <translation>&V redu</translation> + </message> +</context> +<context> + <name>QFile</name> + <message> + <location filename="../src/corelib/io/qfile.cpp" line="+697"/> + <location line="+155"/> + <source>Destination file exists</source> + <translation>Ciljna datoteka obstaja</translation> + </message> + <message> + <location line="-140"/> + <source>Will not rename sequential file using block copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+23"/> + <source>Cannot remove source file</source> + <translation>Ni moč odstraniti izvorne datoteke</translation> + </message> + <message> + <location line="+130"/> + <source>Cannot open %1 for input</source> + <translation>Ni moč odpreti %1 za vhod</translation> + </message> + <message> + <location line="+17"/> + <source>Cannot open for output</source> + <translation>Ni moč odpreti za izhod</translation> + </message> + <message> + <location line="+10"/> + <source>Failure to write block</source> + <translation>Neuspeh pri zapisovanju bloka</translation> + </message> + <message> + <location line="+13"/> + <source>Cannot create %1 for output</source> + <translation>Ni moč ustvariti %1 za izhod</translation> + </message> +</context> +<context> + <name>QFileDialog</name> + <message> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+556"/> + <location line="+450"/> + <source>All Files (*)</source> + <translation>Vse datoteke (*)</translation> + </message> + <message> + <location line="+227"/> + <source>Directories</source> + <translation>Mape</translation> + </message> + <message> + <location line="-3"/> + <location line="+50"/> + <location line="+1528"/> + <source>&Open</source> + <translation>&Odpri</translation> + </message> + <message> + <location line="-1578"/> + <location line="+50"/> + <source>&Save</source> + <translation>&Shrani</translation> + </message> + <message> + <location line="-741"/> + <source>Open</source> + <translation>Odpri</translation> + </message> + <message> + <location line="+1508"/> + <source>%1 already exists. +Do you want to replace it?</source> + <translation>%1 že obstaja. +Ali jo želite nadomestiti?</translation> + </message> + <message> + <location line="+20"/> + <source>%1 +File not found. +Please verify the correct file name was given.</source> + <translation>%1 +Datoteka ni bila najdena. +Preverite, ali je bilo podano pravilno ime datoteke.</translation> + </message> + <message> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+402"/> + <source>My Computer</source> + <translation>Moj računalnik</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1497"/> + <source>&Rename</source> + <translation>Pre&imenuj</translation> + </message> + <message> + <location line="+1"/> + <source>&Delete</source> + <translation>&Izbriši</translation> + </message> + <message> + <location line="+1"/> + <source>Show &hidden files</source> + <translation>Prikaži &skrite datoteke</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.ui"/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>Back</source> + <translation>Nazaj</translation> + </message> + <message> + <location/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>Parent Directory</source> + <translation>Matična mapa</translation> + </message> + <message> + <location/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>List View</source> + <translation>Prikaz seznama</translation> + </message> + <message> + <location/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>Detail View</source> + <translation>Prikaz podrobnosti</translation> + </message> + <message> + <location/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>Files of type:</source> + <translation>Datoteke vrste:</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+6"/> + <location line="+659"/> + <source>Directory:</source> + <translation>Mapa:</translation> + </message> + <message> + <location line="+776"/> + <location line="+862"/> + <source>%1 +Directory not found. +Please verify the correct directory name was given.</source> + <translation>%1 +Mapa ni bila najdena. +Preverite, ali je bilo podano pravilno ime mape.</translation> + </message> + <message> + <location line="-218"/> + <source>'%1' is write protected. +Do you want to delete it anyway?</source> + <translation>»%1« je zaščitena pred pisanjem. +Ali jo kljub temu želite izbrisati?</translation> + </message> + <message> + <location line="+5"/> + <source>Are sure you want to delete '%1'?</source> + <translation>Ali res želite izbrisati »%1«?</translation> + </message> + <message> + <location line="+15"/> + <source>Could not delete directory.</source> + <translation>Ni bilo moč izbrisati mape.</translation> + </message> + <message> + <location line="+404"/> + <source>Recent Places</source> + <translation>Nedavna mesta</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+174"/> + <source>All Files (*.*)</source> + <translation>Vse datoteke (*.*)</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2540"/> + <source>Save As</source> + <translation>Shrani kot</translation> + </message> + <message> + <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+441"/> + <source>Drive</source> + <translation>Pogon</translation> + </message> + <message> + <location line="+3"/> + <location line="+1"/> + <source>File</source> + <translation>Datoteka</translation> + </message> + <message> + <location line="+5"/> + <source>File Folder</source> + <comment>Match Windows Explorer</comment> + <translation>Mapa z datotekami</translation> + </message> + <message> + <location line="+2"/> + <source>Folder</source> + <comment>All other platforms</comment> + <translation>Mapa</translation> + </message> + <message> + <location line="+9"/> + <source>Alias</source> + <comment>Mac OS X Finder</comment> + <translation>Drugo ime</translation> + </message> + <message> + <location line="+2"/> + <source>Shortcut</source> + <comment>All other platforms</comment> + <translation>Bližnjica</translation> + </message> + <message> + <location line="+7"/> + <source>Unknown</source> + <translation>Neznano</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-4"/> + <source>Find Directory</source> + <translation>Najdi mapo</translation> + </message> + <message> + <location line="+29"/> + <source>Show </source> + <translation>Prikaži </translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.ui"/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>Forward</source> + <translation>Naprej</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+1963"/> + <source>New Folder</source> + <translation>Nova mapa</translation> + </message> + <message> + <location line="-1956"/> + <source>&New Folder</source> + <translation>&Nova mapa</translation> + </message> + <message> + <location line="+667"/> + <location line="+38"/> + <source>&Choose</source> + <translation>Iz&berite</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qsidebar.cpp" line="+442"/> + <source>Remove</source> + <translation>Odstrani</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-698"/> + <location line="+663"/> + <source>File &name:</source> + <translation>Ime &datoteke:</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.ui"/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>Look in:</source> + <translation>Išči v:</translation> + </message> + <message> + <location/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>Create New Folder</source> + <translation>Ustvari novo mapo</translation> + </message> +</context> +<context> + <name>QFileSystemModel</name> + <message> + <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+828"/> + <source>Invalid filename</source> + <translation>Napačno ime datoteke</translation> + </message> + <message> + <location line="+1"/> + <source><b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks.</source> + <translation><b>Imena »%1« ne morete uporabiti.</b><p>Poskusite z drugim imenom, ki vsebuje manj znakov ali pa ne vsebuje ločil.</translation> + </message> + <message> + <location line="+64"/> + <source>Name</source> + <translation>Ime</translation> + </message> + <message> + <location line="+2"/> + <source>Size</source> + <translation>Velikost</translation> + </message> + <message> + <location line="+4"/> + <source>Kind</source> + <comment>Match OS X Finder</comment> + <translation>Vrste</translation> + </message> + <message> + <location line="+2"/> + <source>Type</source> + <comment>All other platforms</comment> + <translation>Vrsta</translation> + </message> + <message> + <location line="+7"/> + <source>Date Modified</source> + <translation>Datum spremembe</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+258"/> + <source>My Computer</source> + <translation>Moj računalnik</translation> + </message> + <message> + <location line="+2"/> + <source>Computer</source> + <translation>Računalnik</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="-164"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+476"/> + <source>%1 TB</source> + <translation>%1 TiB</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> + <source>%1 GB</source> + <translation>%1 GiB</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> + <source>%1 MB</source> + <translation>%1 MiB</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> + <source>%1 KB</source> + <translation>%1 KiB</translation> + </message> + <message> + <location line="+1"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/> + <source>%1 bytes</source> + <translation>%1 B</translation> + </message> +</context> +<context> + <name>QFontDatabase</name> + <message> + <location filename="../src/gui/text/qfontdatabase.cpp" line="+102"/> + <location line="+1330"/> + <source>Normal</source> + <translation>Normalno</translation> + </message> + <message> + <location line="-1327"/> + <location line="+12"/> + <location line="+1303"/> + <source>Bold</source> + <translation>Polkrepko</translation> + </message> + <message> + <location line="-1312"/> + <location line="+1314"/> + <source>Demi Bold</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-1311"/> + <location line="+18"/> + <location line="+1289"/> + <source>Black</source> + <translation type="unfinished">Črni</translation> + </message> + <message> + <location line="-1299"/> + <source>Demi</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <location line="+1299"/> + <source>Light</source> + <translation>Lahko</translation> + </message> + <message> + <location line="-1153"/> + <location line="+1156"/> + <source>Italic</source> + <translation>Ležeče</translation> + </message> + <message> + <location line="-1153"/> + <location line="+1155"/> + <source>Oblique</source> + <translation>Nagnjeno</translation> + </message> + <message> + <location line="+703"/> + <source>Any</source> + <translation>Katerikoli</translation> + </message> + <message> + <location line="+3"/> + <source>Latin</source> + <translation>Latinska</translation> + </message> + <message> + <location line="+3"/> + <source>Greek</source> + <translation>Grška</translation> + </message> + <message> + <location line="+3"/> + <source>Cyrillic</source> + <translation>Cirilica</translation> + </message> + <message> + <location line="+3"/> + <source>Armenian</source> + <translation>Armenska</translation> + </message> + <message> + <location line="+3"/> + <source>Hebrew</source> + <translation>Hebrejska</translation> + </message> + <message> + <location line="+3"/> + <source>Arabic</source> + <translation>Arabska</translation> + </message> + <message> + <location line="+3"/> + <source>Syriac</source> + <translation>Sirijska</translation> + </message> + <message> + <location line="+3"/> + <source>Thaana</source> + <translation>Thaana</translation> + </message> + <message> + <location line="+3"/> + <source>Devanagari</source> + <translation>Devanagari</translation> + </message> + <message> + <location line="+3"/> + <source>Bengali</source> + <translation>Bengalska</translation> + </message> + <message> + <location line="+3"/> + <source>Gurmukhi</source> + <translation>Gurmukhi</translation> + </message> + <message> + <location line="+3"/> + <source>Gujarati</source> + <translation>Gujarati</translation> + </message> + <message> + <location line="+3"/> + <source>Oriya</source> + <translation type="unfinished">oriya</translation> + </message> + <message> + <location line="+3"/> + <source>Tamil</source> + <translation>Tamilska</translation> + </message> + <message> + <location line="+3"/> + <source>Telugu</source> + <translation>Teluška</translation> + </message> + <message> + <location line="+3"/> + <source>Kannada</source> + <translation type="unfinished">kannada</translation> + </message> + <message> + <location line="+3"/> + <source>Malayalam</source> + <translation type="unfinished">malayalam</translation> + </message> + <message> + <location line="+3"/> + <source>Sinhala</source> + <translation type="unfinished">Sinhala</translation> + </message> + <message> + <location line="+3"/> + <source>Thai</source> + <translation type="unfinished">Tajski</translation> + </message> + <message> + <location line="+3"/> + <source>Lao</source> + <translation type="unfinished">Laoška</translation> + </message> + <message> + <location line="+3"/> + <source>Tibetan</source> + <translation type="unfinished">tibetansko</translation> + </message> + <message> + <location line="+3"/> + <source>Myanmar</source> + <translation type="unfinished">Mjanmar</translation> + </message> + <message> + <location line="+3"/> + <source>Georgian</source> + <translation type="unfinished">gruzijsko</translation> + </message> + <message> + <location line="+3"/> + <source>Khmer</source> + <translation type="unfinished">Kmersko</translation> + </message> + <message> + <location line="+3"/> + <source>Simplified Chinese</source> + <translation>Poenostavljena kitajska</translation> + </message> + <message> + <location line="+3"/> + <source>Traditional Chinese</source> + <translation>Tradicionalna kitajska</translation> + </message> + <message> + <location line="+3"/> + <source>Japanese</source> + <translation>Japonska</translation> + </message> + <message> + <location line="+3"/> + <source>Korean</source> + <translation>Korejska</translation> + </message> + <message> + <location line="+3"/> + <source>Vietnamese</source> + <translation>Vietnamska</translation> + </message> + <message> + <location line="+3"/> + <source>Symbol</source> + <translation type="unfinished">Znak</translation> + </message> + <message> + <location line="+3"/> + <source>Ogham</source> + <translation>Oghamska</translation> + </message> + <message> + <location line="+3"/> + <source>Runic</source> + <translation>Runska</translation> + </message> +</context> +<context> + <name>QFontDialog</name> + <message> + <location filename="../src/gui/dialogs/qfontdialog.cpp" line="+774"/> + <source>&Font</source> + <translation>&Pisava</translation> + </message> + <message> + <location line="+1"/> + <source>Font st&yle</source> + <translation>&Slog pisave</translation> + </message> + <message> + <location line="+1"/> + <source>&Size</source> + <translation>&Velikost</translation> + </message> + <message> + <location line="+4"/> + <source>Effects</source> + <translation>Učinki</translation> + </message> + <message> + <location line="+2"/> + <source>Stri&keout</source> + <translation>P&rečrtaj</translation> + </message> + <message> + <location line="+1"/> + <source>&Underline</source> + <translation>Po&dčrtaj</translation> + </message> + <message> + <location line="+1"/> + <source>Sample</source> + <translation>Vzorec</translation> + </message> + <message> + <location line="+1"/> + <source>Wr&iting System</source> + <translation>S&istem pisanja</translation> + </message> + <message> + <location line="-607"/> + <location line="+257"/> + <source>Select Font</source> + <translation>Izberite pisavo</translation> + </message> +</context> +<context> + <name>QFtp</name> + <message> + <location filename="../src/network/access/qftp.cpp" line="+828"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+683"/> + <source>Not connected</source> + <translation>Brez povezave</translation> + </message> + <message> + <location line="+68"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+65"/> + <source>Host %1 not found</source> + <translation>Gostitelj %1 ni bil najden</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+4"/> + <source>Connection refused to host %1</source> + <translation>Povezava z gostiteljem %1 je bila zavrnjena</translation> + </message> + <message> + <location line="+4"/> + <source>Connection timed out to host %1</source> + <translation>Čas za povezavo z gostiteljem %1 je potekel</translation> + </message> + <message> + <location line="+104"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+102"/> + <location line="+1451"/> + <source>Connected to host %1</source> + <translation>Povezan z gostiteljem %1</translation> + </message> + <message> + <location line="+219"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="-1290"/> + <source>Connection refused for data connection</source> + <translation>Podatkovna povezava je bila zavrnjena</translation> + </message> + <message> + <location line="+178"/> + <location line="+29"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+195"/> + <location line="+728"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> + <message> + <location line="+891"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+77"/> + <source>Connecting to host failed: +%1</source> + <translation>Povezovanje z gostiteljem %1 ni uspelo: +%1</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> + <source>Login failed: +%1</source> + <translation>Prijava ni uspela: +%1</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> + <source>Listing directory failed: +%1</source> + <translation>Izpis seznama map ni uspel: +%1</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> + <source>Changing directory failed: +%1</source> + <translation>Spreminjanje mape ni uspelo: +%1</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> + <source>Downloading file failed: +%1</source> + <translation>Prejemanje datoteke ni uspelo: +%1</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> + <source>Uploading file failed: +%1</source> + <translation>Pošiljanje datoteke ni uspelo: +%1</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> + <source>Removing file failed: +%1</source> + <translation>Odstranjevanje datoteke ni uspelo: +%1</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> + <source>Creating directory failed: +%1</source> + <translation>Ustvarjanje mape ni uspelo: +%1</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> + <source>Removing directory failed: +%1</source> + <translation>Odstranjevanje mape ni uspelo: +%1</translation> + </message> + <message> + <location line="+28"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+25"/> + <location line="+250"/> + <source>Connection closed</source> + <translation>Povezava je bila prekinjena</translation> + </message> + <message> + <location filename="../src/qt3support/network/q3ftp.cpp" line="-11"/> + <source>Host %1 found</source> + <translation>Gostitelj %1 je bil najden</translation> + </message> + <message> + <location line="+4"/> + <source>Connection to %1 closed</source> + <translation>Povezava s %1 je bila prekinjena</translation> + </message> + <message> + <location line="+3"/> + <source>Host found</source> + <translation>Gostitelj je bil najden</translation> + </message> + <message> + <location line="+2"/> + <source>Connected to host</source> + <translation>Povezan z gostiteljem</translation> + </message> +</context> +<context> + <name>QHostInfo</name> + <message> + <location filename="../src/network/kernel/qhostinfo_p.h" line="+183"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> +</context> +<context> + <name>QHostInfoAgent</name> + <message> + <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+178"/> + <location line="+9"/> + <location line="+80"/> + <location line="+32"/> + <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+165"/> + <location line="+9"/> + <location line="+56"/> + <location line="+27"/> + <source>Host not found</source> + <translation>Ni moč najti gostitelja</translation> + </message> + <message> + <location line="-45"/> + <location line="+39"/> + <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-34"/> + <location line="+29"/> + <source>Unknown address type</source> + <translation>Neznana vrsta naslova</translation> + </message> + <message> + <location line="+10"/> + <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-19"/> + <location line="+27"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> + <message> + <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-71"/> + <source>No host name given</source> + <translation type="unfinished">Podano ni bilo nobeno ime gostitelja</translation> + </message> + <message> + <location line="+0"/> + <source>Invalid hostname</source> + <translation type="unfinished">Neveljavno ime gostitelja</translation> + </message> +</context> +<context> + <name>QHttp</name> + <message> + <location filename="../src/network/access/qhttp.cpp" line="+1577"/> + <location line="+820"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+1159"/> + <location line="+567"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> + <message> + <location line="-568"/> + <location filename="../src/qt3support/network/q3http.cpp" line="-370"/> + <source>Request aborted</source> + <translation>Zahteva prekinjena</translation> + </message> + <message> + <location line="+579"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+381"/> + <source>No server set to connect to</source> + <translation>Strežnik za povezavo ni nastavljen</translation> + </message> + <message> + <location line="+164"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+56"/> + <source>Wrong content length</source> + <translation>Napačna dolžina vsebine</translation> + </message> + <message> + <location line="+4"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+4"/> + <source>Server closed connection unexpectedly</source> + <translation>Strežnik je nepričakovano prekinil povezavo</translation> + </message> + <message> + <location line="+179"/> + <source>Unknown authentication method</source> + <translation>Neznan način overjanja</translation> + </message> + <message> + <location line="+183"/> + <source>Error writing response to device</source> + <translation>Napaka pri pisanju odziva na napravo</translation> + </message> + <message> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+560"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+38"/> + <source>Connection refused</source> + <translation>Povezava je zavrnjena</translation> + </message> + <message> + <location filename="../src/network/access/qhttp.cpp" line="-304"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> + <source>Host %1 not found</source> + <translation>Gostitelj %1 ni bil najden</translation> + </message> + <message> + <location line="+20"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+10"/> + <location line="+19"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> + <source>HTTP request failed</source> + <translation>Zahtevek HTTP ni uspel</translation> + </message> + <message> + <location line="+73"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+69"/> + <source>Invalid HTTP response header</source> + <translation>Neveljavna glava odgovora HTTP</translation> + </message> + <message> + <location line="+125"/> + <location line="+48"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+40"/> + <location line="+47"/> + <source>Invalid HTTP chunked body</source> + <translation>Neveljavno razdeljeno telo HTTP</translation> + </message> + <message> + <location filename="../src/qt3support/network/q3http.cpp" line="+294"/> + <source>Host %1 found</source> + <translation>Gostitelj %1 je bil najden</translation> + </message> + <message> + <location line="+3"/> + <source>Connected to host %1</source> + <translation>Povezan z gostiteljem %1</translation> + </message> + <message> + <location line="+3"/> + <source>Connection to %1 closed</source> + <translation>Povezava s %1 je bila prekinjena</translation> + </message> + <message> + <location line="+8"/> + <source>Host found</source> + <translation>Gostitelj je bil najden</translation> + </message> + <message> + <location line="+3"/> + <source>Connected to host</source> + <translation>Povezan z gostiteljem</translation> + </message> + <message> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-22"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> + <source>Connection closed</source> + <translation>Povezava je bila prekinjena</translation> + </message> + <message> + <location filename="../src/network/access/qhttp.cpp" line="-135"/> + <source>Proxy authentication required</source> + <translation>Potrebna je overitev pri posredniku</translation> + </message> + <message> + <location line="+4"/> + <source>Authentication required</source> + <translation>Potrebna je overitev</translation> + </message> + <message> + <location line="-138"/> + <source>Connection refused (or timed out)</source> + <translation>Povezava je bila zavrnjena (ali pa je potekel čas)</translation> + </message> + <message> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+6"/> + <source>Proxy requires authentication</source> + <translation>Posrednik zahteva overitev</translation> + </message> + <message> + <location line="+3"/> + <source>Host requires authentication</source> + <translation>Gostitelj zahteva overitev</translation> + </message> + <message> + <location line="+3"/> + <source>Data corrupted</source> + <translation>Podatki so okvarjeni</translation> + </message> + <message> + <location line="+3"/> + <source>Unknown protocol specified</source> + <translation>Naveden je bil neznan protokol</translation> + </message> + <message> + <location line="+3"/> + <source>SSL handshake failed</source> + <translation>Rokovanje SSL ni uspelo</translation> + </message> + <message> + <location filename="../src/network/access/qhttp.cpp" line="-2266"/> + <source>HTTPS connection requested but SSL support not compiled in</source> + <translation>Zahtevana je bila povezava HTTPS, a podpora za SSL ni bila vgrajena</translation> + </message> +</context> +<context> + <name>QHttpSocketEngine</name> + <message> + <location filename="../src/network/socket/qhttpsocketengine.cpp" line="-89"/> + <source>Did not receive HTTP response from proxy</source> + <translation>Od posrednika ni bil prejet odgovor HTTP</translation> + </message> + <message> + <location line="+25"/> + <source>Error parsing authentication request from proxy</source> + <translation>Napaka pri razčlenjevanju overitvenega zahtevka od posrednika</translation> + </message> + <message> + <location line="+31"/> + <source>Authentication required</source> + <translation>Potrebna je overitev</translation> + </message> + <message> + <location line="+27"/> + <source>Proxy denied connection</source> + <translation>Posrednik je zavrnil povezavo</translation> + </message> + <message> + <location line="+10"/> + <source>Error communicating with HTTP proxy</source> + <translation>Napaka pri komunikaciji s posrednikom HTTP</translation> + </message> + <message> + <location line="+23"/> + <source>Proxy server not found</source> + <translation>Posredniški strežnik ni bil najden</translation> + </message> + <message> + <location line="+2"/> + <source>Proxy connection refused</source> + <translation>Povezava s posrednikom je bila zavrnjena</translation> + </message> + <message> + <location line="+2"/> + <source>Proxy server connection timed out</source> + <translation>Čas za povezavo s posredniškim strežnikom je potekel</translation> + </message> + <message> + <location line="+2"/> + <source>Proxy connection closed prematurely</source> + <translation>Povezava s posrednikom je bila prekinjena predčasno</translation> + </message> +</context> +<context> + <name>QIBaseDriver</name> + <message> + <location filename="../src/sql/drivers/ibase/qsql_ibase.cpp" line="+1491"/> + <source>Error opening database</source> + <translation>Napaka pri odpiranju podatkovne zbirke</translation> + </message> + <message> + <location line="+54"/> + <source>Could not start transaction</source> + <translation>Ni bilo moč začeti transakcije</translation> + </message> + <message> + <location line="+13"/> + <source>Unable to commit transaction</source> + <translation>Ni moč udejaniti transakcije</translation> + </message> + <message> + <location line="+13"/> + <source>Unable to rollback transaction</source> + <translation>Ni moč razveljaviti transakcije</translation> + </message> +</context> +<context> + <name>QIBaseResult</name> + <message> + <location line="-1149"/> + <source>Unable to create BLOB</source> + <translation>Ni moč ustvariti BLOB-a</translation> + </message> + <message> + <location line="+6"/> + <source>Unable to write BLOB</source> + <translation>Ni moč zapisati BLOB-a</translation> + </message> + <message> + <location line="+14"/> + <source>Unable to open BLOB</source> + <translation>Ni moč odpreti BLOB-a</translation> + </message> + <message> + <location line="+16"/> + <source>Unable to read BLOB</source> + <translation>Ni moč prebrati BLOB-a</translation> + </message> + <message> + <location line="+125"/> + <location line="+187"/> + <source>Could not find array</source> + <translation>Ni bilo moč najti polja</translation> + </message> + <message> + <location line="-155"/> + <source>Could not get array data</source> + <translation>Ni bilo moč pridobiti podatkov iz polja</translation> + </message> + <message> + <location line="+210"/> + <source>Could not get query info</source> + <translation>Ni bilo moč pridobiti podatkov o poizvedbi</translation> + </message> + <message> + <location line="+20"/> + <source>Could not start transaction</source> + <translation>Ni bilo moč začeti transakcije</translation> + </message> + <message> + <location line="+19"/> + <source>Unable to commit transaction</source> + <translation>Ni moč udejaniti transakcije</translation> + </message> + <message> + <location line="+42"/> + <source>Could not allocate statement</source> + <translation>Ni bilo moč dodeliti prostora za izjavo</translation> + </message> + <message> + <location line="+5"/> + <source>Could not prepare statement</source> + <translation>Ni bilo moč pripraviti izjave</translation> + </message> + <message> + <location line="+5"/> + <location line="+11"/> + <source>Could not describe input statement</source> + <translation>Ni bilo moč opisati vhodne izjave</translation> + </message> + <message> + <location line="+14"/> + <source>Could not describe statement</source> + <translation>Ni bilo moč opisati izjave</translation> + </message> + <message> + <location line="+115"/> + <source>Unable to close statement</source> + <translation>Ni moč zaključiti izjave</translation> + </message> + <message> + <location line="+8"/> + <source>Unable to execute query</source> + <translation>Ni moč izvesti poizvedbe</translation> + </message> + <message> + <location line="+46"/> + <source>Could not fetch next item</source> + <translation>Ni bilo moč pridobiti sledeče postavke</translation> + </message> + <message> + <location line="+197"/> + <source>Could not get statement info</source> + <translation>Ni bilo moč pridobiti podatkov o izjavi</translation> + </message> +</context> +<context> + <name>QIODevice</name> + <message> + <location filename="../src/corelib/global/qglobal.cpp" line="+2046"/> + <source>Permission denied</source> + <translation>Nimate dovoljenja</translation> + </message> + <message> + <location line="+3"/> + <source>Too many open files</source> + <translation>Preveč odprtih datotek</translation> + </message> + <message> + <location line="+3"/> + <source>No such file or directory</source> + <translation>Ta datoteka ali mapa ne obstaja</translation> + </message> + <message> + <location line="+3"/> + <source>No space left on device</source> + <translation>Ni prostora na napravi</translation> + </message> + <message> + <location filename="../src/corelib/io/qiodevice.cpp" line="+1561"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> +</context> +<context> + <name>QInputContext</name> + <message> + <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+256"/> + <source>XIM</source> + <translation>XIM</translation> + </message> + <message> + <location line="+4"/> + <source>FEP</source> + <translation>FEP</translation> + </message> + <message> + <location line="+23"/> + <source>XIM input method</source> + <translation>Način za vnašanje XIM</translation> + </message> + <message> + <location line="+4"/> + <source>Windows input method</source> + <translation>Način za vnašanje Windows</translation> + </message> + <message> + <location line="+4"/> + <source>Mac OS X input method</source> + <translation>Način za vnašanje Mac OS X</translation> + </message> + <message> + <location line="+4"/> + <source>S60 FEP input method</source> + <translation>Način za vnašanje S60 FEP</translation> + </message> +</context> +<context> + <name>QInputDialog</name> + <message> + <location filename="../src/gui/dialogs/qinputdialog.cpp" line="+223"/> + <source>Enter a value:</source> + <translation>Vnesite vrednost:</translation> + </message> +</context> +<context> + <name>QLibrary</name> + <message> + <location filename="../src/corelib/plugin/qlibrary.cpp" line="+383"/> + <source>Could not mmap '%1': %2</source> + <translation>Ni bilo moč izvesti funkcije mmap za »%1«: %2</translation> + </message> + <message> + <location line="+22"/> + <source>Plugin verification data mismatch in '%1'</source> + <translation>Neujemanje podatkov za potrjevanje vstavkov v »%1«</translation> + </message> + <message> + <location line="+6"/> + <source>Could not unmap '%1': %2</source> + <translation>Ni bilo moč izvesti funkcije unmap za »%1«: %2</translation> + </message> + <message> + <location line="+341"/> + <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> + <translation>Vstavek »%1« uporablja nezdružljivo knjižnico Qt. (%2.%3.%4) [%5]</translation> + </message> + <message> + <location line="+20"/> + <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source> + <translation>Vstavek »%1« uporablja nezdružljivo knjižnico Qt. Pričakovan je bil ključ gradnje »%2«, dobljen je bil »%3«</translation> + </message> + <message> + <location line="+365"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> + <message> + <location line="-402"/> + <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+343"/> + <source>The shared library was not found.</source> + <translation>Deljena knjižnica ni bila najdena.</translation> + </message> + <message> + <location line="+2"/> + <source>The file '%1' is not a valid Qt plugin.</source> + <translation>Datoteka »%1« ni veljaven vstavek Qt.</translation> + </message> + <message> + <location line="+43"/> + <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source> + <translation>Vstavek »%1« uporablja nezdružljivo knjižnico Qt. (Ni moč mešati knjižnic za razhroščevanje in izdajo.)</translation> + </message> + <message> + <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+236"/> + <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+87"/> + <source>Cannot load library %1: %2</source> + <translation>Ni moč naložiti knjižnice %1: %2</translation> + </message> + <message> + <location line="+17"/> + <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+22"/> + <source>Cannot unload library %1: %2</source> + <translation>Ni moč odstraniti knjižnice %1: %2</translation> + </message> + <message> + <location line="+34"/> + <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+15"/> + <source>Cannot resolve symbol "%1" in %2: %3</source> + <translation>Ni moč razrešiti simbola »%1« v %2: %3</translation> + </message> +</context> +<context> + <name>QLineEdit</name> + <message> + <location filename="../src/gui/widgets/qlineedit.cpp" line="+1980"/> + <source>&Undo</source> + <translation>&Razveljavi</translation> + </message> + <message> + <location line="+4"/> + <source>&Redo</source> + <translation>&Uveljavi</translation> + </message> + <message> + <location line="+7"/> + <source>Cu&t</source> + <translation>&Izreži</translation> + </message> + <message> + <location line="+5"/> + <source>&Copy</source> + <translation>S&kopiraj</translation> + </message> + <message> + <location line="+5"/> + <source>&Paste</source> + <translation>Pri&lepi</translation> + </message> + <message> + <location line="+5"/> + <source>Delete</source> + <translation>Izbriši</translation> + </message> + <message> + <location line="+6"/> + <source>Select All</source> + <translation>Izberi vse</translation> + </message> +</context> +<context> + <name>QLocalServer</name> + <message> + <location filename="../src/network/socket/qlocalserver.cpp" line="+224"/> + <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+256"/> + <source>%1: Name error</source> + <translation>%1: napaka v imenu</translation> + </message> + <message> + <location filename="../src/network/socket/qlocalserver_unix.cpp" line="-8"/> + <source>%1: Permission denied</source> + <translation>%1: nimate dovoljenja</translation> + </message> + <message> + <location line="+12"/> + <source>%1: Address in use</source> + <translation>%1: naslov je že v uporabi</translation> + </message> + <message> + <location line="+5"/> + <source>%1: Unknown error %2</source> + <translation>%1: neznana napaka %2</translation> + </message> +</context> +<context> + <name>QLocalSocket</name> + <message> + <location filename="../src/network/socket/qlocalsocket_tcp.cpp" line="+132"/> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+139"/> + <source>%1: Connection refused</source> + <translation>%1: povezava je bila zavrnjena</translation> + </message> + <message> + <location line="+3"/> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> + <source>%1: Remote closed</source> + <translation>%1: oddaljeni je prekinil</translation> + </message> + <message> + <location line="+3"/> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> + <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+80"/> + <location line="+45"/> + <source>%1: Invalid name</source> + <translation>%1: neveljavno ime</translation> + </message> + <message> + <location line="+3"/> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> + <source>%1: Socket access error</source> + <translation>%1: napaka pri dostopu do vtičnice</translation> + </message> + <message> + <location line="+3"/> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> + <source>%1: Socket resource error</source> + <translation>%1: napaka vira vtičnice</translation> + </message> + <message> + <location line="+3"/> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> + <source>%1: Socket operation timed out</source> + <translation>%1: čas za dejanje na vtičnici je potekel</translation> + </message> + <message> + <location line="+3"/> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> + <source>%1: Datagram too large</source> + <translation>%1: datagram je prevelik</translation> + </message> + <message> + <location line="+3"/> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> + <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-50"/> + <source>%1: Connection error</source> + <translation>%1: napaka povezave</translation> + </message> + <message> + <location line="+3"/> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> + <source>%1: The socket operation is not supported</source> + <translation>%1: dejanje na vtičnici ni podprto</translation> + </message> + <message> + <location line="+4"/> + <source>%1: Unknown error</source> + <translation>%1: neznana napaka</translation> + </message> + <message> + <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+4"/> + <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+10"/> + <source>%1: Unknown error %2</source> + <translation>%1: neznana napaka %2</translation> + </message> +</context> +<context> + <name>QMYSQLDriver</name> + <message> + <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1261"/> + <source>Unable to open database '</source> + <translation>Ni moč odpreti podatkovne zbirke »</translation> + </message> + <message> + <location line="+11"/> + <source>Unable to connect</source> + <translation>Ni moč vzpostaviti povezave</translation> + </message> + <message> + <location line="+151"/> + <source>Unable to begin transaction</source> + <translation>Ni moč začeti transakcije</translation> + </message> + <message> + <location line="+17"/> + <source>Unable to commit transaction</source> + <translation>Ni moč udejaniti transakcije</translation> + </message> + <message> + <location line="+17"/> + <source>Unable to rollback transaction</source> + <translation>Ni moč razveljaviti transakcije</translation> + </message> +</context> +<context> + <name>QMYSQLResult</name> + <message> + <location line="-969"/> + <source>Unable to fetch data</source> + <translation>Ni moč pridobiti podatkov</translation> + </message> + <message> + <location line="+183"/> + <source>Unable to execute query</source> + <translation>Ni moč izvesti poizvedbe</translation> + </message> + <message> + <location line="+6"/> + <source>Unable to store result</source> + <translation>Ni moč shraniti rezultata</translation> + </message> + <message> + <location line="+191"/> + <location line="+8"/> + <source>Unable to prepare statement</source> + <translation>Ni moč pripraviti izjave</translation> + </message> + <message> + <location line="+37"/> + <source>Unable to reset statement</source> + <translation>Ni moč ponastaviti izjave</translation> + </message> + <message> + <location line="+86"/> + <source>Unable to bind value</source> + <translation>Ni moč prikleniti vrednosti</translation> + </message> + <message> + <location line="+11"/> + <source>Unable to execute statement</source> + <translation>Ni moč izvesti izjave</translation> + </message> + <message> + <location line="+14"/> + <location line="+21"/> + <source>Unable to bind outvalues</source> + <translation>Ni moč prikleniti izhodnih vrednosti</translation> + </message> + <message> + <location line="-12"/> + <source>Unable to store statement results</source> + <translation>Ni moč shraniti rezultatov izjave</translation> + </message> + <message> + <location line="-253"/> + <source>Unable to execute next query</source> + <translation>Ni moč izvesti sledeče poizvedbe</translation> + </message> + <message> + <location line="+10"/> + <source>Unable to store next result</source> + <translation>Ni moč shraniti sledečega rezultata</translation> + </message> +</context> +<context> + <name>QMdiArea</name> + <message> + <location filename="../src/gui/widgets/qmdiarea.cpp" line="+290"/> + <source>(Untitled)</source> + <translation>(neimenovano)</translation> + </message> +</context> +<context> + <name>QMdiSubWindow</name> + <message> + <location filename="../src/gui/widgets/qmdisubwindow.cpp" line="+280"/> + <source>%1 - [%2]</source> + <translation>%1 - [%2]</translation> + </message> + <message> + <location line="+72"/> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <location line="-18"/> + <source>Minimize</source> + <translation>Pomanjšaj</translation> + </message> + <message> + <location line="+13"/> + <source>Restore Down</source> + <translation>Obnovi navzdol</translation> + </message> + <message> + <location line="+707"/> + <source>&Restore</source> + <translation>&Obnovi</translation> + </message> + <message> + <location line="+3"/> + <source>&Move</source> + <translation>&Premakni</translation> + </message> + <message> + <location line="+1"/> + <source>&Size</source> + <translation>&Velikost</translation> + </message> + <message> + <location line="+1"/> + <source>Mi&nimize</source> + <translation>Po&manjšaj</translation> + </message> + <message> + <location line="+2"/> + <source>Ma&ximize</source> + <translation>&Razpni</translation> + </message> + <message> + <location line="+2"/> + <source>Stay on &Top</source> + <translation>Ostani na &vrhu</translation> + </message> + <message> + <location line="+3"/> + <source>&Close</source> + <translation>&Zapri</translation> + </message> + <message> + <location line="-787"/> + <source>- [%1]</source> + <translation>- [%1]</translation> + </message> + <message> + <location line="+58"/> + <source>Maximize</source> + <translation>Razpni</translation> + </message> + <message> + <location line="+3"/> + <source>Unshade</source> + <translation>Razvij</translation> + </message> + <message> + <location line="+3"/> + <source>Shade</source> + <translation>Zvij</translation> + </message> + <message> + <location line="+6"/> + <source>Restore</source> + <translation>Obnovi</translation> + </message> + <message> + <location line="+6"/> + <source>Help</source> + <translation>Pomoč</translation> + </message> + <message> + <location line="+3"/> + <source>Menu</source> + <translation>Meni</translation> + </message> +</context> +<context> + <name>QMenu</name> + <message> + <location filename="../src/plugins/accessible/widgets/qaccessiblemenu.cpp" line="+157"/> + <location line="+225"/> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <location line="-224"/> + <location line="+225"/> + <source>Open</source> + <translation>Odpri</translation> + </message> + <message> + <location line="-223"/> + <location line="+225"/> + <location line="+51"/> + <source>Execute</source> + <translation>Izvedi</translation> + </message> +</context> +<context> + <name>QMenuBar</name> + <message> + <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+401"/> + <source>Actions</source> + <translation>Dejanja</translation> + </message> +</context> +<context> + <name>QMessageBox</name> + <message> + <location filename="../src/gui/dialogs/qmessagebox.cpp" line="-1116"/> + <source>Help</source> + <translation>Pomoč</translation> + </message> + <message> + <location line="-848"/> + <location line="+847"/> + <location filename="../src/gui/dialogs/qmessagebox.h" line="-52"/> + <location line="+8"/> + <source>OK</source> + <translation>V redu</translation> + </message> + <message> + <location line="+477"/> + <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source> + <translation><h3>O Qt</h3><p>Ta program uporablja Qt različice %1.</p></translation> + </message> + <message> + <location line="+5"/> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation><p>Qt je skupek gradnikov C++ za razvoj programov, ki tečejo na več platformah.</p><p>Qt omogoča isto kodo prenašati med platformami Linux, Mac&nbsp;OS&nbsp;X, Windows in vsemi večjimi variantami UNIX-a. Qt je na voljo tudi za vgrajene naprave in sicer kot Qt for Embedded Linux in Qt for Windows CE.</p><p>Qt je na voljo pod tremi možnimi licenčnimi pogoji, ki ustrezajo različnim željam uporabnikov.</p><p>Qt pod licenco GNU General Public License različice 3.0 (<a href="http://www.gnu.org/licenses/gpl-3.0.html">GPLv3.0</a>) je primeren za razvoj programov Qt, ki so povsem <a href="http://www.gnu.org/philosophy/free-sw.html">prosti in odprto-kodni</a>. S to licenco se uporabnikom programa zagotovijo vse pravice in svoboščine, kot jih je imel izdelovalec programa.</p><p>Qt pod licenco GNU Lesser General Public License različice 2.1 (<a href="http://www.gnu.org/licenses/lgpl-2.1.html">LGPLv2.1</a>) omogoča tudi razvoj programov, ki uporabnikom ne zagotavljajo vseh pravic in svoboščin, kot jih je imel izdelovalec. Omogoča na primer tudi razvoj zaprto-kodnih programov.</p><p>Qt pod posebno komercialno licenco je namenjen razvoju lastniških in zaprto-kodnih programov, kjer izdelovalec z uporabniki noče deliti nič izvorne kode ter pravic in svoboščin, ali pa ne more ustreči pogojem licenc GPLv3.0 ali LGPLv2.1.</p><p>Za pregled licenčnih možnosti si oglejte spletno stran <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>.</p><p>Avtorske pravice © 2009 Nokia Corporation in/ali podružnice ter zunanji prispevajoči.</p><p>Qt je proizvod podjetja Nokia. Za dodatne podatke si oglejte <a href="http://qt.nokia.com/">qt.nokia.com</a>.</p></translation> + </message> + <message> + <location line="+31"/> + <source>About Qt</source> + <translation>O Qt</translation> + </message> + <message> + <location line="-1611"/> + <source>Show Details...</source> + <translation>Prikaži podrobnosti ...</translation> + </message> + <message> + <location line="+1"/> + <source>Hide Details...</source> + <translation>Skrij podrobnosti ...</translation> + </message> +</context> +<context> + <name>QMultiInputContext</name> + <message> + <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontext.cpp" line="+88"/> + <source>Select IM</source> + <translation>Izberite način vnašanja</translation> + </message> +</context> +<context> + <name>QMultiInputContextPlugin</name> + <message> + <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp" line="+95"/> + <source>Multiple input method switcher</source> + <translation>Orodje za preklop med načini vnašanja</translation> + </message> + <message> + <location line="+7"/> + <source>Multiple input method switcher that uses the context menu of the text widgets</source> + <translation>Orodje za preklop med več načini vnašanja, ki uporablja priročni meni besedilnih gradnikov</translation> + </message> +</context> +<context> + <name>QNativeSocketEngine</name> + <message> + <location filename="../src/network/socket/qnativesocketengine.cpp" line="+206"/> + <source>The remote host closed the connection</source> + <translation>Oddaljen gostitelj je prekinil povezavo</translation> + </message> + <message> + <location line="+3"/> + <source>Network operation timed out</source> + <translation>Čas za omrežni postopek je potekel</translation> + </message> + <message> + <location line="+3"/> + <source>Out of resources</source> + <translation>Zmanjkalo je virov</translation> + </message> + <message> + <location line="+3"/> + <source>Unsupported socket operation</source> + <translation>Nepodprto dejanje za vtičnico</translation> + </message> + <message> + <location line="+3"/> + <source>Protocol type not supported</source> + <translation>Vrsta protokola ni podprta</translation> + </message> + <message> + <location line="+3"/> + <source>Invalid socket descriptor</source> + <translation>Neveljaven opisnik vtičnice</translation> + </message> + <message> + <location line="+6"/> + <source>Network unreachable</source> + <translation>Omrežje ni dosegljivo</translation> + </message> + <message> + <location line="+3"/> + <source>Permission denied</source> + <translation>Nimate dovoljenja</translation> + </message> + <message> + <location line="+3"/> + <source>Connection timed out</source> + <translation>Čas za povezavo je potekel</translation> + </message> + <message> + <location line="+3"/> + <source>Connection refused</source> + <translation>Povezava je zavrnjena</translation> + </message> + <message> + <location line="+3"/> + <source>The bound address is already in use</source> + <translation>Naslov za vezavo je že v uporabi</translation> + </message> + <message> + <location line="+3"/> + <source>The address is not available</source> + <translation>Naslov ni na voljo</translation> + </message> + <message> + <location line="+3"/> + <source>The address is protected</source> + <translation>Naslov je zaščiten</translation> + </message> + <message> + <location line="+6"/> + <source>Unable to send a message</source> + <translation>Ni moč poslati sporočila</translation> + </message> + <message> + <location line="+3"/> + <source>Unable to receive a message</source> + <translation>Ni moč prejeti sporočila</translation> + </message> + <message> + <location line="+3"/> + <source>Unable to write</source> + <translation>Ni moč zapisovati</translation> + </message> + <message> + <location line="+3"/> + <source>Network error</source> + <translation>Napaka v omrežju</translation> + </message> + <message> + <location line="+3"/> + <source>Another socket is already listening on the same port</source> + <translation>Druga vtičnica že posluša na istih vratih</translation> + </message> + <message> + <location line="-66"/> + <source>Unable to initialize non-blocking socket</source> + <translation>Ni moč inicializirati ne-blokirne vtičnice</translation> + </message> + <message> + <location line="+3"/> + <source>Unable to initialize broadcast socket</source> + <translation>Ni moč inicializirati vtičnice za oddajanje</translation> + </message> + <message> + <location line="+3"/> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>Poskus uporabe vtičnice IPv6 na platformi brez podpore za IPv6</translation> + </message> + <message> + <location line="+21"/> + <source>Host unreachable</source> + <translation>Gostitelj ni dosegljiv</translation> + </message> + <message> + <location line="+24"/> + <source>Datagram was too large to send</source> + <translation>Datagram je bil prevelik za pošiljanje</translation> + </message> + <message> + <location line="+18"/> + <source>Operation on non-socket</source> + <translation>Dejanje na ne-vtičnici</translation> + </message> + <message> + <location line="+6"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> + <message> + <location line="-3"/> + <source>The proxy type is invalid for this operation</source> + <translation>Vrsta posrednika za to dejanje ni veljavna</translation> + </message> +</context> +<context> + <name>QNetworkAccessCacheBackend</name> + <message> + <location filename="../src/network/access/qnetworkaccesscachebackend.cpp" line="+66"/> + <source>Error opening %1</source> + <translation>Napaka pri odpiranju %1</translation> + </message> +</context> +<context> + <name>QNetworkAccessDebugPipeBackend</name> + <message> + <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+195"/> + <source>Write error writing to %1: %2</source> + <translation>Napaka pri zapisovanju v %1: %2</translation> + </message> +</context> +<context> + <name>QNetworkAccessFileBackend</name> + <message> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+100"/> + <source>Request for opening non-local file %1</source> + <translation>Zahtevek za odprtje ne-krajevne datoteke %1</translation> + </message> + <message> + <location line="+45"/> + <source>Error opening %1: %2</source> + <translation>Napaka pri odpiranju %1: %2</translation> + </message> + <message> + <location line="+38"/> + <source>Write error writing to %1: %2</source> + <translation>Napaka pri zapisovanju v %1: %2</translation> + </message> + <message> + <location line="+48"/> + <source>Cannot open %1: Path is a directory</source> + <translation>Ni moč odpreti %1: pot je mapa</translation> + </message> + <message> + <location line="+21"/> + <source>Read error reading from %1: %2</source> + <translation>Napaka pri branju iz %1: %2</translation> + </message> +</context> +<context> + <name>QNetworkAccessFtpBackend</name> + <message> + <location filename="../src/network/access/qnetworkaccessftpbackend.cpp" line="+131"/> + <source>No suitable proxy found</source> + <translation>Najden ni bil noben primeren posrednik</translation> + </message> + <message> + <location line="+14"/> + <source>Cannot open %1: is a directory</source> + <translation>Ni moč odpreti %1: to je mapa</translation> + </message> + <message> + <location line="+112"/> + <source>Logging in to %1 failed: authentication required</source> + <translation>Prijava v %1 ni uspela: potrebna je overitev</translation> + </message> + <message> + <location line="+39"/> + <source>Error while downloading %1: %2</source> + <translation>Napaka med prejemanjem %1: %2</translation> + </message> + <message> + <location line="+2"/> + <source>Error while uploading %1: %2</source> + <translation>Napaka med pošiljanjem %1: %2</translation> + </message> +</context> +<context> + <name>QNetworkAccessHttpBackend</name> + <message> + <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+585"/> + <source>No suitable proxy found</source> + <translation>Najden ni bil noben primeren posrednik</translation> + </message> +</context> +<context> + <name>QNetworkReply</name> + <message> + <location line="+95"/> + <source>Error downloading %1 - server replied: %2</source> + <translation>Napaka med prejemanjem %1 - strežnikov odgovor: %2</translation> + </message> + <message> + <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+77"/> + <source>Protocol "%1" is unknown</source> + <translation>Neznan protokol »%1«</translation> + </message> +</context> +<context> + <name>QNetworkReplyImpl</name> + <message> + <location line="+519"/> + <location line="+28"/> + <source>Operation canceled</source> + <translation>Postopek je bil preklican</translation> + </message> +</context> +<context> + <name>QOCIDriver</name> + <message> + <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2076"/> + <source>Unable to logon</source> + <translation>Ni se moč prijaviti</translation> + </message> + <message> + <location line="-144"/> + <source>Unable to initialize</source> + <comment>QOCIDriver</comment> + <translation>Ni moč inicializirati</translation> + </message> + <message> + <location line="+215"/> + <source>Unable to begin transaction</source> + <translation>Ni moč začeti transakcije</translation> + </message> + <message> + <location line="+19"/> + <source>Unable to commit transaction</source> + <translation>Ni moč udejaniti transakcije</translation> + </message> + <message> + <location line="+19"/> + <source>Unable to rollback transaction</source> + <translation>Ni moč razveljaviti transakcije</translation> + </message> +</context> +<context> + <name>QOCIResult</name> + <message> + <location line="-972"/> + <location line="+161"/> + <location line="+15"/> + <source>Unable to bind column for batch execute</source> + <translation>Ni moč prikleniti stolpca za paketno izvršitev</translation> + </message> + <message> + <location line="+15"/> + <source>Unable to execute batch statement</source> + <translation>Ni moč izvesti paketne izjave</translation> + </message> + <message> + <location line="+304"/> + <source>Unable to goto next</source> + <translation>Ni se moč prestaviti na naslednjega</translation> + </message> + <message> + <location line="+59"/> + <source>Unable to alloc statement</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Unable to prepare statement</source> + <translation>Ni moč pripraviti izjave</translation> + </message> + <message> + <location line="+26"/> + <source>Unable to get statement type</source> + <translation>Ni moč pridobiti vrste izjave</translation> + </message> + <message> + <location line="+20"/> + <source>Unable to bind value</source> + <translation>Ni moč prikleniti vrednosti</translation> + </message> + <message> + <location line="+19"/> + <source>Unable to execute statement</source> + <translation>Ni moč izvesti izjave</translation> + </message> +</context> +<context> + <name>QODBCDriver</name> + <message> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1783"/> + <source>Unable to connect</source> + <translation>Ni moč vzpostaviti povezave</translation> + </message> + <message> + <location line="+238"/> + <source>Unable to disable autocommit</source> + <translation>Ni moč onemogočiti samodejnega udejanjanja</translation> + </message> + <message> + <location line="+17"/> + <source>Unable to commit transaction</source> + <translation>Ni moč udejaniti transakcije</translation> + </message> + <message> + <location line="+17"/> + <source>Unable to rollback transaction</source> + <translation>Ni moč razveljaviti transakcije</translation> + </message> + <message> + <location line="+15"/> + <source>Unable to enable autocommit</source> + <translation>Ni moč omogočiti samodejnega udejanjanja</translation> + </message> + <message> + <location line="-281"/> + <source>Unable to connect - Driver doesn't support all functionality required</source> + <translation>Ni se moč povezati - gonilnik ne podpira vseh potrebnih zmožnosti</translation> + </message> +</context> +<context> + <name>QODBCResult</name> + <message> + <location line="-926"/> + <location line="+346"/> + <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> + <translation>QODBCResult::reset: ni moč nastaviti 'SQL_CURSOR_STATIC' kot lastnosti izjave. Preverite nastavitve gonilnika ODBC</translation> + </message> + <message> + <location line="-329"/> + <location line="+623"/> + <source>Unable to execute statement</source> + <translation>Ni moč izvesti izjave</translation> + </message> + <message> + <location line="-547"/> + <source>Unable to fetch next</source> + <translation>Ni moč pridobiti sledečega</translation> + </message> + <message> + <location line="+271"/> + <source>Unable to prepare statement</source> + <translation>Ni moč pripraviti izjave</translation> + </message> + <message> + <location line="+268"/> + <source>Unable to bind variable</source> + <translation>Ni moč prikleniti spremenljivke</translation> + </message> + <message> + <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+190"/> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-467"/> + <location line="+576"/> + <source>Unable to fetch last</source> + <translation>Ni moč pridobiti zadnjega</translation> + </message> + <message> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-670"/> + <source>Unable to fetch</source> + <translation>Ni moč pridobiti</translation> + </message> + <message> + <location line="+44"/> + <source>Unable to fetch first</source> + <translation>Ni moč pridobiti prvega</translation> + </message> + <message> + <location line="+19"/> + <source>Unable to fetch previous</source> + <translation>Ni moč pridobiti predhodnega</translation> + </message> +</context> +<context> + <name>QObject</name> + <message> + <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="-101"/> + <source>Invalid hostname</source> + <translation>Neveljavno ime gostitelja</translation> + </message> + <message> + <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+74"/> + <source>Operation not supported on %1</source> + <translation>Dejanje na %1 ni podprto</translation> + </message> + <message> + <location line="+57"/> + <source>Invalid URI: %1</source> + <translation>Neveljaven URI: %1</translation> + </message> + <message> + <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+60"/> + <source>Socket error on %1: %2</source> + <translation>Napaka vtičnice na %1: %2</translation> + </message> + <message> + <location line="+15"/> + <source>Remote host closed the connection prematurely on %1</source> + <translation>Oddaljen gostitelj je predčasno prekinil povezavo na %1</translation> + </message> + <message> + <location filename="../src/network/kernel/qhostinfo.cpp" line="+175"/> + <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+0"/> + <source>No host name given</source> + <translation>Podano ni bilo nobeno ime gostitelja</translation> + </message> + <message> + <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+60"/> + <source>audio equalizer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Bass boost</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Distance Attenuation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <location line="+2"/> + <source>Environmental Reverb</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Loudness</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Source Orientation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Stereo Widening</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QPPDOptionsModel</name> + <message> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1198"/> + <source>Name</source> + <translation>Ime</translation> + </message> + <message> + <location line="+2"/> + <source>Value</source> + <translation>Vrednost</translation> + </message> +</context> +<context> + <name>QPSQLDriver</name> + <message> + <location filename="../src/sql/drivers/psql/qsql_psql.cpp" line="+782"/> + <source>Unable to connect</source> + <translation>Ni moč vzpostaviti povezave</translation> + </message> + <message> + <location line="+49"/> + <source>Could not begin transaction</source> + <translation>Ni bilo moč začeti transakcije</translation> + </message> + <message> + <location line="+30"/> + <source>Could not commit transaction</source> + <translation>Ni bilo moč udejaniti transakcije</translation> + </message> + <message> + <location line="+16"/> + <source>Could not rollback transaction</source> + <translation>Ni bilo moč razveljaviti transakcije</translation> + </message> + <message> + <location line="+374"/> + <source>Unable to subscribe</source> + <translation>Ni se moč naročiti</translation> + </message> + <message> + <location line="+32"/> + <source>Unable to unsubscribe</source> + <translation>Ni moč preklicati naročnine</translation> + </message> +</context> +<context> + <name>QPSQLResult</name> + <message> + <location line="-1085"/> + <source>Unable to create query</source> + <translation>Ni moč ustvariti poizvedbe</translation> + </message> + <message> + <location line="+372"/> + <source>Unable to prepare statement</source> + <translation>Ni moč pripraviti izjave</translation> + </message> +</context> +<context> + <name>QPageSetupWidget</name> + <message> + <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+304"/> + <source>Centimeters (cm)</source> + <translation>Centimetri (cm)</translation> + </message> + <message> + <location line="+0"/> + <source>Millimeters (mm)</source> + <translation>Milimetri (mm)</translation> + </message> + <message> + <location line="+0"/> + <source>Inches (in)</source> + <translation>Palci (in)</translation> + </message> + <message> + <location line="+0"/> + <source>Points (pt)</source> + <translation>Pike (pt)</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qpagesetupwidget.ui"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location/> + <source>Paper</source> + <translation>Papir</translation> + </message> + <message> + <location/> + <source>Page size:</source> + <translation>Velikost strani:</translation> + </message> + <message> + <location/> + <source>Width:</source> + <translation>Širina:</translation> + </message> + <message> + <location/> + <source>Height:</source> + <translation>Višina:</translation> + </message> + <message> + <location/> + <source>Paper source:</source> + <translation>Vir papirja:</translation> + </message> + <message> + <location/> + <source>Orientation</source> + <translation>Usmeritev</translation> + </message> + <message> + <location/> + <source>Portrait</source> + <translation>Pokončno</translation> + </message> + <message> + <location/> + <source>Landscape</source> + <translation>Ležeče</translation> + </message> + <message> + <location/> + <source>Reverse landscape</source> + <translation>Obrnjeno ležeče</translation> + </message> + <message> + <location/> + <source>Reverse portrait</source> + <translation>Obrnjeno pokončno</translation> + </message> + <message> + <location/> + <source>Margins</source> + <translation>Robovi</translation> + </message> + <message> + <location/> + <source>top margin</source> + <translation>vrhnji rob</translation> + </message> + <message> + <location/> + <source>left margin</source> + <translation>levi rob</translation> + </message> + <message> + <location/> + <source>right margin</source> + <translation>desni rob</translation> + </message> + <message> + <location/> + <source>bottom margin</source> + <translation>spodnji rob</translation> + </message> +</context> +<context> + <name>QPluginLoader</name> + <message> + <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+24"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> + <message> + <location line="-113"/> + <source>The plugin was not loaded.</source> + <translation>Vstavek ni bil naložen.</translation> + </message> +</context> +<context> + <name>QPrintDialog</name> + <message> + <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+108"/> + <source>locally connected</source> + <translation>krajevno povezan</translation> + </message> + <message> + <location line="+23"/> + <location line="+225"/> + <source>Aliases: %1</source> + <translation>Vzdevki: %1</translation> + </message> + <message> + <location line="+223"/> + <location line="+199"/> + <source>unknown</source> + <translation>neznano</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+329"/> + <source>A0 (841 x 1189 mm)</source> + <translation>A0 (841 x 1189 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>A1 (594 x 841 mm)</source> + <translation>A1 (594 x 841 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>A2 (420 x 594 mm)</source> + <translation>A2 (420 x 594 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>A3 (297 x 420 mm)</source> + <translation>A3 (297 x 420 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source> + <translation>A4 (210 x 297 mm, 8,26 x 11,7 palcev)</translation> + </message> + <message> + <location line="+1"/> + <source>A5 (148 x 210 mm)</source> + <translation>A5 (148 x 210 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>A6 (105 x 148 mm)</source> + <translation>A6 (105 x 148 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>A7 (74 x 105 mm)</source> + <translation>A7 (74 x 105 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>A8 (52 x 74 mm)</source> + <translation>A8 (52 x 74 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>A9 (37 x 52 mm)</source> + <translation>A9 (37 x 52 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B0 (1000 x 1414 mm)</source> + <translation>B0 (1000 x 1414 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B1 (707 x 1000 mm)</source> + <translation>B1 (707 x 1000 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B2 (500 x 707 mm)</source> + <translation>B2 (500 x 707 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B3 (353 x 500 mm)</source> + <translation>B3 (353 x 500 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B4 (250 x 353 mm)</source> + <translation>B4 (250 x 353 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source> + <translation>B5 (176 x 250 mm, 6,93 x 9,84 palcev)</translation> + </message> + <message> + <location line="+1"/> + <source>B6 (125 x 176 mm)</source> + <translation>B6 (125 x 176 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B7 (88 x 125 mm)</source> + <translation>B7 (88 x 125 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B8 (62 x 88 mm)</source> + <translation>B8 (62 x 88 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B9 (44 x 62 mm)</source> + <translation>B9 (44 x 62 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>B10 (31 x 44 mm)</source> + <translation>B10 (31 x 44 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>C5E (163 x 229 mm)</source> + <translation>C5E (163 x 229 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>DLE (110 x 220 mm)</source> + <translation>DLE (110 x 220 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source> + <translation>Executive (7,5 x 10 palcev, 191 x 254 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>Folio (210 x 330 mm)</source> + <translation>Folio (210 x 330 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>Ledger (432 x 279 mm)</source> + <translation>Ledger (432 x 279 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source> + <translation>Legal (8,5 x 14 palcev, 216 x 356 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source> + <translation>Letter (8,5 x 11 palcev, 216 x 279 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>Tabloid (279 x 432 mm)</source> + <translation>Tabloid (279 x 432 mm)</translation> + </message> + <message> + <location line="+1"/> + <source>US Common #10 Envelope (105 x 241 mm)</source> + <translation>US Common #10 Envelope (105 x 241 mm)</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+259"/> + <source>OK</source> + <translation>V redu</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+112"/> + <location line="+13"/> + <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="-2"/> + <source>Print</source> + <translation>Natisni</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-357"/> + <source>Print To File ...</source> + <translation>Natisni v datoteko ...</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+19"/> + <source>Print range</source> + <translation>Natisni obseg</translation> + </message> + <message> + <location line="-2"/> + <source>Print all</source> + <translation>Natisni vse</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+80"/> + <source>File %1 is not writable. +Please choose a different file name.</source> + <translation>V datoteko %1 ni moč pisati. +Izberite drugo ime datoteke.</translation> + </message> + <message> + <location line="+4"/> + <source>%1 already exists. +Do you want to overwrite it?</source> + <translation>%1 že obstaja. +Ali jo želite nadomestiti?</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-227"/> + <source>File exists</source> + <translation>Datoteka obstaja</translation> + </message> + <message> + <location line="+1"/> + <source><qt>Do you want to overwrite it?</qt></source> + <translation><qt>Ali jo želite nadomestiti?</qt></translation> + </message> + <message> + <location line="+227"/> + <source>Print selection</source> + <translation>Natisni izbor</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-8"/> + <source>%1 is a directory. +Please choose a different file name.</source> + <translation>%1 je mapa. +Izberite drugo ime datoteke.</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="-232"/> + <source>A0</source> + <translation>A0</translation> + </message> + <message> + <location line="+1"/> + <source>A1</source> + <translation>A1</translation> + </message> + <message> + <location line="+1"/> + <source>A2</source> + <translation>A2</translation> + </message> + <message> + <location line="+1"/> + <source>A3</source> + <translation>A3</translation> + </message> + <message> + <location line="+1"/> + <source>A4</source> + <translation>A4</translation> + </message> + <message> + <location line="+1"/> + <source>A5</source> + <translation>A5</translation> + </message> + <message> + <location line="+1"/> + <source>A6</source> + <translation>A6</translation> + </message> + <message> + <location line="+1"/> + <source>A7</source> + <translation>A7</translation> + </message> + <message> + <location line="+1"/> + <source>A8</source> + <translation>A8</translation> + </message> + <message> + <location line="+1"/> + <source>A9</source> + <translation>A9</translation> + </message> + <message> + <location line="+1"/> + <source>B0</source> + <translation>B0</translation> + </message> + <message> + <location line="+1"/> + <source>B1</source> + <translation>B1</translation> + </message> + <message> + <location line="+1"/> + <source>B2</source> + <translation>B2</translation> + </message> + <message> + <location line="+1"/> + <source>B3</source> + <translation>B3</translation> + </message> + <message> + <location line="+1"/> + <source>B4</source> + <translation>B4</translation> + </message> + <message> + <location line="+1"/> + <source>B5</source> + <translation>B5</translation> + </message> + <message> + <location line="+1"/> + <source>B6</source> + <translation>B6</translation> + </message> + <message> + <location line="+1"/> + <source>B7</source> + <translation>B7</translation> + </message> + <message> + <location line="+1"/> + <source>B8</source> + <translation>B8</translation> + </message> + <message> + <location line="+1"/> + <source>B9</source> + <translation>B9</translation> + </message> + <message> + <location line="+1"/> + <source>B10</source> + <translation>B10</translation> + </message> + <message> + <location line="+1"/> + <source>C5E</source> + <translation>C5E</translation> + </message> + <message> + <location line="+1"/> + <source>DLE</source> + <translation>DLE</translation> + </message> + <message> + <location line="+1"/> + <source>Executive</source> + <translation>Executive</translation> + </message> + <message> + <location line="+1"/> + <source>Folio</source> + <translation>Folio</translation> + </message> + <message> + <location line="+1"/> + <source>Ledger</source> + <translation>Ledger</translation> + </message> + <message> + <location line="+1"/> + <source>Legal</source> + <translation>Legal</translation> + </message> + <message> + <location line="+1"/> + <source>Letter</source> + <translation>Letter</translation> + </message> + <message> + <location line="+1"/> + <source>Tabloid</source> + <translation>Tabloid</translation> + </message> + <message> + <location line="+1"/> + <source>US Common #10 Envelope</source> + <translation>US Common #10 Envelope</translation> + </message> + <message> + <location line="+1"/> + <source>Custom</source> + <translation>Po meri</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-524"/> + <location line="+68"/> + <source>&Options >></source> + <translation>&Možnosti »</translation> + </message> + <message> + <location line="-63"/> + <source>&Print</source> + <translation>Na&tisni</translation> + </message> + <message> + <location line="+67"/> + <source>&Options <<</source> + <translation>&Možnosti «</translation> + </message> + <message> + <location line="+253"/> + <source>Print to File (PDF)</source> + <translation>Natisni v datoteko (PDF)</translation> + </message> + <message> + <location line="+1"/> + <source>Print to File (Postscript)</source> + <translation>Natisni v datoteko (PostScript)</translation> + </message> + <message> + <location line="+47"/> + <source>Local file</source> + <translation>Krajevna datoteka</translation> + </message> + <message> + <location line="+1"/> + <source>Write %1 file</source> + <translation>Zapiši datoteko %1</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+1"/> + <source>The 'From' value cannot be greater than the 'To' value.</source> + <translation>Vrednost »Od« ne more biti večja od vrednosti »Do«.</translation> + </message> +</context> +<context> + <name>QPrintPreviewDialog</name> + <message> + <location filename="../src/gui/dialogs/qabstractpagesetupdialog.cpp" line="+68"/> + <location line="+12"/> + <source>Page Setup</source> + <translation>Nastavitve strani</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+246"/> + <source>%1%</source> + <translation>%1 %</translation> + </message> + <message> + <location line="+68"/> + <source>Print Preview</source> + <translation>Ogled tiskanja</translation> + </message> + <message> + <location line="+30"/> + <source>Next page</source> + <translation>Naslednja stran</translation> + </message> + <message> + <location line="+1"/> + <source>Previous page</source> + <translation>Predhodna stran</translation> + </message> + <message> + <location line="+1"/> + <source>First page</source> + <translation>&Prva stran</translation> + </message> + <message> + <location line="+1"/> + <source>Last page</source> + <translation>&Zadnja stran</translation> + </message> + <message> + <location line="+9"/> + <source>Fit width</source> + <translation>Prilagodi &širini</translation> + </message> + <message> + <location line="+1"/> + <source>Fit page</source> + <translation>Prilagodi strani</translation> + </message> + <message> + <location line="+11"/> + <source>Zoom in</source> + <translation>Povečaj</translation> + </message> + <message> + <location line="+1"/> + <source>Zoom out</source> + <translation>Zmanjšaj</translation> + </message> + <message> + <location line="+6"/> + <source>Portrait</source> + <translation>Pokončno</translation> + </message> + <message> + <location line="+1"/> + <source>Landscape</source> + <translation>Ležeče</translation> + </message> + <message> + <location line="+10"/> + <source>Show single page</source> + <translation>Prikaži enojno stran</translation> + </message> + <message> + <location line="+1"/> + <source>Show facing pages</source> + <translation>Prikaži dve strani</translation> + </message> + <message> + <location line="+1"/> + <source>Show overview of all pages</source> + <translation>Prikaži ogled vseh strani</translation> + </message> + <message> + <location line="+15"/> + <source>Print</source> + <translation>Natisni</translation> + </message> + <message> + <location line="+1"/> + <source>Page setup</source> + <translation>Nastavitve strani</translation> + </message> + <message> + <location line="+150"/> + <source>Export to PDF</source> + <translation>Izvozi v PDF</translation> + </message> + <message> + <location line="+3"/> + <source>Export to PostScript</source> + <translation>Izvozi v PostScript</translation> + </message> +</context> +<context> + <name>QPrintPropertiesWidget</name> + <message> + <location filename="../src/gui/dialogs/qprintpropertieswidget.ui"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location/> + <source>Page</source> + <translation>Stran</translation> + </message> + <message> + <location/> + <source>Advanced</source> + <translation>Napredno</translation> + </message> +</context> +<context> + <name>QPrintSettingsOutput</name> + <message> + <location filename="../src/gui/dialogs/qprintsettingsoutput.ui"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location/> + <source>Copies</source> + <translation>Izvodi</translation> + </message> + <message> + <location/> + <source>Print range</source> + <translation>Obseg tiskanja</translation> + </message> + <message> + <location/> + <source>Print all</source> + <translation>Natisni vse</translation> + </message> + <message> + <location/> + <source>Pages from</source> + <translation>Strani od</translation> + </message> + <message> + <location/> + <source>to</source> + <translation>do</translation> + </message> + <message> + <location/> + <source>Selection</source> + <translation>Izbor</translation> + </message> + <message> + <location/> + <source>Output Settings</source> + <translation>Nastavitve izpisa</translation> + </message> + <message> + <location/> + <source>Copies:</source> + <translation>Izvodi:</translation> + </message> + <message> + <location/> + <source>Collate</source> + <translation>Združi</translation> + </message> + <message> + <location/> + <source>Reverse</source> + <translation>V nasprotno smer</translation> + </message> + <message> + <location/> + <source>Options</source> + <translation>Možnosti</translation> + </message> + <message> + <location/> + <source>Color Mode</source> + <translation>Barvni način</translation> + </message> + <message> + <location/> + <source>Color</source> + <translation>Barva</translation> + </message> + <message> + <location/> + <source>Grayscale</source> + <translation>Sivinsko</translation> + </message> + <message> + <location/> + <source>Duplex Printing</source> + <translation>Dvostransko tiskanje</translation> + </message> + <message> + <location/> + <source>None</source> + <translation>Brez</translation> + </message> + <message> + <location/> + <source>Long side</source> + <translation>Dolga stranica</translation> + </message> + <message> + <location/> + <source>Short side</source> + <translation>Kratka stranica</translation> + </message> +</context> +<context> + <name>QPrintWidget</name> + <message> + <location filename="../src/gui/dialogs/qprintwidget.ui"/> + <source>Form</source> + <translation>Obrazec</translation> + </message> + <message> + <location/> + <source>Printer</source> + <translation>Tiskalnik</translation> + </message> + <message> + <location/> + <source>&Name:</source> + <translation>&Ime:</translation> + </message> + <message> + <location/> + <source>P&roperties</source> + <translation>&Lastnosti ...</translation> + </message> + <message> + <location/> + <source>Location:</source> + <translation>Lokacija:</translation> + </message> + <message> + <location/> + <source>Preview</source> + <translation>Ogled</translation> + </message> + <message> + <location/> + <source>Type:</source> + <translation>Vrsta:</translation> + </message> + <message> + <location/> + <source>Output &file:</source> + <translation>Izhodna d&atoteka:</translation> + </message> + <message> + <location/> + <source>...</source> + <translation>...</translation> + </message> +</context> +<context> + <name>QProcess</name> + <message> + <location filename="../src/corelib/io/qprocess_unix.cpp" line="+402"/> + <location filename="../src/corelib/io/qprocess_win.cpp" line="+137"/> + <source>Could not open input redirection for reading</source> + <translation>Preusmeritve vhoda ni bilo moč odpreti za branje</translation> + </message> + <message> + <location line="+12"/> + <location filename="../src/corelib/io/qprocess_win.cpp" line="+20"/> + <source>Could not open output redirection for writing</source> + <translation>Preusmeritve izhoda ni bilo moč odpreti za pisanje</translation> + </message> + <message> + <location line="+239"/> + <source>Resource error (fork failure): %1</source> + <translation>Napaka vira (spodletela odcepitev): %1</translation> + </message> + <message> + <location line="+252"/> + <location line="+52"/> + <location line="+74"/> + <location line="+66"/> + <location filename="../src/corelib/io/qprocess_win.cpp" line="+406"/> + <location line="+50"/> + <location line="+75"/> + <location line="+42"/> + <location line="+54"/> + <source>Process operation timed out</source> + <translation>Čas za dejanje procesa je potekel</translation> + </message> + <message> + <location filename="../src/corelib/io/qprocess.cpp" line="+851"/> + <location line="+52"/> + <location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/> + <location line="+50"/> + <source>Error reading from process</source> + <translation>Napaka pri branju iz procesa</translation> + </message> + <message> + <location line="+47"/> + <location line="+826"/> + <location filename="../src/corelib/io/qprocess_win.cpp" line="+140"/> + <source>Error writing to process</source> + <translation>Napak pri pisanju v proces</translation> + </message> + <message> + <location line="-756"/> + <source>Process crashed</source> + <translation>Program se je sesul</translation> + </message> + <message> + <location line="+959"/> + <source>No program defined</source> + <translation>Določenega ni nobenega programa</translation> + </message> + <message> + <location filename="../src/corelib/io/qprocess_win.cpp" line="-360"/> + <source>Process failed to start: %1</source> + <translation>Proces se ni uspel zagnati: %1</translation> + </message> +</context> +<context> + <name>QProgressDialog</name> + <message> + <location filename="../src/gui/dialogs/qprogressdialog.cpp" line="+196"/> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> +</context> +<context> + <name>QPushButton</name> + <message> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-8"/> + <source>Open</source> + <translation>Odpri</translation> + </message> +</context> +<context> + <name>QRadioButton</name> + <message> + <location line="+12"/> + <source>Check</source> + <translation>Označi</translation> + </message> +</context> +<context> + <name>QRegExp</name> + <message> + <location filename="../src/corelib/tools/qregexp.cpp" line="+65"/> + <source>no error occurred</source> + <translation>ni nobene napake</translation> + </message> + <message> + <location line="+1"/> + <source>disabled feature used</source> + <translation>uporabljena onemogočena zmožnost</translation> + </message> + <message> + <location line="+1"/> + <source>bad char class syntax</source> + <translation>napačna sintaksa znakovnega razreda</translation> + </message> + <message> + <location line="+1"/> + <source>bad lookahead syntax</source> + <translation>napačna sintaksa pogleda naprej</translation> + </message> + <message> + <location line="+1"/> + <source>bad repetition syntax</source> + <translation>napačna sintaksa ponavljanja</translation> + </message> + <message> + <location line="+1"/> + <source>invalid octal value</source> + <translation>neveljavna osmiška vrednost</translation> + </message> + <message> + <location line="+1"/> + <source>missing left delim</source> + <translation>manjkajoč levi razmejitelj</translation> + </message> + <message> + <location line="+1"/> + <source>unexpected end</source> + <translation>nepričakovan konece</translation> + </message> + <message> + <location line="+1"/> + <source>met internal limit</source> + <translation>dosežena notranja omejitev</translation> + </message> + <message> + <location line="+1"/> + <source>invalid interval</source> + <translation>neveljaven interval</translation> + </message> + <message> + <location line="+1"/> + <source>invalid category</source> + <translation>neveljavna kategorija</translation> + </message> +</context> +<context> + <name>QSQLite2Driver</name> + <message> + <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+391"/> + <source>Error opening database</source> + <translation>Napaka pri odpiranju podatkovne zbirke</translation> + </message> + <message> + <location line="+41"/> + <source>Unable to begin transaction</source> + <translation>Ni moč začeti transakcije</translation> + </message> + <message> + <location line="+17"/> + <source>Unable to commit transaction</source> + <translation>Ni moč udejaniti transakcije</translation> + </message> + <message> + <location line="+17"/> + <source>Unable to rollback transaction</source> + <translation>Ni moč razveljaviti transakcije</translation> + </message> +</context> +<context> + <name>QSQLite2Result</name> + <message> + <location line="-319"/> + <source>Unable to fetch results</source> + <translation>Ni moč pridobiti rezultatov</translation> + </message> + <message> + <location line="+143"/> + <source>Unable to execute statement</source> + <translation>Ni moč izvesti izjave</translation> + </message> +</context> +<context> + <name>QSQLiteDriver</name> + <message> + <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+544"/> + <source>Error opening database</source> + <translation>Napaka pri odpiranju podatkovne zbirke</translation> + </message> + <message> + <location line="+11"/> + <source>Error closing database</source> + <translation>Napaka pri zapiranju podatkovne zbirke</translation> + </message> + <message> + <location line="+20"/> + <source>Unable to begin transaction</source> + <translation>Ni moč začeti transakcije</translation> + </message> + <message> + <location line="+15"/> + <source>Unable to commit transaction</source> + <translation>Ni moč udejaniti transakcije</translation> + </message> + <message> + <location line="+15"/> + <source>Unable to rollback transaction</source> + <translation>Ni moč razveljaviti transakcije</translation> + </message> +</context> +<context> + <name>QSQLiteResult</name> + <message> + <location line="-408"/> + <location line="+66"/> + <location line="+8"/> + <source>Unable to fetch row</source> + <translation>Ni moč pridobiti vrstice</translation> + </message> + <message> + <location line="+59"/> + <source>Unable to execute statement</source> + <translation>Ni moč izvesti izjave</translation> + </message> + <message> + <location line="+20"/> + <source>Unable to reset statement</source> + <translation>Ni moč ponastaviti izjave</translation> + </message> + <message> + <location line="+45"/> + <source>Unable to bind parameters</source> + <translation>Ni moč prikleniti parametrov</translation> + </message> + <message> + <location line="+7"/> + <source>Parameter count mismatch</source> + <translation>Neujemanje v številu parametrov</translation> + </message> + <message> + <location line="-204"/> + <source>No query</source> + <translation>Brez poizvedbe</translation> + </message> +</context> +<context> + <name>QScriptBreakpointsModel</name> + <message> + <location filename="../src/scripttools/debugging/qscriptbreakpointsmodel.cpp" line="+455"/> + <source>ID</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Location</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Condition</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Ignore-count</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Single-shot</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Hit-count</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QScriptBreakpointsWidget</name> + <message> + <location filename="../src/scripttools/debugging/qscriptbreakpointswidget.cpp" line="+298"/> + <source>New</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Delete</source> + <translation type="unfinished">Izbriši</translation> + </message> +</context> +<context> + <name>QScriptDebugger</name> + <message> + <location filename="../src/scripttools/debugging/qscriptdebugger.cpp" line="+885"/> + <location line="+1013"/> + <source>Go to Line</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-1012"/> + <source>Line:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+791"/> + <source>Interrupt</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Shift+F5</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Continue</source> + <translation type="unfinished">Nadaljuj</translation> + </message> + <message> + <location line="+2"/> + <source>F5</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Step Into</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>F11</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Step Over</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>F10</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Step Out</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Shift+F11</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Run to Cursor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Ctrl+F10</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>Run to New Script</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Toggle Breakpoint</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>F9</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>Clear Debug Output</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>Clear Error Log</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>Clear Console</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>&Find in Script...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Ctrl+F</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+17"/> + <source>Find &Next</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>F3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>Find &Previous</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Shift+F3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>Ctrl+G</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Debug</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QScriptDebuggerCodeFinderWidget</name> + <message> + <location filename="../src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp" line="+141"/> + <source>Close</source> + <translation type="unfinished">Zapri</translation> + </message> + <message> + <location line="+13"/> + <source>Previous</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Next</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Case Sensitive</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Whole words</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source><img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QScriptDebuggerLocalsModel</name> + <message> + <location filename="../src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp" line="+872"/> + <source>Name</source> + <translation type="unfinished">Ime</translation> + </message> + <message> + <location line="+2"/> + <source>Value</source> + <translation type="unfinished">Vrednost</translation> + </message> +</context> +<context> + <name>QScriptDebuggerStackModel</name> + <message> + <location filename="../src/scripttools/debugging/qscriptdebuggerstackmodel.cpp" line="+161"/> + <source>Level</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Name</source> + <translation type="unfinished">Ime</translation> + </message> + <message> + <location line="+2"/> + <source>Location</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QScriptEdit</name> + <message> + <location filename="../src/scripttools/debugging/qscriptedit.cpp" line="+411"/> + <source>Toggle Breakpoint</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Disable Breakpoint</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Enable Breakpoint</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Breakpoint Condition:</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QScriptEngineDebugger</name> + <message> + <location filename="../src/scripttools/debugging/qscriptenginedebugger.cpp" line="+523"/> + <source>Loaded Scripts</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Breakpoints</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Stack</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Locals</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Console</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Debug Output</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Error Log</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Search</source> + <translation type="unfinished">Išči</translation> + </message> + <message> + <location line="+7"/> + <source>View</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>Qt Script Debugger</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QScriptNewBreakpointWidget</name> + <message> + <location filename="../src/scripttools/debugging/qscriptbreakpointswidget.cpp" line="-223"/> + <source>Close</source> + <translation type="unfinished">Zapri</translation> + </message> +</context> +<context> + <name>QScrollBar</name> + <message> + <location filename="../src/gui/widgets/qscrollbar.cpp" line="+454"/> + <source>Scroll here</source> + <translation>Premakni sem</translation> + </message> + <message> + <location line="+2"/> + <source>Left edge</source> + <translation>Levi rob</translation> + </message> + <message> + <location line="+0"/> + <source>Top</source> + <translation>Vrh</translation> + </message> + <message> + <location line="+1"/> + <source>Right edge</source> + <translation>Desni rob</translation> + </message> + <message> + <location line="+0"/> + <source>Bottom</source> + <translation>Dno</translation> + </message> + <message> + <location line="+2"/> + <source>Page left</source> + <translation>Za stran levo</translation> + </message> + <message> + <location line="+0"/> + <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+143"/> + <source>Page up</source> + <translation>Za stran gor</translation> + </message> + <message> + <location line="+1"/> + <source>Page right</source> + <translation>Za stran desno</translation> + </message> + <message> + <location line="+0"/> + <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+4"/> + <source>Page down</source> + <translation>Za stran dol</translation> + </message> + <message> + <location line="+2"/> + <source>Scroll left</source> + <translation>Premakni levo</translation> + </message> + <message> + <location line="+0"/> + <source>Scroll up</source> + <translation>Premakni gor</translation> + </message> + <message> + <location line="+1"/> + <source>Scroll right</source> + <translation>Premakni desno</translation> + </message> + <message> + <location line="+0"/> + <source>Scroll down</source> + <translation>Premakni dol</translation> + </message> + <message> + <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-6"/> + <source>Line up</source> + <translation>V vrsto</translation> + </message> + <message> + <location line="+4"/> + <source>Position</source> + <translation>Položaj</translation> + </message> + <message> + <location line="+4"/> + <source>Line down</source> + <translation>Za vrstico dol</translation> + </message> +</context> +<context> + <name>QSharedMemory</name> + <message> + <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="+223"/> + <source>%1: unable to set key on lock</source> + <translation>%1: ni moč nastaviti ključa na zaklep</translation> + </message> + <message> + <location line="+81"/> + <source>%1: create size is less then 0</source> + <translation>%1: velikost je manjša od 0</translation> + </message> + <message> + <location line="+168"/> + <location filename="../src/corelib/kernel/qsharedmemory_p.h" line="+155"/> + <source>%1: unable to lock</source> + <translation>%1: ni moč zakleniti</translation> + </message> + <message> + <location line="+22"/> + <source>%1: unable to unlock</source> + <translation>%1: ni moč odkleniti</translation> + </message> + <message> + <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+83"/> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+80"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/> + <source>%1: permission denied</source> + <translation>%1: nimate dovoljenja</translation> + </message> + <message> + <location line="-16"/> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+4"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-22"/> + <source>%1: already exists</source> + <translation>%1: že obstaja</translation> + </message> + <message> + <location line="+4"/> + <source>%1: doesn't exists</source> + <translation>%1: ne obstaja</translation> + </message> + <message> + <location line="+8"/> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+10"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+18"/> + <source>%1: out of resources</source> + <translation>%1: zmanjkalo je virov</translation> + </message> + <message> + <location line="+7"/> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+4"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+7"/> + <source>%1: unknown error %2</source> + <translation>%1: neznana napaka %2</translation> + </message> + <message> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+21"/> + <source>%1: key is empty</source> + <translation>%1: ključ je prazen</translation> + </message> + <message> + <location line="+15"/> + <source>%1: ftok failed</source> + <translation>%1: funkcija ftok ni uspela</translation> + </message> + <message> + <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+56"/> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+51"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+15"/> + <source>%1: unable to make key</source> + <translation>%1: ni moč ustvariti ključa</translation> + </message> + <message> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="-97"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-31"/> + <source>%1: doesn't exist</source> + <translation>%1: ne obstaja</translation> + </message> + <message> + <location line="+39"/> + <source>%1: UNIX key file doesn't exist</source> + <translation>%1: UNIX-ova zaklepna datoteka ne obstaja</translation> + </message> + <message> + <location line="+78"/> + <source>%1: system-imposed size restrictions</source> + <translation>%1: sistemsko vsiljene omejitve velikosti</translation> + </message> + <message> + <location line="+53"/> + <source>%1: not attached</source> + <translation>%1: ni pripeto</translation> + </message> + <message> + <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="-67"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+4"/> + <source>%1: invalid size</source> + <translation>%1: neveljavna velikost</translation> + </message> + <message> + <location line="+40"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+63"/> + <source>%1: key error</source> + <translation>%1: napaka ključa</translation> + </message> + <message> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+32"/> + <source>%1: size query failed</source> + <translation>%1: poizvedba po velikosti ni uspela</translation> + </message> +</context> +<context> + <name>QShortcut</name> + <message> + <location filename="../src/gui/kernel/qkeysequence.cpp" line="+393"/> + <source>Space</source> + <translation>Preslednica</translation> + </message> + <message> + <location line="+1"/> + <source>Esc</source> + <translation>Esc</translation> + </message> + <message> + <location line="+1"/> + <source>Tab</source> + <translation>Tabulator</translation> + </message> + <message> + <location line="+1"/> + <source>Backtab</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Backspace</source> + <translation>Vračalka</translation> + </message> + <message> + <location line="+1"/> + <source>Return</source> + <translation>Return</translation> + </message> + <message> + <location line="+1"/> + <source>Enter</source> + <translation>Vnesi</translation> + </message> + <message> + <location line="+1"/> + <source>Ins</source> + <translation>Ins</translation> + </message> + <message> + <location line="+1"/> + <source>Del</source> + <translation>Del</translation> + </message> + <message> + <location line="+1"/> + <source>Pause</source> + <translation>Premor</translation> + </message> + <message> + <location line="+1"/> + <source>Print</source> + <translation>Natisni</translation> + </message> + <message> + <location line="+1"/> + <source>SysReq</source> + <translation>SysReq</translation> + </message> + <message> + <location line="+1"/> + <source>Home</source> + <translation>Začetek</translation> + </message> + <message> + <location line="+1"/> + <source>End</source> + <translation>Konec</translation> + </message> + <message> + <location line="+1"/> + <source>Left</source> + <translation>Levo</translation> + </message> + <message> + <location line="+1"/> + <source>Up</source> + <translation>Gor</translation> + </message> + <message> + <location line="+1"/> + <source>Right</source> + <translation>Desno</translation> + </message> + <message> + <location line="+1"/> + <source>Down</source> + <translation>Dol</translation> + </message> + <message> + <location line="+1"/> + <source>PgUp</source> + <translation>PgUp</translation> + </message> + <message> + <location line="+1"/> + <source>PgDown</source> + <translation>PgDown</translation> + </message> + <message> + <location line="+1"/> + <source>CapsLock</source> + <translation>CapsLock</translation> + </message> + <message> + <location line="+1"/> + <source>NumLock</source> + <translation>NumLock</translation> + </message> + <message> + <location line="+1"/> + <source>ScrollLock</source> + <translation>ScrollLock</translation> + </message> + <message> + <location line="+1"/> + <source>Menu</source> + <translation>Meni</translation> + </message> + <message> + <location line="+1"/> + <source>Help</source> + <translation>Pomoč</translation> + </message> + <message> + <location line="+3"/> + <source>Back</source> + <translation>Predhodna</translation> + </message> + <message> + <location line="+1"/> + <source>Forward</source> + <translation>Naslednja</translation> + </message> + <message> + <location line="+1"/> + <source>Stop</source> + <translation>Ustavi</translation> + </message> + <message> + <location line="+1"/> + <source>Refresh</source> + <translation>Osveži</translation> + </message> + <message> + <location line="+1"/> + <source>Volume Down</source> + <translation>Tiše</translation> + </message> + <message> + <location line="+1"/> + <source>Volume Mute</source> + <translation>Tiho</translation> + </message> + <message> + <location line="+1"/> + <source>Volume Up</source> + <translation>Glasneje</translation> + </message> + <message> + <location line="+1"/> + <source>Bass Boost</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Bass Up</source> + <translation>Več basov</translation> + </message> + <message> + <location line="+1"/> + <source>Bass Down</source> + <translation>Manj basov</translation> + </message> + <message> + <location line="+1"/> + <source>Treble Up</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Treble Down</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Media Play</source> + <translation>Predvajaj večpredstavnost</translation> + </message> + <message> + <location line="+1"/> + <source>Media Stop</source> + <translation>Ustavi večpredstavnost</translation> + </message> + <message> + <location line="+1"/> + <source>Media Previous</source> + <translation>Predhodna večpredstavnost</translation> + </message> + <message> + <location line="+1"/> + <source>Media Next</source> + <translation>Naslednja večpredstavnost</translation> + </message> + <message> + <location line="+1"/> + <source>Media Record</source> + <translation>Snemaj večpredstavnost</translation> + </message> + <message> + <location line="+2"/> + <source>Favorites</source> + <translation>Priljubljeno</translation> + </message> + <message> + <location line="+1"/> + <source>Search</source> + <translation>Išči</translation> + </message> + <message> + <location line="+1"/> + <source>Standby</source> + <translation>V pripravljenost</translation> + </message> + <message> + <location line="+1"/> + <source>Open URL</source> + <translation>Odpri URL</translation> + </message> + <message> + <location line="+1"/> + <source>Launch Mail</source> + <translation>Zaženi pošto</translation> + </message> + <message> + <location line="+1"/> + <source>Launch Media</source> + <translation>Zaženi večpredstavnost</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (0)</source> + <translation>Zaženi (0)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (1)</source> + <translation>Zaženi (1)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (2)</source> + <translation>Zaženi (2)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (3)</source> + <translation>Zaženi (3)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (4)</source> + <translation>Zaženi (4)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (5)</source> + <translation>Zaženi (5)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (6)</source> + <translation>Zaženi (6)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (7)</source> + <translation>Zaženi (7)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (8)</source> + <translation>Zaženi (8)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (9)</source> + <translation>Zaženi (9)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (A)</source> + <translation>Zaženi (A)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (B)</source> + <translation>Zaženi (B)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (C)</source> + <translation>Zaženi (C)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (D)</source> + <translation>Zaženi (D)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (E)</source> + <translation>Zaženi (E)</translation> + </message> + <message> + <location line="+1"/> + <source>Launch (F)</source> + <translation>Zaženi (F)</translation> + </message> + <message> + <location line="+4"/> + <source>Print Screen</source> + <translation>Natisni zaslon</translation> + </message> + <message> + <location line="+1"/> + <source>Page Up</source> + <translation>Za stran gor</translation> + </message> + <message> + <location line="+1"/> + <source>Page Down</source> + <translation>Za stran dol</translation> + </message> + <message> + <location line="+1"/> + <source>Caps Lock</source> + <translation>Caps Lock</translation> + </message> + <message> + <location line="+1"/> + <source>Num Lock</source> + <translation>Num Lock</translation> + </message> + <message> + <location line="+1"/> + <source>Number Lock</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Scroll Lock</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Insert</source> + <translation>Vstavi</translation> + </message> + <message> + <location line="+1"/> + <source>Delete</source> + <translation>Izbriši</translation> + </message> + <message> + <location line="+1"/> + <source>Escape</source> + <translation>Escape</translation> + </message> + <message> + <location line="+1"/> + <source>System Request</source> + <translation>Sistemska zahteva</translation> + </message> + <message> + <location line="+4"/> + <source>Select</source> + <translation type="unfinished">Izberi</translation> + </message> + <message> + <location line="+1"/> + <source>Yes</source> + <translation>Da</translation> + </message> + <message> + <location line="+1"/> + <source>No</source> + <translation>Ne</translation> + </message> + <message> + <location line="+4"/> + <source>Context1</source> + <translation>Kontekst1</translation> + </message> + <message> + <location line="+1"/> + <source>Context2</source> + <translation>Kontekst2</translation> + </message> + <message> + <location line="+1"/> + <source>Context3</source> + <translation>Kontekst3</translation> + </message> + <message> + <location line="+1"/> + <source>Context4</source> + <translation>Kontekst4</translation> + </message> + <message> + <location line="+1"/> + <source>Call</source> + <translation type="unfinished">Pokliči</translation> + </message> + <message> + <location line="+1"/> + <source>Hangup</source> + <translation type="unfinished">Odloži</translation> + </message> + <message> + <location line="+1"/> + <source>Flip</source> + <translation type="unfinished">Obrni</translation> + </message> + <message> + <location line="+561"/> + <location line="+135"/> + <source>Ctrl</source> + <translation>Ctrl</translation> + </message> + <message> + <location line="-134"/> + <location line="+138"/> + <source>Shift</source> + <translation>Shift</translation> + </message> + <message> + <location line="-137"/> + <location line="+135"/> + <source>Alt</source> + <translation>Alt</translation> + </message> + <message> + <location line="-134"/> + <location line="+130"/> + <source>Meta</source> + <translation>Meta</translation> + </message> + <message> + <location line="-40"/> + <source>+</source> + <translation>+</translation> + </message> + <message> + <location line="+61"/> + <source>F%1</source> + <translation>F%1</translation> + </message> + <message> + <location line="-767"/> + <source>Home Page</source> + <translation>Domača stran</translation> + </message> +</context> +<context> + <name>QSlider</name> + <message> + <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+151"/> + <source>Page left</source> + <translation>Za stran levo</translation> + </message> + <message> + <location line="+0"/> + <source>Page up</source> + <translation>Za stran gor</translation> + </message> + <message> + <location line="+2"/> + <source>Position</source> + <translation>Položaj</translation> + </message> + <message> + <location line="+3"/> + <source>Page right</source> + <translation>Za stran desno</translation> + </message> + <message> + <location line="+0"/> + <source>Page down</source> + <translation>Za stran dol</translation> + </message> +</context> +<context> + <name>QSocks5SocketEngine</name> + <message> + <location filename="../src/network/socket/qsocks5socketengine.cpp" line="-67"/> + <source>Connection to proxy refused</source> + <translation>Povezava s posrednikom je bila zavrnjena</translation> + </message> + <message> + <location line="+4"/> + <source>Connection to proxy closed prematurely</source> + <translation>Povezava s posrednikom je bila prekinjena predčasno</translation> + </message> + <message> + <location line="+4"/> + <source>Proxy host not found</source> + <translation>Ni moč najti gostitelja posrednika</translation> + </message> + <message> + <location line="+5"/> + <source>Connection to proxy timed out</source> + <translation>Čas za povezavo s posrednikom je potekel</translation> + </message> + <message> + <location line="+17"/> + <source>Proxy authentication failed</source> + <translation>Neuspešno overjanje posrednika</translation> + </message> + <message> + <location line="+1"/> + <source>Proxy authentication failed: %1</source> + <translation>Neuspešno overjanje posrednika: %1</translation> + </message> + <message> + <location line="+9"/> + <source>SOCKS version 5 protocol error</source> + <translation>Napaka protokola SOCKS različice 5</translation> + </message> + <message> + <location line="+19"/> + <source>General SOCKSv5 server failure</source> + <translation>Splošna napaka strežnika SOCKSv5</translation> + </message> + <message> + <location line="+4"/> + <source>Connection not allowed by SOCKSv5 server</source> + <translation>Strežnik SOCKSv5 ne dovoljuje povezave</translation> + </message> + <message> + <location line="+16"/> + <source>TTL expired</source> + <translation>TTL je zapadel</translation> + </message> + <message> + <location line="+4"/> + <source>SOCKSv5 command not supported</source> + <translation>Ukaz SOCKSv5 ni podprt</translation> + </message> + <message> + <location line="+4"/> + <source>Address type not supported</source> + <translation>Vrsta naslova ni podprta</translation> + </message> + <message> + <location line="+5"/> + <source>Unknown SOCKSv5 proxy error code 0x%1</source> + <translation>Neznana koda napake posrednika SOCKSv5: 0x%1</translation> + </message> + <message> + <location line="+685"/> + <source>Network operation timed out</source> + <translation>Čas za omrežni postopek je potekel</translation> + </message> +</context> +<context> + <name>QSoftKeyManager</name> + <message> + <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+78"/> + <source>Ok</source> + <translation>V redu</translation> + </message> + <message> + <location line="+3"/> + <source>Select</source> + <translation>Izbor</translation> + </message> + <message> + <location line="+3"/> + <source>Done</source> + <translation>Opravljeno</translation> + </message> + <message> + <location line="+3"/> + <source>Options</source> + <translation>Možnosti</translation> + </message> + <message> + <location line="+3"/> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> + <message> + <location line="+151"/> + <source>Exit</source> + <translation type="unfinished">Končaj</translation> + </message> +</context> +<context> + <name>QSpinBox</name> + <message> + <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-574"/> + <source>More</source> + <translation>Več</translation> + </message> + <message> + <location line="+2"/> + <source>Less</source> + <translation>Manj</translation> + </message> +</context> +<context> + <name>QSql</name> + <message> + <location filename="../src/qt3support/sql/q3sqlmanager_p.cpp" line="+890"/> + <source>Delete</source> + <translation>Izbriši</translation> + </message> + <message> + <location line="+1"/> + <source>Delete this record?</source> + <translation>Ali izbrišem ta zapis?</translation> + </message> + <message> + <location line="+1"/> + <location line="+16"/> + <location line="+36"/> + <source>Yes</source> + <translation>Da</translation> + </message> + <message> + <location line="-51"/> + <location line="+16"/> + <location line="+36"/> + <source>No</source> + <translation>Ne</translation> + </message> + <message> + <location line="-44"/> + <source>Insert</source> + <translation>Vstavi</translation> + </message> + <message> + <location line="+2"/> + <source>Update</source> + <translation>Posodobi</translation> + </message> + <message> + <location line="+4"/> + <source>Save edits?</source> + <translation>&Shranmi urejan?.</translation> + </message> + <message> + <location line="+3"/> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> + <message> + <location line="+32"/> + <source>Confirm</source> + <translation>Potrdi</translation> + </message> + <message> + <location line="+1"/> + <source>Cancel your edits?</source> + <translation>Ali želite preklicati urejanja?</translation> + </message> +</context> +<context> + <name>QSslSocket</name> + <message> + <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+546"/> + <source>Unable to write data: %1</source> + <translation>Ni moč zapisati podatkov: %1</translation> + </message> + <message> + <location line="+119"/> + <source>Error while reading: %1</source> + <translation>Napaka med branjem: %1</translation> + </message> + <message> + <location line="+96"/> + <source>Error during SSL handshake: %1</source> + <translation>Napaka med rokovanjem SSL: %1</translation> + </message> + <message> + <location line="-501"/> + <source>Error creating SSL context (%1)</source> + <translation>Napaka pri ustvarjanju konteksta SSL (%1)</translation> + </message> + <message> + <location line="+25"/> + <source>Invalid or empty cipher list (%1)</source> + <translation>Neveljaven ali prazen seznam šifer (%1)</translation> + </message> + <message> + <location line="+62"/> + <source>Error creating SSL session, %1</source> + <translation>Napaka pri ustvarjanju seje SSL: %1</translation> + </message> + <message> + <location line="+15"/> + <source>Error creating SSL session: %1</source> + <translation>Napaka pri ustvarjanju seje SSL: %1</translation> + </message> + <message> + <location line="-61"/> + <source>Cannot provide a certificate with no key, %1</source> + <translation>Ni moč priskrbeti potrdila brez ključa, %1</translation> + </message> + <message> + <location line="+7"/> + <source>Error loading local certificate, %1</source> + <translation>Napaka pri nalaganju krajevnega potrdila, %1</translation> + </message> + <message> + <location line="+12"/> + <source>Error loading private key, %1</source> + <translation>Napaka pri nalaganju zasebnega ključa, %1</translation> + </message> + <message> + <location line="+7"/> + <source>Private key does not certificate public key, %1</source> + <translation>Zasebni ključ ne potrjuje javnega ključa, %1</translation> + </message> +</context> +<context> + <name>QStateMachine</name> + <message> + <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+998"/> + <source>Missing initial state in compound state '%1'</source> + <translation>V sestavljenem stanju »%1« manjka začetno stanje</translation> + </message> + <message> + <location line="+7"/> + <source>Missing default state in history state '%1'</source> + <translation>V zgodovinskem stanju »%1« manjka privzeto stanje</translation> + </message> + <message> + <location line="+7"/> + <source>No common ancestor for targets and source of transition from state '%1'</source> + <translation>Za cilje in začetek prehoda iz stanja »%1« ni skupnega prednika</translation> + </message> + <message> + <location line="+4"/> + <source>Unknown error</source> + <translation>Neznana napaka</translation> + </message> +</context> +<context> + <name>QSystemSemaphore</name> + <message> + <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="-41"/> + <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+66"/> + <source>%1: out of resources</source> + <translation>%1: zmanjkalo je virov</translation> + </message> + <message> + <location line="-13"/> + <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+4"/> + <source>%1: permission denied</source> + <translation>%1: nimate dovoljenja</translation> + </message> + <message> + <location line="+4"/> + <source>%1: already exists</source> + <translation>%1: že obstaja</translation> + </message> + <message> + <location line="+4"/> + <source>%1: does not exist</source> + <translation>%1: ne obstaja</translation> + </message> + <message> + <location line="+9"/> + <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+3"/> + <source>%1: unknown error %2</source> + <translation>%1: neznana napaka %2</translation> + </message> +</context> +<context> + <name>QTDSDriver</name> + <message> + <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+584"/> + <source>Unable to open connection</source> + <translation>Ni moč vzpostaviti povezave</translation> + </message> + <message> + <location line="+5"/> + <source>Unable to use database</source> + <translation>Podatkovne zbirke ni moč uporabljati</translation> + </message> +</context> +<context> + <name>QTabBar</name> + <message> + <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="-326"/> + <source>Scroll Left</source> + <translation>Premakni levo</translation> + </message> + <message> + <location line="+0"/> + <source>Scroll Right</source> + <translation>Premakni desno</translation> + </message> +</context> +<context> + <name>QTcpServer</name> + <message> + <location filename="../src/network/socket/qtcpserver.cpp" line="+282"/> + <source>Operation on socket is not supported</source> + <translation>Dejanje na vtičnici ni podprto</translation> + </message> +</context> +<context> + <name>QTextControl</name> + <message> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+2001"/> + <source>&Undo</source> + <translation>&Razveljavi</translation> + </message> + <message> + <location line="+2"/> + <source>&Redo</source> + <translation>&Uveljavi</translation> + </message> + <message> + <location line="+4"/> + <source>Cu&t</source> + <translation>&Izreži</translation> + </message> + <message> + <location line="+5"/> + <source>&Copy</source> + <translation>S&kopiraj</translation> + </message> + <message> + <location line="+7"/> + <source>Copy &Link Location</source> + <translation>Skopiraj &povezavo do lokacije</translation> + </message> + <message> + <location line="+6"/> + <source>&Paste</source> + <translation>Pri&lepi</translation> + </message> + <message> + <location line="+3"/> + <source>Delete</source> + <translation>Izbriši</translation> + </message> + <message> + <location line="+7"/> + <source>Select All</source> + <translation>Izberi vse</translation> + </message> +</context> +<context> + <name>QToolButton</name> + <message> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+254"/> + <location line="+6"/> + <source>Press</source> + <translation>Pritisni</translation> + </message> + <message> + <location line="-4"/> + <location line="+8"/> + <source>Open</source> + <translation>Odpri</translation> + </message> +</context> +<context> + <name>QUdpSocket</name> + <message> + <location filename="../src/network/socket/qudpsocket.cpp" line="+179"/> + <source>This platform does not support IPv6</source> + <translation>Ta platforma ne podpira IPv6</translation> + </message> +</context> +<context> + <name>QUndoGroup</name> + <message> + <location filename="../src/gui/util/qundogroup.cpp" line="+385"/> + <source>Undo</source> + <translation>Razveljavi</translation> + </message> + <message> + <location line="+28"/> + <source>Redo</source> + <translation>Uveljavi</translation> + </message> +</context> +<context> + <name>QUndoModel</name> + <message> + <location filename="../src/gui/util/qundoview.cpp" line="+101"/> + <source><empty></source> + <translation><prazno></translation> + </message> +</context> +<context> + <name>QUndoStack</name> + <message> + <location filename="../src/gui/util/qundostack.cpp" line="+832"/> + <source>Undo</source> + <translation>Razveljavi</translation> + </message> + <message> + <location line="+27"/> + <source>Redo</source> + <translation>Uveljavi</translation> + </message> +</context> +<context> + <name>QUnicodeControlCharacterMenu</name> + <message> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+884"/> + <source>LRM Left-to-right mark</source> + <translation>LRM (oznaka z-leve-na-desno)</translation> + </message> + <message> + <location line="+1"/> + <source>RLM Right-to-left mark</source> + <translation>RLM (oznaka z-desne-na-levo)</translation> + </message> + <message> + <location line="+1"/> + <source>ZWJ Zero width joiner</source> + <translation>ZWJ (združevalec s širino nič)</translation> + </message> + <message> + <location line="+1"/> + <source>ZWNJ Zero width non-joiner</source> + <translation>ZWNJ (ne-združevalec s širino nič)</translation> + </message> + <message> + <location line="+1"/> + <source>ZWSP Zero width space</source> + <translation>ZWSP (presledek s širino nič)</translation> + </message> + <message> + <location line="+1"/> + <source>LRE Start of left-to-right embedding</source> + <translation>LRE (začetek vgrajevanja z leve na desno)</translation> + </message> + <message> + <location line="+1"/> + <source>RLE Start of right-to-left embedding</source> + <translation>RLE (začetek vgrajevanja z desne na levo)</translation> + </message> + <message> + <location line="+1"/> + <source>LRO Start of left-to-right override</source> + <translation>LRO (začetek nadomeščanja z leve na desno)</translation> + </message> + <message> + <location line="+1"/> + <source>RLO Start of right-to-left override</source> + <translation>RLO (začetek nadomeščanja z desne na levo)</translation> + </message> + <message> + <location line="+1"/> + <source>PDF Pop directional formatting</source> + <translation>PDF (odstrani oblikovanje usmerjenosti)</translation> + </message> + <message> + <location line="+6"/> + <source>Insert Unicode control character</source> + <translation>Vstavi kontrolni znak Unicode</translation> + </message> +</context> +<context> + <name>QWebFrame</name> + <message> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+706"/> + <source>Request cancelled</source> + <translation>Zahtevek je bil preklican</translation> + </message> + <message> + <location line="+17"/> + <source>Request blocked</source> + <translation>Zahtevek je bil blokiran</translation> + </message> + <message> + <location line="+7"/> + <source>Cannot show URL</source> + <translation>Lokacije ni moč prikazati</translation> + </message> + <message> + <location line="+6"/> + <source>Frame load interrupted by policy change</source> + <translation>Nalaganje okvirja je bilo prekinjeno zaradi spremembe pravil</translation> + </message> + <message> + <location line="+6"/> + <source>Cannot show mimetype</source> + <translation>Vrste MIME ni moč prikazati</translation> + </message> + <message> + <location line="+6"/> + <source>File does not exist</source> + <translation>Datoteka ne obstaja</translation> + </message> +</context> +<context> + <name>QWebPage</name> + <message> + <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+403"/> + <source>Bad HTTP request</source> + <translation>Napačen zahtevek HTTP</translation> + </message> + <message> + <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+41"/> + <source>Submit</source> + <comment>default label for Submit buttons in forms on web pages</comment> + <translation>Pošlji</translation> + </message> + <message> + <location line="+5"/> + <source>Submit</source> + <comment>Submit (input element) alt text for <input> elements with no alt, title, or value</comment> + <translation>Pošlji</translation> + </message> + <message> + <location line="+5"/> + <source>Reset</source> + <comment>default label for Reset buttons in forms on web pages</comment> + <translation>Ponastavi</translation> + </message> + <message> + <location line="+10"/> + <source>This is a searchable index. Enter search keywords: </source> + <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> + <translation>To je stvarno kazalo z iskanjem. Vnesite iskane besede: </translation> + </message> + <message> + <location line="+5"/> + <source>Choose File</source> + <comment>title for file button used in HTML forms</comment> + <translation>Izberite datoteko</translation> + </message> + <message> + <location line="+5"/> + <source>No file selected</source> + <comment>text to display in file button used in HTML forms when no file is selected</comment> + <translation>Datoteka ni izbrana</translation> + </message> + <message> + <location line="+5"/> + <source>Open in New Window</source> + <comment>Open in New Window context menu item</comment> + <translation>Odpri v novem oknu</translation> + </message> + <message> + <location line="+5"/> + <source>Save Link...</source> + <comment>Download Linked File context menu item</comment> + <translation>Shrani povezavo ...</translation> + </message> + <message> + <location line="+5"/> + <source>Copy Link</source> + <comment>Copy Link context menu item</comment> + <translation>Skopiraj povezavo</translation> + </message> + <message> + <location line="+5"/> + <source>Open Image</source> + <comment>Open Image in New Window context menu item</comment> + <translation>Odpri sliko</translation> + </message> + <message> + <location line="+5"/> + <source>Save Image</source> + <comment>Download Image context menu item</comment> + <translation>Shrani sliko</translation> + </message> + <message> + <location line="+5"/> + <source>Copy Image</source> + <comment>Copy Link context menu item</comment> + <translation>Kopiraj sliko</translation> + </message> + <message> + <location line="+5"/> + <source>Open Frame</source> + <comment>Open Frame in New Window context menu item</comment> + <translation>Odpri okvir</translation> + </message> + <message> + <location line="+5"/> + <source>Copy</source> + <comment>Copy context menu item</comment> + <translation>Skopiraj</translation> + </message> + <message> + <location line="+5"/> + <source>Go Back</source> + <comment>Back context menu item</comment> + <translation>Pojdi nazaj</translation> + </message> + <message> + <location line="+5"/> + <source>Go Forward</source> + <comment>Forward context menu item</comment> + <translation>Pojdi naprej</translation> + </message> + <message> + <location line="+5"/> + <source>Stop</source> + <comment>Stop context menu item</comment> + <translation>Ustavi</translation> + </message> + <message> + <location line="+5"/> + <source>Reload</source> + <comment>Reload context menu item</comment> + <translation>Znova naloži</translation> + </message> + <message> + <location line="+5"/> + <source>Cut</source> + <comment>Cut context menu item</comment> + <translation>Izreži</translation> + </message> + <message> + <location line="+5"/> + <source>Paste</source> + <comment>Paste context menu item</comment> + <translation>Prilepi</translation> + </message> + <message> + <location line="+5"/> + <source>No Guesses Found</source> + <comment>No Guesses Found context menu item</comment> + <translation>Najdenega ni nobenega ugibanja</translation> + </message> + <message> + <location line="+5"/> + <source>Ignore</source> + <comment>Ignore Spelling context menu item</comment> + <translation>Prezri</translation> + </message> + <message> + <location line="+5"/> + <source>Add To Dictionary</source> + <comment>Learn Spelling context menu item</comment> + <translation>Dodaj v slovar</translation> + </message> + <message> + <location line="+5"/> + <source>Search The Web</source> + <comment>Search The Web context menu item</comment> + <translation>Iščite po spletu</translation> + </message> + <message> + <location line="+5"/> + <source>Look Up In Dictionary</source> + <comment>Look Up in Dictionary context menu item</comment> + <translation>Poišči v slovarju</translation> + </message> + <message> + <location line="+5"/> + <source>Open Link</source> + <comment>Open Link context menu item</comment> + <translation>Odpri povezavo</translation> + </message> + <message> + <location line="+5"/> + <source>Ignore</source> + <comment>Ignore Grammar context menu item</comment> + <translation>Prezri</translation> + </message> + <message> + <location line="+5"/> + <source>Spelling</source> + <comment>Spelling and Grammar context sub-menu item</comment> + <translation>Črkovanje</translation> + </message> + <message> + <location line="+5"/> + <source>Show Spelling and Grammar</source> + <comment>menu item title</comment> + <translation>Prikaži črkovanje in slovnico</translation> + </message> + <message> + <location line="+1"/> + <source>Hide Spelling and Grammar</source> + <comment>menu item title</comment> + <translation>Skrij črkovanje in slovnico</translation> + </message> + <message> + <location line="+5"/> + <source>Check Spelling</source> + <comment>Check spelling context menu item</comment> + <translation>Preveri črkovanje</translation> + </message> + <message> + <location line="+5"/> + <source>Check Spelling While Typing</source> + <comment>Check spelling while typing context menu item</comment> + <translation>Preveri črkovanje med tipkanjem</translation> + </message> + <message> + <location line="+5"/> + <source>Check Grammar With Spelling</source> + <comment>Check grammar with spelling context menu item</comment> + <translation>Preveri slovnico in črkovanje</translation> + </message> + <message> + <location line="+5"/> + <source>Fonts</source> + <comment>Font context sub-menu item</comment> + <translation>Pisave</translation> + </message> + <message> + <location line="+5"/> + <source>Bold</source> + <comment>Bold context menu item</comment> + <translation>Polkrepko</translation> + </message> + <message> + <location line="+5"/> + <source>Italic</source> + <comment>Italic context menu item</comment> + <translation>Ležeče</translation> + </message> + <message> + <location line="+5"/> + <source>Underline</source> + <comment>Underline context menu item</comment> + <translation>Podčrtano</translation> + </message> + <message> + <location line="+5"/> + <source>Outline</source> + <comment>Outline context menu item</comment> + <translation>Obris</translation> + </message> + <message> + <location line="+5"/> + <source>Direction</source> + <comment>Writing direction context sub-menu item</comment> + <translation>Smer</translation> + </message> + <message> + <location line="+5"/> + <source>Text Direction</source> + <comment>Text direction context sub-menu item</comment> + <translation>Smer besedila</translation> + </message> + <message> + <location line="+5"/> + <source>Default</source> + <comment>Default writing direction context menu item</comment> + <translation>Privzeta</translation> + </message> + <message> + <location line="+5"/> + <source>Left to Right</source> + <comment>Left to Right context menu item</comment> + <translation>Z leve na desno</translation> + </message> + <message> + <location line="+5"/> + <source>Right to Left</source> + <comment>Right to Left context menu item</comment> + <translation>Z desne na levo</translation> + </message> + <message> + <location line="+105"/> + <source>Loading...</source> + <comment>Media controller status message when the media is loading</comment> + <translation>Nalaganje ...</translation> + </message> + <message> + <location line="+5"/> + <source>Live Broadcast</source> + <comment>Media controller status message when watching a live broadcast</comment> + <translation>Prenos v živo</translation> + </message> + <message> + <location line="+8"/> + <source>Audio Element</source> + <comment>Media controller element</comment> + <translation>Zvočni element</translation> + </message> + <message> + <location line="+2"/> + <source>Video Element</source> + <comment>Media controller element</comment> + <translation>Video element</translation> + </message> + <message> + <location line="+2"/> + <source>Mute Button</source> + <comment>Media controller element</comment> + <translation>Gumb za utišanje</translation> + </message> + <message> + <location line="+2"/> + <source>Unmute Button</source> + <comment>Media controller element</comment> + <translation>Gumb za preklic utišanja</translation> + </message> + <message> + <location line="+2"/> + <source>Play Button</source> + <comment>Media controller element</comment> + <translation>Gumb za predvajanje</translation> + </message> + <message> + <location line="+2"/> + <source>Pause Button</source> + <comment>Media controller element</comment> + <translation>Gumb za premor</translation> + </message> + <message> + <location line="+2"/> + <source>Slider</source> + <comment>Media controller element</comment> + <translation>Drsnik</translation> + </message> + <message> + <location line="+2"/> + <source>Slider Thumb</source> + <comment>Media controller element</comment> + <translation>Ročka na drsniku</translation> + </message> + <message> + <location line="+2"/> + <source>Rewind Button</source> + <comment>Media controller element</comment> + <translation>Gumb za previjanje</translation> + </message> + <message> + <location line="+2"/> + <source>Return to Real-time Button</source> + <comment>Media controller element</comment> + <translation>Gumb za vrnitev na resnični čas</translation> + </message> + <message> + <location line="+2"/> + <source>Elapsed Time</source> + <comment>Media controller element</comment> + <translation>Pretečeni čas</translation> + </message> + <message> + <location line="+2"/> + <source>Remaining Time</source> + <comment>Media controller element</comment> + <translation>Preostali čas</translation> + </message> + <message> + <location line="+2"/> + <source>Status Display</source> + <comment>Media controller element</comment> + <translation>Prikaz stanja</translation> + </message> + <message> + <location line="+2"/> + <source>Fullscreen Button</source> + <comment>Media controller element</comment> + <translation>Gumb za cel zaslon</translation> + </message> + <message> + <location line="+2"/> + <source>Seek Forward Button</source> + <comment>Media controller element</comment> + <translation>Gumb za pomik naprej</translation> + </message> + <message> + <location line="+2"/> + <source>Seek Back Button</source> + <comment>Media controller element</comment> + <translation>Gumb za pomik nazaj</translation> + </message> + <message> + <location line="+8"/> + <source>Audio element playback controls and status display</source> + <comment>Media controller element</comment> + <translation>Nadzor in prikaz stanja elementa za predvajanje zvoka</translation> + </message> + <message> + <location line="+2"/> + <source>Video element playback controls and status display</source> + <comment>Media controller element</comment> + <translation>Nadzor in prikaz stanja elementa za predvajanje videa</translation> + </message> + <message> + <location line="+2"/> + <source>Mute audio tracks</source> + <comment>Media controller element</comment> + <translation>Utišaj zvočne sledi</translation> + </message> + <message> + <location line="+2"/> + <source>Unmute audio tracks</source> + <comment>Media controller element</comment> + <translation>Prekliči utišanje zvočnih sledi</translation> + </message> + <message> + <location line="+2"/> + <source>Begin playback</source> + <comment>Media controller element</comment> + <translation>Začni predvajanje</translation> + </message> + <message> + <location line="+2"/> + <source>Pause playback</source> + <comment>Media controller element</comment> + <translation>Prekini predvajanje</translation> + </message> + <message> + <location line="+2"/> + <source>Movie time scrubber</source> + <comment>Media controller element</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Movie time scrubber thumb</source> + <comment>Media controller element</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Rewind movie</source> + <comment>Media controller element</comment> + <translation>Previj film</translation> + </message> + <message> + <location line="+2"/> + <source>Return streaming movie to real-time</source> + <comment>Media controller element</comment> + <translation>Povrni film na resnični čas</translation> + </message> + <message> + <location line="+2"/> + <source>Current movie time</source> + <comment>Media controller element</comment> + <translation>Trenutni čas filma</translation> + </message> + <message> + <location line="+2"/> + <source>Remaining move time</source> + <comment>Media controller element</comment> + <translation>Preostali čas filma</translation> + </message> + <message> + <location line="+2"/> + <source>Current movie status</source> + <comment>Media controller element</comment> + <translation>Trenutno stanje filma</translation> + </message> + <message> + <location line="+2"/> + <source>Play movie in full-screen mode</source> + <comment>Media controller element</comment> + <translation>Predvajaj film čez ves zaslon</translation> + </message> + <message> + <location line="+2"/> + <source>Seek quickly back</source> + <comment>Media controller element</comment> + <translation>Hitro se pomakni nazaj</translation> + </message> + <message> + <location line="+2"/> + <source>Seek quickly forward</source> + <comment>Media controller element</comment> + <translation>Hitro se pomakni naprej</translation> + </message> + <message> + <location line="+9"/> + <source>Indefinite time</source> + <comment>Media time description</comment> + <translation>Nedoločen čas</translation> + </message> + <message> + <location line="+9"/> + <source>%1 days %2 hours %3 minutes %4 seconds</source> + <comment>Media time description</comment> + <translation>%1 dni %2 ur %3 minut %4 sekund</translation> + </message> + <message> + <location line="+4"/> + <source>%1 hours %2 minutes %3 seconds</source> + <comment>Media time description</comment> + <translation>%1 ur %2 minut %3 sekund</translation> + </message> + <message> + <location line="+4"/> + <source>%1 minutes %2 seconds</source> + <comment>Media time description</comment> + <translation>%1 minut %2 sekund</translation> + </message> + <message> + <location line="+3"/> + <source>%1 seconds</source> + <comment>Media time description</comment> + <translation>%1 sekund</translation> + </message> + <message> + <location line="-210"/> + <source>Inspect</source> + <comment>Inspect Element context menu item</comment> + <translation>Preglej.</translation> + </message> + <message> + <location line="+5"/> + <source>No recent searches</source> + <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment> + <translation>Ni nedavnih iskanj</translation> + </message> + <message> + <location line="+5"/> + <source>Recent searches</source> + <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment> + <translation>Nedavna iskanja</translation> + </message> + <message> + <location line="+5"/> + <source>Clear recent searches</source> + <comment>menu item in Recent Searches menu that empties menu's contents</comment> + <translation>Počisti nedavna iskanja</translation> + </message> + <message> + <location line="+75"/> + <source>Unknown</source> + <comment>Unknown filesize FTP directory listing item</comment> + <translation>Neznana</translation> + </message> + <message> + <location line="+5"/> + <source>%1 (%2x%3 pixels)</source> + <comment>Title string for images</comment> + <translation>%1 (%2×%3 pik)</translation> + </message> + <message> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+170"/> + <source>Web Inspector - %2</source> + <translation>Web Inspector - %2</translation> + </message> + <message> + <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+58"/> + <source>Scroll here</source> + <translation>Premakni sem</translation> + </message> + <message> + <location line="+3"/> + <source>Left edge</source> + <translation>Levi rob</translation> + </message> + <message> + <location line="+0"/> + <source>Top</source> + <translation>Vrh</translation> + </message> + <message> + <location line="+1"/> + <source>Right edge</source> + <translation>Desni rob</translation> + </message> + <message> + <location line="+0"/> + <source>Bottom</source> + <translation>Dno</translation> + </message> + <message> + <location line="+3"/> + <source>Page left</source> + <translation>Za stran levo</translation> + </message> + <message> + <location line="+0"/> + <source>Page up</source> + <translation>Za stran gor</translation> + </message> + <message> + <location line="+1"/> + <source>Page right</source> + <translation>Za stran desno</translation> + </message> + <message> + <location line="+0"/> + <source>Page down</source> + <translation>Za stran dol</translation> + </message> + <message> + <location line="+3"/> + <source>Scroll left</source> + <translation>Premakni levo</translation> + </message> + <message> + <location line="+0"/> + <source>Scroll up</source> + <translation>Premakni gor</translation> + </message> + <message> + <location line="+1"/> + <source>Scroll right</source> + <translation>Premakni desno</translation> + </message> + <message> + <location line="+0"/> + <source>Scroll down</source> + <translation>Premakni dol</translation> + </message> + <message numerus="yes"> + <location filename="../src/3rdparty/webkit/WebCore/platform/qt/FileChooserQt.cpp" line="+45"/> + <source>%n file(s)</source> + <comment>number of chosen file</comment> + <translation> + <numerusform>%n datotek</numerusform> + <numerusform>%n datotek</numerusform> + <numerusform>%n datotek</numerusform> + <numerusform>%n datotek</numerusform> + </translation> + </message> + <message> + <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1601"/> + <source>JavaScript Alert - %1</source> + <translation>Opozorilo JavaScript - %1</translation> + </message> + <message> + <location line="+15"/> + <source>JavaScript Confirm - %1</source> + <translation>Potrditev JavaScript - %1</translation> + </message> + <message> + <location line="+17"/> + <source>JavaScript Prompt - %1</source> + <translation>Poziv JavaScript - %1</translation> + </message> + <message> + <location line="+25"/> + <source>JavaScript Problem - %1</source> + <translation>Težava JavaScript - %1</translation> + </message> + <message> + <location line="+0"/> + <source>The script on this page appears to have a problem. Do you want to stop the script?</source> + <translation>Kot kaže ima skript na tej strani težavo. Ali želite ustaviti skript?</translation> + </message> + <message> + <location line="+381"/> + <source>Move the cursor to the next character</source> + <translation>Premakni kazalec na naslednji znak</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the previous character</source> + <translation>Premakni kazalec na prejšnji znak</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the next word</source> + <translation>Premakni kazalec v naslednjo besedo</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the previous word</source> + <translation>Premakni kazalec v prejšnjo besedo</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the next line</source> + <translation>Premakni kazalec v naslednjo vrstico</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the previous line</source> + <translation>Premakni kazalec v prejšnjo vrstico</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the start of the line</source> + <translation>Premakni kazalec na začetek vrstice</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the end of the line</source> + <translation>Premakni kazalec na konec vrstice</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the start of the block</source> + <translation>Premakni kazalec na začetek bloka</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the end of the block</source> + <translation>Premakni kazalec na konec bloka</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the start of the document</source> + <translation>Premakni kazalec na začetek dokumenta</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the end of the document</source> + <translation>Premakni kazalec na konec dokumenta</translation> + </message> + <message> + <location line="+3"/> + <source>Select all</source> + <translation>Izberi vse</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the next character</source> + <translation>Izberi do naslednjega znaka</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the previous character</source> + <translation>Izberi do prejšnjega znaka</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the next word</source> + <translation>Izberi do naslednje besede</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the previous word</source> + <translation>Izberi do prejšnje besede</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the next line</source> + <translation>Izberi do naslednje vrstice</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the previous line</source> + <translation>Izberi do prejšnje vrstice</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the start of the line</source> + <translation>Izberi do začetka vrstice</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the end of the line</source> + <translation>Izberi do konca vrstice</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the start of the block</source> + <translation>Izberi do začetka bloka</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the end of the block</source> + <translation>Izberi do konca bloka</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the start of the document</source> + <translation>Izberi do začetka dokumenta</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the end of the document</source> + <translation>Izberi do konca dokumenta</translation> + </message> + <message> + <location line="+3"/> + <source>Delete to the start of the word</source> + <translation>Izbriši do začetka besede</translation> + </message> + <message> + <location line="+3"/> + <source>Delete to the end of the word</source> + <translation>Izbriši do konca besede</translation> + </message> + <message> + <location line="+33"/> + <source>Insert a new paragraph</source> + <translation>Vstavi nov odstavek</translation> + </message> + <message> + <location line="+3"/> + <source>Insert a new line</source> + <translation>Vstavi novo vrstico</translation> + </message> + <message> + <location line="+4"/> + <source>Paste and Match Style</source> + <translation>Prilepi in uskladi slog</translation> + </message> + <message> + <location line="+3"/> + <source>Remove formatting</source> + <translation>Odstrani oblikovanje</translation> + </message> + <message> + <location line="+4"/> + <source>Strikethrough</source> + <translation>Prečrtano</translation> + </message> + <message> + <location line="+4"/> + <source>Subscript</source> + <translation>Podpisano</translation> + </message> + <message> + <location line="+4"/> + <source>Superscript</source> + <translation>Nadpisano</translation> + </message> + <message> + <location line="+4"/> + <source>Insert Bulleted List</source> + <translation>Vstavi navadni seznam</translation> + </message> + <message> + <location line="+4"/> + <source>Insert Numbered List</source> + <translation>Vstavi oštevilčeni seznam</translation> + </message> + <message> + <location line="+4"/> + <source>Indent</source> + <translation>Zamakni</translation> + </message> + <message> + <location line="+3"/> + <source>Outdent</source> + <translation>Odzamakni</translation> + </message> + <message> + <location line="+3"/> + <source>Center</source> + <translation>Sredinsko</translation> + </message> + <message> + <location line="+3"/> + <source>Justify</source> + <translation>Obojestransko</translation> + </message> + <message> + <location line="+3"/> + <source>Align Left</source> + <translation>Poravnaj levo</translation> + </message> + <message> + <location line="+3"/> + <source>Align Right</source> + <translation>Poravnaj desno</translation> + </message> +</context> +<context> + <name>QWhatsThisAction</name> + <message> + <location filename="../src/gui/kernel/qwhatsthis.cpp" line="+527"/> + <source>What's This?</source> + <translation>Kaj je to?</translation> + </message> +</context> +<context> + <name>QWidget</name> + <message> + <location filename="../src/gui/kernel/qwidget.cpp" line="+5655"/> + <source>*</source> + <translation>*</translation> + </message> +</context> +<context> + <name>QWizard</name> + <message> + <location filename="../src/gui/dialogs/qwizard.cpp" line="+649"/> + <source>Go Back</source> + <translation>Pojdi nazaj</translation> + </message> + <message> + <location line="+3"/> + <source>Continue</source> + <translation>Nadaljuj</translation> + </message> + <message> + <location line="+5"/> + <source>Commit</source> + <translation>Uveljavi</translation> + </message> + <message> + <location line="+2"/> + <source>Done</source> + <translation>Opravljeno</translation> + </message> + <message> + <location line="+4"/> + <source>Help</source> + <translation>Pomoč</translation> + </message> + <message> + <location line="-14"/> + <source>< &Back</source> + <translation>< Na&zaj</translation> + </message> + <message> + <location line="+10"/> + <source>&Finish</source> + <translation>&Zaključi</translation> + </message> + <message> + <location line="+2"/> + <source>Cancel</source> + <translation>Prekliči</translation> + </message> + <message> + <location line="+2"/> + <source>&Help</source> + <translation>&Pomoč</translation> + </message> + <message> + <location line="-8"/> + <source>&Next</source> + <translation>&Naprej</translation> + </message> + <message> + <location line="+0"/> + <source>&Next ></source> + <translation>&Naprej ></translation> + </message> +</context> +<context> + <name>QWorkspace</name> + <message> + <location filename="../src/gui/widgets/qworkspace.cpp" line="+1089"/> + <source>&Restore</source> + <translation>&Obnovi</translation> + </message> + <message> + <location line="+1"/> + <source>&Move</source> + <translation>&Premakni</translation> + </message> + <message> + <location line="+1"/> + <source>&Size</source> + <translation>&Velikost</translation> + </message> + <message> + <location line="+2"/> + <source>Mi&nimize</source> + <translation>Po&manjšaj</translation> + </message> + <message> + <location line="+2"/> + <source>Ma&ximize</source> + <translation>&Razpni</translation> + </message> + <message> + <location line="+2"/> + <source>&Close</source> + <translation>&Zapri</translation> + </message> + <message> + <location line="+6"/> + <source>Stay on &Top</source> + <translation>Ostani na &vrhu</translation> + </message> + <message> + <location line="+3"/> + <location line="+1059"/> + <source>Sh&ade</source> + <translation>Zvi&j</translation> + </message> + <message> + <location line="-278"/> + <location line="+60"/> + <source>%1 - [%2]</source> + <translation>%1 - [%2]</translation> + </message> + <message> + <location line="-1832"/> + <source>Minimize</source> + <translation>Pomanjšaj</translation> + </message> + <message> + <location line="+2"/> + <source>Restore Down</source> + <translation>Obnovi navzdol</translation> + </message> + <message> + <location line="-4"/> + <source>Close</source> + <translation>Zapri</translation> + </message> + <message> + <location line="+2048"/> + <source>&Unshade</source> + <translation>Razv&ij</translation> + </message> +</context> +<context> + <name>QXml</name> + <message> + <location filename="../src/xml/sax/qxml.cpp" line="+58"/> + <source>no error occurred</source> + <translation>ni nobene napake</translation> + </message> + <message> + <location line="+1"/> + <source>error triggered by consumer</source> + <translation>napako povzročil uporabnik</translation> + </message> + <message> + <location line="+1"/> + <source>unexpected end of file</source> + <translation>nepričakovan konec datoteke</translation> + </message> + <message> + <location line="+1"/> + <source>more than one document type definition</source> + <translation>več kot ena definicija vrste dokumenta</translation> + </message> + <message> + <location line="+1"/> + <source>error occurred while parsing element</source> + <translation>napaka med analiziranjem elementa</translation> + </message> + <message> + <location line="+1"/> + <source>tag mismatch</source> + <translation>neprimerna oznaka</translation> + </message> + <message> + <location line="+1"/> + <source>error occurred while parsing content</source> + <translation>napaka med analiziranje vsebine</translation> + </message> + <message> + <location line="+1"/> + <source>unexpected character</source> + <translation>nepričakovan znak</translation> + </message> + <message> + <location line="+1"/> + <source>invalid name for processing instruction</source> + <translation>nepravilno ime za ukaz obdelave</translation> + </message> + <message> + <location line="+1"/> + <source>version expected while reading the XML declaration</source> + <translation>pričakovana različica med branjem deklaracije XML</translation> + </message> + <message> + <location line="+1"/> + <source>wrong value for standalone declaration</source> + <translation>napačna vrednost za samostojno deklaracijo</translation> + </message> + <message> + <location line="+1"/> + <source>encoding declaration or standalone declaration expected while reading the XML declaration</source> + <translation>deklaracija kodiranja ali samostojna deklaracija je bila pričakovana med branjem deklaracije XML</translation> + </message> + <message> + <location line="+1"/> + <source>standalone declaration expected while reading the XML declaration</source> + <translation>samostojna deklaracija pričakovana med branjem deklaracije XML</translation> + </message> + <message> + <location line="+1"/> + <source>error occurred while parsing document type definition</source> + <translation>napaka med analiziranjem vrste definicije dokumenta</translation> + </message> + <message> + <location line="+1"/> + <source>letter is expected</source> + <translation>pričakovana je črka</translation> + </message> + <message> + <location line="+1"/> + <source>error occurred while parsing comment</source> + <translation>napaka med analiziranjem komentarja</translation> + </message> + <message> + <location line="+1"/> + <source>error occurred while parsing reference</source> + <translation>napaka med analiziranjem reference</translation> + </message> + <message> + <location line="+1"/> + <source>internal general entity reference not allowed in DTD</source> + <translation>referenca notranje splošne entitete ni dovoljena v DTD</translation> + </message> + <message> + <location line="+1"/> + <source>external parsed general entity reference not allowed in attribute value</source> + <translation>referenca zunanje analizirane splošne entitete ni dovoljena v vrednosti atributa</translation> + </message> + <message> + <location line="+1"/> + <source>external parsed general entity reference not allowed in DTD</source> + <translation>referenca zunanje analizirane splošne entitete ni dovoljena v DTD</translation> + </message> + <message> + <location line="+1"/> + <source>unparsed entity reference in wrong context</source> + <translation>referenca neanalizirane entitete v napačnem kontekstu</translation> + </message> + <message> + <location line="+1"/> + <source>recursive entities</source> + <translation>rekurzivne entitete</translation> + </message> + <message> + <location line="+1"/> + <source>error in the text declaration of an external entity</source> + <translation>napaka v besedilni deklaraciji zunanje entitete</translation> + </message> +</context> +<context> + <name>QXmlStream</name> + <message> + <location filename="../src/corelib/xml/qxmlstream.cpp" line="+611"/> + <location filename="../src/corelib/xml/qxmlstream_p.h" line="+1770"/> + <source>Extra content at end of document.</source> + <translation>Dodatna vsebina na koncu dokumenta.</translation> + </message> + <message> + <location line="+271"/> + <source>Invalid entity value.</source> + <translation>Neveljavna vrednost entitete.</translation> + </message> + <message> + <location line="+109"/> + <source>Invalid XML character.</source> + <translation>Neveljaven znak XML.</translation> + </message> + <message> + <location line="+259"/> + <source>Sequence ']]>' not allowed in content.</source> + <translation>Zaporedje »]]>« v vsebini ni dovoljeno.</translation> + </message> + <message> + <location line="+309"/> + <source>Namespace prefix '%1' not declared</source> + <translation>Predpona imenskega prostora »%1« ni deklarirana</translation> + </message> + <message> + <location line="+78"/> + <source>Attribute redefined.</source> + <translation>Atribut je redefiniran.</translation> + </message> + <message> + <location line="+115"/> + <source>Unexpected character '%1' in public id literal.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+28"/> + <source>Invalid XML version string.</source> + <translation>Neveljaven niz različice XML.</translation> + </message> + <message> + <location line="+2"/> + <source>Unsupported XML version.</source> + <translation>Nepodprta različica XML.</translation> + </message> + <message> + <location line="+23"/> + <source>%1 is an invalid encoding name.</source> + <translation>%1 ni veljavno ime kodiranja.</translation> + </message> + <message> + <location line="+7"/> + <source>Encoding %1 is unsupported</source> + <translation>Kodiranje %1 ni podprto</translation> + </message> + <message> + <location line="+16"/> + <source>Standalone accepts only yes or no.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Invalid attribute in XML declaration.</source> + <translation>Neveljaven atribut v deklaraciji XML.</translation> + </message> + <message> + <location line="+16"/> + <source>Premature end of document.</source> + <translation>Predčasen konec dokumenta.</translation> + </message> + <message> + <location line="+2"/> + <source>Invalid document.</source> + <translation>Neveljaven dokument..</translation> + </message> + <message> + <location line="+40"/> + <source>Expected </source> + <translation>Pričakovan</translation> + </message> + <message> + <location line="+11"/> + <source>, but got '</source> + <translation>, vendar prejel '</translation> + </message> + <message> + <location line="+4"/> + <source>Unexpected '</source> + <translation>Nepričakovan '</translation> + </message> + <message> + <location line="+225"/> + <source>Expected character data.</source> + <translation>Pričakoval znakovne podatke.</translation> + </message> + <message> + <location filename="../src/corelib/xml/qxmlstream_p.h" line="-995"/> + <source>Recursive entity detected.</source> + <translation>Zaznana je bila rekurzivna entiteta.</translation> + </message> + <message> + <location line="+516"/> + <source>Start tag expected.</source> + <translation>Pričakovana je bila začetna oznaka.</translation> + </message> + <message> + <location line="+222"/> + <source>XML declaration not at start of document.</source> + <translation>Deklaracija XML ni na začetku dokumenta.</translation> + </message> + <message> + <location line="-31"/> + <source>NDATA in parameter entity declaration.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+34"/> + <source>%1 is an invalid processing instruction name.</source> + <translation>%1 ni veljavno ime ukaza obdelave.</translation> + </message> + <message> + <location line="+11"/> + <source>Invalid processing instruction name.</source> + <translation>Neveljavno ime ukaza obdelave.</translation> + </message> + <message> + <location filename="../src/corelib/xml/qxmlstream.cpp" line="-536"/> + <location line="+12"/> + <location filename="../src/corelib/xml/qxmlstream_p.h" line="+164"/> + <location line="+53"/> + <source>Illegal namespace declaration.</source> + <translation>Neveljavna deklaracija imenskega prostora.</translation> + </message> + <message> + <location filename="../src/corelib/xml/qxmlstream_p.h" line="+15"/> + <source>Invalid XML name.</source> + <translation>Neveljavno ime XML.</translation> + </message> + <message> + <location line="+23"/> + <source>Opening and ending tag mismatch.</source> + <translation>Začetni in zaključni oznaki se ne ujemata.</translation> + </message> + <message> + <location line="+18"/> + <source>Reference to unparsed entity '%1'.</source> + <translation>Referenca na nerazčlenjeno entiteto »%1«.</translation> + </message> + <message> + <location line="-13"/> + <location line="+61"/> + <location line="+40"/> + <source>Entity '%1' not declared.</source> + <translation>Entiteta »%1« ni deklarirana.</translation> + </message> + <message> + <location line="-26"/> + <source>Reference to external entity '%1' in attribute value.</source> + <translation>Referenca na zunanjo entiteto »%1« v vrednosti lastnosti.</translation> + </message> + <message> + <location line="+40"/> + <source>Invalid character reference.</source> + <translation>Neveljavna znakovna referenca.</translation> + </message> + <message> + <location filename="../src/corelib/xml/qxmlstream.cpp" line="-75"/> + <location filename="../src/corelib/xml/qxmlstream_p.h" line="-823"/> + <source>Encountered incorrectly encoded content.</source> + <translation>Naletel na napačno zakodirano vsebino.</translation> + </message> + <message> + <location line="+274"/> + <source>The standalone pseudo attribute must appear after the encoding.</source> + <translation>Samostojni psevdo-atribut se mora pojaviti za kodiranjem.</translation> + </message> + <message> + <location filename="../src/corelib/xml/qxmlstream_p.h" line="+562"/> + <source>%1 is an invalid PUBLIC identifier.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QtXmlPatterns</name> + <message> + <location filename="../src/xmlpatterns/api/qiodevicedelegate.cpp" line="+84"/> + <source>Network timeout.</source> + <translation>Čas za omrežje je potekel.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+320"/> + <source>Element %1 can't be serialized because it appears outside the document element.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+80"/> + <source>Year %1 is invalid because it begins with %2.</source> + <translation>Leto %1 ni veljavno, ker se začne z %2.</translation> + </message> + <message> + <location line="+19"/> + <source>Day %1 is outside the range %2..%3.</source> + <translation>Dan %1 je izven obsega %2..%3.</translation> + </message> + <message> + <location line="+7"/> + <source>Month %1 is outside the range %2..%3.</source> + <translation>Mesec %1 je izven obsega %2..%3.</translation> + </message> + <message> + <location line="+10"/> + <source>Overflow: Can't represent date %1.</source> + <translation>Prekoračitev: ni moč predstaviti datuma %1.</translation> + </message> + <message> + <location line="+9"/> + <source>Day %1 is invalid for month %2.</source> + <translation>Dan %1 za mesec %2 ni veljaven.</translation> + </message> + <message> + <location line="+49"/> + <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source> + <translation>Čas 24:%1:%2.%3 ni veljaven. Ura je 24, vendar minute, sekunde in milisekunde niso vse 0; </translation> + </message> + <message> + <location line="+13"/> + <source>Time %1:%2:%3.%4 is invalid.</source> + <translation>Čas %1:%2:%3.%4 ni veljaven.</translation> + </message> + <message> + <location line="+115"/> + <source>Overflow: Date can't be represented.</source> + <translation>Prekoračitev: datuma ni moč predstaviti.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/> + <location line="+15"/> + <source>At least one component must be present.</source> + <translation>Prisotna mora biti vsaj ena komponenta.</translation> + </message> + <message> + <location line="-7"/> + <source>At least one time component must appear after the %1-delimiter.</source> + <translation>Za razmejiteljem %1 se mora pojaviti vsaj ena časovna komponenta.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qanyuri_p.h" line="+132"/> + <source>%1 is not a valid value of type %2.</source> + <translation>%1 ni veljavna vrednost vrste %2.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qatomiccasters_p.h" line="+223"/> + <source>When casting to %1 from %2, the source value cannot be %3.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+65"/> + <source>Integer division (%1) by zero (%2) is undefined.</source> + <translation>Deljenje celega števila (%1) z nič (%2) ni določeno.</translation> + </message> + <message> + <location line="+7"/> + <source>Division (%1) by zero (%2) is undefined.</source> + <translation>Deljenje (%1) z nič (%2) ni določeno.</translation> + </message> + <message> + <location line="+7"/> + <source>Modulus division (%1) by zero (%2) is undefined.</source> + <translation>Ostanek deljenja (%1) z nič (%2) ni določen.</translation> + </message> + <message> + <location line="+122"/> + <location line="+32"/> + <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source> + <translation>Deljenje vrednosti vrste %1 z %2 (ni število) ni dovoljeno.</translation> + </message> + <message> + <location line="-20"/> + <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source> + <translation>Deljenje vrednosti vrste %1 z %2 ali %3 (pozitivna ali negativna nič) ni dovoljeno.</translation> + </message> + <message> + <location line="+32"/> + <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source> + <translation>Množenje vrednosti vrste %1 z %2 ali %3 (pozitivna ali negativna neskončnost) ni dovoljeno.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qatomicvalue.cpp" line="+79"/> + <source>A value of type %1 cannot have an Effective Boolean Value.</source> + <translation>Vrednost vrste %1 ne more imeti dejanske logične vrednosti.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qboolean.cpp" line="+78"/> + <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source> + <translation>Dejanske logične vrednosti ni moč izračunati za zaporedje, ki vsebuje dve ali več atomičnih vrednosti.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qderivedinteger_p.h" line="+402"/> + <source>Value %1 of type %2 exceeds maximum (%3).</source> + <translation>Vrednost %1 vrste %2 presega maksimum (%3).</translation> + </message> + <message> + <location line="+9"/> + <source>Value %1 of type %2 is below minimum (%3).</source> + <translation>Vrednost %1 vrste %2 je pod minimumom (%3).</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qhexbinary.cpp" line="+91"/> + <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source> + <translation>Vrednost vrste %1 mora vsebovati sodo število števk. Vrednost %2 temu ne zadošča.</translation> + </message> + <message> + <location line="+19"/> + <source>%1 is not valid as a value of type %2.</source> + <translation>%1 ni veljavna kot vrednost vrste %2.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qarithmeticexpression.cpp" line="+207"/> + <source>Operator %1 cannot be used on type %2.</source> + <translation>Operatorja %1 ni moč uporabiti na vrsti %2.</translation> + </message> + <message> + <location line="+17"/> + <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source> + <translation>Operatorja %1 ni moč uporabiti na atomičnih vrednostih vrst %2 in %3.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qattributenamevalidator.cpp" line="+66"/> + <source>The namespace URI in the name for a computed attribute cannot be %1.</source> + <translation>URI imenskega prostora v imenu izračunane lastnosti ne more biti %1.</translation> + </message> + <message> + <location line="+9"/> + <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source> + <translation>Ime izračunane lastnosti ne more imeti URI-ja imenskega prostora %1 s krajevnim imenom %2.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qcastas.cpp" line="+88"/> + <source>Type error in cast, expected %1, received %2.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+29"/> + <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qcommentconstructor.cpp" line="+67"/> + <source>A comment cannot contain %1</source> + <translation>Komentar ne more vsebovati %1</translation> + </message> + <message> + <location line="+6"/> + <source>A comment cannot end with a %1.</source> + <translation>Komentar se ne more končati z %1.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qdocumentcontentvalidator.cpp" line="+86"/> + <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qexpressionfactory.cpp" line="+162"/> + <source>A library module cannot be evaluated directly. It must be imported from a main module.</source> + <translation>Modula knjižnice ni moč ovrednotiti neposredno. Uvoziti ga je potrebno iz glavnega modula.</translation> + </message> + <message> + <location line="+40"/> + <source>No template by name %1 exists.</source> + <translation>Predloga z imenom %1 ne obstaja.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qgenericpredicate.cpp" line="+106"/> + <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+32"/> + <source>A positional predicate must evaluate to a single numeric value.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/> + <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+24"/> + <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qpath.cpp" line="+109"/> + <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qprocessinginstructionconstructor.cpp" line="+84"/> + <source>The data of a processing instruction cannot contain the string %1</source> + <translation>Podatki ukaza za obdelavo ne morejo vsebovati niza %1</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qqnameconstructor.cpp" line="+82"/> + <source>No namespace binding exists for the prefix %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="+156"/> + <source>No namespace binding exists for the prefix %1 in %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+69"/> + <source>%1 is an invalid %2</source> + <translation>%1 ni veljaven %2</translation> + </message> + <message numerus="yes"> + <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+77"/> + <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source> + <translation> + <numerusform>%1 potrebuje največ %n argumentov. %2 zato ni veljavno.</numerusform> + <numerusform></numerusform> + <numerusform></numerusform> + <numerusform></numerusform> + </translation> + </message> + <message numerus="yes"> + <location line="+11"/> + <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source> + <translation> + <numerusform>%1 potrebuje najmanj %n argumentov. %2 zato ni veljavno.</numerusform> + <numerusform></numerusform> + <numerusform></numerusform> + <numerusform></numerusform> + </translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qaggregatefns.cpp" line="+120"/> + <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source> + <translation>Prvi argument za %1 ne more biti vrste %2. Mora biti številčne vrste, xs:yearMonthDuration ali xs:dayTimeDuration.</translation> + </message> + <message> + <location line="+74"/> + <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> + <translation>Prvi argument za %1 ne more biti vrste %2. Mora biti vrste %3, %4 ali %5.</translation> + </message> + <message> + <location line="+91"/> + <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> + <translation>Drugi argument za %1 ne more biti vrste %2. Mora biti vrste %3, %4 ali %5.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qassemblestringfns.cpp" line="+88"/> + <source>%1 is not a valid XML 1.0 character.</source> + <translation>%1 ni veljaven znak XML 1.0.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qdatetimefn.cpp" line="+86"/> + <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qerrorfn.cpp" line="+61"/> + <source>%1 was called.</source> + <translation>%1 je bila klicana.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="+94"/> + <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+39"/> + <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> + <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+92"/> + <source>%1 matches newline characters</source> + <translation>%1 se ujema z znaki za novo vrstico</translation> + </message> + <message> + <location line="+4"/> + <source>%1 and %2 match the start and end of a line.</source> + <translation>%1 in %2 se ujemata z začetkom in koncem vrstice.</translation> + </message> + <message> + <location line="+6"/> + <source>Matches are case insensitive</source> + <translation>Ujemanja niso občutljiva na velikost črk</translation> + </message> + <message> + <location line="+4"/> + <source>Whitespace characters are removed, except when they appear in character classes</source> + <translation>Znaki za presledke so odstranjeni, razen ko se pojavijo v znakovnih razredih</translation> + </message> + <message> + <location line="+100"/> + <source>%1 is an invalid regular expression pattern: %2</source> + <translation>%1 ni veljaven vzorec regularnega izraza: %2</translation> + </message> + <message> + <location line="+30"/> + <source>%1 is an invalid flag for regular expressions. Valid flags are:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+17"/> + <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source> + <translation>Če je prvi argument prazno zaporedje, ali pa niz z dolžino nič (brez imenskega prostora), predpone ni moč določiti. Določena je bila predpona %1.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qsequencefns.cpp" line="+346"/> + <source>It will not be possible to retrieve %1.</source> + <translation>%1 ne bo možno pridobiti.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qcontextnodechecker.cpp" line="+54"/> + <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qsequencegeneratingfns.cpp" line="+266"/> + <source>The default collection is undefined</source> + <translation>Privzeta zbirka ni določena.</translation> + </message> + <message> + <location line="+13"/> + <source>%1 cannot be retrieved</source> + <translation>%1 ni moč pridobiti</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qstringvaluefns.cpp" line="+252"/> + <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+87"/> + <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>%1 is not a whole number of minutes.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/janitors/qcardinalityverifier.cpp" line="+58"/> + <source>Required cardinality is %1; got cardinality %2.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/janitors/qitemverifier.cpp" line="+67"/> + <source>The item %1 did not match the required type %2.</source> + <translation>Postavka %1 se ne ujema z zahtevano vrsto %2.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+352"/> + <location line="+7323"/> + <source>%1 is an unknown schema type.</source> + <translation>%1 ni znana vrsta sheme.</translation> + </message> + <message> + <location line="-7041"/> + <source>Only one %1 declaration can occur in the query prolog.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+188"/> + <source>The initialization of variable %1 depends on itself</source> + <translation>Inicializacija spremenljivke %1 je odvisna od same sebe.</translation> + </message> + <message> + <location line="+63"/> + <source>No variable by name %1 exists</source> + <translation>Spremenljivka z imenom %1 ne obstaja</translation> + </message> + <message> + <location filename="../src/xmlpatterns/parser/qparsercontext.cpp" line="+93"/> + <source>The variable %1 is unused</source> + <translation>Spremenljivka %1 ni uporabljena</translation> + </message> + <message> + <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2841"/> + <source>Version %1 is not supported. The supported XQuery version is 1.0.</source> + <translation>Različica %1 ni podprta. Podpra različica XQuery je 1.0.</translation> + </message> + <message> + <location line="+16"/> + <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source> + <translation>Kodiranje %1 ni veljavno. Vsebovati mora le znake latinske abecede, ne sme vsebovati presledkov in se mora ujemati z regularnim izrazom %2.</translation> + </message> + <message> + <location line="+55"/> + <source>No function with signature %1 is available</source> + <translation>Na voljo ni nobene funkcije s podpisom %1</translation> + </message> + <message> + <location line="+72"/> + <location line="+10"/> + <source>A default namespace declaration must occur before function, variable, and option declarations.</source> + <translation>Deklaracije privzetega imenskega prostora se mora pojaviti pred deklaracijami funkcij, spremenljivk in možnosti.</translation> + </message> + <message> + <location line="+10"/> + <source>Namespace declarations must occur before function, variable, and option declarations.</source> + <translation>Deklaracije imenskih prostorov se morajo pojaviti pred deklaracijami funkcij, spremenljivk in možnosti.</translation> + </message> + <message> + <location line="+11"/> + <source>Module imports must occur before function, variable, and option declarations.</source> + <translation>Uvozi modulov se morajo pojaviti pred deklaracijami funkcij, spremenljivk in možnosti.</translation> + </message> + <message> + <location line="+200"/> + <source>It is not possible to redeclare prefix %1.</source> + <translation>Predpone %1 ni moč znova deklarirati.</translation> + </message> + <message> + <location line="+18"/> + <source>Prefix %1 is already declared in the prolog.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+95"/> + <source>The name of an option must have a prefix. There is no default namespace for options.</source> + <translation>Ime možnosti mora vsebovati predpono. Privzeti imenski prostor za možnosti ne obstaja.</translation> + </message> + <message> + <location line="+171"/> + <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>The target namespace of a %1 cannot be empty.</source> + <translation>Ciljni imenski prostor za %1 ne sme biti prazen.</translation> + </message> + <message> + <location line="+8"/> + <source>The module import feature is not supported</source> + <translation>Zmožnost uvažanja modulov ni podprta</translation> + </message> + <message> + <location line="+52"/> + <source>No value is available for the external variable by name %1.</source> + <translation>Za zunanjo spremenljivko z imenom %1 ni na voljo nobene vrednosti.</translation> + </message> + <message> + <location line="-4036"/> + <source>A template by name %1 has already been declared.</source> + <translation>Predloga z imenom %1 je že bila deklarirana.</translation> + </message> + <message> + <location line="+3581"/> + <source>The keyword %1 cannot occur with any other mode name.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+29"/> + <source>The value of attribute %1 must of type %2, which %3 isn't.</source> + <translation>Vrednost lastnosti %1 mora biti vrste %2, %3 pa to ni.</translation> + </message> + <message> + <location line="+75"/> + <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+312"/> + <source>A variable by name %1 has already been declared.</source> + <translation>Spremenljivka z imenom %1 je že bila deklarirana.</translation> + </message> + <message> + <location line="+135"/> + <source>A stylesheet function must have a prefixed name.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> + <translation>Imenski prostor za uporabniško določeno funkcijo ne sme biti prazen (poskusite z vnaprej določeno predpono %1, ki obstaja za take primere)</translation> + </message> + <message> + <location line="+9"/> + <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> + <translation>Imenski prostor %1 je rezerviran, zato ga uporabniško določene funkcije ne smejo uporabiti. Poskusite z vnaprej določeno predpono %2, ki obstaja za take primere.</translation> + </message> + <message> + <location line="+12"/> + <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source> + <translation>Imenski prostor uporabniško določene funkcije v modulu knjižnice mora biti enak imenskemu prostoru modula. Z drugimi besedami, moral bi biti %1, namesto %2.</translation> + </message> + <message> + <location line="+34"/> + <source>A function already exists with the signature %1.</source> + <translation>Funkcija s podpisom %1 že obstaja.</translation> + </message> + <message> + <location line="+23"/> + <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source> + <translation>Zunanje funkcije niso podprte. Vse podprte funkcije je moč uporabiti neposredno, brez da bi jih najprej deklarirali kot zunanje.</translation> + </message> + <message> + <location line="+37"/> + <source>An argument by name %1 has already been declared. Every argument name must be unique.</source> + <translation>Argument z imenom %1 je že bil deklariran. Vsako ime argumenta mora biti edinstveno.</translation> + </message> + <message> + <location line="+179"/> + <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>In an XSL-T pattern, function %1 cannot have a third argument.</source> + <translation>V XSL-T vzorcu funkcija %1 ne more imeti tretjega argumenta.</translation> + </message> + <message> + <location line="+10"/> + <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+63"/> + <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+126"/> + <source>%1 is an invalid template mode name.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+44"/> + <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source> + <translation>Ime spremenljivke priklenjene v izrazu »for« se mora razlikovati od spremenljivke položaja. Spremenljivki z imenom %1 zato trčita.</translation> + </message> + <message> + <location line="+778"/> + <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+40"/> + <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+269"/> + <source>Each name of a template parameter must be unique; %1 is duplicated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+129"/> + <source>The %1-axis is unsupported in XQuery</source> + <translation>Os %1 v XQuery ni podprta</translation> + </message> + <message> + <location line="+1197"/> + <source>%1 is not a valid name for a processing-instruction.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-7099"/> + <source>%1 is not a valid numeric literal.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-152"/> + <source>W3C XML Schema identity constraint selector</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>W3C XML Schema identity constraint field</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>A construct was encountered which is disallowed in the current language(%1).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6380"/> + <source>No function by name %1 is available.</source> + <translation>Na voljo ni nobene funkcije z imenom %1.</translation> + </message> + <message> + <location line="+102"/> + <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 is an invalid namespace URI.</source> + <translation>%1 ni veljaven URI imenskega prostora.</translation> + </message> + <message> + <location line="+6"/> + <source>It is not possible to bind to the prefix %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> + <translation>Imenski prostor %1 je lahko navezan le na %2 (in je, v vsakem primeru, preddeklariran)</translation> + </message> + <message> + <location line="+8"/> + <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> + <translation>Predpona %1 je lahko navezana le na %2 (in je, v vsakem primeru, preddeklarirana)</translation> + </message> + <message> + <location line="+15"/> + <source>Two namespace declaration attributes have the same name: %1.</source> + <translation>Dva atributa deklaracije imenskega prostora imata isto ime: %1</translation> + </message> + <message> + <location line="+89"/> + <source>The namespace URI must be a constant and cannot use enclosed expressions.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>An attribute by name %1 has already appeared on this element.</source> + <translation>Atribut z imenom %1 se je v tem elementu že pojavil.</translation> + </message> + <message> + <location line="+61"/> + <source>A direct element constructor is not well-formed. %1 is ended with %2.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+458"/> + <source>The name %1 does not refer to any schema type.</source> + <translation>Ime %1 se ne nanaša na nobeno vrsto sheme.</translation> + </message> + <message> + <location line="+10"/> + <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>%1 is not an atomic type. Casting is only possible to atomic types.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+145"/> + <location line="+71"/> + <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+48"/> + <source>The name of an extension expression must be in a namespace.</source> + <translation>Ime razširitvenega izraza mora biti v imenskem prostoru.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+55"/> + <source>empty</source> + <translation>prazno</translation> + </message> + <message> + <location line="+2"/> + <source>zero or one</source> + <translation>nič ali en</translation> + </message> + <message> + <location line="+2"/> + <source>exactly one</source> + <translation>točno en</translation> + </message> + <message> + <location line="+2"/> + <source>one or more</source> + <translation>en ali več</translation> + </message> + <message> + <location line="+2"/> + <source>zero or more</source> + <translation>nič ali več</translation> + </message> + <message> + <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="+63"/> + <source>Required type is %1, but %2 was found.</source> + <translation>Zahtevana vrsta je %1, najdena pa je bila %2.</translation> + </message> + <message> + <location line="+44"/> + <source>Promoting %1 to %2 may cause loss of precision.</source> + <translation>Povišanje %1 v %2 lahko povzroči izgubo natančnosti.</translation> + </message> + <message> + <location line="+49"/> + <source>The focus is undefined.</source> + <translation>Fokus ni definiran.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="+86"/> + <source>It's not possible to add attributes after any other kind of node.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>An attribute by name %1 has already been created.</source> + <translation>Atribut z imenom %1 je že bil ustvarjen.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/utils/qxpathhelper_p.h" line="+120"/> + <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+60"/> + <source>Attribute %1 can't be serialized because it appears at the top level.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp" line="+344"/> + <source>%1 is an unsupported encoding.</source> + <translation>%1 ni podprto kodiranje.</translation> + </message> + <message> + <location line="+16"/> + <source>%1 contains octets which are disallowed in the requested encoding %2.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qapplytemplate.cpp" line="+119"/> + <source>Ambiguous rule match.</source> + <translation>Dvoumno ujemanje s pravilom.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qcomputednamespaceconstructor.cpp" line="+69"/> + <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>The prefix must be a valid %1, which %2 is not.</source> + <translation></translation> + </message> + <message> + <location line="+14"/> + <source>The prefix %1 cannot be bound.</source> + <translation>Predpone %1 ni moč navezati.</translation> + </message> + <message> + <location line="+10"/> + <source>Only the prefix %1 can be bound to %2 and vice versa.</source> + <translation>Na %2 je lahko navezana le predpona %1 in obratno.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qtemplate.cpp" line="+145"/> + <source>The parameter %1 is required, but no corresponding %2 is supplied.</source> + <translation>Potreben je parameter %1, vendar ustrezen %2 ni bil podan.</translation> + </message> + <message> + <location line="-71"/> + <source>The parameter %1 is passed, but no corresponding %2 exists.</source> + <translation>Podan je bil parameter %1, vendar ustrezen %2 ne obstaja.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qunparsedtextfn.cpp" line="+65"/> + <source>The URI cannot have a fragment</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+519"/> + <source>Element %1 is not allowed at this location.</source> + <translation>Element %1 na tej lokaciji ni dovoljen.</translation> + </message> + <message> + <location line="+9"/> + <source>Text nodes are not allowed at this location.</source> + <translation>Besedilna vozlišča na tej lokaciji niso dovoljena.</translation> + </message> + <message> + <location line="+20"/> + <source>Parse error: %1</source> + <translation>Napaka pri razčlenjevanju: %1</translation> + </message> + <message> + <location line="+62"/> + <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn't.</source> + <translation>Vrednost lastnosti različice XSL-T mora biti vrednost vrste %1, %2 pa to ni.</translation> + </message> + <message> + <location line="+20"/> + <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+108"/> + <source>Unknown XSL-T attribute %1.</source> + <translation>Neznana XSL-T lastnost %1.</translation> + </message> + <message> + <location line="+23"/> + <source>Attribute %1 and %2 are mutually exclusive.</source> + <translation>Lastnosti %1 in %2 sta medsebojno izključujoči.</translation> + </message> + <message> + <location line="+166"/> + <source>In a simplified stylesheet module, attribute %1 must be present.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+72"/> + <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source> + <translation>Če element %1 nima lastnosti %2, ne more imeti lastnosti %3 ali %4.</translation> + </message> + <message> + <location line="+9"/> + <source>Element %1 must have at least one of the attributes %2 or %3.</source> + <translation>Element %1 mora imeti vsaj eno izmed lastnosti %2 in %3.</translation> + </message> + <message> + <location line="+28"/> + <source>At least one mode must be specified in the %1-attribute on element %2.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+123"/> + <source>Element %1 must come last.</source> + <translation>Element %1 mora biti zadnji.</translation> + </message> + <message> + <location line="+24"/> + <source>At least one %1-element must occur before %2.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Only one %1-element can appear.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+31"/> + <source>At least one %1-element must occur inside %2.</source> + <translation></translation> + </message> + <message> + <location line="+58"/> + <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>Element %1 must have either a %2-attribute or a sequence constructor.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+125"/> + <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+270"/> + <source>Element %1 cannot have children.</source> + <translation>Element %1 ne more imeti podelementov.</translation> + </message> + <message> + <location line="+434"/> + <source>Element %1 cannot have a sequence constructor.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+86"/> + <location line="+9"/> + <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>A parameter in a function cannot be declared to be a tunnel.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+149"/> + <source>This processor is not Schema-aware and therefore %1 cannot be used.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+57"/> + <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn't.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+48"/> + <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source> + <translation>Vrednost lastnosti %1 elementa %2 mora biti %3 ali %4 in ne %5.</translation> + </message> + <message> + <location line="+20"/> + <source>Attribute %1 cannot have the value %2.</source> + <translation>Lastnost %1 ne more imeti vrednosti %2.</translation> + </message> + <message> + <location line="+58"/> + <source>The attribute %1 can only appear on the first %2 element.</source> + <translation>Lastnost %1 se lahko pojavi le pri prvem elementu %2.</translation> + </message> + <message> + <location line="+99"/> + <source>At least one %1 element must appear as child of %2.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/schema/qxsdparticlechecker.cpp" line="+165"/> + <source>empty particle cannot be derived from non-empty particle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>derived particle is missing element %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>derived element %1 is missing value constraint as defined in base particle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>derived element %1 has weaker value constraint than base particle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>fixed value constraint of element %1 differs from value constraint in base particle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>derived element %1 cannot be nillable as base element is not nillable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>block constraints of derived element %1 must not be more weaker than in the base element</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>simple type of derived element %1 cannot be validly derived from base element</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>complex type of derived element %1 cannot be validly derived from base element</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+24"/> + <source>element %1 is missing in derived particle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>element %1 does not match namespace constraint of wildcard in base particle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>wildcard in derived particle is not a valid subset of wildcard in base particle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>processContent of wildcard in derived particle is weaker than wildcard in base particle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+240"/> + <source>derived particle allows content that is not allowed in the base particle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/schema/qxsdschemachecker.cpp" line="+227"/> + <source>%1 has inheritance loop in its base type %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <location line="+24"/> + <source>circular inheritance of base type %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>circular inheritance of union %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+25"/> + <source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>%1 is not allowed to derive from %2 by extension as the latter defines it as final</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+31"/> + <source>base type of simple type %1 cannot be complex type %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>simple type %1 cannot have direct base type %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+33"/> + <location line="+9"/> + <source>simple type %1 is not allowed to have base type %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>simple type %1 can only have simple atomic type as base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>simple type %1 cannot derive from %2 as the latter defines restriction as final</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <location line="+484"/> + <source>variety of item type of %1 must be either atomic or union</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-474"/> + <location line="+483"/> + <source>variety of member types of %1 must be atomic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-470"/> + <location line="+451"/> + <source>%1 is not allowed to derive from %2 by list as the latter defines it as final</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-431"/> + <source>simple type %1 is only allowed to have %2 facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>base type of simple type %1 must have variety of type list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>base type of simple type %1 has defined derivation by restriction as final</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>item type of base type does not match item type of %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> + <location line="+93"/> + <source>simple type %1 contains not allowed facet type %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-72"/> + <location line="+413"/> + <source>%1 is not allowed to derive from %2 by union as the latter defines it as final</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-404"/> + <source>%1 is not allowed to have any facets</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>base type %1 of simple type %2 must have variety of union</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>base type %1 of simple type %2 is not allowed to have restriction in %3 attribute</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>member type %1 cannot be derived from member type %2 of %3's base type %4</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+65"/> + <source>derivation method of %1 must be extension because the base type %2 is a simple type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+30"/> + <source>complex type %1 has duplicated element %2 in its content model</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>complex type %1 has non-deterministic content</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+21"/> + <source>attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+37"/> + <source>content model of complex type %1 is not a valid extension of content model of %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>complex type %1 must have simple content</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>complex type %1 must have the same simple type as its base class %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+67"/> + <source>complex type %1 cannot be derived from base type %2%3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>complex type %1 with simple content cannot be derived from complex base type %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+35"/> + <source>item type of simple type %1 cannot be a complex type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+44"/> + <source>member type of simple type %1 cannot be a complex type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>%1 is not allowed to have a member type with the same name as itself</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+83"/> + <location line="+29"/> + <location line="+34"/> + <source>%1 facet collides with %2 facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-20"/> + <source>%1 facet must have the same value as %2 facet of base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+37"/> + <source>%1 facet must be equal or greater than %2 facet of base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <location line="+125"/> + <location line="+55"/> + <location line="+12"/> + <location line="+91"/> + <location line="+58"/> + <location line="+34"/> + <location line="+35"/> + <source>%1 facet must be less than or equal to %2 facet of base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-389"/> + <source>%1 facet contains invalid regular expression</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>unknown notation %1 used in %2 facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+20"/> + <source>%1 facet contains invalid value %2: %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+22"/> + <source>%1 facet cannot be %2 or %3 if %4 facet of base type is %5</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>%1 facet cannot be %2 if %3 facet of base type is %4</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+20"/> + <location line="+55"/> + <location line="+230"/> + <source>%1 facet must be less than or equal to %2 facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-257"/> + <location line="+134"/> + <location line="+82"/> + <source>%1 facet must be less than %2 facet of base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-201"/> + <location line="+79"/> + <source>%1 facet and %2 facet cannot appear together</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-27"/> + <location line="+12"/> + <location line="+113"/> + <source>%1 facet must be greater than %2 facet of base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-86"/> + <location line="+58"/> + <source>%1 facet must be less than %2 facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-42"/> + <location line="+58"/> + <source>%1 facet must be greater than or equal to %2 facet of base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+113"/> + <source>simple type contains not allowed facet %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>only %1 and %2 facets are allowed when derived by union</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+23"/> + <location line="+16"/> + <source>%1 contains %2 facet with invalid data: %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+24"/> + <source>attribute group %1 contains attribute %2 twice</source> + <translation>skupina lastnosti %1 dvakrat vsebuje lastnost %2</translation> + </message> + <message> + <location line="+9"/> + <source>attribute group %1 contains two different attributes that both have types derived from %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+23"/> + <source>complex type %1 contains attribute %2 twice</source> + <translation>kompleksna vrsta %1 dvakrat vsebuje lastnost %2</translation> + </message> + <message> + <location line="+9"/> + <source>complex type %1 contains two different attributes that both have types derived from %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>complex type %1 contains attribute %2 that has value constraint but type that inherits from %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+43"/> + <source>element %1 is not allowed to have a value constraint if its base type is complex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>element %1 is not allowed to have a value constraint if its type is derived from %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <location line="+11"/> + <source>value constraint of element %1 is not of elements type: %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>element %1 is not allowed to have substitution group affiliation as it is no global element</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+28"/> + <source>type of element %1 cannot be derived from type of substitution group affiliation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+41"/> + <source>value constraint of attribute %1 is not of attributes type: %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>attribute %1 has value constraint but has type derived from %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+56"/> + <source>%1 attribute in derived complex type must be %2 like in base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>attribute %1 in derived complex type must have %2 value constraint like in base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>attribute %1 in derived complex type must have the same %2 value constraint like in base type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>attribute %1 in derived complex type must have %2 value constraint</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>processContent of base wildcard must be weaker than derived wildcard</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+39"/> + <location line="+15"/> + <source>element %1 exists twice with different types</source> + <translation>element %1 obstaja dvakrat, z različnima vrstama</translation> + </message> + <message> + <location line="+28"/> + <source>particle contains non-deterministic wildcards</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/schema/qxsdschemahelper.cpp" line="+691"/> + <location line="+63"/> + <source>base attribute %1 is required but derived attribute is not</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-57"/> + <source>type of derived attribute %1 cannot be validly derived from type of base attribute</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+28"/> + <source>value constraint of derived attribute %1 does not match value constraint of base attribute</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>derived attribute %1 does not exists in the base definition</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>derived attribute %1 does not match the wildcard in the base definition</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+17"/> + <source>base attribute %1 is required but missing in derived definition</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>derived definition contains an %1 element that does not exists in the base definition</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>derived wildcard is not a subset of the base wildcard</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>%1 of derived wildcard is not a valid restriction of %2 of base wildcard</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+23"/> + <source>attribute %1 from base type is missing in derived type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>type of derived attribute %1 differs from type of base attribute</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>base definition contains an %1 element that is missing in the derived definition</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/schema/qxsdschemaparser.cpp" line="+169"/> + <source>can not process unknown element %1, expected elements are: %2</source> + <translation>ni moč obdelati neznanega elementa %1, pričakovani elementi so: %2</translation> + </message> + <message> + <location line="+13"/> + <source>element %1 is not allowed in this scope, possible elements are: %2</source> + <translation>element %1 v tem obsegu ni dovoljen, možni elementi so: %2</translation> + </message> + <message> + <location line="+16"/> + <source>child element is missing in that scope, possible child elements are: %1</source> + <translation>v tem obsegu manjka podelement, možni podelementi so: %1</translation> + </message> + <message> + <location line="+127"/> + <source>document is not a XML schema</source> + <translation>dokument ni shema XML</translation> + </message> + <message> + <location line="+22"/> + <source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4</source> + <translation>lastnost %1 elementa %2 vsebuje neveljavno vsebino: {%3} ni vrednost vrste %4</translation> + </message> + <message> + <location line="+6"/> + <source>%1 attribute of %2 element contains invalid content: {%3}</source> + <translation>lastnost %1 elementa %2 vsebuje neveljavno vsebino: {%3}</translation> + </message> + <message> + <location line="+26"/> + <source>target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <location line="+11"/> + <source>target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+237"/> + <source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>%1 element without %2 attribute is not allowed inside schema without target namespace</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+833"/> + <location line="+158"/> + <source>%1 element is not allowed inside %2 element if %3 attribute is present</source> + <translation>element %1 znotraj elementa %2 ni dovoljen, če je prisotna lastnost %3</translation> + </message> + <message> + <location line="-97"/> + <location line="+119"/> + <location line="+92"/> + <source>%1 element has neither %2 attribute nor %3 child element</source> + <translation>element %1 nima niti lastnosti %2 niti podelementa %3</translation> + </message> + <message> + <location line="+835"/> + <location line="+1474"/> + <location line="+232"/> + <location line="+7"/> + <location line="+260"/> + <location line="+17"/> + <location line="+258"/> + <location line="+6"/> + <location line="+17"/> + <location line="+6"/> + <location line="+17"/> + <location line="+11"/> + <location line="+11"/> + <location line="+11"/> + <source>%1 element with %2 child element must not have a %3 attribute</source> + <translation>element %1 s podelementom %2 ne sme imeti lastnosti %3</translation> + </message> + <message> + <location line="-1325"/> + <source>%1 attribute of %2 element must be %3 or %4</source> + <translation>lastnost %1 elementa %2 mora biti %3 ali %4</translation> + </message> + <message> + <location line="+36"/> + <source>%1 attribute of %2 element must have a value of %3</source> + <translation>lastnost %1 elementa %2 mora imeti vrednost %3</translation> + </message> + <message> + <location line="+7"/> + <location line="+34"/> + <source>%1 attribute of %2 element must have a value of %3 or %4</source> + <translation>lastnost %1 elementa %2 mora imeti vrednost %3 ali %4</translation> + </message> + <message> + <location line="+319"/> + <location line="+129"/> + <location line="+9"/> + <location line="+7"/> + <location line="+7"/> + <location line="+327"/> + <location line="+203"/> + <location line="+6"/> + <location line="+6"/> + <location line="+6"/> + <location line="+6"/> + <location line="+6"/> + <location line="+6"/> + <location line="+77"/> + <source>%1 element must not have %2 and %3 attribute together</source> + <translation>element %1 hkrati ne sme imeti lastnosti %2 in %3</translation> + </message> + <message> + <location line="-768"/> + <location line="+222"/> + <source>content of %1 attribute of %2 element must not be from namespace %3</source> + <translation>vsebina lastnosti %1 elementa %2 ne sme biti iz imenskega prostora %3</translation> + </message> + <message> + <location line="-215"/> + <location line="+222"/> + <source>%1 attribute of %2 element must not be %3</source> + <translation>lastnost %1 elementa %2 ne sme biti %3</translation> + </message> + <message> + <location line="-64"/> + <source>%1 attribute of %2 element must have the value %3 because the %4 attribute is set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+187"/> + <source>specifying use='prohibited' inside an attribute group has no effect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+353"/> + <source>%1 element must have either %2 or %3 attribute</source> + <translation>element %1 mora imeti lastnost %2 ali %3</translation> + </message> + <message> + <location line="+554"/> + <source>%1 element must have either %2 attribute or %3 or %4 as child element</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+55"/> + <source>%1 element requires either %2 or %3 attribute</source> + <translation>element %1 potrebuje vsaj lastnost %2 ali %3</translation> + </message> + <message> + <location line="+19"/> + <source>text or entity references not allowed inside %1 element</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+41"/> + <location line="+112"/> + <source>%1 attribute of %2 element must contain %3, %4 or a list of URIs</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+126"/> + <source>%1 element is not allowed in this context</source> + <translation>element %1 v tem kontekstu ni dovoljen</translation> + </message> + <message> + <location line="+53"/> + <source>%1 attribute of %2 element has larger value than %3 attribute</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+25"/> + <source>prefix of qualified name %1 is not defined</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+65"/> + <location line="+61"/> + <source>%1 attribute of %2 element must either contain %3 or the other values</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+131"/> + <source>component with id %1 has been defined previously</source> + <translation>komponenta z ID-jem %1 je že bila definirana</translation> + </message> + <message> + <location line="+17"/> + <source>element %1 already defined</source> + <translation>element %1 je že definiran</translation> + </message> + <message> + <location line="+11"/> + <source>attribute %1 already defined</source> + <translation>lastnost %1 je že definirana</translation> + </message> + <message> + <location line="+15"/> + <source>type %1 already defined</source> + <translation>vrsta %1 je že definirana</translation> + </message> + <message> + <location line="+23"/> + <source>attribute group %1 already defined</source> + <translation>skupina lastnosti %1 je že definirana</translation> + </message> + <message> + <location line="+11"/> + <source>element group %1 already defined</source> + <translation>skupina elementov %1 je že definirana</translation> + </message> + <message> + <location line="+11"/> + <source>notation %1 already defined</source> + <translation>zapis %1 je že definiran</translation> + </message> + <message> + <location line="+11"/> + <source>identity constraint %1 already defined</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>duplicated facets in simple type %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/schema/qxsdschemaresolver.cpp" line="+354"/> + <source>%1 references unknown %2 or %3 element %4</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>%1 references identity constraint %2 that is no %3 or %4 element</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>%1 has a different number of fields from the identity constraint %2 that it references</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+23"/> + <source>base type %1 of %2 element cannot be resolved</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+84"/> + <source>item type %1 of %2 element cannot be resolved</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+31"/> + <source>member type %1 of %2 element cannot be resolved</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+28"/> + <location line="+408"/> + <location line="+30"/> + <source>type %1 of %2 element cannot be resolved</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-416"/> + <source>base type %1 of complex type cannot be resolved</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>%1 cannot have complex base type that has a %2</source> + <translation></translation> + </message> + <message> + <location line="+279"/> + <source>content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+101"/> + <source>type of %1 element must be a simple type, %2 is not</source> + <translation>vrsta elementa %1 mora biti preprosta, %2 to ni</translation> + </message> + <message> + <location line="+62"/> + <source>substitution group %1 of %2 element cannot be resolved</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>substitution group %1 has circular definition</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+120"/> + <location line="+7"/> + <source>duplicated element names %1 in %2 element</source> + <translation>podvojeni imeni elementov %1 v elementu %2</translation> + </message> + <message> + <location line="+29"/> + <location line="+52"/> + <location line="+71"/> + <location line="+28"/> + <source>reference %1 of %2 element cannot be resolved</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-138"/> + <source>circular group reference for %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>%1 element is not allowed in this scope</source> + <translation>element %1 v tem obsegu ni dovoljen</translation> + </message> + <message> + <location line="+5"/> + <source>%1 element cannot have %2 attribute with value other than %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>%1 element cannot have %2 attribute with value other than %3 or %4</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+91"/> + <source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+25"/> + <source>attribute group %1 has circular reference</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+131"/> + <source>%1 attribute in %2 must have %3 use like in base type %4</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+52"/> + <source>attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 has attribute wildcard but its base type %2 has not</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> + <source>union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+48"/> + <source>enumeration facet contains invalid content: {%1} is not a value of type %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>namespace prefix of qualified name %1 is not defined</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+51"/> + <location line="+18"/> + <source>%1 element %2 is not a valid restriction of the %3 element it redefines: %4</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/xmlpatterns/schema/qxsdtypechecker.cpp" line="+233"/> + <location line="+7"/> + <location line="+21"/> + <source>%1 is not valid according to %2</source> + <translation>%1 glede na %2 ni veljaven</translation> + </message> + <message> + <location line="+167"/> + <source>string content does not match the length facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>string content does not match the minLength facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>string content does not match the maxLength facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>string content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>string content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+17"/> + <source>signed integer content does not match the maxInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>signed integer content does not match the maxExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>signed integer content does not match the minInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>signed integer content does not match the minExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>signed integer content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>signed integer content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>signed integer content does not match in the totalDigits facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+17"/> + <source>unsigned integer content does not match the maxInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>unsigned integer content does not match the maxExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>unsigned integer content does not match the minInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>unsigned integer content does not match the minExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>unsigned integer content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>unsigned integer content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>unsigned integer content does not match in the totalDigits facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+17"/> + <source>double content does not match the maxInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>double content does not match the maxExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>double content does not match the minInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>double content does not match the minExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>double content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>double content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>decimal content does not match in the fractionDigits facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>decimal content does not match in the totalDigits facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>date time content does not match the maxInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>date time content does not match the maxExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>date time content does not match the minInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>date time content does not match the minExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>date time content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>date time content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>duration content does not match the maxInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>duration content does not match the maxExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>duration content does not match the minInclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>duration content does not match the minExclusive facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>duration content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>duration content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+27"/> + <source>boolean content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+17"/> + <source>binary content does not match the length facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>binary content does not match the minLength facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>binary content does not match the maxLength facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>binary content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+27"/> + <source>invalid QName content: %1</source> + <translation>neveljavna vsebina QName: %1</translation> + </message> + <message> + <location line="+17"/> + <source>QName content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>QName content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+36"/> + <source>notation content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>list content does not match length facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>list content does not match minLength facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>list content does not match maxLength facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+90"/> + <source>list content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>list content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+39"/> + <source>union content is not listed in the enumeration facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>union content does not match pattern facet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>data of type %1 are not allowed to be empty</source> + <translation>podatki vrste %1 ne smejo biti prazni</translation> + </message> + <message> + <location filename="../src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp" line="+160"/> + <source>element %1 is missing child element</source> + <translation>elementu %1 manjka podelement</translation> + </message> + <message> + <location line="+16"/> + <source>there is one IDREF value with no corresponding ID: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+27"/> + <source>loaded schema file is invalid</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>%1 contains invalid data</source> + <translation>%1 vsebuje neveljavne podatke</translation> + </message> + <message> + <location line="+13"/> + <source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+22"/> + <source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>no schema defined for validation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>no definition for element %1 available</source> + <translation>definicija za element %1 ni na voljo</translation> + </message> + <message> + <location line="+18"/> + <location line="+49"/> + <location line="+142"/> + <source>specified type %1 is not known to the schema</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-176"/> + <source>element %1 is not defined in this scope</source> + <translation>element %1 v tem obsegu ni definiran</translation> + </message> + <message> + <location line="+43"/> + <source>declaration for element %1 does not exist</source> + <translation>deklaracija elementa %1 ne obstaja</translation> + </message> + <message> + <location line="+12"/> + <source>element %1 contains invalid content</source> + <translation>element %1 vsebuje neveljavno vsebino</translation> + </message> + <message> + <location line="+73"/> + <source>element %1 is declared as abstract</source> + <translation>element %1 je deklariran kot abstrakten</translation> + </message> + <message> + <location line="+7"/> + <source>element %1 is not nillable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>attribute %1 contains invalid data: %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>element contains content although it is nillable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>fixed value constrained not allowed if element is nillable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+32"/> + <source>specified type %1 is not validly substitutable with element type %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+23"/> + <source>complex type %1 is not allowed to be abstract</source> + <translation>kompleksna vrsta %1 ne sme biti abstraktna</translation> + </message> + <message> + <location line="+21"/> + <source>element %1 contains not allowed attributes</source> + <translation>element %1 vsebuje nedovoljene lastnosti</translation> + </message> + <message> + <location line="+6"/> + <location line="+97"/> + <source>element %1 contains not allowed child element</source> + <translation>element %1 vsebuje nedovoljen podelement</translation> + </message> + <message> + <location line="-76"/> + <location line="+93"/> + <source>content of element %1 does not match its type definition: %2</source> + <translation>vsebina elementa %1 ne ustreza zanj določeni vrsti: %2</translation> + </message> + <message> + <location line="-85"/> + <location line="+92"/> + <location line="+41"/> + <source>content of element %1 does not match defined value constraint</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-73"/> + <source>element %1 contains not allowed child content</source> + <translation>element %1 vsebuje nedovoljeno vsebino v podelementih</translation> + </message> + <message> + <location line="+41"/> + <source>element %1 contains not allowed text content</source> + <translation>element %1 vsebuje nedovoljeno besedilno vsebino</translation> + </message> + <message> + <location line="+18"/> + <source>element %1 can not contain other elements, as it has a fixed content</source> + <translation>element %1 ne more vsebovati drugih elementov, ker ima fiksno vsebino</translation> + </message> + <message> + <location line="+43"/> + <source>element %1 is missing required attribute %2</source> + <translation>elementu %1 manjka obvezna lastnost %2</translation> + </message> + <message> + <location line="+29"/> + <source>attribute %1 does not match the attribute wildcard</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>declaration for attribute %1 does not exist</source> + <translation>deklaracija lastnosti %1 ne obstaja</translation> + </message> + <message> + <location line="+6"/> + <source>element %1 contains two attributes of type %2</source> + <translation>element %1 vsebuje dve lastnosti vrste %2</translation> + </message> + <message> + <location line="+11"/> + <source>attribute %1 contains invalid content</source> + <translation>lastnost %1 vsebuje neveljavno vsebino</translation> + </message> + <message> + <location line="+7"/> + <source>element %1 contains unknown attribute %2</source> + <translation>element %1 vsebuje neznano lastnost %2</translation> + </message> + <message> + <location line="+40"/> + <location line="+46"/> + <source>content of attribute %1 does not match its type definition: %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-38"/> + <location line="+46"/> + <source>content of attribute %1 does not match defined value constraint</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+88"/> + <source>non-unique value found for constraint %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+20"/> + <source>key constraint %1 contains absent fields</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>key constraint %1 contains references nillable element %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+40"/> + <source>no referenced value found for key reference %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+64"/> + <source>more than one value found for field %1</source> + <translation>za polje %1 je bila najdena več kot ena vrednost</translation> + </message> + <message> + <location line="+20"/> + <source>field %1 has no simple type</source> + <translation>polje %1 nima preproste vrste</translation> + </message> + <message> + <location line="+73"/> + <source>ID value '%1' is not unique</source> + <translation>Vrednost ID »%1« ni edinstvena</translation> + </message> + <message> + <location line="+11"/> + <source>'%1' attribute contains invalid QName content: %2</source> + <translation>Lastnost »%1« vsebuje neveljavno vsebino QName: %2</translation> + </message> +</context> +</TS> diff --git a/translations/translations.pri b/translations/translations.pri index a0ff2bc..a21e86f 100644 --- a/translations/translations.pri +++ b/translations/translations.pri @@ -21,7 +21,7 @@ LRELEASE = $$fixPath($$QT_BUILD_TREE/bin/lrelease) ###### Qt Libraries -QT_TS = de fr zh_CN untranslated ar es iw ja_JP pl pt ru sk sv uk zh_TW da +QT_TS = de fr zh_CN untranslated ar es iw ja_JP pl pt ru sk sl sv uk zh_TW da ts-qt.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ -I../include -I../include/Qt \ |